softphone-vendor-headsets 1.0.1 → 2.0.0-develop.15

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 (216) hide show
  1. package/README.md +318 -3
  2. package/dist/1.softhphone-vendor-headsets.js +1 -1
  3. package/dist/1.softhphone-vendor-headsets.js.map +1 -1
  4. package/dist/2.softhphone-vendor-headsets.js +1 -1
  5. package/dist/2.softhphone-vendor-headsets.js.map +1 -1
  6. package/dist/3.softhphone-vendor-headsets.js +1 -1
  7. package/dist/3.softhphone-vendor-headsets.js.map +1 -1
  8. package/dist/cjs/src/config/i18n.js +1 -0
  9. package/dist/cjs/src/config/i18n.js.map +1 -1
  10. package/dist/cjs/src/library/index.d.ts +0 -1
  11. package/dist/cjs/src/library/index.js +5 -2
  12. package/dist/cjs/src/library/index.js.map +1 -1
  13. package/dist/cjs/src/library/services/headset.d.ts +5 -1
  14. package/dist/cjs/src/library/services/headset.js +170 -18
  15. package/dist/cjs/src/library/services/headset.js.map +1 -1
  16. package/dist/cjs/src/library/services/headset.test.js +517 -21
  17. package/dist/cjs/src/library/services/headset.test.js.map +1 -1
  18. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.d.ts +5 -4
  19. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js +75 -54
  20. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js.map +1 -1
  21. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js +72 -62
  22. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js.map +1 -1
  23. package/dist/{es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.d.ts → cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.d.ts} +10 -0
  24. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/{jabra-native-types.js → types.js} +9 -2
  25. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.js.map +1 -0
  26. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.d.ts +15 -14
  27. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.js +177 -118
  28. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.js.map +1 -1
  29. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.js +371 -258
  30. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.js.map +1 -1
  31. package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.d.ts +7 -0
  32. package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js +11 -0
  33. package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js.map +1 -0
  34. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.d.ts +11 -1
  35. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js +39 -39
  36. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js.map +1 -1
  37. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js +35 -35
  38. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js.map +1 -1
  39. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.d.ts +101 -9
  40. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js +168 -51
  41. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js.map +1 -1
  42. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.d.ts +6 -2
  43. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.js +56 -36
  44. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.js.map +1 -1
  45. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.js +408 -221
  46. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.js.map +1 -1
  47. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.d.ts +1 -3
  48. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.js +61 -87
  49. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.js.map +1 -1
  50. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js +140 -233
  51. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js.map +1 -1
  52. package/dist/{es/src/library/services/vendor-implementations/sennheiser/sennheiser-events.d.ts → cjs/src/library/services/vendor-implementations/sennheiser/types.d.ts} +19 -0
  53. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/{sennheiser-events.js → types.js} +8 -2
  54. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/types.js.map +1 -0
  55. package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.d.ts +7 -27
  56. package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.js +6 -6
  57. package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.js.map +1 -1
  58. package/dist/cjs/src/library/services/vendor-implementations/vendor-implemntation.test.js.map +1 -1
  59. package/dist/{es/src/library/test-utils.test.d.ts → cjs/src/library/test-utils.d.ts} +1 -1
  60. package/dist/cjs/src/library/{test-utils.test.js → test-utils.js} +12 -9
  61. package/dist/cjs/src/library/test-utils.js.map +1 -0
  62. package/dist/cjs/src/library/types/consumed-headset-events.d.ts +8 -22
  63. package/dist/cjs/src/library/types/consumed-headset-events.js +0 -1
  64. package/dist/cjs/src/library/types/consumed-headset-events.js.map +1 -1
  65. package/dist/cjs/src/library/types/emitted-headset-events.d.ts +14 -11
  66. package/dist/cjs/src/library/types/headset-states.d.ts +10 -0
  67. package/dist/cjs/src/library/types/{jabra-request.js → headset-states.js} +1 -1
  68. package/dist/cjs/src/library/types/headset-states.js.map +1 -0
  69. package/dist/cjs/src/library/utils.js.map +1 -1
  70. package/dist/cjs/src/library/utils.test.js +2 -2
  71. package/dist/cjs/src/library/utils.test.js.map +1 -1
  72. package/dist/cjs/src/mocks/call.js +2 -1
  73. package/dist/cjs/src/mocks/call.js.map +1 -1
  74. package/dist/cjs/src/mocks/device-service.js +1 -0
  75. package/dist/cjs/src/mocks/device-service.js.map +1 -1
  76. package/dist/deploy-info.json +33 -195
  77. package/dist/es/src/config/i18n.js +1 -0
  78. package/dist/es/src/config/i18n.js.map +1 -1
  79. package/dist/es/src/library/index.d.ts +0 -1
  80. package/dist/es/src/library/index.js +0 -1
  81. package/dist/es/src/library/index.js.map +1 -1
  82. package/dist/es/src/library/services/headset.d.ts +5 -1
  83. package/dist/es/src/library/services/headset.js +170 -18
  84. package/dist/es/src/library/services/headset.js.map +1 -1
  85. package/dist/es/src/library/services/headset.test.js +517 -21
  86. package/dist/es/src/library/services/headset.test.js.map +1 -1
  87. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.d.ts +5 -4
  88. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js +60 -39
  89. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js.map +1 -1
  90. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js +20 -14
  91. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js.map +1 -1
  92. package/dist/{cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.d.ts → es/src/library/services/vendor-implementations/jabra/jabra-native/types.d.ts} +10 -0
  93. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/{jabra-native-types.js → types.js} +8 -1
  94. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/types.js.map +1 -0
  95. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.d.ts +15 -14
  96. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.js +181 -122
  97. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.js.map +1 -1
  98. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.js +373 -260
  99. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.js.map +1 -1
  100. package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.d.ts +7 -0
  101. package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js +7 -0
  102. package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js.map +1 -0
  103. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.d.ts +11 -1
  104. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js +38 -38
  105. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js.map +1 -1
  106. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js +36 -36
  107. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js.map +1 -1
  108. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.d.ts +101 -9
  109. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js +169 -52
  110. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js.map +1 -1
  111. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.d.ts +6 -2
  112. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.js +56 -36
  113. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.js.map +1 -1
  114. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.js +403 -216
  115. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.js.map +1 -1
  116. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.d.ts +1 -3
  117. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.js +16 -46
  118. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.js.map +1 -1
  119. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js +37 -134
  120. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js.map +1 -1
  121. package/dist/{cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-events.d.ts → es/src/library/services/vendor-implementations/sennheiser/types.d.ts} +19 -0
  122. package/dist/es/src/library/services/vendor-implementations/sennheiser/{sennheiser-events.js → types.js} +7 -1
  123. package/dist/es/src/library/services/vendor-implementations/sennheiser/types.js.map +1 -0
  124. package/dist/es/src/library/services/vendor-implementations/vendor-implementation.d.ts +7 -27
  125. package/dist/es/src/library/services/vendor-implementations/vendor-implementation.js +6 -6
  126. package/dist/es/src/library/services/vendor-implementations/vendor-implementation.js.map +1 -1
  127. package/dist/es/src/library/services/vendor-implementations/vendor-implemntation.test.js.map +1 -1
  128. package/dist/{cjs/src/library/test-utils.test.d.ts → es/src/library/test-utils.d.ts} +1 -1
  129. package/dist/es/src/library/{test-utils.test.js → test-utils.js} +10 -8
  130. package/dist/es/src/library/test-utils.js.map +1 -0
  131. package/dist/es/src/library/types/consumed-headset-events.d.ts +8 -22
  132. package/dist/es/src/library/types/consumed-headset-events.js +0 -1
  133. package/dist/es/src/library/types/consumed-headset-events.js.map +1 -1
  134. package/dist/es/src/library/types/emitted-headset-events.d.ts +14 -11
  135. package/dist/es/src/library/types/headset-states.d.ts +10 -0
  136. package/dist/es/src/library/types/headset-states.js +2 -0
  137. package/dist/es/src/library/types/headset-states.js.map +1 -0
  138. package/dist/es/src/library/utils.js.map +1 -1
  139. package/dist/es/src/mocks/call.js +1 -0
  140. package/dist/es/src/mocks/call.js.map +1 -1
  141. package/dist/es/src/mocks/device-service.js +1 -0
  142. package/dist/es/src/mocks/device-service.js.map +1 -1
  143. package/dist/softhphone-vendor-headsets.js +4 -19
  144. package/dist/softhphone-vendor-headsets.js.map +1 -1
  145. package/package.json +82 -88
  146. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.d.ts +0 -13
  147. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js +0 -18
  148. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js.map +0 -1
  149. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.d.ts +0 -12
  150. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js +0 -16
  151. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js.map +0 -1
  152. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.d.ts +0 -5
  153. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js +0 -10
  154. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js.map +0 -1
  155. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.d.ts +0 -38
  156. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js +0 -251
  157. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js.map +0 -1
  158. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.d.ts +0 -1
  159. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js +0 -573
  160. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js.map +0 -1
  161. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-commands.d.ts +0 -13
  162. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-commands.js +0 -18
  163. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-commands.js.map +0 -1
  164. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.d.ts +0 -6
  165. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js +0 -11
  166. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js.map +0 -1
  167. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.d.ts +0 -4
  168. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js +0 -3
  169. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js.map +0 -1
  170. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.js.map +0 -1
  171. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.d.ts +0 -5
  172. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js +0 -10
  173. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js.map +0 -1
  174. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-events.js.map +0 -1
  175. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.d.ts +0 -16
  176. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js +0 -3
  177. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js.map +0 -1
  178. package/dist/cjs/src/library/test-utils.test.js.map +0 -1
  179. package/dist/cjs/src/library/types/jabra-request.d.ts +0 -3
  180. package/dist/cjs/src/library/types/jabra-request.js.map +0 -1
  181. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.d.ts +0 -13
  182. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js +0 -15
  183. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js.map +0 -1
  184. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.d.ts +0 -12
  185. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js +0 -13
  186. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js.map +0 -1
  187. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.d.ts +0 -5
  188. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js +0 -7
  189. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js.map +0 -1
  190. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.d.ts +0 -38
  191. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js +0 -248
  192. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js.map +0 -1
  193. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.d.ts +0 -1
  194. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js +0 -568
  195. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js.map +0 -1
  196. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-commands.d.ts +0 -13
  197. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-commands.js +0 -15
  198. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-commands.js.map +0 -1
  199. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.d.ts +0 -6
  200. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js +0 -8
  201. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js.map +0 -1
  202. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.d.ts +0 -4
  203. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js +0 -2
  204. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js.map +0 -1
  205. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.js.map +0 -1
  206. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.d.ts +0 -5
  207. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js +0 -7
  208. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js.map +0 -1
  209. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-events.js.map +0 -1
  210. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.d.ts +0 -16
  211. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js +0 -2
  212. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js.map +0 -1
  213. package/dist/es/src/library/test-utils.test.js.map +0 -1
  214. package/dist/es/src/library/types/jabra-request.d.ts +0 -3
  215. package/dist/es/src/library/types/jabra-request.js +0 -2
  216. package/dist/es/src/library/types/jabra-request.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Softphone Vendor Headsets
2
2
 
3
- ### Overview
3
+ ## Overview
4
4
  This library's goal is to abstract all the different headset implementations behind a single interface.
5
5
 
6
6
  This project has a [React](https://github.com/facebook/react/) test app bootstrapped with [create-react-app](https://reactjs.org/docs/create-a-new-react-app.html).
@@ -10,7 +10,7 @@ At this moment (12/10/2021) there are three supported vendors already handled wi
10
10
  - Sennheiser/EPOS
11
11
  - Jabra
12
12
 
13
- ### Installation
13
+ ## Installation
14
14
 
15
15
  ``` sh
16
16
  # npm
@@ -19,7 +19,322 @@ npm install --save softphone-headset-vendors
19
19
  yarn softphone-headset-vendors
20
20
  ```
21
21
 
22
- ### Documentation
22
+ ## Documentation
23
+
24
+
25
+ ### Headset Service API
26
+ <br/><br/>
27
+ #### `getInstance`
28
+ This will create a new instance of the headset service if one doesn't already exist. It's important to note the original instance will *always* be returned, even if you pass in different config options
29
+ so make sure you get it right the first time. There's only one relevant option for the headset config, see below.
30
+ ``` ts
31
+ static getInstance(config: ImplementationConfig);
32
+
33
+ interface ImplementationConfig {
34
+ logger: any;
35
+ }
36
+ ```
37
+ <br/><br/><br/>
38
+
39
+ #### `implementations`
40
+ This is a computed value that returns a list of selectable headset vendors based on browser/environment compatibility. It does not ensure the required 3rd party software is installed. That gets checked when a vendor is selected or changed.
41
+ <br/><br/><br/>
42
+ #### `activeMicChange`
43
+ The selected headset vendor is determined by the active mic. This method notifies headset service the active mic has changed and it should determine if the "new" mic has an associated vendor implementation.
44
+ ``` ts
45
+ activeMicChange (newMicLabel: string): void;
46
+ ```
47
+ Params:
48
+ * `newMicLabel: string` Required: This label should match the device label returned from navigator.getUserMedia()
49
+ <br/><br/><br/>
50
+
51
+ #### `changeImplementation`
52
+ Allows you to manually change the selected headset. This is an alternative to `activeMicChange(...)`.
53
+ ``` ts
54
+ changeImplementation (implementation: VendorImplementation | null, deviceLabel: string): Promise<void>
55
+ ```
56
+ params:
57
+ * `implementation: VendorImplementation | null` Required: The desired vendor implementation
58
+ * `deviceLabel: string` Required: This can be null if the `implementation` is null, otherwise this will be the device associated with the vendor implementation to which you'd like to connect.
59
+ <br/><br/><br/>
60
+
61
+ #### `incomingCall`
62
+ Notifies the headset you have an incoming call. In most cases this will result in the headset ringing.
63
+ ``` ts
64
+ incomingCall (callInfo: CallInfo, hasOtherActiveCalls?: boolean): Promise<any>
65
+ ```
66
+ params:
67
+ * `callInfo: CallInfo` Required: The desired vendor implementation
68
+ * Basic interface
69
+ ``` ts
70
+ interface CallInfo {
71
+ conversationId: string,
72
+ contactName?: string
73
+ }
74
+ * `conversationId: string`: Required: Most of the vendors use conversation or call ids in order to help maintain proper state of the headset. This is the conversationId associated with the incoming call.
75
+ * `contactName: string`: Optional: Some vendors will announce the caller through the headset if the `contactName` is provided.
76
+ * `hasOtherActiveCalls?: boolean` Required: This can be null if the `implementation` is null, otherwise this will be the device associated with the vendor implementation to which you'd like to connect.
77
+ <br/><br/><br/>
78
+
79
+ #### `outgoingCall`
80
+ Notifies the headset you are placing an outgoing call.
81
+ ``` ts
82
+ outgoingCall (callInfo: CallInfo): Promise<any>
83
+ ```
84
+ params:
85
+ * `callInfo: CallInfo` Required: The desired vendor implementation
86
+ * Basic interface
87
+ ``` ts
88
+ interface CallInfo {
89
+ conversationId: string,
90
+ contactName?: string
91
+ }
92
+ * `conversationId: string`: Required: Most of the vendors use conversation or call ids in order to help maintain proper state of the headset. This is the conversationId associated with the incoming call.
93
+ * `contactName: string`: Optional: Some vendors will announce the caller through the headset if the `contactName` is provided.
94
+ <br/><br/><br/>
95
+
96
+ #### `answerCall`
97
+ Notifies the headset you are answering an incoming call. This will end the ringing and enable headset controls.
98
+ ``` ts
99
+ answerCall (conversationId: string): Promise<any>
100
+ ```
101
+ params:
102
+ * `conversationId: string`: Required: Most of the vendors use conversation or call ids in order to help maintain proper state of the headset. This is the conversationId associated with the incoming call.
103
+ <br/><br/><br/>
104
+
105
+ #### `rejectCall`
106
+ Notifies the headset you are rejecting an incoming call. This will end the ringing.
107
+ ``` ts
108
+ rejectCall (conversationId: string): Promise<any>
109
+ ```
110
+ params:
111
+ * `conversationId: string`: Required: Most of the vendors use conversation or call ids in order to help maintain proper state of the headset. This is the conversationId associated with the incoming call.
112
+ <br/><br/>
113
+
114
+ #### `setMute`
115
+ Tells the headset to mute or unmute.
116
+ ``` ts
117
+ setMute (value: boolean): Promise<any>
118
+ ```
119
+ params:
120
+ * `value: boolean`: Required: If `true`, the headset will be muted. If `false`, the headset will be unmuted.
121
+ <br/><br/><br/>
122
+
123
+
124
+ #### `setHold`
125
+ Tells the headset you are holding or resuming a call.
126
+ ``` ts
127
+ setHold (conversationId: string, value: boolean): Promise<any>
128
+ ```
129
+ params:
130
+ * `conversationId: string`: Required: The id associated with the conversation you'd are holding or resuming.
131
+ * `value: boolean`: Required: If `true`, the headset will be held. If `false`, the headset will be resumed.
132
+ <br/><br/><br/>
133
+ #### `endCall`
134
+ Tells the headset a call is ending.
135
+ ``` ts
136
+ endCall (conversationId: string, hasOtherActiveCalls?: boolean): Promise<any>
137
+ ```
138
+ params:
139
+ * `conversationId: string`: Required: The id associated with the conversation you'd are holding or resuming.
140
+ * `hasOtherActiveCalls?: boolean`: Optional: Some vendors differ in how much state they manage across multiple calls and it has to be shimmed. This allows us to make better decisions in those cases.
141
+ <br/><br/><br/>
142
+ #### `endAllCalls`
143
+ Ends all calls and returns the headset to a vanilla state.
144
+ ``` ts
145
+ endAllCalls (): Promise<void>
146
+ ```
147
+ <br/><br/><br/>
148
+ #### `retryConnection`
149
+ There are cases where 3rd party software needs to be started in order for the headset to connect. The method allows you to retry the connection after spinning up 3rd party software.
150
+ ``` ts
151
+ retryConnection (micLabel: string): Promise<void>
152
+ ```
153
+ Params:
154
+ * `micLabel: string` Required: This label should match the device label returned from navigator.getUserMedia()
155
+ <br/><br/><br/>
156
+
157
+ #### `connectionStatus`
158
+ Returns the current connection state of the headset.
159
+ ``` ts
160
+ connectionStatus (): DeviceConnectionStatus
161
+ ```
162
+ Returns:
163
+ ``` ts
164
+ type DeviceConnectionStatus = 'checking' | 'running' | 'notRunning' | 'noVendor';
165
+ ```
166
+ <br/><br/><br/>
167
+
168
+ ### Headset Events
169
+ The Headset service does not explicitly emit events itself. It uses [RxJS observables](https://rxjs.dev/guide/observable) to emit the events which are then subscribed to within the consuming app.
170
+
171
+ #### `deviceAnsweredCall`
172
+ Event emitted when a user presses the answer call button during an incoming call on their selected device. The event includes the event `name` as it is interpretted by the headset and a collection of items that may help with logging (`event`). It can also potentially have a `code` that corresponds to the event.
173
+
174
+ Declaration:
175
+ ``` ts
176
+ headset.headsetEvents.subscribe(event: {
177
+ event: 'deviceAnsweredCall',
178
+ payload: {
179
+ name: string,
180
+ code?: string,
181
+ event: { `containing various items mostly for logging purposes` }
182
+ }
183
+ } => {
184
+ if (event.event === 'deviceAnsweredCall') {
185
+ sdk.acceptPendingSession();
186
+ }
187
+ })
188
+ ```
189
+ Value of event:
190
+ * `event: HeadsetEvents` - string value emitted by the headset library to determine what event had just occurred
191
+ * `payload:` - object containing
192
+ * `name: string` - Name of the recent event as interpretted by the headset device
193
+ * `event`: { containing various items mostly for logging purposes}
194
+ * `code?: string` - Optional: A string value of a number that represents the action that was just taken. Not all vendors supply a code which is why it is only optional
195
+
196
+ <br/><br/>
197
+
198
+ #### `deviceEndedCall`
199
+ Event emitted when a user presses the answer call button while in an active call on their selected device. The event includes the event `name` as it is interpretted by the headset and a collection of items that may help with logging (`event`). It can also potentially have a `code` that corresponds to the event.
200
+
201
+ Declaration:
202
+ ``` ts
203
+ headset.headsetEvents.subscribe(event: {
204
+ event: 'deviceEndedCall',
205
+ payload: {
206
+ name: string,
207
+ event: { `containing various items mostly for logging purposes` },
208
+ code?: string
209
+ } => {
210
+ if (event.event === 'deviceEndedCall') {
211
+ sdk.endSession({ conversationId });
212
+ }
213
+ }
214
+ })
215
+ ```
216
+ Value of event:
217
+ * `event: HeadsetEvents` - string value emitted by the headset library to determine what event had just occurred
218
+ * `payload:` - object containing
219
+ * `name: string` - Name of the recent event as interpretted by the headset device
220
+ * `event`: { containing various items mostly for logging purposes}
221
+ * `code?: string` - Optional: A string value of a number that represents the action that was just taken. Not all vendors supply a code which is why it is only optional
222
+ <br/><br/>
223
+
224
+ #### `deviceMuteStatusChanged`
225
+ Event emitted when a user presses the mute call button on their selected device. It doesn't matter if the device state is currently muted or unmuted,
226
+ this event will be emitted with the _OPPOSITE_ value. For example, if the headset is currently muted, it will emit the event with the corresponding
227
+ value to unmute the device. The event includes the event `name` as it is interpretted by the headset and a collection of items that may help with
228
+ logging (`event`). It also comes with a value known as `isMuted` which determines the event is trying to mute or unmute the call. It can also
229
+ potentially have a `code` that corresponds to the event.
230
+
231
+ Declaration:
232
+ ``` ts
233
+ headset.headsetEvents.subscribe(event: {
234
+ event: 'deviceMuteStatusChanged',
235
+ payload: {
236
+ name: string,
237
+ event: { `containing various items mostly for logging purposes` },
238
+ isMuted: boolean,
239
+ code?: string
240
+ } => {
241
+ if (event.event === 'deviceMuteStatusChanged') {
242
+ sdk.setAudioMute(event.payload.isMuted);
243
+ }
244
+ }
245
+ })
246
+ ```
247
+ Value of event:
248
+ * `event: HeadsetEvents` - string value emitted by the headset library to determine what event had just occurred
249
+ * `payload:` - object containing
250
+ * `name: string` - Name of the recent event as interpretted by the headset device
251
+ * `event`: { containing various items mostly for logging purposes}
252
+ * `isMuted: boolean` - the value determining if the event is to mute (`true`) or unmute (`false`) the device
253
+ * `code?: string` - Optional: A string value of a number that represents the action that was just taken. Not all vendors supply a code which is why it is only optional
254
+ <br/><br/>
255
+
256
+ #### `deviceHoldStatusChanged`
257
+ Event emitted when a user presses the hold call button on their selected device. It doesn't matter if the device state is currently on hold or not,
258
+ this event will be emitted with the _OPPOSITE_ value. For example, if the headset is currently on hold, it will emit the event with the corresponding value to
259
+ resume the call. The event includes the event `name` as it is interpretted by the headset and a collection of items that may help with logging (`event`).
260
+ It also comes with a value known as `holdRequested` which determines the event is trying to hold or resume the call. It will also have an optional value for `toggle`.
261
+ It can also potentially have a `code` that corresponds to the event.
262
+
263
+ Declaration:
264
+ ``` ts
265
+ headset.headsetEvents.subscribe(event: {
266
+ event: 'deviceHoldStatusChanged',
267
+ payload: {
268
+ name: string,
269
+ event: { `containing various items mostly for logging purposes` },
270
+ holdRequested: boolean,
271
+ code?: string
272
+ } => {
273
+ if (event.event === 'deviceHoldStatusChanged') {
274
+ sdk.setConversationHold(event.payload.holdRequested, event.payload.toggle);
275
+ }
276
+ }
277
+ })
278
+ ```
279
+ Value of event:
280
+ * `event: HeadsetEvents` - string value emitted by the headset library to determine what event had just occurred
281
+ * `payload:` - object containing
282
+ * `name: string` - Name of the recent event as interpretted by the headset device
283
+ * `event`: { containing various items mostly for logging purposes}
284
+ * `holdRequested: boolean` - the value determining if the event is to hold (`true`) or resume (`false`) the call
285
+ * `code?: string` - Optional: A string value of a number that represents the action that was just taken. Not all vendors supply a code which is why it is only optional
286
+ <br/><br/>
287
+
288
+ #### `webHidPermissionRequested`
289
+ This is a special event that is only necessary for specific devices. Certain devices (such as Jabra) support a technology known as
290
+ [WebHID](https://developer.mozilla.org/en-US/docs/Web/API/WebHID_API) that requires additional permissions in order to use the call controls.
291
+ This event is emitted when a WebHID enabled device is selected. The event includes a `callback` function that is required in order to
292
+ achieve additional permissions for WebHID
293
+
294
+ Declaration:
295
+ ``` ts
296
+ headset.headsetEvents.subscribe(event: {
297
+ event: 'webHidPermissionRequested',
298
+ payload: {
299
+ callback: Function
300
+ } => {
301
+ if (event.event === 'webHidPermissionRequested') {
302
+ event.payload.body.callback();
303
+ /* Please note: The above example will not work as is. You can't trigger the WebHID callback by simply calling, it must be triggered through user interaction such as clicking a button */
304
+ }
305
+ }
306
+ })
307
+ ```
308
+ Value of event:
309
+ * `event: HeadsetEvents` - string value emitted by the headset library to determine what event had just occurred
310
+ * `payload:` - object containing
311
+ * `callback: Function` - the passed in function that will help achieve additional permissions for WebHID devices
312
+ <br/><br/>
313
+ #### `deviceConnectionStatusChanged`
314
+ Event emitted when a device implementation's connection status changes in some way. This can be the flags of `isConnected` or `isConnecting` changing in any way.
315
+ These flags are also included with the events payload.
316
+
317
+ Declaration:
318
+ ``` ts
319
+ headset.headsetEvents.subscribe(event: {
320
+ event: 'deviceConnectionStatusChanged',
321
+ payload: {
322
+ isConnected: boolean,
323
+ isConnecting: boolean
324
+ } => {
325
+ if (event.event === 'deviceConnectionStatusChanged') {
326
+ correspondingFunctionToHandleConnectionChange({event.payload.isConnected, event.payload.isConnecting});
327
+ }
328
+ }
329
+ })
330
+ ```
331
+ Value of event:
332
+ * `event: HeadsetEvents` - string value emitted by the headset library to determine what event had just occurred
333
+ * `payload:` - object containing
334
+ * `isConnected: boolean` - if the vendor implementation is fully connected
335
+ * `isConnecting: boolean` - if the vendor implementation is in the process of connecting
336
+ <br/><br/><br/>
337
+
23
338
  #### Structure and flow
24
339
  - The consuming app will first above anything else hit the HeadsetService (`headsets.ts`).
25
340
  - From there, the service will determine what vendor is currently selected out of the supported vendors above. This will also be a hub to call the proper functions that correspond with app to headset events (More on that later)
@@ -1,2 +1,2 @@
1
- (window.webpackJsonpSoftphoneVendorHeadsets=window.webpackJsonpSoftphoneVendorHeadsets||[]).push([[1],{19:function(e,t,n){"use strict";n.r(t),n.d(t,"TransportChromeExtension",(function(){return s}));var o=n(0);class s{constructor(e,t){this.logger=e,this.recorder=t,this.events=new o.g,this.consoleAppEvent=this.events,this.connectHasBeenCalled=!1,this.context=o.h.CHROME_EXTENSION}connect(){return this.connectHasBeenCalled?Promise.reject(new o.d("Already connected",o.b.UNEXPECTED_ERROR)):(this.connectHasBeenCalled=!0,window.addEventListener("message-from-jabra-chrome-extension",e=>{var t;let n=e.detail;this.recorder&&(n=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(n)),this.events.next(n)}),this.writeAction({event:"ping"}),Promise.resolve())}static checkInstallation(){return Object(o.j)(this,void 0,void 0,(function*(){return new Promise(e=>{const t=new CustomEvent("message-to-jabra-chrome-extension",{detail:"check-console-app-installation"});window.dispatchEvent(t),window.addEventListener("installation-status-from-jabra-chrome-extension",t=>{e({ok:t.detail,message:t.detail?"Installation ok":"The Jabra Chromehost is not installed"})}),setTimeout(()=>{e({ok:!1,message:"The Jabra Chrome Extension is not installed"})},3e3)})}))}writeAction(e){var t;null===(t=this.recorder)||void 0===t||t.recordOutput(e),window.dispatchEvent(new CustomEvent("message-to-jabra-chrome-extension",{detail:e}))}}}}]);
1
+ (window.webpackJsonpSoftphoneVendorHeadsets=window.webpackJsonpSoftphoneVendorHeadsets||[]).push([[1],{18:function(e,t,n){"use strict";n.r(t),n.d(t,"TransportChromeExtension",(function(){return s}));var o=n(0);class s{constructor(e,t){this.logger=e,this.recorder=t,this.events=new o.g,this.consoleAppEvent=this.events,this.connectHasBeenCalled=!1,this.context=o.h.CHROME_EXTENSION}connect(){return this.connectHasBeenCalled?Promise.reject(new o.d("Already connected",o.b.UNEXPECTED_ERROR)):(this.connectHasBeenCalled=!0,window.addEventListener("message-from-jabra-chrome-extension",e=>{var t;let n=e.detail;this.recorder&&(n=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(n)),this.events.next(n)}),this.writeAction({event:"ping"}),Promise.resolve())}static checkInstallation(){return Object(o.j)(this,void 0,void 0,(function*(){return new Promise(e=>{const t=new CustomEvent("message-to-jabra-chrome-extension",{detail:"check-console-app-installation"});window.dispatchEvent(t),window.addEventListener("installation-status-from-jabra-chrome-extension",t=>{e({ok:t.detail,message:t.detail?"Installation ok":"The Jabra Chromehost is not installed"})}),setTimeout(()=>{e({ok:!1,message:"The Jabra Chrome Extension is not installed"})},3e3)})}))}writeAction(e){var t;null===(t=this.recorder)||void 0===t||t.recordOutput(e),window.dispatchEvent(new CustomEvent("message-to-jabra-chrome-extension",{detail:e}))}}}}]);
2
2
  //# sourceMappingURL=1.softhphone-vendor-headsets.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://SoftphoneVendorHeadsets/./node_modules/@gnaudio/jabra-js/browser-esm/chrome-extension-transport-1b253c4b.js"],"names":["i","n","s","this","logger","recorder","events","consoleAppEvent","connectHasBeenCalled","context","CHROME_EXTENSION","Promise","reject","UNEXPECTED_ERROR","window","addEventListener","e","t","detail","recordInput","next","writeAction","event","resolve","CustomEvent","dispatchEvent","ok","message","setTimeout","recordOutput"],"mappings":"uIAAA,2DAAAA,KAAA,WAAoE,MAAMA,EAAE,YAAYC,EAAEC,GAAGC,KAAKC,OAAOH,EAAEE,KAAKE,SAASH,EAAEC,KAAKG,OAAO,IAAI,IAAEH,KAAKI,gBAAgBJ,KAAKG,OAAOH,KAAKK,sBAAqB,EAAGL,KAAKM,QAAQ,IAAEC,iBAAiB,UAAU,OAAOP,KAAKK,qBAAqBG,QAAQC,OAAO,IAAI,IAAE,oBAAoB,IAAEC,oBAAoBV,KAAKK,sBAAqB,EAAGM,OAAOC,iBAAiB,sCAAuCC,IAAI,IAAIC,EAAE,IAAIhB,EAAEe,EAAEE,OAAOf,KAAKE,WAAWJ,EAAE,QAAQgB,EAAEd,KAAKE,gBAAW,IAASY,OAAE,EAAOA,EAAEE,YAAYlB,IAAIE,KAAKG,OAAOc,KAAKnB,KAAME,KAAKkB,YAAY,CAACC,MAAM,SAASX,QAAQY,WAAW,2BAA2B,OAAO,YAAEpB,UAAK,OAAO,GAAO,YAAa,OAAO,IAAIQ,QAASK,IAAI,MAAMC,EAAE,IAAIO,YAAY,oCAAoC,CAACN,OAAO,mCAAmCJ,OAAOW,cAAcR,GAAGH,OAAOC,iBAAiB,kDAAmDE,IAAID,EAAE,CAACU,GAAGT,EAAEC,OAAOS,QAAQV,EAAEC,OAAO,kBAAkB,4CAA6CU,WAAW,KAAMZ,EAAE,CAACU,IAAG,EAAGC,QAAQ,iDAAkD,UAAW,YAAYX,GAAG,IAAIC,EAAE,QAAQA,EAAEd,KAAKE,gBAAW,IAASY,GAAGA,EAAEY,aAAab,GAAGF,OAAOW,cAAc,IAAID,YAAY,oCAAoC,CAACN,OAAOF","file":"1.softhphone-vendor-headsets.js","sourcesContent":["import{S as e,T as t,J as n,E as s,_ as o}from\"./index-697967ac.js\";class i{constructor(n,s){this.logger=n,this.recorder=s,this.events=new e,this.consoleAppEvent=this.events,this.connectHasBeenCalled=!1,this.context=t.CHROME_EXTENSION}connect(){return this.connectHasBeenCalled?Promise.reject(new n(\"Already connected\",s.UNEXPECTED_ERROR)):(this.connectHasBeenCalled=!0,window.addEventListener(\"message-from-jabra-chrome-extension\",(e=>{var t;let n=e.detail;this.recorder&&(n=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(n)),this.events.next(n)})),this.writeAction({event:\"ping\"}),Promise.resolve())}static checkInstallation(){return o(this,void 0,void 0,(function*(){return new Promise((e=>{const t=new CustomEvent(\"message-to-jabra-chrome-extension\",{detail:\"check-console-app-installation\"});window.dispatchEvent(t),window.addEventListener(\"installation-status-from-jabra-chrome-extension\",(t=>{e({ok:t.detail,message:t.detail?\"Installation ok\":\"The Jabra Chromehost is not installed\"})})),setTimeout((()=>{e({ok:!1,message:\"The Jabra Chrome Extension is not installed\"})}),3e3)}))}))}writeAction(e){var t;null===(t=this.recorder)||void 0===t||t.recordOutput(e),window.dispatchEvent(new CustomEvent(\"message-to-jabra-chrome-extension\",{detail:e}))}}export{i as TransportChromeExtension};\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://SoftphoneVendorHeadsets/./node_modules/@gnaudio/jabra-js/browser-esm/chrome-extension-transport-b7b99846.js"],"names":["i","n","s","this","logger","recorder","events","consoleAppEvent","connectHasBeenCalled","context","CHROME_EXTENSION","Promise","reject","UNEXPECTED_ERROR","window","addEventListener","e","t","detail","recordInput","next","writeAction","event","resolve","CustomEvent","dispatchEvent","ok","message","setTimeout","recordOutput"],"mappings":"uIAAA,2DAAAA,KAAA,WAAoE,MAAMA,EAAE,YAAYC,EAAEC,GAAGC,KAAKC,OAAOH,EAAEE,KAAKE,SAASH,EAAEC,KAAKG,OAAO,IAAI,IAAEH,KAAKI,gBAAgBJ,KAAKG,OAAOH,KAAKK,sBAAqB,EAAGL,KAAKM,QAAQ,IAAEC,iBAAiB,UAAU,OAAOP,KAAKK,qBAAqBG,QAAQC,OAAO,IAAI,IAAE,oBAAoB,IAAEC,oBAAoBV,KAAKK,sBAAqB,EAAGM,OAAOC,iBAAiB,sCAAuCC,IAAI,IAAIC,EAAE,IAAIhB,EAAEe,EAAEE,OAAOf,KAAKE,WAAWJ,EAAE,QAAQgB,EAAEd,KAAKE,gBAAW,IAASY,OAAE,EAAOA,EAAEE,YAAYlB,IAAIE,KAAKG,OAAOc,KAAKnB,KAAME,KAAKkB,YAAY,CAACC,MAAM,SAASX,QAAQY,WAAW,2BAA2B,OAAO,YAAEpB,UAAK,OAAO,GAAO,YAAa,OAAO,IAAIQ,QAASK,IAAI,MAAMC,EAAE,IAAIO,YAAY,oCAAoC,CAACN,OAAO,mCAAmCJ,OAAOW,cAAcR,GAAGH,OAAOC,iBAAiB,kDAAmDE,IAAID,EAAE,CAACU,GAAGT,EAAEC,OAAOS,QAAQV,EAAEC,OAAO,kBAAkB,4CAA6CU,WAAW,KAAMZ,EAAE,CAACU,IAAG,EAAGC,QAAQ,iDAAkD,UAAW,YAAYX,GAAG,IAAIC,EAAE,QAAQA,EAAEd,KAAKE,gBAAW,IAASY,GAAGA,EAAEY,aAAab,GAAGF,OAAOW,cAAc,IAAID,YAAY,oCAAoC,CAACN,OAAOF","file":"1.softhphone-vendor-headsets.js","sourcesContent":["import{S as e,T as t,J as n,E as s,_ as o}from\"./index-923cf570.js\";class i{constructor(n,s){this.logger=n,this.recorder=s,this.events=new e,this.consoleAppEvent=this.events,this.connectHasBeenCalled=!1,this.context=t.CHROME_EXTENSION}connect(){return this.connectHasBeenCalled?Promise.reject(new n(\"Already connected\",s.UNEXPECTED_ERROR)):(this.connectHasBeenCalled=!0,window.addEventListener(\"message-from-jabra-chrome-extension\",(e=>{var t;let n=e.detail;this.recorder&&(n=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(n)),this.events.next(n)})),this.writeAction({event:\"ping\"}),Promise.resolve())}static checkInstallation(){return o(this,void 0,void 0,(function*(){return new Promise((e=>{const t=new CustomEvent(\"message-to-jabra-chrome-extension\",{detail:\"check-console-app-installation\"});window.dispatchEvent(t),window.addEventListener(\"installation-status-from-jabra-chrome-extension\",(t=>{e({ok:t.detail,message:t.detail?\"Installation ok\":\"The Jabra Chromehost is not installed\"})})),setTimeout((()=>{e({ok:!1,message:\"The Jabra Chrome Extension is not installed\"})}),3e3)}))}))}writeAction(e){var t;null===(t=this.recorder)||void 0===t||t.recordOutput(e),window.dispatchEvent(new CustomEvent(\"message-to-jabra-chrome-extension\",{detail:e}))}}export{i as TransportChromeExtension};\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (window.webpackJsonpSoftphoneVendorHeadsets=window.webpackJsonpSoftphoneVendorHeadsets||[]).push([[2],{20:function(e,t,s){"use strict";s.r(t),s.d(t,"initHandler",(function(){return E}));var i=s(0);function o(e,t){void 0===t&&(t=i.n);var s=Object(i.l)(e,t);return function e(t,s){return s?function(o){return Object(i.m)(s.pipe(Object(i.A)(1),Object(i.y)((function(e,t){e.subscribe(new i.f(t,i.x))}))),o.pipe(e(t)))}:Object(i.k)((function(e,s){return t(e,s).pipe(Object(i.A)(1),function(e){return Object(i.w)((function(){return e}))}(e))}))}((function(){return s}))}class r{static rawUsageFrom(e,t){return(e<<16|t)>>>0}static usagePageFromRaw(e){return e>>>16}static usageFromRaw(e){return e<<16>>>16}}class n{constructor(e){this.devices=new Map,this.deviceInputSubscriptions=new Map,this.onHidInput=new i.g,this.onGetFeatureReportResponse=new i.g;const t=new i.g;this.deviceAdded=t;const s=new i.g;this.deviceRemoved=s,e.deviceAdded.subscribe(e=>{if(!this.devices.has(e.id)){this.devices.set(e.id,e);const s=e.inputHandler.inputReports.pipe(Object(i.w)(t=>new i.i(e.id,r.usagePageFromRaw(t.usage),r.usageFromRaw(t.usage),t.value))).subscribe(e=>this.onHidInput.next(e));this.deviceInputSubscriptions.set(e.id,s),t.next(e)}}),e.deviceRemoved.subscribe(e=>{var t;const i=this.devices.get(e);i&&(this.devices.delete(e),null===(t=this.deviceInputSubscriptions.get(e))||void 0===t||t.unsubscribe(),this.deviceInputSubscriptions.delete(e),s.next(i))})}sendOutputUsage(e,t,s,i){var o;const n=r.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.outputHandler.sendOutputUsage(n,i)}setFeatureUsage(e,t,s,i){var o;const n=r.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.featureHandler.setFeatureUsage(n,i)}getFeatureUsage(e,t,s,o){var n;return Object(i.j)(this,void 0,void 0,(function*(){const a=r.rawUsageFrom(s,o),c=yield null===(n=this.devices.get(e))||void 0===n?void 0:n.featureHandler.getFeatureUsage(a);void 0!==c&&this.onGetFeatureReportResponse.next(new i.o(t,c))}))}}class a{constructor(e,t){this.device=e,this.inputReportDescriptors=t;const s=new Map;this.inputReportDescriptors.forEach(e=>{e.usages.forEach((e,t)=>{s.set(t,[0])})});const o=new i.g;this.inputReports=o,this.device.oninputreport=e=>{if(e.currentTarget!==this.device)return;const t=this.inputReportDescriptors.get(e.reportId);if(!t)return;const r=new i.p.BitView(e.data.buffer);r.bigEndian=!1,Array.from(t.usages.entries(),a.makeWebHidInputReport.bind(this,r)).filter(e=>a.compareReportToCachedValue(e,s)).forEach(e=>{s.set(e.usage,e.value),o.next(e)})}}static makeWebHidInputReport(e,[t,s]){let o=s.offset,r=s.size,n=[];for(;r>0;)n.push(e.getBits(o,Math.min(r,8))),o+=8,r-=8;return n=s.onInput(n),new i.c.UsageReport(t,n)}static compareReportToCachedValue(e,t){const s=t.get(e.usage);return!s||(s.length!==e.value.length||s.some((t,s)=>e.value[s]!==t))}}class c{constructor(e){this.report=e}reportSizeInBits(){return this.report.fullReportSize}reportSizeInBytes(){return Math.ceil(this.reportSizeInBits()/8)}createBitViewIfNeeded(){if(!this.bitView){const e=this.reportSizeInBytes(),t=new ArrayBuffer(e);this.bitView=new i.p.BitView(t),this.bitView.bigEndian=!1}return this.bitView}getUsageInformationOrThrow(e){if(!this.report.usages.has(e))throw new i.d(`Unable to write usage (0x${e.toString(16).padStart(8,"0")}). It is not known by the device.`,i.b.UNEXPECTED_ERROR);return this.report.usages.get(e)}writeUsage(e,t){const s=this.getUsageInformationOrThrow(e);let o=this.createBitViewIfNeeded();if(!s.absolute){const e=function(e){const t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}(o.buffer);o=new i.p.BitView(e)}let r=s.offset,n=s.size;return t.forEach(e=>{o.setBits(r,e,n),r+=8,n-=8}),o.buffer}}class u{constructor(e,t,s){this.device=e,this.outputReports=t,this.outputUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.outputUsages.has(e))throw new i.d(`Unknown usagePage: 0x${e.toString(16).padStart(8,"0")}.`,i.b.UNEXPECTED_ERROR);return this.outputUsages.get(e)}getReportLayoutForReportId(e){if(!this.outputReports.has(e))throw new i.d(`Unknown reportId: ${e}.`,i.b.UNEXPECTED_ERROR);return this.outputReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new i.d(`Unknown rawUsage inside ReportLayout: ${e}.`,i.b.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new c(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}sendOutputUsage(e,t){return Object(i.j)(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendReport(s,r)}))}}class d{constructor(e=new Map,t=0){this.usages=e,this.fullReportSize=t}}class h{constructor(e,t,s){this.offset=e,this.size=t,this.absolute=s}onInput(e){return e}onOutput(e){return e}}class p{constructor(e,t,s,i){this.offset=e,this.size=t,this.absolute=s,this.rangeIndex=i}onInput(e){if(e.length>1)throw new i.d(`Usages of type ${p.name} should not hold more than 1 byte of information.`,i.b.UNEXPECTED_ERROR);return e[0]===this.rangeIndex?[1]:[0]}onOutput(e){if(e.length>1)throw new i.d(`Usages of type ${p.name} should not hold more than 1 byte of information.`,i.b.UNEXPECTED_ERROR);return e[0]>0?[this.rangeIndex]:e}}class l{constructor(e){const t=new Map;this.buildReportLayouts(e.collections,"input",t),this.inputReports=t,this.inputUsages=l.buildUsageMap(t);const s=new Map;this.buildReportLayouts(e.collections,"output",s),this.outputReports=s,this.outputUsages=l.buildUsageMap(s);const i=new Map;this.buildReportLayouts(e.collections,"feature",i),this.featureReports=i,this.featureUsages=l.buildUsageMap(i)}static buildUsageMap(e){const t=new Map;return e.forEach((e,s)=>{e.usages.forEach((e,i)=>{t.set(i,s)})}),t}buildReportLayouts(e,t,s){e.forEach(e=>{var i;null===(i=l.reportsOfType(e,t))||void 0===i||i.forEach(e=>{var t;const i=e.reportId;s.has(i)||s.set(i,new d);const o=s.get(i);let r=0;null===(t=e.items)||void 0===t||t.forEach(e=>{let t=e.usages;if(e.isRange){t=[];for(let s=e.usageMinimum;s<=e.usageMaximum;s+=1)t.push(s)}let s,i=r;if(e.isRange&&e.isArray&&(s=1),t.length>0&&t.filter(e=>o.usages.has(e)).length===t.length)return;t.forEach(t=>{let r;r=s?new p(i,e.reportSize,e.isAbsolute,s):new h(i,e.reportSize,e.isAbsolute),o.usages.set(t,r),s?s+=1:i+=e.reportSize});const n=e.reportCount*e.reportSize;o.fullReportSize+=n,r+=n})}),e.children&&this.buildReportLayouts(e.children,t,s)})}static reportsOfType(e,t){if("input"===t)return e.inputReports;if("output"===t)return e.outputReports;if("feature"===t)return e.featureReports;throw new i.d(`Unexpected report type: ${t}!`,i.b.UNEXPECTED_ERROR)}}class g{constructor(e,t,s){this.device=e,this.featureReports=t,this.featureUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.featureUsages.has(e))throw new i.d(`Unknown usagePage: 0x${e.toString(16).padStart(8,"0")}.`,i.b.UNEXPECTED_ERROR);return this.featureUsages.get(e)}getReportLayoutForReportId(e){if(!this.featureReports.has(e))throw new i.d(`Unknown reportId: ${e}.`,i.b.UNEXPECTED_ERROR);return this.featureReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new i.d(`Unknown rawUsage inside ReportLayout: ${e}.`,i.b.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new c(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}getFeatureUsage(e){return Object(i.j)(this,void 0,void 0,(function*(){const t=this.getReportIdForUsage(e),s=yield this.device.receiveFeatureReport(t),i=this.getUsageInReportForUsage(e),o=[];for(let e=1;e<=Math.ceil(i.size/8);e+=1)o.push(s.getUint8(e));return o}))}setFeatureUsage(e,t){return Object(i.j)(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendFeatureReport(s,r)}))}}class v{constructor(e,t,s,i){this.name=e,this.vid=t,this.pid=s,this.id=i.sessionId;const o=new l(i);this.inputReports=o.inputReports,this.outputReports=o.outputReports,this.featureReports=o.featureReports,this.inputHandler=new a(i,o.inputReports),this.outputHandler=new u(i,o.outputReports,o.outputUsages),this.featureHandler=new g(i,o.featureReports,o.featureUsages)}}class R{constructor(e,t){this.hid=e,this.broadcastChannel=t,this.deviceAddedSubject=new i.g,this.deviceAdded=this.deviceAddedSubject,this.deviceRemovedSubject=new i.g,this.deviceRemoved=this.deviceRemovedSubject}setupListeners(){this.hid.onconnect=e=>this.onConnect(e),this.hid.ondisconnect=e=>this.onDisconnect(e),this.broadcastChannel.onmessage=()=>this.getPairedDevices()}addNewDevice(e){return Object(i.j)(this,void 0,void 0,(function*(){if(R.hasGeneratedDeviceId(e))return;R.getOrGenerateDeviceId(e);const t=new v(e.productName,e.vendorId,e.productId,e);e.opened||(yield e.open()),this.deviceAddedSubject.next(t)}))}onConnect(e){return Object(i.j)(this,void 0,void 0,(function*(){setTimeout(()=>Object(i.j)(this,void 0,void 0,(function*(){yield this.addNewDevice(e.device)})),1e3)}))}onDisconnect(e){const t=R.getOrGenerateDeviceId(e.device);this.deviceRemovedSubject.next(t)}getPairedDevices(){return Object(i.j)(this,void 0,void 0,(function*(){(yield this.hid.getDevices()).forEach(e=>Object(i.j)(this,void 0,void 0,(function*(){yield this.addNewDevice(e)})))}))}static hasGeneratedDeviceId(e){return void 0!==e.sessionId}static getOrGenerateDeviceId(e){if(!R.hasGeneratedDeviceId(e)){const t=new i.B(4).toString();return e.sessionId=t,t}return e.sessionId}}class w{constructor(e,t,s,i,o){this.usagePage=e,this.usage=t,this.valueType=s,this.reportType=i,this.reportSize=o}}class f{constructor(e){this.deviceManagement=e,this.events=new i.g,this.setupDeviceHandler()}setupDeviceHandler(){this.deviceManagement.deviceAdded.subscribe(e=>{this.events.next({event:"attach",id:e.id,vid:e.vid,pid:e.pid,name:e.name,serialNumber:e.id,descriptor:f.generateDescriptors(e)})}),this.deviceManagement.deviceRemoved.subscribe(e=>{this.events.next({event:"detach",id:e.id})}),this.deviceManagement.onHidInput.subscribe(e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:"hid-input",id:e.deviceId,usagePage:e.usagePage,usage:e.usage,value:t})}),this.deviceManagement.onGetFeatureReportResponse.subscribe(e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:"response-hid-feature",token:e.token,value:t})})}static generateDescriptors(e){let t=f.convertReportLayoutsToDescriptors(e.inputReports,"input");return t=t.concat(f.convertReportLayoutsToDescriptors(e.outputReports,"output")),t=t.concat(f.convertReportLayoutsToDescriptors(e.featureReports,"feature")),t}static convertReportLayoutsToDescriptors(e,t){const s=[];return e.forEach(e=>{e.usages.forEach((e,i)=>{const o=r.usagePageFromRaw(i);65280===o&&"output"===t||s.push(new w(o,r.usageFromRaw(i),e.absolute?"absolute":"relative",t,Math.ceil(e.size/8)))})}),s}}class b{constructor(e,t,s){this.deviceManagement=e,this.callLockManagement=t,this.logger=s,this.gnpLockAcquired=new i.g,this.callLockAcquired=new i.g,this.softphoneInFocus=new i.g,this.events=Object(i.q)(this.gnpLockAcquired.pipe(o(0)),this.callLockAcquired.pipe(o(0)),this.softphoneInFocus)}onNewSdkInput(e){if(!e.action)throw new i.d("Provided input has no action property.",i.b.UNEXPECTED_ERROR);switch(e.action){case"hid-output":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.sendOutputUsage(e.id,e.usagePage,e.usage,t);break}case"request-hid-feature":this.deviceManagement.getFeatureUsage(e.id,e.token,e.usagePage,e.usage);break;case"set-hid-feature":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.setFeatureUsage(e.id,e.usagePage,e.usage,t);break}case"request-gnp-lock":this.gnpLockAcquired.next({event:"response-gnp-lock",token:e.token}),Object(i.v)("GNP lock requested with WebHID backend. This should not happen!",this.logger,i.e.ERROR,i.r.NATIVE_CONSOLE);break;case"release-gnp-lock":break;case"request-call-lock":this.callLockManagement.tryAcquireCallLock(e.id).then(t=>{this.callLockAcquired.next({event:"response-call-lock",id:e.id,acquired:t})});break;case"release-call-lock":this.callLockManagement.releaseCallLock(e.id);break;case"set-softphone-info":this.softphoneInFocus.next({event:"softphone-in-focus",infocus:!1}),this.softphoneInFocus.complete();break;default:throw new i.d(`Provided action is not recognized - ${e.action}.`,i.b.UNEXPECTED_ERROR)}}}class I{constructor(e,t,s){this.navigatorLocks=e,this.logger=s,this.releaseGlobalLock=null,this.localLockedDevices=new Set,t.deviceRemoved.subscribe(e=>{this.localLockedDevices.has(e.id)&&this.releaseCallLock(e.id)})}tryAcquireCallLock(e){return Object(i.j)(this,void 0,void 0,(function*(){return!(yield this.checkWebLocksSupport())||(this.localLockedDevices.size>0&&!this.localLockedDevices.has(e)?(this.localLockedDevices.add(e),!0):new Promise(t=>{this.navigatorLocks.request("jabra-call-lock",{ifAvailable:!0},s=>s?(this.localLockedDevices.add(e),t(!0),new Promise(e=>{this.releaseGlobalLock=e})):(t(!1),Promise.resolve()))}))}))}releaseCallLock(e){this.localLockedDevices.delete(e),this.releaseGlobalLock&&0===this.localLockedDevices.size&&this.releaseGlobalLock()}checkWebLocksSupport(){return Object(i.j)(this,void 0,void 0,(function*(){const e=yield this.navigatorLocks.query().catch(()=>{Object(i.v)("WebLocks unsupported. The cross-tab call lock is disabled.",this.logger,i.e.WARNING)});return Boolean(e)}))}}class U{constructor(e,t,s,o){this.scanner=e,this.deviceEventHandler=t,this.sdkInputEventHandler=s,this.logger=o,this.readyEvent=new i.g,this.events=new i.s,this.events=Object(i.q)(this.readyEvent,this.deviceEventHandler.events,this.sdkInputEventHandler.events)}start(){this.readyEvent.next({event:"ready",version:null,jabraDirectInstalled:!1}),this.readyEvent.complete(),this.scanner.getPairedDevices(),this.scanner.setupListeners()}sendMessage(e){var t;null===(t=this.sdkInputEventHandler)||void 0===t||t.onNewSdkInput(e)}}function E(e){if("undefined"==typeof window)throw new i.d("WebHID is not supported outside of a browser environment.",i.b.INIT_ERROR);if(void 0===window.navigator||void 0===window.navigator.hid)throw new i.d("WebHID is not supported on this platform/browser.",i.b.INIT_ERROR);if(void 0===window.navigator.locks)throw new i.d("WebLocks is not supported on this platform/browser.",i.b.INIT_ERROR);const t=window.navigator.hid,s=window.navigator.locks,o=new BroadcastChannel(i.t.PAIRING_CHANNEL),r=new R(t,o),a=new n(r),c=new f(a),u=new b(a,new I(s,a,e));return new U(r,c,u,e)}}}]);
1
+ (window.webpackJsonpSoftphoneVendorHeadsets=window.webpackJsonpSoftphoneVendorHeadsets||[]).push([[2],{19:function(e,t,s){"use strict";s.r(t),s.d(t,"initHandler",(function(){return E}));var i=s(0);function o(e,t){void 0===t&&(t=i.n);var s=Object(i.l)(e,t);return function e(t,s){return s?function(o){return Object(i.m)(s.pipe(Object(i.A)(1),Object(i.y)((function(e,t){e.subscribe(new i.f(t,i.x))}))),o.pipe(e(t)))}:Object(i.k)((function(e,s){return t(e,s).pipe(Object(i.A)(1),function(e){return Object(i.w)((function(){return e}))}(e))}))}((function(){return s}))}class r{static rawUsageFrom(e,t){return(e<<16|t)>>>0}static usagePageFromRaw(e){return e>>>16}static usageFromRaw(e){return e<<16>>>16}}class n{constructor(e){this.devices=new Map,this.deviceInputSubscriptions=new Map,this.onHidInput=new i.g,this.onGetFeatureReportResponse=new i.g;const t=new i.g;this.deviceAdded=t;const s=new i.g;this.deviceRemoved=s,e.deviceAdded.subscribe(e=>{if(!this.devices.has(e.id)){this.devices.set(e.id,e);const s=e.inputHandler.inputReports.pipe(Object(i.w)(t=>new i.i(e.id,r.usagePageFromRaw(t.usage),r.usageFromRaw(t.usage),t.value))).subscribe(e=>this.onHidInput.next(e));this.deviceInputSubscriptions.set(e.id,s),t.next(e)}}),e.deviceRemoved.subscribe(e=>{var t;const i=this.devices.get(e);i&&(this.devices.delete(e),null===(t=this.deviceInputSubscriptions.get(e))||void 0===t||t.unsubscribe(),this.deviceInputSubscriptions.delete(e),s.next(i))})}sendOutputUsage(e,t,s,i){var o;const n=r.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.outputHandler.sendOutputUsage(n,i)}setFeatureUsage(e,t,s,i){var o;const n=r.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.featureHandler.setFeatureUsage(n,i)}getFeatureUsage(e,t,s,o){var n;return Object(i.j)(this,void 0,void 0,(function*(){const a=r.rawUsageFrom(s,o),c=yield null===(n=this.devices.get(e))||void 0===n?void 0:n.featureHandler.getFeatureUsage(a);void 0!==c&&this.onGetFeatureReportResponse.next(new i.o(t,c))}))}}class a{constructor(e,t){this.device=e,this.inputReportDescriptors=t;const s=new Map;this.inputReportDescriptors.forEach(e=>{e.usages.forEach((e,t)=>{s.set(t,[0])})});const o=new i.g;this.inputReports=o,this.device.oninputreport=e=>{if(e.currentTarget!==this.device)return;const t=this.inputReportDescriptors.get(e.reportId);if(!t)return;const r=new i.p.BitView(e.data.buffer);r.bigEndian=!1,Array.from(t.usages.entries(),a.makeWebHidInputReport.bind(this,r)).filter(e=>a.compareReportToCachedValue(e,s)).forEach(e=>{s.set(e.usage,e.value),o.next(e)})}}static makeWebHidInputReport(e,[t,s]){let o=s.offset,r=s.size,n=[];for(;r>0;)n.push(e.getBits(o,Math.min(r,8))),o+=8,r-=8;return n=s.onInput(n),new i.c.UsageReport(t,n)}static compareReportToCachedValue(e,t){const s=t.get(e.usage);return!s||(s.length!==e.value.length||s.some((t,s)=>e.value[s]!==t))}}class c{constructor(e){this.report=e}reportSizeInBits(){return this.report.fullReportSize}reportSizeInBytes(){return Math.ceil(this.reportSizeInBits()/8)}createBitViewIfNeeded(){if(!this.bitView){const e=this.reportSizeInBytes(),t=new ArrayBuffer(e);this.bitView=new i.p.BitView(t),this.bitView.bigEndian=!1}return this.bitView}getUsageInformationOrThrow(e){if(!this.report.usages.has(e))throw new i.d(`Unable to write usage (0x${e.toString(16).padStart(8,"0")}). It is not known by the device.`,i.b.UNEXPECTED_ERROR);return this.report.usages.get(e)}writeUsage(e,t){const s=this.getUsageInformationOrThrow(e);let o=this.createBitViewIfNeeded();if(!s.absolute){const e=function(e){const t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}(o.buffer);o=new i.p.BitView(e)}let r=s.offset,n=s.size;return t.forEach(e=>{o.setBits(r,e,n),r+=8,n-=8}),o.buffer}}class u{constructor(e,t,s){this.device=e,this.outputReports=t,this.outputUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.outputUsages.has(e))throw new i.d(`Unknown usagePage: 0x${e.toString(16).padStart(8,"0")}.`,i.b.UNEXPECTED_ERROR);return this.outputUsages.get(e)}getReportLayoutForReportId(e){if(!this.outputReports.has(e))throw new i.d(`Unknown reportId: ${e}.`,i.b.UNEXPECTED_ERROR);return this.outputReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new i.d(`Unknown rawUsage inside ReportLayout: ${e}.`,i.b.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new c(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}sendOutputUsage(e,t){return Object(i.j)(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendReport(s,r)}))}}class d{constructor(e=new Map,t=0){this.usages=e,this.fullReportSize=t}}class h{constructor(e,t,s){this.offset=e,this.size=t,this.absolute=s}onInput(e){return e}onOutput(e){return e}}class p{constructor(e,t,s,i){this.offset=e,this.size=t,this.absolute=s,this.rangeIndex=i}onInput(e){if(e.length>1)throw new i.d(`Usages of type ${p.name} should not hold more than 1 byte of information.`,i.b.UNEXPECTED_ERROR);return e[0]===this.rangeIndex?[1]:[0]}onOutput(e){if(e.length>1)throw new i.d(`Usages of type ${p.name} should not hold more than 1 byte of information.`,i.b.UNEXPECTED_ERROR);return e[0]>0?[this.rangeIndex]:e}}class l{constructor(e){const t=new Map;this.buildReportLayouts(e.collections,"input",t),this.inputReports=t,this.inputUsages=l.buildUsageMap(t);const s=new Map;this.buildReportLayouts(e.collections,"output",s),this.outputReports=s,this.outputUsages=l.buildUsageMap(s);const i=new Map;this.buildReportLayouts(e.collections,"feature",i),this.featureReports=i,this.featureUsages=l.buildUsageMap(i)}static buildUsageMap(e){const t=new Map;return e.forEach((e,s)=>{e.usages.forEach((e,i)=>{t.set(i,s)})}),t}buildReportLayouts(e,t,s){e.forEach(e=>{var i;null===(i=l.reportsOfType(e,t))||void 0===i||i.forEach(e=>{var t;const i=e.reportId;s.has(i)||s.set(i,new d);const o=s.get(i);let r=0;null===(t=e.items)||void 0===t||t.forEach(e=>{let t=e.usages;if(e.isRange){t=[];for(let s=e.usageMinimum;s<=e.usageMaximum;s+=1)t.push(s)}let s,i=r;if(e.isRange&&e.isArray&&(s=1),t.length>0&&t.filter(e=>o.usages.has(e)).length===t.length)return;t.forEach(t=>{let r;r=s?new p(i,e.reportSize,e.isAbsolute,s):new h(i,e.reportSize,e.isAbsolute),o.usages.set(t,r),s?s+=1:i+=e.reportSize});const n=e.reportCount*e.reportSize;o.fullReportSize+=n,r+=n})}),e.children&&this.buildReportLayouts(e.children,t,s)})}static reportsOfType(e,t){if("input"===t)return e.inputReports;if("output"===t)return e.outputReports;if("feature"===t)return e.featureReports;throw new i.d(`Unexpected report type: ${t}!`,i.b.UNEXPECTED_ERROR)}}class g{constructor(e,t,s){this.device=e,this.featureReports=t,this.featureUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.featureUsages.has(e))throw new i.d(`Unknown usagePage: 0x${e.toString(16).padStart(8,"0")}.`,i.b.UNEXPECTED_ERROR);return this.featureUsages.get(e)}getReportLayoutForReportId(e){if(!this.featureReports.has(e))throw new i.d(`Unknown reportId: ${e}.`,i.b.UNEXPECTED_ERROR);return this.featureReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new i.d(`Unknown rawUsage inside ReportLayout: ${e}.`,i.b.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new c(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}getFeatureUsage(e){return Object(i.j)(this,void 0,void 0,(function*(){const t=this.getReportIdForUsage(e),s=yield this.device.receiveFeatureReport(t),i=this.getUsageInReportForUsage(e),o=[];for(let e=1;e<=Math.ceil(i.size/8);e+=1)o.push(s.getUint8(e));return o}))}setFeatureUsage(e,t){return Object(i.j)(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendFeatureReport(s,r)}))}}class v{constructor(e,t,s,i){this.name=e,this.vid=t,this.pid=s,this.id=i.sessionId;const o=new l(i);this.inputReports=o.inputReports,this.outputReports=o.outputReports,this.featureReports=o.featureReports,this.inputHandler=new a(i,o.inputReports),this.outputHandler=new u(i,o.outputReports,o.outputUsages),this.featureHandler=new g(i,o.featureReports,o.featureUsages)}}class R{constructor(e,t){this.hid=e,this.broadcastChannel=t,this.deviceAddedSubject=new i.g,this.deviceAdded=this.deviceAddedSubject,this.deviceRemovedSubject=new i.g,this.deviceRemoved=this.deviceRemovedSubject}setupListeners(){this.hid.onconnect=e=>this.onConnect(e),this.hid.ondisconnect=e=>this.onDisconnect(e),this.broadcastChannel.onmessage=()=>this.getPairedDevices()}addNewDevice(e){return Object(i.j)(this,void 0,void 0,(function*(){if(R.hasGeneratedDeviceId(e))return;R.getOrGenerateDeviceId(e);const t=new v(e.productName,e.vendorId,e.productId,e);e.opened||(yield e.open()),this.deviceAddedSubject.next(t)}))}onConnect(e){return Object(i.j)(this,void 0,void 0,(function*(){setTimeout(()=>Object(i.j)(this,void 0,void 0,(function*(){yield this.addNewDevice(e.device)})),1e3)}))}onDisconnect(e){const t=R.getOrGenerateDeviceId(e.device);this.deviceRemovedSubject.next(t)}getPairedDevices(){return Object(i.j)(this,void 0,void 0,(function*(){(yield this.hid.getDevices()).forEach(e=>Object(i.j)(this,void 0,void 0,(function*(){yield this.addNewDevice(e)})))}))}static hasGeneratedDeviceId(e){return void 0!==e.sessionId}static getOrGenerateDeviceId(e){if(!R.hasGeneratedDeviceId(e)){const t=new i.B(4).toString();return e.sessionId=t,t}return e.sessionId}}class w{constructor(e,t,s,i,o){this.usagePage=e,this.usage=t,this.valueType=s,this.reportType=i,this.reportSize=o}}class f{constructor(e){this.deviceManagement=e,this.events=new i.g,this.setupDeviceHandler()}setupDeviceHandler(){this.deviceManagement.deviceAdded.subscribe(e=>{this.events.next({event:"attach",id:e.id,vid:e.vid,pid:e.pid,name:e.name,serialNumber:e.id,descriptor:f.generateDescriptors(e)})}),this.deviceManagement.deviceRemoved.subscribe(e=>{this.events.next({event:"detach",id:e.id})}),this.deviceManagement.onHidInput.subscribe(e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:"hid-input",id:e.deviceId,usagePage:e.usagePage,usage:e.usage,value:t})}),this.deviceManagement.onGetFeatureReportResponse.subscribe(e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:"response-hid-feature",token:e.token,value:t})})}static generateDescriptors(e){let t=f.convertReportLayoutsToDescriptors(e.inputReports,"input");return t=t.concat(f.convertReportLayoutsToDescriptors(e.outputReports,"output")),t=t.concat(f.convertReportLayoutsToDescriptors(e.featureReports,"feature")),t}static convertReportLayoutsToDescriptors(e,t){const s=[];return e.forEach(e=>{e.usages.forEach((e,i)=>{const o=r.usagePageFromRaw(i);65280===o&&"output"===t||s.push(new w(o,r.usageFromRaw(i),e.absolute?"absolute":"relative",t,Math.ceil(e.size/8)))})}),s}}class b{constructor(e,t,s){this.deviceManagement=e,this.callLockManagement=t,this.logger=s,this.gnpLockAcquired=new i.g,this.callLockAcquired=new i.g,this.softphoneInFocus=new i.g,this.events=Object(i.q)(this.gnpLockAcquired.pipe(o(0)),this.callLockAcquired.pipe(o(0)),this.softphoneInFocus)}onNewSdkInput(e){if(!e.action)throw new i.d("Provided input has no action property.",i.b.UNEXPECTED_ERROR);switch(e.action){case"hid-output":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.sendOutputUsage(e.id,e.usagePage,e.usage,t);break}case"request-hid-feature":this.deviceManagement.getFeatureUsage(e.id,e.token,e.usagePage,e.usage);break;case"set-hid-feature":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.setFeatureUsage(e.id,e.usagePage,e.usage,t);break}case"request-gnp-lock":this.gnpLockAcquired.next({event:"response-gnp-lock",token:e.token}),Object(i.v)("GNP lock requested with WebHID backend. This should not happen!",this.logger,i.e.ERROR,i.r.NATIVE_CONSOLE);break;case"release-gnp-lock":break;case"request-call-lock":this.callLockManagement.tryAcquireCallLock(e.id).then(t=>{this.callLockAcquired.next({event:"response-call-lock",id:e.id,acquired:t})});break;case"release-call-lock":this.callLockManagement.releaseCallLock(e.id);break;case"set-softphone-info":this.softphoneInFocus.next({event:"softphone-in-focus",infocus:!1}),this.softphoneInFocus.complete();break;default:throw new i.d(`Provided action is not recognized - ${e.action}.`,i.b.UNEXPECTED_ERROR)}}}class I{constructor(e,t,s){this.navigatorLocks=e,this.logger=s,this.releaseGlobalLock=null,this.localLockedDevices=new Set,t.deviceRemoved.subscribe(e=>{this.localLockedDevices.has(e.id)&&this.releaseCallLock(e.id)})}tryAcquireCallLock(e){return Object(i.j)(this,void 0,void 0,(function*(){return!(yield this.checkWebLocksSupport())||(this.localLockedDevices.size>0&&!this.localLockedDevices.has(e)?(this.localLockedDevices.add(e),!0):new Promise(t=>{this.navigatorLocks.request("jabra-call-lock",{ifAvailable:!0},s=>s?(this.localLockedDevices.add(e),t(!0),new Promise(e=>{this.releaseGlobalLock=e})):(t(!1),Promise.resolve()))}))}))}releaseCallLock(e){this.localLockedDevices.delete(e),this.releaseGlobalLock&&0===this.localLockedDevices.size&&this.releaseGlobalLock()}checkWebLocksSupport(){return Object(i.j)(this,void 0,void 0,(function*(){const e=yield this.navigatorLocks.query().catch(()=>{Object(i.v)("WebLocks unsupported. The cross-tab call lock is disabled.",this.logger,i.e.WARNING)});return Boolean(e)}))}}class U{constructor(e,t,s,o){this.scanner=e,this.deviceEventHandler=t,this.sdkInputEventHandler=s,this.logger=o,this.readyEvent=new i.g,this.events=new i.s,this.events=Object(i.q)(this.readyEvent,this.deviceEventHandler.events,this.sdkInputEventHandler.events)}start(){this.readyEvent.next({event:"ready",version:null,jabraDirectInstalled:!1}),this.readyEvent.complete(),this.scanner.getPairedDevices(),this.scanner.setupListeners()}sendMessage(e){var t;null===(t=this.sdkInputEventHandler)||void 0===t||t.onNewSdkInput(e)}}function E(e){if("undefined"==typeof window)throw new i.d("WebHID is not supported outside of a browser environment.",i.b.INIT_ERROR);if(void 0===window.navigator||void 0===window.navigator.hid)throw new i.d("WebHID is not supported on this platform/browser.",i.b.INIT_ERROR);if(void 0===window.navigator.locks)throw new i.d("WebLocks is not supported on this platform/browser.",i.b.INIT_ERROR);const t=window.navigator.hid,s=window.navigator.locks,o=new BroadcastChannel(i.t.PAIRING_CHANNEL),r=new R(t,o),a=new n(r),c=new f(a),u=new b(a,new I(s,a,e));return new U(r,c,u,e)}}}]);
2
2
  //# sourceMappingURL=2.softhphone-vendor-headsets.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://SoftphoneVendorHeadsets/./node_modules/@gnaudio/jabra-js/browser-esm/init-handler-8a0a1ce2.js"],"names":["y","e","t","s","m","a","u","i","pipe","subscribe","L","D","this","devices","Map","deviceInputSubscriptions","onHidInput","onGetFeatureReportResponse","deviceAdded","deviceRemoved","has","id","set","inputHandler","inputReports","usagePageFromRaw","usage","usageFromRaw","value","next","get","delete","unsubscribe","o","r","rawUsageFrom","outputHandler","sendOutputUsage","featureHandler","setFeatureUsage","n","getFeatureUsage","F","device","inputReportDescriptors","forEach","usages","oninputreport","currentTarget","reportId","BitView","data","buffer","bigEndian","Array","from","entries","makeWebHidInputReport","bind","filter","compareReportToCachedValue","offset","size","push","getBits","Math","min","onInput","UsageReport","length","some","C","report","fullReportSize","ceil","reportSizeInBits","bitView","reportSizeInBytes","ArrayBuffer","toString","padStart","UNEXPECTED_ERROR","getUsageInformationOrThrow","createBitViewIfNeeded","absolute","byteLength","Uint8Array","setBits","O","outputReports","outputUsages","outputCacheByReportId","getReportIdForUsage","getReportLayoutForReportId","getOrCreateCacheForReportId","getUsageInReportForUsage","onOutput","writeUsage","sendReport","S","M","P","rangeIndex","name","A","buildReportLayouts","collections","inputUsages","buildUsageMap","featureReports","featureUsages","reportsOfType","items","isRange","usageMinimum","usageMaximum","isArray","reportSize","isAbsolute","reportCount","children","N","receiveFeatureReport","getUint8","sendFeatureReport","T","vid","pid","sessionId","x","hid","broadcastChannel","deviceAddedSubject","deviceRemovedSubject","onconnect","onConnect","ondisconnect","onDisconnect","onmessage","getPairedDevices","hasGeneratedDeviceId","getOrGenerateDeviceId","productName","vendorId","productId","opened","open","setTimeout","addNewDevice","getDevices","B","usagePage","valueType","reportType","H","deviceManagement","events","setupDeviceHandler","event","serialNumber","descriptor","generateDescriptors","deviceId","token","convertReportLayoutsToDescriptors","concat","z","callLockManagement","logger","gnpLockAcquired","callLockAcquired","softphoneInFocus","action","ERROR","NATIVE_CONSOLE","tryAcquireCallLock","then","acquired","releaseCallLock","infocus","complete","_","navigatorLocks","releaseGlobalLock","localLockedDevices","Set","checkWebLocksSupport","add","Promise","request","ifAvailable","resolve","query","catch","WARNING","Boolean","G","scanner","deviceEventHandler","sdkInputEventHandler","readyEvent","version","jabraDirectInstalled","setupListeners","onNewSdkInput","q","window","INIT_ERROR","navigator","locks","BroadcastChannel","PAIRING_CHANNEL"],"mappings":"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","file":"2.softhphone-vendor-headsets.js","sourcesContent":["import{o as e,O as t,n as s,m as i,c as o,t as r,a as n,b as a,d as u,S as c,W as d,_ as h,e as p,f as l,I as g,J as v,E as R,u as f,g as w,l as b,h as I,L as U,i as E,j as k}from\"./index-697967ac.js\";function m(a,u){return u?function(i){return o(u.pipe(r(1),e((function(e,i){e.subscribe(new t(i,s))}))),i.pipe(m(a)))}:n((function(e,t){return a(e,t).pipe(r(1),function(e){return i((function(){return e}))}(e))}))}function y(e,t){void 0===t&&(t=u);var s=a(e,t);return m((function(){return s}))}class L{static rawUsageFrom(e,t){return(e<<16|t)>>>0}static usagePageFromRaw(e){return e>>>16}static usageFromRaw(e){return e<<16>>>16}}class D{constructor(e){this.devices=new Map,this.deviceInputSubscriptions=new Map,this.onHidInput=new c,this.onGetFeatureReportResponse=new c;const t=new c;this.deviceAdded=t;const s=new c;this.deviceRemoved=s,e.deviceAdded.subscribe((e=>{if(!this.devices.has(e.id)){this.devices.set(e.id,e);const s=e.inputHandler.inputReports.pipe(i((t=>new d(e.id,L.usagePageFromRaw(t.usage),L.usageFromRaw(t.usage),t.value)))).subscribe((e=>this.onHidInput.next(e)));this.deviceInputSubscriptions.set(e.id,s),t.next(e)}})),e.deviceRemoved.subscribe((e=>{var t;const i=this.devices.get(e);i&&(this.devices.delete(e),null===(t=this.deviceInputSubscriptions.get(e))||void 0===t||t.unsubscribe(),this.deviceInputSubscriptions.delete(e),s.next(i))}))}sendOutputUsage(e,t,s,i){var o;const r=L.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.outputHandler.sendOutputUsage(r,i)}setFeatureUsage(e,t,s,i){var o;const r=L.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.featureHandler.setFeatureUsage(r,i)}getFeatureUsage(e,t,s,i){var o;return h(this,void 0,void 0,(function*(){const r=L.rawUsageFrom(s,i),n=yield null===(o=this.devices.get(e))||void 0===o?void 0:o.featureHandler.getFeatureUsage(r);void 0!==n&&this.onGetFeatureReportResponse.next(new p(t,n))}))}}class F{constructor(e,t){this.device=e,this.inputReportDescriptors=t;const s=new Map;this.inputReportDescriptors.forEach((e=>{e.usages.forEach(((e,t)=>{s.set(t,[0])}))}));const i=new c;this.inputReports=i,this.device.oninputreport=e=>{if(e.currentTarget!==this.device)return;const t=this.inputReportDescriptors.get(e.reportId);if(!t)return;const o=new l.BitView(e.data.buffer);o.bigEndian=!1;Array.from(t.usages.entries(),F.makeWebHidInputReport.bind(this,o)).filter((e=>F.compareReportToCachedValue(e,s))).forEach((e=>{s.set(e.usage,e.value),i.next(e)}))}}static makeWebHidInputReport(e,[t,s]){let i=s.offset,o=s.size,r=[];for(;o>0;)r.push(e.getBits(i,Math.min(o,8))),i+=8,o-=8;return r=s.onInput(r),new g.UsageReport(t,r)}static compareReportToCachedValue(e,t){const s=t.get(e.usage);if(!s)return!0;if(s.length!==e.value.length)return!0;return s.some(((t,s)=>e.value[s]!==t))}}class C{constructor(e){this.report=e}reportSizeInBits(){return this.report.fullReportSize}reportSizeInBytes(){return Math.ceil(this.reportSizeInBits()/8)}createBitViewIfNeeded(){if(!this.bitView){const e=this.reportSizeInBytes(),t=new ArrayBuffer(e);this.bitView=new l.BitView(t),this.bitView.bigEndian=!1}return this.bitView}getUsageInformationOrThrow(e){if(!this.report.usages.has(e))throw new v(`Unable to write usage (0x${e.toString(16).padStart(8,\"0\")}). It is not known by the device.`,R.UNEXPECTED_ERROR);return this.report.usages.get(e)}writeUsage(e,t){const s=this.getUsageInformationOrThrow(e);let i=this.createBitViewIfNeeded();if(!s.absolute){const e=function(e){const t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}(i.buffer);i=new l.BitView(e)}let o=s.offset,r=s.size;return t.forEach((e=>{i.setBits(o,e,r),o+=8,r-=8})),i.buffer}}class O{constructor(e,t,s){this.device=e,this.outputReports=t,this.outputUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.outputUsages.has(e))throw new v(`Unknown usagePage: 0x${e.toString(16).padStart(8,\"0\")}.`,R.UNEXPECTED_ERROR);return this.outputUsages.get(e)}getReportLayoutForReportId(e){if(!this.outputReports.has(e))throw new v(`Unknown reportId: ${e}.`,R.UNEXPECTED_ERROR);return this.outputReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new v(`Unknown rawUsage inside ReportLayout: ${e}.`,R.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new C(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}sendOutputUsage(e,t){return h(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendReport(s,r)}))}}class S{constructor(e=new Map,t=0){this.usages=e,this.fullReportSize=t}}class M{constructor(e,t,s){this.offset=e,this.size=t,this.absolute=s}onInput(e){return e}onOutput(e){return e}}class P{constructor(e,t,s,i){this.offset=e,this.size=t,this.absolute=s,this.rangeIndex=i}onInput(e){if(e.length>1)throw new v(`Usages of type ${P.name} should not hold more than 1 byte of information.`,R.UNEXPECTED_ERROR);return e[0]===this.rangeIndex?[1]:[0]}onOutput(e){if(e.length>1)throw new v(`Usages of type ${P.name} should not hold more than 1 byte of information.`,R.UNEXPECTED_ERROR);return e[0]>0?[this.rangeIndex]:e}}class A{constructor(e){const t=new Map;this.buildReportLayouts(e.collections,\"input\",t),this.inputReports=t,this.inputUsages=A.buildUsageMap(t);const s=new Map;this.buildReportLayouts(e.collections,\"output\",s),this.outputReports=s,this.outputUsages=A.buildUsageMap(s);const i=new Map;this.buildReportLayouts(e.collections,\"feature\",i),this.featureReports=i,this.featureUsages=A.buildUsageMap(i)}static buildUsageMap(e){const t=new Map;return e.forEach(((e,s)=>{e.usages.forEach(((e,i)=>{t.set(i,s)}))})),t}buildReportLayouts(e,t,s){e.forEach((e=>{var i;null===(i=A.reportsOfType(e,t))||void 0===i||i.forEach((e=>{var t;const i=e.reportId;s.has(i)||s.set(i,new S);const o=s.get(i);let r=0;null===(t=e.items)||void 0===t||t.forEach((e=>{let t=e.usages;if(e.isRange){t=[];for(let s=e.usageMinimum;s<=e.usageMaximum;s+=1)t.push(s)}let s,i=r;if(e.isRange&&e.isArray&&(s=1),t.length>0){if(t.filter((e=>o.usages.has(e))).length===t.length)return}t.forEach((t=>{let r;r=s?new P(i,e.reportSize,e.isAbsolute,s):new M(i,e.reportSize,e.isAbsolute),o.usages.set(t,r),s?s+=1:i+=e.reportSize}));const n=e.reportCount*e.reportSize;o.fullReportSize+=n,r+=n}))})),e.children&&this.buildReportLayouts(e.children,t,s)}))}static reportsOfType(e,t){if(\"input\"===t)return e.inputReports;if(\"output\"===t)return e.outputReports;if(\"feature\"===t)return e.featureReports;throw new v(`Unexpected report type: ${t}!`,R.UNEXPECTED_ERROR)}}class N{constructor(e,t,s){this.device=e,this.featureReports=t,this.featureUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.featureUsages.has(e))throw new v(`Unknown usagePage: 0x${e.toString(16).padStart(8,\"0\")}.`,R.UNEXPECTED_ERROR);return this.featureUsages.get(e)}getReportLayoutForReportId(e){if(!this.featureReports.has(e))throw new v(`Unknown reportId: ${e}.`,R.UNEXPECTED_ERROR);return this.featureReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new v(`Unknown rawUsage inside ReportLayout: ${e}.`,R.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new C(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}getFeatureUsage(e){return h(this,void 0,void 0,(function*(){const t=this.getReportIdForUsage(e),s=yield this.device.receiveFeatureReport(t),i=this.getUsageInReportForUsage(e),o=[];for(let e=1;e<=Math.ceil(i.size/8);e+=1)o.push(s.getUint8(e));return o}))}setFeatureUsage(e,t){return h(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendFeatureReport(s,r)}))}}class T{constructor(e,t,s,i){this.name=e,this.vid=t,this.pid=s,this.id=i.sessionId;const o=new A(i);this.inputReports=o.inputReports,this.outputReports=o.outputReports,this.featureReports=o.featureReports,this.inputHandler=new F(i,o.inputReports),this.outputHandler=new O(i,o.outputReports,o.outputUsages),this.featureHandler=new N(i,o.featureReports,o.featureUsages)}}class x{constructor(e,t){this.hid=e,this.broadcastChannel=t,this.deviceAddedSubject=new c,this.deviceAdded=this.deviceAddedSubject,this.deviceRemovedSubject=new c,this.deviceRemoved=this.deviceRemovedSubject}setupListeners(){this.hid.onconnect=e=>this.onConnect(e),this.hid.ondisconnect=e=>this.onDisconnect(e),this.broadcastChannel.onmessage=()=>this.getPairedDevices()}addNewDevice(e){return h(this,void 0,void 0,(function*(){if(x.hasGeneratedDeviceId(e))return;x.getOrGenerateDeviceId(e);const t=new T(e.productName,e.vendorId,e.productId,e);e.opened||(yield e.open()),this.deviceAddedSubject.next(t)}))}onConnect(e){return h(this,void 0,void 0,(function*(){setTimeout((()=>h(this,void 0,void 0,(function*(){yield this.addNewDevice(e.device)}))),1e3)}))}onDisconnect(e){const t=x.getOrGenerateDeviceId(e.device);this.deviceRemovedSubject.next(t)}getPairedDevices(){return h(this,void 0,void 0,(function*(){(yield this.hid.getDevices()).forEach((e=>h(this,void 0,void 0,(function*(){yield this.addNewDevice(e)}))))}))}static hasGeneratedDeviceId(e){return void 0!==e.sessionId}static getOrGenerateDeviceId(e){if(!x.hasGeneratedDeviceId(e)){const t=new f(4).toString();return e.sessionId=t,t}return e.sessionId}}class B{constructor(e,t,s,i,o){this.usagePage=e,this.usage=t,this.valueType=s,this.reportType=i,this.reportSize=o}}class H{constructor(e){this.deviceManagement=e,this.events=new c,this.setupDeviceHandler()}setupDeviceHandler(){this.deviceManagement.deviceAdded.subscribe((e=>{this.events.next({event:\"attach\",id:e.id,vid:e.vid,pid:e.pid,name:e.name,serialNumber:e.id,descriptor:H.generateDescriptors(e)})})),this.deviceManagement.deviceRemoved.subscribe((e=>{this.events.next({event:\"detach\",id:e.id})})),this.deviceManagement.onHidInput.subscribe((e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:\"hid-input\",id:e.deviceId,usagePage:e.usagePage,usage:e.usage,value:t})})),this.deviceManagement.onGetFeatureReportResponse.subscribe((e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:\"response-hid-feature\",token:e.token,value:t})}))}static generateDescriptors(e){let t=H.convertReportLayoutsToDescriptors(e.inputReports,\"input\");return t=t.concat(H.convertReportLayoutsToDescriptors(e.outputReports,\"output\")),t=t.concat(H.convertReportLayoutsToDescriptors(e.featureReports,\"feature\")),t}static convertReportLayoutsToDescriptors(e,t){const s=[];return e.forEach((e=>{e.usages.forEach(((e,i)=>{const o=L.usagePageFromRaw(i);65280===o&&\"output\"===t||s.push(new B(o,L.usageFromRaw(i),e.absolute?\"absolute\":\"relative\",t,Math.ceil(e.size/8)))}))})),s}}class z{constructor(e,t,s){this.deviceManagement=e,this.callLockManagement=t,this.logger=s,this.gnpLockAcquired=new c,this.callLockAcquired=new c,this.softphoneInFocus=new c,this.events=w(this.gnpLockAcquired.pipe(y(0)),this.callLockAcquired.pipe(y(0)),this.softphoneInFocus)}onNewSdkInput(e){if(!e.action)throw new v(\"Provided input has no action property.\",R.UNEXPECTED_ERROR);switch(e.action){case\"hid-output\":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.sendOutputUsage(e.id,e.usagePage,e.usage,t);break}case\"request-hid-feature\":this.deviceManagement.getFeatureUsage(e.id,e.token,e.usagePage,e.usage);break;case\"set-hid-feature\":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.setFeatureUsage(e.id,e.usagePage,e.usage,t);break}case\"request-gnp-lock\":this.gnpLockAcquired.next({event:\"response-gnp-lock\",token:e.token}),b(\"GNP lock requested with WebHID backend. This should not happen!\",this.logger,U.ERROR,I.NATIVE_CONSOLE);break;case\"release-gnp-lock\":break;case\"request-call-lock\":this.callLockManagement.tryAcquireCallLock(e.id).then((t=>{this.callLockAcquired.next({event:\"response-call-lock\",id:e.id,acquired:t})}));break;case\"release-call-lock\":this.callLockManagement.releaseCallLock(e.id);break;case\"set-softphone-info\":this.softphoneInFocus.next({event:\"softphone-in-focus\",infocus:!1}),this.softphoneInFocus.complete();break;default:throw new v(`Provided action is not recognized - ${e.action}.`,R.UNEXPECTED_ERROR)}}}class _{constructor(e,t,s){this.navigatorLocks=e,this.logger=s,this.releaseGlobalLock=null,this.localLockedDevices=new Set,t.deviceRemoved.subscribe((e=>{this.localLockedDevices.has(e.id)&&this.releaseCallLock(e.id)}))}tryAcquireCallLock(e){return h(this,void 0,void 0,(function*(){return!(yield this.checkWebLocksSupport())||(this.localLockedDevices.size>0&&!this.localLockedDevices.has(e)?(this.localLockedDevices.add(e),!0):new Promise((t=>{this.navigatorLocks.request(\"jabra-call-lock\",{ifAvailable:!0},(s=>s?(this.localLockedDevices.add(e),t(!0),new Promise((e=>{this.releaseGlobalLock=e}))):(t(!1),Promise.resolve())))})))}))}releaseCallLock(e){this.localLockedDevices.delete(e),this.releaseGlobalLock&&0===this.localLockedDevices.size&&this.releaseGlobalLock()}checkWebLocksSupport(){return h(this,void 0,void 0,(function*(){const e=yield this.navigatorLocks.query().catch((()=>{b(\"WebLocks unsupported. The cross-tab call lock is disabled.\",this.logger,U.WARNING)}));return Boolean(e)}))}}class G{constructor(e,t,s,i){this.scanner=e,this.deviceEventHandler=t,this.sdkInputEventHandler=s,this.logger=i,this.readyEvent=new c,this.events=new E,this.events=w(this.readyEvent,this.deviceEventHandler.events,this.sdkInputEventHandler.events)}start(){this.readyEvent.next({event:\"ready\",version:null,jabraDirectInstalled:!1}),this.readyEvent.complete(),this.scanner.getPairedDevices(),this.scanner.setupListeners()}sendMessage(e){var t;null===(t=this.sdkInputEventHandler)||void 0===t||t.onNewSdkInput(e)}}function q(e){if(\"undefined\"==typeof window)throw new v(\"WebHID is not supported outside of a browser environment.\",R.INIT_ERROR);if(void 0===window.navigator||void 0===window.navigator.hid)throw new v(\"WebHID is not supported on this platform/browser.\",R.INIT_ERROR);if(void 0===window.navigator.locks)throw new v(\"WebLocks is not supported on this platform/browser.\",R.INIT_ERROR);const t=window.navigator.hid,s=window.navigator.locks,i=new BroadcastChannel(k.PAIRING_CHANNEL),o=new x(t,i),r=new D(o),n=new H(r),a=new z(r,new _(s,r,e));return new G(o,n,a,e)}export{q as initHandler};\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://SoftphoneVendorHeadsets/./node_modules/@gnaudio/jabra-js/browser-esm/init-handler-beba0bba.js"],"names":["y","e","t","s","m","a","u","i","pipe","subscribe","L","D","this","devices","Map","deviceInputSubscriptions","onHidInput","onGetFeatureReportResponse","deviceAdded","deviceRemoved","has","id","set","inputHandler","inputReports","usagePageFromRaw","usage","usageFromRaw","value","next","get","delete","unsubscribe","o","r","rawUsageFrom","outputHandler","sendOutputUsage","featureHandler","setFeatureUsage","n","getFeatureUsage","F","device","inputReportDescriptors","forEach","usages","oninputreport","currentTarget","reportId","BitView","data","buffer","bigEndian","Array","from","entries","makeWebHidInputReport","bind","filter","compareReportToCachedValue","offset","size","push","getBits","Math","min","onInput","UsageReport","length","some","C","report","fullReportSize","ceil","reportSizeInBits","bitView","reportSizeInBytes","ArrayBuffer","toString","padStart","UNEXPECTED_ERROR","getUsageInformationOrThrow","createBitViewIfNeeded","absolute","byteLength","Uint8Array","setBits","O","outputReports","outputUsages","outputCacheByReportId","getReportIdForUsage","getReportLayoutForReportId","getOrCreateCacheForReportId","getUsageInReportForUsage","onOutput","writeUsage","sendReport","S","M","P","rangeIndex","name","A","buildReportLayouts","collections","inputUsages","buildUsageMap","featureReports","featureUsages","reportsOfType","items","isRange","usageMinimum","usageMaximum","isArray","reportSize","isAbsolute","reportCount","children","N","receiveFeatureReport","getUint8","sendFeatureReport","T","vid","pid","sessionId","x","hid","broadcastChannel","deviceAddedSubject","deviceRemovedSubject","onconnect","onConnect","ondisconnect","onDisconnect","onmessage","getPairedDevices","hasGeneratedDeviceId","getOrGenerateDeviceId","productName","vendorId","productId","opened","open","setTimeout","addNewDevice","getDevices","B","usagePage","valueType","reportType","H","deviceManagement","events","setupDeviceHandler","event","serialNumber","descriptor","generateDescriptors","deviceId","token","convertReportLayoutsToDescriptors","concat","z","callLockManagement","logger","gnpLockAcquired","callLockAcquired","softphoneInFocus","action","ERROR","NATIVE_CONSOLE","tryAcquireCallLock","then","acquired","releaseCallLock","infocus","complete","_","navigatorLocks","releaseGlobalLock","localLockedDevices","Set","checkWebLocksSupport","add","Promise","request","ifAvailable","resolve","query","catch","WARNING","Boolean","G","scanner","deviceEventHandler","sdkInputEventHandler","readyEvent","version","jabraDirectInstalled","setupListeners","onNewSdkInput","q","window","INIT_ERROR","navigator","locks","BroadcastChannel","PAIRING_CHANNEL"],"mappings":"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","file":"2.softhphone-vendor-headsets.js","sourcesContent":["import{o as e,O as t,n as s,m as i,c as o,t as r,a as n,b as a,d as u,S as c,W as d,_ as h,e as p,f as l,I as g,J as v,E as R,u as f,g as w,l as b,h as I,L as U,i as E,j as k}from\"./index-923cf570.js\";function m(a,u){return u?function(i){return o(u.pipe(r(1),e((function(e,i){e.subscribe(new t(i,s))}))),i.pipe(m(a)))}:n((function(e,t){return a(e,t).pipe(r(1),function(e){return i((function(){return e}))}(e))}))}function y(e,t){void 0===t&&(t=u);var s=a(e,t);return m((function(){return s}))}class L{static rawUsageFrom(e,t){return(e<<16|t)>>>0}static usagePageFromRaw(e){return e>>>16}static usageFromRaw(e){return e<<16>>>16}}class D{constructor(e){this.devices=new Map,this.deviceInputSubscriptions=new Map,this.onHidInput=new c,this.onGetFeatureReportResponse=new c;const t=new c;this.deviceAdded=t;const s=new c;this.deviceRemoved=s,e.deviceAdded.subscribe((e=>{if(!this.devices.has(e.id)){this.devices.set(e.id,e);const s=e.inputHandler.inputReports.pipe(i((t=>new d(e.id,L.usagePageFromRaw(t.usage),L.usageFromRaw(t.usage),t.value)))).subscribe((e=>this.onHidInput.next(e)));this.deviceInputSubscriptions.set(e.id,s),t.next(e)}})),e.deviceRemoved.subscribe((e=>{var t;const i=this.devices.get(e);i&&(this.devices.delete(e),null===(t=this.deviceInputSubscriptions.get(e))||void 0===t||t.unsubscribe(),this.deviceInputSubscriptions.delete(e),s.next(i))}))}sendOutputUsage(e,t,s,i){var o;const r=L.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.outputHandler.sendOutputUsage(r,i)}setFeatureUsage(e,t,s,i){var o;const r=L.rawUsageFrom(t,s);null===(o=this.devices.get(e))||void 0===o||o.featureHandler.setFeatureUsage(r,i)}getFeatureUsage(e,t,s,i){var o;return h(this,void 0,void 0,(function*(){const r=L.rawUsageFrom(s,i),n=yield null===(o=this.devices.get(e))||void 0===o?void 0:o.featureHandler.getFeatureUsage(r);void 0!==n&&this.onGetFeatureReportResponse.next(new p(t,n))}))}}class F{constructor(e,t){this.device=e,this.inputReportDescriptors=t;const s=new Map;this.inputReportDescriptors.forEach((e=>{e.usages.forEach(((e,t)=>{s.set(t,[0])}))}));const i=new c;this.inputReports=i,this.device.oninputreport=e=>{if(e.currentTarget!==this.device)return;const t=this.inputReportDescriptors.get(e.reportId);if(!t)return;const o=new l.BitView(e.data.buffer);o.bigEndian=!1;Array.from(t.usages.entries(),F.makeWebHidInputReport.bind(this,o)).filter((e=>F.compareReportToCachedValue(e,s))).forEach((e=>{s.set(e.usage,e.value),i.next(e)}))}}static makeWebHidInputReport(e,[t,s]){let i=s.offset,o=s.size,r=[];for(;o>0;)r.push(e.getBits(i,Math.min(o,8))),i+=8,o-=8;return r=s.onInput(r),new g.UsageReport(t,r)}static compareReportToCachedValue(e,t){const s=t.get(e.usage);if(!s)return!0;if(s.length!==e.value.length)return!0;return s.some(((t,s)=>e.value[s]!==t))}}class C{constructor(e){this.report=e}reportSizeInBits(){return this.report.fullReportSize}reportSizeInBytes(){return Math.ceil(this.reportSizeInBits()/8)}createBitViewIfNeeded(){if(!this.bitView){const e=this.reportSizeInBytes(),t=new ArrayBuffer(e);this.bitView=new l.BitView(t),this.bitView.bigEndian=!1}return this.bitView}getUsageInformationOrThrow(e){if(!this.report.usages.has(e))throw new v(`Unable to write usage (0x${e.toString(16).padStart(8,\"0\")}). It is not known by the device.`,R.UNEXPECTED_ERROR);return this.report.usages.get(e)}writeUsage(e,t){const s=this.getUsageInformationOrThrow(e);let i=this.createBitViewIfNeeded();if(!s.absolute){const e=function(e){const t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(new Uint8Array(e)),t}(i.buffer);i=new l.BitView(e)}let o=s.offset,r=s.size;return t.forEach((e=>{i.setBits(o,e,r),o+=8,r-=8})),i.buffer}}class O{constructor(e,t,s){this.device=e,this.outputReports=t,this.outputUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.outputUsages.has(e))throw new v(`Unknown usagePage: 0x${e.toString(16).padStart(8,\"0\")}.`,R.UNEXPECTED_ERROR);return this.outputUsages.get(e)}getReportLayoutForReportId(e){if(!this.outputReports.has(e))throw new v(`Unknown reportId: ${e}.`,R.UNEXPECTED_ERROR);return this.outputReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new v(`Unknown rawUsage inside ReportLayout: ${e}.`,R.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new C(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}sendOutputUsage(e,t){return h(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendReport(s,r)}))}}class S{constructor(e=new Map,t=0){this.usages=e,this.fullReportSize=t}}class M{constructor(e,t,s){this.offset=e,this.size=t,this.absolute=s}onInput(e){return e}onOutput(e){return e}}class P{constructor(e,t,s,i){this.offset=e,this.size=t,this.absolute=s,this.rangeIndex=i}onInput(e){if(e.length>1)throw new v(`Usages of type ${P.name} should not hold more than 1 byte of information.`,R.UNEXPECTED_ERROR);return e[0]===this.rangeIndex?[1]:[0]}onOutput(e){if(e.length>1)throw new v(`Usages of type ${P.name} should not hold more than 1 byte of information.`,R.UNEXPECTED_ERROR);return e[0]>0?[this.rangeIndex]:e}}class A{constructor(e){const t=new Map;this.buildReportLayouts(e.collections,\"input\",t),this.inputReports=t,this.inputUsages=A.buildUsageMap(t);const s=new Map;this.buildReportLayouts(e.collections,\"output\",s),this.outputReports=s,this.outputUsages=A.buildUsageMap(s);const i=new Map;this.buildReportLayouts(e.collections,\"feature\",i),this.featureReports=i,this.featureUsages=A.buildUsageMap(i)}static buildUsageMap(e){const t=new Map;return e.forEach(((e,s)=>{e.usages.forEach(((e,i)=>{t.set(i,s)}))})),t}buildReportLayouts(e,t,s){e.forEach((e=>{var i;null===(i=A.reportsOfType(e,t))||void 0===i||i.forEach((e=>{var t;const i=e.reportId;s.has(i)||s.set(i,new S);const o=s.get(i);let r=0;null===(t=e.items)||void 0===t||t.forEach((e=>{let t=e.usages;if(e.isRange){t=[];for(let s=e.usageMinimum;s<=e.usageMaximum;s+=1)t.push(s)}let s,i=r;if(e.isRange&&e.isArray&&(s=1),t.length>0){if(t.filter((e=>o.usages.has(e))).length===t.length)return}t.forEach((t=>{let r;r=s?new P(i,e.reportSize,e.isAbsolute,s):new M(i,e.reportSize,e.isAbsolute),o.usages.set(t,r),s?s+=1:i+=e.reportSize}));const n=e.reportCount*e.reportSize;o.fullReportSize+=n,r+=n}))})),e.children&&this.buildReportLayouts(e.children,t,s)}))}static reportsOfType(e,t){if(\"input\"===t)return e.inputReports;if(\"output\"===t)return e.outputReports;if(\"feature\"===t)return e.featureReports;throw new v(`Unexpected report type: ${t}!`,R.UNEXPECTED_ERROR)}}class N{constructor(e,t,s){this.device=e,this.featureReports=t,this.featureUsages=s,this.outputCacheByReportId=new Map}getReportIdForUsage(e){if(!this.featureUsages.has(e))throw new v(`Unknown usagePage: 0x${e.toString(16).padStart(8,\"0\")}.`,R.UNEXPECTED_ERROR);return this.featureUsages.get(e)}getReportLayoutForReportId(e){if(!this.featureReports.has(e))throw new v(`Unknown reportId: ${e}.`,R.UNEXPECTED_ERROR);return this.featureReports.get(e)}getUsageInReportForUsage(e){const t=this.getReportIdForUsage(e),s=this.getReportLayoutForReportId(t);if(!s.usages.has(e))throw new v(`Unknown rawUsage inside ReportLayout: ${e}.`,R.UNEXPECTED_ERROR);return s.usages.get(e)}getOrCreateCacheForReportId(e){if(!this.outputCacheByReportId.has(e)){const t=this.getReportLayoutForReportId(e),s=new C(t);this.outputCacheByReportId.set(e,s)}return this.outputCacheByReportId.get(e)}getFeatureUsage(e){return h(this,void 0,void 0,(function*(){const t=this.getReportIdForUsage(e),s=yield this.device.receiveFeatureReport(t),i=this.getUsageInReportForUsage(e),o=[];for(let e=1;e<=Math.ceil(i.size/8);e+=1)o.push(s.getUint8(e));return o}))}setFeatureUsage(e,t){return h(this,void 0,void 0,(function*(){const s=this.getReportIdForUsage(e),i=this.getOrCreateCacheForReportId(s),o=this.getUsageInReportForUsage(e).onOutput(t),r=i.writeUsage(e,o);yield this.device.sendFeatureReport(s,r)}))}}class T{constructor(e,t,s,i){this.name=e,this.vid=t,this.pid=s,this.id=i.sessionId;const o=new A(i);this.inputReports=o.inputReports,this.outputReports=o.outputReports,this.featureReports=o.featureReports,this.inputHandler=new F(i,o.inputReports),this.outputHandler=new O(i,o.outputReports,o.outputUsages),this.featureHandler=new N(i,o.featureReports,o.featureUsages)}}class x{constructor(e,t){this.hid=e,this.broadcastChannel=t,this.deviceAddedSubject=new c,this.deviceAdded=this.deviceAddedSubject,this.deviceRemovedSubject=new c,this.deviceRemoved=this.deviceRemovedSubject}setupListeners(){this.hid.onconnect=e=>this.onConnect(e),this.hid.ondisconnect=e=>this.onDisconnect(e),this.broadcastChannel.onmessage=()=>this.getPairedDevices()}addNewDevice(e){return h(this,void 0,void 0,(function*(){if(x.hasGeneratedDeviceId(e))return;x.getOrGenerateDeviceId(e);const t=new T(e.productName,e.vendorId,e.productId,e);e.opened||(yield e.open()),this.deviceAddedSubject.next(t)}))}onConnect(e){return h(this,void 0,void 0,(function*(){setTimeout((()=>h(this,void 0,void 0,(function*(){yield this.addNewDevice(e.device)}))),1e3)}))}onDisconnect(e){const t=x.getOrGenerateDeviceId(e.device);this.deviceRemovedSubject.next(t)}getPairedDevices(){return h(this,void 0,void 0,(function*(){(yield this.hid.getDevices()).forEach((e=>h(this,void 0,void 0,(function*(){yield this.addNewDevice(e)}))))}))}static hasGeneratedDeviceId(e){return void 0!==e.sessionId}static getOrGenerateDeviceId(e){if(!x.hasGeneratedDeviceId(e)){const t=new f(4).toString();return e.sessionId=t,t}return e.sessionId}}class B{constructor(e,t,s,i,o){this.usagePage=e,this.usage=t,this.valueType=s,this.reportType=i,this.reportSize=o}}class H{constructor(e){this.deviceManagement=e,this.events=new c,this.setupDeviceHandler()}setupDeviceHandler(){this.deviceManagement.deviceAdded.subscribe((e=>{this.events.next({event:\"attach\",id:e.id,vid:e.vid,pid:e.pid,name:e.name,serialNumber:e.id,descriptor:H.generateDescriptors(e)})})),this.deviceManagement.deviceRemoved.subscribe((e=>{this.events.next({event:\"detach\",id:e.id})})),this.deviceManagement.onHidInput.subscribe((e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:\"hid-input\",id:e.deviceId,usagePage:e.usagePage,usage:e.usage,value:t})})),this.deviceManagement.onGetFeatureReportResponse.subscribe((e=>{const t=1===e.value.length?e.value[0]:e.value;this.events.next({event:\"response-hid-feature\",token:e.token,value:t})}))}static generateDescriptors(e){let t=H.convertReportLayoutsToDescriptors(e.inputReports,\"input\");return t=t.concat(H.convertReportLayoutsToDescriptors(e.outputReports,\"output\")),t=t.concat(H.convertReportLayoutsToDescriptors(e.featureReports,\"feature\")),t}static convertReportLayoutsToDescriptors(e,t){const s=[];return e.forEach((e=>{e.usages.forEach(((e,i)=>{const o=L.usagePageFromRaw(i);65280===o&&\"output\"===t||s.push(new B(o,L.usageFromRaw(i),e.absolute?\"absolute\":\"relative\",t,Math.ceil(e.size/8)))}))})),s}}class z{constructor(e,t,s){this.deviceManagement=e,this.callLockManagement=t,this.logger=s,this.gnpLockAcquired=new c,this.callLockAcquired=new c,this.softphoneInFocus=new c,this.events=w(this.gnpLockAcquired.pipe(y(0)),this.callLockAcquired.pipe(y(0)),this.softphoneInFocus)}onNewSdkInput(e){if(!e.action)throw new v(\"Provided input has no action property.\",R.UNEXPECTED_ERROR);switch(e.action){case\"hid-output\":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.sendOutputUsage(e.id,e.usagePage,e.usage,t);break}case\"request-hid-feature\":this.deviceManagement.getFeatureUsage(e.id,e.token,e.usagePage,e.usage);break;case\"set-hid-feature\":{const t=Array.isArray(e.value)?e.value:[e.value];this.deviceManagement.setFeatureUsage(e.id,e.usagePage,e.usage,t);break}case\"request-gnp-lock\":this.gnpLockAcquired.next({event:\"response-gnp-lock\",token:e.token}),b(\"GNP lock requested with WebHID backend. This should not happen!\",this.logger,U.ERROR,I.NATIVE_CONSOLE);break;case\"release-gnp-lock\":break;case\"request-call-lock\":this.callLockManagement.tryAcquireCallLock(e.id).then((t=>{this.callLockAcquired.next({event:\"response-call-lock\",id:e.id,acquired:t})}));break;case\"release-call-lock\":this.callLockManagement.releaseCallLock(e.id);break;case\"set-softphone-info\":this.softphoneInFocus.next({event:\"softphone-in-focus\",infocus:!1}),this.softphoneInFocus.complete();break;default:throw new v(`Provided action is not recognized - ${e.action}.`,R.UNEXPECTED_ERROR)}}}class _{constructor(e,t,s){this.navigatorLocks=e,this.logger=s,this.releaseGlobalLock=null,this.localLockedDevices=new Set,t.deviceRemoved.subscribe((e=>{this.localLockedDevices.has(e.id)&&this.releaseCallLock(e.id)}))}tryAcquireCallLock(e){return h(this,void 0,void 0,(function*(){return!(yield this.checkWebLocksSupport())||(this.localLockedDevices.size>0&&!this.localLockedDevices.has(e)?(this.localLockedDevices.add(e),!0):new Promise((t=>{this.navigatorLocks.request(\"jabra-call-lock\",{ifAvailable:!0},(s=>s?(this.localLockedDevices.add(e),t(!0),new Promise((e=>{this.releaseGlobalLock=e}))):(t(!1),Promise.resolve())))})))}))}releaseCallLock(e){this.localLockedDevices.delete(e),this.releaseGlobalLock&&0===this.localLockedDevices.size&&this.releaseGlobalLock()}checkWebLocksSupport(){return h(this,void 0,void 0,(function*(){const e=yield this.navigatorLocks.query().catch((()=>{b(\"WebLocks unsupported. The cross-tab call lock is disabled.\",this.logger,U.WARNING)}));return Boolean(e)}))}}class G{constructor(e,t,s,i){this.scanner=e,this.deviceEventHandler=t,this.sdkInputEventHandler=s,this.logger=i,this.readyEvent=new c,this.events=new E,this.events=w(this.readyEvent,this.deviceEventHandler.events,this.sdkInputEventHandler.events)}start(){this.readyEvent.next({event:\"ready\",version:null,jabraDirectInstalled:!1}),this.readyEvent.complete(),this.scanner.getPairedDevices(),this.scanner.setupListeners()}sendMessage(e){var t;null===(t=this.sdkInputEventHandler)||void 0===t||t.onNewSdkInput(e)}}function q(e){if(\"undefined\"==typeof window)throw new v(\"WebHID is not supported outside of a browser environment.\",R.INIT_ERROR);if(void 0===window.navigator||void 0===window.navigator.hid)throw new v(\"WebHID is not supported on this platform/browser.\",R.INIT_ERROR);if(void 0===window.navigator.locks)throw new v(\"WebLocks is not supported on this platform/browser.\",R.INIT_ERROR);const t=window.navigator.hid,s=window.navigator.locks,i=new BroadcastChannel(k.PAIRING_CHANNEL),o=new x(t,i),r=new D(o),n=new H(r),a=new z(r,new _(s,r,e));return new G(o,n,a,e)}export{q as initHandler};\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (window.webpackJsonpSoftphoneVendorHeadsets=window.webpackJsonpSoftphoneVendorHeadsets||[]).push([[3],{21:function(e,t,n){"use strict";n.r(t),n.d(t,"WebHidTransport",(function(){return i}));var s=n(0);class i{constructor(e,t,n){this.webHidHandler=e,this.logger=t,this.recorder=n,this.events=new s.g,this.consoleAppEvent=this.events,this.webHidConnected=!1,this.context=s.h.WEB_HID}connect(){return this.webHidConnected?Promise.reject(new s.d("Already connected",s.b.UNEXPECTED_ERROR)):(this.webHidHandler.events.subscribe(e=>{var t;let n=e;this.recorder&&(n=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(n)),this.events.next(n)}),this.webHidHandler.start(),this.webHidConnected=!0,Promise.resolve())}writeAction(e){var t;if(!this.webHidConnected){const e="WebHID is uninitialized.";throw Object(s.v)(e,this.logger,s.e.ERROR),new s.d(e,s.b.INIT_ERROR)}null===(t=this.recorder)||void 0===t||t.recordOutput(e),this.webHidHandler.sendMessage(e)}}}}]);
1
+ (window.webpackJsonpSoftphoneVendorHeadsets=window.webpackJsonpSoftphoneVendorHeadsets||[]).push([[3],{20:function(e,t,n){"use strict";n.r(t),n.d(t,"WebHidTransport",(function(){return i}));var s=n(0);class i{constructor(e,t,n){this.webHidHandler=e,this.logger=t,this.recorder=n,this.events=new s.g,this.consoleAppEvent=this.events,this.webHidConnected=!1,this.context=s.h.WEB_HID}connect(){return this.webHidConnected?Promise.reject(new s.d("Already connected",s.b.UNEXPECTED_ERROR)):(this.webHidHandler.events.subscribe(e=>{var t;let n=e;this.recorder&&(n=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(n)),this.events.next(n)}),this.webHidHandler.start(),this.webHidConnected=!0,Promise.resolve())}writeAction(e){var t;if(!this.webHidConnected){const e="WebHID is uninitialized.";throw Object(s.v)(e,this.logger,s.e.ERROR),new s.d(e,s.b.INIT_ERROR)}null===(t=this.recorder)||void 0===t||t.recordOutput(e),this.webHidHandler.sendMessage(e)}}}}]);
2
2
  //# sourceMappingURL=3.softhphone-vendor-headsets.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://SoftphoneVendorHeadsets/./node_modules/@gnaudio/jabra-js/browser-esm/web-hid-transport-3d30e3bd.js"],"names":["o","s","i","r","this","webHidHandler","logger","recorder","events","consoleAppEvent","webHidConnected","context","WEB_HID","Promise","reject","UNEXPECTED_ERROR","subscribe","e","t","recordInput","next","start","resolve","ERROR","INIT_ERROR","recordOutput","sendMessage"],"mappings":"uIAAA,kEAA2E,MAAMA,EAAE,YAAYC,EAAEC,EAAEC,GAAGC,KAAKC,cAAcJ,EAAEG,KAAKE,OAAOJ,EAAEE,KAAKG,SAASJ,EAAEC,KAAKI,OAAO,IAAI,IAAEJ,KAAKK,gBAAgBL,KAAKI,OAAOJ,KAAKM,iBAAgB,EAAGN,KAAKO,QAAQ,IAAEC,QAAQ,UAAU,OAAOR,KAAKM,gBAAgBG,QAAQC,OAAO,IAAI,IAAE,oBAAoB,IAAEC,oBAAoBX,KAAKC,cAAcG,OAAOQ,UAAWC,IAAI,IAAIC,EAAE,IAAIjB,EAAEgB,EAAEb,KAAKG,WAAWN,EAAE,QAAQiB,EAAEd,KAAKG,gBAAW,IAASW,OAAE,EAAOA,EAAEC,YAAYlB,IAAIG,KAAKI,OAAOY,KAAKnB,KAAMG,KAAKC,cAAcgB,QAAQjB,KAAKM,iBAAgB,EAAGG,QAAQS,WAAW,YAAYL,GAAG,IAAIC,EAAE,IAAId,KAAKM,gBAAgB,CAAC,MAAMO,EAAE,2BAA2B,MAAM,YAAEA,EAAEb,KAAKE,OAAO,IAAEiB,OAAO,IAAI,IAAEN,EAAE,IAAEO,YAAY,QAAQN,EAAEd,KAAKG,gBAAW,IAASW,GAAGA,EAAEO,aAAaR,GAAGb,KAAKC,cAAcqB,YAAYT","file":"3.softhphone-vendor-headsets.js","sourcesContent":["import{S as e,T as t,J as s,E as i,l as r,L as n}from\"./index-697967ac.js\";class o{constructor(s,i,r){this.webHidHandler=s,this.logger=i,this.recorder=r,this.events=new e,this.consoleAppEvent=this.events,this.webHidConnected=!1,this.context=t.WEB_HID}connect(){return this.webHidConnected?Promise.reject(new s(\"Already connected\",i.UNEXPECTED_ERROR)):(this.webHidHandler.events.subscribe((e=>{var t;let s=e;this.recorder&&(s=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(s)),this.events.next(s)})),this.webHidHandler.start(),this.webHidConnected=!0,Promise.resolve())}writeAction(e){var t;if(!this.webHidConnected){const e=\"WebHID is uninitialized.\";throw r(e,this.logger,n.ERROR),new s(e,i.INIT_ERROR)}null===(t=this.recorder)||void 0===t||t.recordOutput(e),this.webHidHandler.sendMessage(e)}}export{o as WebHidTransport};\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://SoftphoneVendorHeadsets/./node_modules/@gnaudio/jabra-js/browser-esm/web-hid-transport-58a9d844.js"],"names":["o","s","i","r","this","webHidHandler","logger","recorder","events","consoleAppEvent","webHidConnected","context","WEB_HID","Promise","reject","UNEXPECTED_ERROR","subscribe","e","t","recordInput","next","start","resolve","ERROR","INIT_ERROR","recordOutput","sendMessage"],"mappings":"uIAAA,kEAA2E,MAAMA,EAAE,YAAYC,EAAEC,EAAEC,GAAGC,KAAKC,cAAcJ,EAAEG,KAAKE,OAAOJ,EAAEE,KAAKG,SAASJ,EAAEC,KAAKI,OAAO,IAAI,IAAEJ,KAAKK,gBAAgBL,KAAKI,OAAOJ,KAAKM,iBAAgB,EAAGN,KAAKO,QAAQ,IAAEC,QAAQ,UAAU,OAAOR,KAAKM,gBAAgBG,QAAQC,OAAO,IAAI,IAAE,oBAAoB,IAAEC,oBAAoBX,KAAKC,cAAcG,OAAOQ,UAAWC,IAAI,IAAIC,EAAE,IAAIjB,EAAEgB,EAAEb,KAAKG,WAAWN,EAAE,QAAQiB,EAAEd,KAAKG,gBAAW,IAASW,OAAE,EAAOA,EAAEC,YAAYlB,IAAIG,KAAKI,OAAOY,KAAKnB,KAAMG,KAAKC,cAAcgB,QAAQjB,KAAKM,iBAAgB,EAAGG,QAAQS,WAAW,YAAYL,GAAG,IAAIC,EAAE,IAAId,KAAKM,gBAAgB,CAAC,MAAMO,EAAE,2BAA2B,MAAM,YAAEA,EAAEb,KAAKE,OAAO,IAAEiB,OAAO,IAAI,IAAEN,EAAE,IAAEO,YAAY,QAAQN,EAAEd,KAAKG,gBAAW,IAASW,GAAGA,EAAEO,aAAaR,GAAGb,KAAKC,cAAcqB,YAAYT","file":"3.softhphone-vendor-headsets.js","sourcesContent":["import{S as e,T as t,J as s,E as i,l as r,L as n}from\"./index-923cf570.js\";class o{constructor(s,i,r){this.webHidHandler=s,this.logger=i,this.recorder=r,this.events=new e,this.consoleAppEvent=this.events,this.webHidConnected=!1,this.context=t.WEB_HID}connect(){return this.webHidConnected?Promise.reject(new s(\"Already connected\",i.UNEXPECTED_ERROR)):(this.webHidHandler.events.subscribe((e=>{var t;let s=e;this.recorder&&(s=null===(t=this.recorder)||void 0===t?void 0:t.recordInput(s)),this.events.next(s)})),this.webHidHandler.start(),this.webHidConnected=!0,Promise.resolve())}writeAction(e){var t;if(!this.webHidConnected){const e=\"WebHID is uninitialized.\";throw r(e,this.logger,n.ERROR),new s(e,i.INIT_ERROR)}null===(t=this.recorder)||void 0===t||t.recordOutput(e),this.webHidHandler.sendMessage(e)}}export{o as WebHidTransport};\n"],"sourceRoot":""}