@memberjunction/ng-conversations 5.43.0 → 5.44.0

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 (351) hide show
  1. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +0 -1
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +56 -52
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  5. package/dist/lib/components/artifact/artifact-share-modal.component.js +37 -41
  6. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  7. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  8. package/dist/lib/components/collection/collection-form-modal.component.js +10 -14
  9. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  10. package/dist/lib/components/collection/collection-share-modal.component.js +41 -45
  11. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  12. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  13. package/dist/lib/components/collection/collection-view.component.js +22 -36
  14. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  15. package/dist/lib/components/collection/collections-full-view.component.d.ts +4 -0
  16. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  17. package/dist/lib/components/collection/collections-full-view.component.js +134 -166
  18. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  19. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +73 -8
  20. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  21. package/dist/lib/components/conversation/conversation-chat-area.component.js +487 -123
  22. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  23. package/dist/lib/components/conversation/pinned-messages-panel.component.js +6 -9
  24. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  25. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  26. package/dist/lib/components/library/library-full-view.component.js +20 -24
  27. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  28. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  29. package/dist/lib/components/members/members-modal.component.js +10 -11
  30. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  31. package/dist/lib/components/mention/mention-dropdown.component.js +49 -28
  32. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  33. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
  34. package/dist/lib/components/mention/mention-editor.component.js +24 -10
  35. package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
  36. package/dist/lib/components/message/message-input-box.component.d.ts +11 -16
  37. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  38. package/dist/lib/components/message/message-input-box.component.js +52 -46
  39. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  40. package/dist/lib/components/message/message-input.component.d.ts +83 -18
  41. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  42. package/dist/lib/components/message/message-input.component.js +238 -151
  43. package/dist/lib/components/message/message-input.component.js.map +1 -1
  44. package/dist/lib/components/message/message-item.component.d.ts +10 -1
  45. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  46. package/dist/lib/components/message/message-item.component.js +67 -15
  47. package/dist/lib/components/message/message-item.component.js.map +1 -1
  48. package/dist/lib/components/message/message-list.component.js +6 -9
  49. package/dist/lib/components/message/message-list.component.js.map +1 -1
  50. package/dist/lib/components/overlay/chat-overlay.component.d.ts +3 -0
  51. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
  52. package/dist/lib/components/overlay/chat-overlay.component.js +9 -4
  53. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  54. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +45 -0
  55. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -1
  56. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +10 -0
  57. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -1
  58. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +46 -0
  59. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -0
  60. package/dist/lib/components/realtime/channels/client-context-channel.js +174 -0
  61. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -0
  62. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts +123 -0
  63. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts.map +1 -0
  64. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +397 -0
  65. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -0
  66. package/dist/lib/components/realtime/media/media-channel-state.d.ts +103 -0
  67. package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -0
  68. package/dist/lib/components/realtime/media/media-channel-state.js +143 -0
  69. package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -0
  70. package/dist/lib/components/realtime/media/media-channel-tools.d.ts +24 -0
  71. package/dist/lib/components/realtime/media/media-channel-tools.d.ts.map +1 -0
  72. package/dist/lib/components/realtime/media/media-channel-tools.js +107 -0
  73. package/dist/lib/components/realtime/media/media-channel-tools.js.map +1 -0
  74. package/dist/lib/components/realtime/media/media-channel.d.ts +89 -0
  75. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -0
  76. package/dist/lib/components/realtime/media/media-channel.js +253 -0
  77. package/dist/lib/components/realtime/media/media-channel.js.map +1 -0
  78. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +141 -0
  79. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -0
  80. package/dist/lib/components/realtime/media/realtime-media-surface.component.js +574 -0
  81. package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -0
  82. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +59 -14
  83. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
  84. package/dist/lib/components/realtime/realtime-activity-rail.component.js +277 -74
  85. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  86. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +28 -27
  87. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  88. package/dist/lib/components/realtime/realtime-agent-banner.component.js +144 -143
  89. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  90. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +12 -0
  91. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
  92. package/dist/lib/components/realtime/realtime-agent-picker.component.js +105 -43
  93. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
  94. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +2 -2
  95. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
  96. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
  97. package/dist/lib/components/realtime/realtime-composer.component.d.ts +41 -7
  98. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  99. package/dist/lib/components/realtime/realtime-composer.component.js +216 -102
  100. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  101. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +0 -2
  102. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
  103. package/dist/lib/components/realtime/realtime-delegation-card.component.js +67 -71
  104. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  105. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +364 -44
  106. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  107. package/dist/lib/components/realtime/realtime-session-overlay.component.js +839 -153
  108. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  109. package/dist/lib/components/realtime/realtime-session-state.d.ts +5 -5
  110. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
  111. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
  112. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts +70 -0
  113. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts.map +1 -0
  114. package/dist/lib/components/realtime/realtime-surface-tab-style.js +115 -0
  115. package/dist/lib/components/realtime/realtime-surface-tab-style.js.map +1 -0
  116. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +55 -57
  117. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  118. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +165 -143
  119. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  120. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +80 -71
  121. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  122. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +83 -113
  123. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  124. package/dist/lib/components/realtime/realtime-ui-config.d.ts +270 -0
  125. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -0
  126. package/dist/lib/components/realtime/realtime-ui-config.js +212 -0
  127. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -0
  128. package/dist/lib/components/search/search-panel.component.d.ts +2 -0
  129. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  130. package/dist/lib/components/search/search-panel.component.js +92 -101
  131. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  132. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  133. package/dist/lib/components/share/share-modal.component.js +10 -11
  134. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  135. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  136. package/dist/lib/components/shared/user-picker.component.js +12 -15
  137. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  138. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +5 -0
  139. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  140. package/dist/lib/components/workspace/conversation-workspace.component.js +18 -7
  141. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  142. package/dist/lib/conversations.module.d.ts +29 -26
  143. package/dist/lib/conversations.module.d.ts.map +1 -1
  144. package/dist/lib/conversations.module.js +37 -6
  145. package/dist/lib/conversations.module.js.map +1 -1
  146. package/dist/lib/models/conversation-state.model.d.ts +6 -3
  147. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  148. package/dist/lib/models/conversation-state.model.js.map +1 -1
  149. package/dist/lib/services/conversation-agent.service.d.ts +2 -2
  150. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  151. package/dist/lib/services/conversation-agent.service.js +6 -2
  152. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  153. package/dist/lib/services/mention-autocomplete.service.d.ts +17 -1
  154. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  155. package/dist/lib/services/mention-autocomplete.service.js +58 -2
  156. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  157. package/dist/lib/services/realtime-audio-recorder.d.ts +143 -0
  158. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -0
  159. package/dist/lib/services/realtime-audio-recorder.js +379 -0
  160. package/dist/lib/services/realtime-audio-recorder.js.map +1 -0
  161. package/dist/lib/services/realtime-pcm-wav.d.ts +75 -0
  162. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -0
  163. package/dist/lib/services/realtime-pcm-wav.js +205 -0
  164. package/dist/lib/services/realtime-pcm-wav.js.map +1 -0
  165. package/dist/lib/services/realtime-session-review.service.d.ts +28 -1
  166. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
  167. package/dist/lib/services/realtime-session-review.service.js +12 -3
  168. package/dist/lib/services/realtime-session-review.service.js.map +1 -1
  169. package/dist/lib/services/realtime-session.service.d.ts +210 -20
  170. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  171. package/dist/lib/services/realtime-session.service.js +452 -21
  172. package/dist/lib/services/realtime-session.service.js.map +1 -1
  173. package/dist/lib/services/realtime-sessions-adapter.js +1 -1
  174. package/dist/lib/services/realtime-sessions-adapter.js.map +1 -1
  175. package/dist/lib/services/ui-command-handler.service.d.ts +7 -2
  176. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  177. package/dist/lib/services/ui-command-handler.service.js +6 -2
  178. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  179. package/dist/lib/utils/plan-mode-preference.d.ts +62 -0
  180. package/dist/lib/utils/plan-mode-preference.d.ts.map +1 -0
  181. package/dist/lib/utils/plan-mode-preference.js +130 -0
  182. package/dist/lib/utils/plan-mode-preference.js.map +1 -0
  183. package/dist/public-api.d.ts +6 -0
  184. package/dist/public-api.d.ts.map +1 -1
  185. package/dist/public-api.js +8 -0
  186. package/dist/public-api.js.map +1 -1
  187. package/package.json +28 -26
  188. package/dist/__tests__/attachment-badge.test.d.ts +0 -2
  189. package/dist/__tests__/attachment-badge.test.d.ts.map +0 -1
  190. package/dist/__tests__/attachment-badge.test.js +0 -66
  191. package/dist/__tests__/attachment-badge.test.js.map +0 -1
  192. package/dist/__tests__/channel-optional-surface.test.d.ts +0 -2
  193. package/dist/__tests__/channel-optional-surface.test.d.ts.map +0 -1
  194. package/dist/__tests__/channel-optional-surface.test.js +0 -53
  195. package/dist/__tests__/channel-optional-surface.test.js.map +0 -1
  196. package/dist/__tests__/chat-events.test.d.ts +0 -14
  197. package/dist/__tests__/chat-events.test.d.ts.map +0 -1
  198. package/dist/__tests__/chat-events.test.js +0 -109
  199. package/dist/__tests__/chat-events.test.js.map +0 -1
  200. package/dist/__tests__/collections-full-view.test.d.ts +0 -2
  201. package/dist/__tests__/collections-full-view.test.d.ts.map +0 -1
  202. package/dist/__tests__/collections-full-view.test.js +0 -225
  203. package/dist/__tests__/collections-full-view.test.js.map +0 -1
  204. package/dist/__tests__/conversation-cache.test.d.ts +0 -2
  205. package/dist/__tests__/conversation-cache.test.d.ts.map +0 -1
  206. package/dist/__tests__/conversation-cache.test.js +0 -233
  207. package/dist/__tests__/conversation-cache.test.js.map +0 -1
  208. package/dist/__tests__/conversation-naming.test.d.ts +0 -2
  209. package/dist/__tests__/conversation-naming.test.d.ts.map +0 -1
  210. package/dist/__tests__/conversation-naming.test.js +0 -110
  211. package/dist/__tests__/conversation-naming.test.js.map +0 -1
  212. package/dist/__tests__/delegation-result-parser.test.d.ts +0 -2
  213. package/dist/__tests__/delegation-result-parser.test.d.ts.map +0 -1
  214. package/dist/__tests__/delegation-result-parser.test.js +0 -107
  215. package/dist/__tests__/delegation-result-parser.test.js.map +0 -1
  216. package/dist/__tests__/distinct-artifacts.test.d.ts +0 -2
  217. package/dist/__tests__/distinct-artifacts.test.d.ts.map +0 -1
  218. package/dist/__tests__/distinct-artifacts.test.js +0 -56
  219. package/dist/__tests__/distinct-artifacts.test.js.map +0 -1
  220. package/dist/__tests__/event-wiring.test.d.ts +0 -15
  221. package/dist/__tests__/event-wiring.test.d.ts.map +0 -1
  222. package/dist/__tests__/event-wiring.test.js +0 -100
  223. package/dist/__tests__/event-wiring.test.js.map +0 -1
  224. package/dist/__tests__/index.test.d.ts +0 -2
  225. package/dist/__tests__/index.test.d.ts.map +0 -1
  226. package/dist/__tests__/index.test.js +0 -7
  227. package/dist/__tests__/index.test.js.map +0 -1
  228. package/dist/__tests__/narration-template.test.d.ts +0 -2
  229. package/dist/__tests__/narration-template.test.d.ts.map +0 -1
  230. package/dist/__tests__/narration-template.test.js +0 -76
  231. package/dist/__tests__/narration-template.test.js.map +0 -1
  232. package/dist/__tests__/notification-model.test.d.ts +0 -2
  233. package/dist/__tests__/notification-model.test.d.ts.map +0 -1
  234. package/dist/__tests__/notification-model.test.js +0 -68
  235. package/dist/__tests__/notification-model.test.js.map +0 -1
  236. package/dist/__tests__/realtime-agent-picker-models.test.d.ts +0 -2
  237. package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +0 -1
  238. package/dist/__tests__/realtime-agent-picker-models.test.js +0 -49
  239. package/dist/__tests__/realtime-agent-picker-models.test.js.map +0 -1
  240. package/dist/__tests__/realtime-audio-visuals.test.d.ts +0 -2
  241. package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +0 -1
  242. package/dist/__tests__/realtime-audio-visuals.test.js +0 -123
  243. package/dist/__tests__/realtime-audio-visuals.test.js.map +0 -1
  244. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +0 -2
  245. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +0 -1
  246. package/dist/__tests__/realtime-delegation-card-cancel.test.js +0 -48
  247. package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +0 -1
  248. package/dist/__tests__/realtime-disclosure.test.d.ts +0 -2
  249. package/dist/__tests__/realtime-disclosure.test.d.ts.map +0 -1
  250. package/dist/__tests__/realtime-disclosure.test.js +0 -164
  251. package/dist/__tests__/realtime-disclosure.test.js.map +0 -1
  252. package/dist/__tests__/realtime-pairing.test.d.ts +0 -2
  253. package/dist/__tests__/realtime-pairing.test.d.ts.map +0 -1
  254. package/dist/__tests__/realtime-pairing.test.js +0 -207
  255. package/dist/__tests__/realtime-pairing.test.js.map +0 -1
  256. package/dist/__tests__/realtime-review-lifecycle.test.d.ts +0 -2
  257. package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +0 -1
  258. package/dist/__tests__/realtime-review-lifecycle.test.js +0 -154
  259. package/dist/__tests__/realtime-review-lifecycle.test.js.map +0 -1
  260. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +0 -2
  261. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +0 -1
  262. package/dist/__tests__/realtime-session-cancel-usage.test.js +0 -230
  263. package/dist/__tests__/realtime-session-cancel-usage.test.js.map +0 -1
  264. package/dist/__tests__/realtime-session-channels.test.d.ts +0 -2
  265. package/dist/__tests__/realtime-session-channels.test.d.ts.map +0 -1
  266. package/dist/__tests__/realtime-session-channels.test.js +0 -252
  267. package/dist/__tests__/realtime-session-channels.test.js.map +0 -1
  268. package/dist/__tests__/realtime-session-client-tools.test.d.ts +0 -2
  269. package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +0 -1
  270. package/dist/__tests__/realtime-session-client-tools.test.js +0 -103
  271. package/dist/__tests__/realtime-session-client-tools.test.js.map +0 -1
  272. package/dist/__tests__/realtime-session-minimized.test.d.ts +0 -2
  273. package/dist/__tests__/realtime-session-minimized.test.d.ts.map +0 -1
  274. package/dist/__tests__/realtime-session-minimized.test.js +0 -32
  275. package/dist/__tests__/realtime-session-minimized.test.js.map +0 -1
  276. package/dist/__tests__/realtime-session-mint.test.d.ts +0 -2
  277. package/dist/__tests__/realtime-session-mint.test.d.ts.map +0 -1
  278. package/dist/__tests__/realtime-session-mint.test.js +0 -69
  279. package/dist/__tests__/realtime-session-mint.test.js.map +0 -1
  280. package/dist/__tests__/realtime-session-policy.test.d.ts +0 -2
  281. package/dist/__tests__/realtime-session-policy.test.d.ts.map +0 -1
  282. package/dist/__tests__/realtime-session-policy.test.js +0 -303
  283. package/dist/__tests__/realtime-session-policy.test.js.map +0 -1
  284. package/dist/__tests__/realtime-session-review.service.test.d.ts +0 -2
  285. package/dist/__tests__/realtime-session-review.service.test.d.ts.map +0 -1
  286. package/dist/__tests__/realtime-session-review.service.test.js +0 -743
  287. package/dist/__tests__/realtime-session-review.service.test.js.map +0 -1
  288. package/dist/__tests__/realtime-session-state.test.d.ts +0 -2
  289. package/dist/__tests__/realtime-session-state.test.d.ts.map +0 -1
  290. package/dist/__tests__/realtime-session-state.test.js +0 -83
  291. package/dist/__tests__/realtime-session-state.test.js.map +0 -1
  292. package/dist/__tests__/realtime-session-timeline-card.test.d.ts +0 -2
  293. package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +0 -1
  294. package/dist/__tests__/realtime-session-timeline-card.test.js +0 -106
  295. package/dist/__tests__/realtime-session-timeline-card.test.js.map +0 -1
  296. package/dist/__tests__/realtime-session-timeline.test.d.ts +0 -2
  297. package/dist/__tests__/realtime-session-timeline.test.d.ts.map +0 -1
  298. package/dist/__tests__/realtime-session-timeline.test.js +0 -142
  299. package/dist/__tests__/realtime-session-timeline.test.js.map +0 -1
  300. package/dist/__tests__/realtime-sessions-adapter.test.d.ts +0 -19
  301. package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +0 -1
  302. package/dist/__tests__/realtime-sessions-adapter.test.js +0 -188
  303. package/dist/__tests__/realtime-sessions-adapter.test.js.map +0 -1
  304. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +0 -2
  305. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +0 -1
  306. package/dist/__tests__/realtime-surface-panel-prefs.test.js +0 -100
  307. package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +0 -1
  308. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +0 -2
  309. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +0 -1
  310. package/dist/__tests__/realtime-surface-tabs-model.test.js +0 -193
  311. package/dist/__tests__/realtime-surface-tabs-model.test.js.map +0 -1
  312. package/dist/__tests__/remote-browser-audio-player.test.d.ts +0 -2
  313. package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +0 -1
  314. package/dist/__tests__/remote-browser-audio-player.test.js +0 -137
  315. package/dist/__tests__/remote-browser-audio-player.test.js.map +0 -1
  316. package/dist/__tests__/remote-browser-channel.test.d.ts +0 -2
  317. package/dist/__tests__/remote-browser-channel.test.d.ts.map +0 -1
  318. package/dist/__tests__/remote-browser-channel.test.js +0 -585
  319. package/dist/__tests__/remote-browser-channel.test.js.map +0 -1
  320. package/dist/__tests__/search-service.test.d.ts +0 -2
  321. package/dist/__tests__/search-service.test.d.ts.map +0 -1
  322. package/dist/__tests__/search-service.test.js +0 -114
  323. package/dist/__tests__/search-service.test.js.map +0 -1
  324. package/dist/__tests__/slot-defaults.test.d.ts +0 -24
  325. package/dist/__tests__/slot-defaults.test.d.ts.map +0 -1
  326. package/dist/__tests__/slot-defaults.test.js +0 -63
  327. package/dist/__tests__/slot-defaults.test.js.map +0 -1
  328. package/dist/__tests__/toast-service.test.d.ts +0 -2
  329. package/dist/__tests__/toast-service.test.d.ts.map +0 -1
  330. package/dist/__tests__/toast-service.test.js +0 -143
  331. package/dist/__tests__/toast-service.test.js.map +0 -1
  332. package/dist/__tests__/user-authorization.test.d.ts +0 -2
  333. package/dist/__tests__/user-authorization.test.d.ts.map +0 -1
  334. package/dist/__tests__/user-authorization.test.js +0 -97
  335. package/dist/__tests__/user-authorization.test.js.map +0 -1
  336. package/dist/__tests__/voice-session-narration.test.d.ts +0 -2
  337. package/dist/__tests__/voice-session-narration.test.d.ts.map +0 -1
  338. package/dist/__tests__/voice-session-narration.test.js +0 -609
  339. package/dist/__tests__/voice-session-narration.test.js.map +0 -1
  340. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +0 -2
  341. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +0 -1
  342. package/dist/__tests__/whiteboard-artifact-viewer.test.js +0 -101
  343. package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +0 -1
  344. package/dist/__tests__/whiteboard-channel.test.d.ts +0 -2
  345. package/dist/__tests__/whiteboard-channel.test.d.ts.map +0 -1
  346. package/dist/__tests__/whiteboard-channel.test.js +0 -260
  347. package/dist/__tests__/whiteboard-channel.test.js.map +0 -1
  348. package/dist/__tests__/whiteboard-restore-state.test.d.ts +0 -2
  349. package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +0 -1
  350. package/dist/__tests__/whiteboard-restore-state.test.js +0 -108
  351. package/dist/__tests__/whiteboard-restore-state.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime-surface-tabs-model.test.js","sourceRoot":"","sources":["../../src/__tests__/realtime-surface-tabs-model.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect, beforeEach, vi } from 'vitest';\nimport { RealtimeSurfaceTabsModel, ShouldRemoveReviewWhiteboardTab } from '../lib/components/realtime/realtime-surface-tabs.model';\nimport type { ParsedDelegationArtifact } from '../lib/services/delegation-result-parser';\n\nconst weather: ParsedDelegationArtifact = { ArtifactID: 'a-1', ArtifactVersionID: 'av-1', Name: 'Weather Report' };\nconst summary: ParsedDelegationArtifact = { ArtifactID: 'a-2', ArtifactVersionID: 'av-2', Name: 'Q3 Summary' };\n\ndescribe('RealtimeSurfaceTabsModel', () => {\n let model: RealtimeSurfaceTabsModel;\n\n beforeEach(() => {\n model = new RealtimeSurfaceTabsModel();\n });\n\n it('starts with the Activity tab, focused', () => {\n expect(model.Tabs).toHaveLength(1);\n expect(model.Tabs[0]).toMatchObject({ Key: 'activity', Title: 'Activity', Kind: 'activity' });\n expect(model.ActiveKey).toBe('activity');\n expect(model.ActiveTab.Kind).toBe('activity');\n expect(model.FlashKey).toBeNull();\n });\n\n describe('OpenArtifactTab', () => {\n it('adds + flashes a new artifact tab WITHOUT stealing focus (glow, don\\'t grab) and emits Changed$', () => {\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n const tab = model.OpenArtifactTab(weather);\n\n expect(model.Tabs).toHaveLength(2);\n expect(tab).toMatchObject({\n Key: 'artifact:av-1',\n Title: 'Weather Report',\n Icon: 'fa-solid fa-file-lines',\n Kind: 'artifact'\n });\n expect(tab.Data?.Artifact).toEqual(weather);\n expect(model.ActiveKey).toBe('activity'); // a finished artifact never steals the screen\n expect(model.FlashKey).toBe('artifact:av-1');\n expect(model.IsUnseen('artifact:av-1')).toBe(true); // persistent glow until visited\n expect(changed).toHaveBeenCalledTimes(1);\n });\n\n it('can add WITH focus (the user-asked path) — focused tabs are never marked unseen', () => {\n model.OpenArtifactTab(weather, true);\n expect(model.ActiveKey).toBe('artifact:av-1');\n expect(model.FlashKey).toBe('artifact:av-1');\n expect(model.IsUnseen('artifact:av-1')).toBe(false);\n });\n\n it('history carryover (markUnseen=false) adds without glow or focus', () => {\n model.OpenArtifactTab(weather, false, false);\n expect(model.ActiveKey).toBe('activity');\n expect(model.IsUnseen('artifact:av-1')).toBe(false);\n });\n\n it('visiting an unseen tab clears its glow', () => {\n model.OpenArtifactTab(weather);\n expect(model.IsUnseen('artifact:av-1')).toBe(true);\n model.Focus('artifact:av-1');\n expect(model.IsUnseen('artifact:av-1')).toBe(false);\n });\n\n it('dedupes by artifact version: re-opening with focus focuses the existing tab without re-flashing', () => {\n model.OpenArtifactTab(weather, true);\n model.ClearFlash();\n model.Focus('activity');\n\n const tab = model.OpenArtifactTab(weather, true);\n\n expect(model.Tabs).toHaveLength(2);\n expect(tab.Key).toBe('artifact:av-1');\n expect(model.ActiveKey).toBe('artifact:av-1');\n expect(model.FlashKey).toBeNull();\n });\n\n it('orders the strip channels… | artifacts (arrival order)… | Activity pinned LAST', () => {\n model.RegisterChannelTab({ Key: 'whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard' });\n model.OpenArtifactTab(weather);\n model.OpenArtifactTab(summary);\n\n expect(model.Tabs.map(t => t.Key)).toEqual(['whiteboard', 'artifact:av-1', 'artifact:av-2', 'activity']);\n });\n\n it('replaces the Tabs array immutably', () => {\n const before = model.Tabs;\n model.OpenArtifactTab(weather);\n expect(model.Tabs).not.toBe(before);\n });\n });\n\n describe('RegisterChannelTab', () => {\n it('adds a channel tab LEADING the strip (before Activity) without stealing focus by default', () => {\n model.RegisterChannelTab({ Key: 'whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard' });\n expect(model.Tabs.map(t => t.Key)).toEqual(['whiteboard', 'activity']);\n expect(model.Tabs[0].Kind).toBe('channel');\n expect(model.Tabs[0].Data?.Content).toBeUndefined();\n expect(model.ActiveKey).toBe('activity');\n });\n\n it('focuses when Focus is set', () => {\n model.RegisterChannelTab({ Key: 'whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard', Focus: true });\n expect(model.ActiveKey).toBe('whiteboard');\n });\n\n it('re-registering the same key updates the tab in place (placeholder → real surface)', () => {\n model.RegisterChannelTab({ Key: 'whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard' });\n model.RegisterChannelTab({ Key: 'whiteboard', Title: 'Whiteboard · live', Icon: 'fa-solid fa-chalkboard' });\n\n expect(model.Tabs).toHaveLength(2);\n expect(model.Tabs[0].Title).toBe('Whiteboard · live');\n });\n });\n\n describe('Focus / ClearFlash', () => {\n it('Focus switches the active tab and emits', () => {\n model.OpenArtifactTab(weather, false);\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n model.Focus('artifact:av-1');\n\n expect(model.ActiveKey).toBe('artifact:av-1');\n expect(changed).toHaveBeenCalledTimes(1);\n });\n\n it('Focus is a no-op for unknown keys and the already-active key', () => {\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n model.Focus('nope');\n model.Focus('activity');\n\n expect(model.ActiveKey).toBe('activity');\n expect(changed).not.toHaveBeenCalled();\n });\n\n it('ClearFlash clears and emits once; subsequent calls are no-ops', () => {\n model.OpenArtifactTab(weather);\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n model.ClearFlash();\n model.ClearFlash();\n\n expect(model.FlashKey).toBeNull();\n expect(changed).toHaveBeenCalledTimes(1);\n });\n\n it('ActiveTab falls back to the Activity tab for a stale ActiveKey', () => {\n model.ActiveKey = 'gone';\n expect(model.ActiveTab.Key).toBe('activity');\n });\n });\n\n describe('RemoveTab', () => {\n it('removes a channel tab and emits Changed$ once', () => {\n model.RegisterChannelTab({ Key: 'Whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard' });\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n expect(model.RemoveTab('Whiteboard')).toBe(true);\n\n expect(model.Tabs.some(t => t.Key === 'Whiteboard')).toBe(false);\n expect(model.Tabs).toHaveLength(1); // Activity remains\n expect(changed).toHaveBeenCalledTimes(1);\n });\n\n it('falls focus back to Activity when the removed tab was active', () => {\n model.RegisterChannelTab({ Key: 'Whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard', Focus: true });\n expect(model.ActiveKey).toBe('Whiteboard');\n\n model.RemoveTab('Whiteboard');\n\n expect(model.ActiveKey).toBe('activity');\n expect(model.ActiveTab.Kind).toBe('activity');\n });\n\n it('keeps the current focus when a NON-active tab is removed', () => {\n model.OpenArtifactTab(weather, true); // focused (user-asked path)\n model.RegisterChannelTab({ Key: 'Whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard' });\n\n model.RemoveTab('Whiteboard');\n\n expect(model.ActiveKey).toBe('artifact:av-1');\n });\n\n it('cleans a pending flash on the removed tab', () => {\n model.OpenArtifactTab(weather); // flashes artifact:av-1\n expect(model.FlashKey).toBe('artifact:av-1');\n\n model.RemoveTab('artifact:av-1');\n\n expect(model.FlashKey).toBeNull();\n });\n\n it('the Activity tab is IRREMOVABLE (no-op, no emission)', () => {\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n expect(model.RemoveTab('activity')).toBe(false);\n\n expect(model.Tabs).toHaveLength(1);\n expect(changed).not.toHaveBeenCalled();\n });\n\n it('an unknown key is a no-op (false, no emission)', () => {\n const changed = vi.fn();\n model.Changed$.subscribe(changed);\n\n expect(model.RemoveTab('nope')).toBe(false);\n expect(changed).not.toHaveBeenCalled();\n });\n\n it('a removed channel tab can be re-registered cleanly afterward', () => {\n model.RegisterChannelTab({ Key: 'Whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard' });\n model.RemoveTab('Whiteboard');\n\n model.RegisterChannelTab({ Key: 'Whiteboard', Title: 'Whiteboard', Icon: 'fa-solid fa-chalkboard', Focus: true });\n\n expect(model.Tabs.some(t => t.Key === 'Whiteboard')).toBe(true);\n expect(model.ActiveKey).toBe('Whiteboard');\n });\n });\n});\n\ndescribe('ShouldRemoveReviewWhiteboardTab (review→live continuation edge)', () => {\n const whiteboard = { ChannelName: 'Whiteboard' };\n const notes = { ChannelName: 'Notes' };\n\n it('removes when live is active, a review board tab exists, and the live set lacks a Whiteboard channel', () => {\n expect(ShouldRemoveReviewWhiteboardTab(true, true, [notes])).toBe(true);\n expect(ShouldRemoveReviewWhiteboardTab(true, true, [])).toBe(true);\n });\n\n it('keeps the tab when the live channel set HAS a Whiteboard channel (it upgrades in place)', () => {\n expect(ShouldRemoveReviewWhiteboardTab(true, true, [whiteboard])).toBe(false);\n expect(ShouldRemoveReviewWhiteboardTab(true, true, [notes, { ChannelName: ' whiteboard ' }])).toBe(false);\n });\n\n it('never removes when no live session is active (initial / teardown [] emissions)', () => {\n expect(ShouldRemoveReviewWhiteboardTab(false, true, [])).toBe(false);\n });\n\n it('never removes when review mode registered no whiteboard tab', () => {\n expect(ShouldRemoveReviewWhiteboardTab(true, false, [])).toBe(false);\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=remote-browser-audio-player.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-browser-audio-player.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/remote-browser-audio-player.test.ts"],"names":[],"mappings":""}
@@ -1,137 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from 'vitest';
2
- import { RemoteBrowserAudioPlayer, } from '../lib/components/realtime/remote-browser/remote-browser-audio-player';
3
- /**
4
- * A fake {@link IAudioSink} recording every append (decoded back to its base64 form for easy assertion)
5
- * plus the open/close/mute lifecycle — the seam that lets the player's queue/seq/drain logic be unit-tested
6
- * with no browser media stack.
7
- */
8
- class FakeAudioSink {
9
- OpenCount = 0;
10
- CloseCount = 0;
11
- Appended = [];
12
- MutedStates = [];
13
- open = false;
14
- /** When true, the next {@link Open} rejects (to exercise the open-failure path). */
15
- FailNextOpen = false;
16
- /** When true, every {@link AppendChunk} rejects (to exercise the drop-on-append path). */
17
- FailAppends = false;
18
- get IsOpen() {
19
- return this.open;
20
- }
21
- async Open() {
22
- this.OpenCount++;
23
- if (this.FailNextOpen) {
24
- this.FailNextOpen = false;
25
- throw new Error('open failed');
26
- }
27
- this.open = true;
28
- }
29
- async AppendChunk(bytes) {
30
- if (this.FailAppends) {
31
- throw new Error('append failed');
32
- }
33
- this.Appended.push(Buffer.from(bytes).toString('base64'));
34
- }
35
- SetMuted(muted) {
36
- this.MutedStates.push(muted);
37
- }
38
- Close() {
39
- this.CloseCount++;
40
- this.open = false;
41
- }
42
- }
43
- /** Builds a webm-opus chunk input with the given base64 payload + seq. */
44
- function chunk(dataBase64, seq, codec = 'webm-opus') {
45
- return { dataBase64, codec, sampleRate: 48000, channels: 2, seq };
46
- }
47
- describe('RemoteBrowserAudioPlayer', () => {
48
- let sink;
49
- let player;
50
- beforeEach(() => {
51
- sink = new FakeAudioSink();
52
- player = new RemoteBrowserAudioPlayer(sink);
53
- vi.spyOn(console, 'warn').mockImplementation(() => undefined);
54
- });
55
- it('opens the sink lazily and appends decoded chunk bytes in order', async () => {
56
- player.Enqueue(chunk('QUJD', 0)); // "ABC"
57
- player.Enqueue(chunk('REVG', 1)); // "DEF"
58
- // Let the async open + drain settle.
59
- await new Promise((r) => setTimeout(r, 0));
60
- expect(sink.OpenCount).toBe(1);
61
- expect(sink.Appended).toEqual(['QUJD', 'REVG']);
62
- });
63
- it('drops chunks whose codec is not webm-opus (never appends them)', async () => {
64
- player.Enqueue(chunk('QUJD', 0, 'pcm16'));
65
- await new Promise((r) => setTimeout(r, 0));
66
- expect(sink.OpenCount).toBe(0);
67
- expect(sink.Appended).toEqual([]);
68
- });
69
- it('ignores empty / malformed chunks', async () => {
70
- player.Enqueue(chunk('', 0));
71
- await new Promise((r) => setTimeout(r, 0));
72
- expect(sink.Appended).toEqual([]);
73
- });
74
- it('warns on a sequence gap but still plays the chunk', async () => {
75
- player.Enqueue(chunk('QUJD', 0));
76
- player.Enqueue(chunk('REVG', 5)); // gap: 1..4 missing
77
- await new Promise((r) => setTimeout(r, 0));
78
- expect(console.warn).toHaveBeenCalledWith(expect.stringContaining('sequence gap'));
79
- expect(sink.Appended).toEqual(['QUJD', 'REVG']);
80
- });
81
- it('bounds the queue (drops oldest) so a burst beyond capacity never grows unbounded', () => {
82
- // Make appends hang by never opening: enqueue many before any drain completes.
83
- // Use a sink that stays closed so nothing drains and the queue fills.
84
- const stuckSink = new FakeAudioSink();
85
- stuckSink.Open = async () => { };
86
- const stuckPlayer = new RemoteBrowserAudioPlayer(stuckSink);
87
- for (let i = 0; i < 200; i++) {
88
- stuckPlayer.Enqueue(chunk('QUJD', i));
89
- }
90
- // The internal cap is 64; the queue must not exceed it.
91
- expect(stuckPlayer.QueueDepth).toBeLessThanOrEqual(64);
92
- });
93
- it('continues after a single append failure (drops the chunk, keeps draining)', async () => {
94
- sink.FailAppends = true;
95
- player.Enqueue(chunk('QUJD', 0));
96
- await new Promise((r) => setTimeout(r, 0));
97
- // Open happened, the append was attempted + dropped, nothing recorded.
98
- expect(sink.OpenCount).toBe(1);
99
- expect(sink.Appended).toEqual([]);
100
- });
101
- it('recovers when the sink open fails, then retries on the next chunk', async () => {
102
- sink.FailNextOpen = true;
103
- player.Enqueue(chunk('QUJD', 0));
104
- await new Promise((r) => setTimeout(r, 0));
105
- expect(sink.OpenCount).toBe(1);
106
- expect(sink.Appended).toEqual([]);
107
- // Next chunk retries the open (which now succeeds) and plays both queued chunks.
108
- player.Enqueue(chunk('REVG', 1));
109
- await new Promise((r) => setTimeout(r, 0));
110
- expect(sink.OpenCount).toBe(2);
111
- expect(sink.Appended).toEqual(['QUJD', 'REVG']);
112
- });
113
- it('applies muted state to the sink once open (toggle before the first chunk)', async () => {
114
- player.SetMuted(true); // toggled before any audio — latched
115
- player.Enqueue(chunk('QUJD', 0));
116
- await new Promise((r) => setTimeout(r, 0));
117
- // The latched muted state is applied at open time.
118
- expect(sink.MutedStates).toContain(true);
119
- });
120
- it('relays a later mute toggle to the open sink', async () => {
121
- player.Enqueue(chunk('QUJD', 0));
122
- await new Promise((r) => setTimeout(r, 0));
123
- player.SetMuted(true);
124
- expect(sink.MutedStates[sink.MutedStates.length - 1]).toBe(true);
125
- });
126
- it('Dispose clears the queue and closes the sink; later chunks are ignored', async () => {
127
- player.Enqueue(chunk('QUJD', 0));
128
- await new Promise((r) => setTimeout(r, 0));
129
- player.Dispose();
130
- expect(sink.CloseCount).toBe(1);
131
- player.Enqueue(chunk('REVG', 1));
132
- await new Promise((r) => setTimeout(r, 0));
133
- // No new appends after disposal.
134
- expect(sink.Appended).toEqual(['QUJD']);
135
- });
136
- });
137
- //# sourceMappingURL=remote-browser-audio-player.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-browser-audio-player.test.js","sourceRoot":"","sources":["../../src/__tests__/remote-browser-audio-player.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect, beforeEach, vi } from 'vitest';\nimport {\n IAudioSink,\n RemoteBrowserAudioChunkInput,\n RemoteBrowserAudioPlayer,\n} from '../lib/components/realtime/remote-browser/remote-browser-audio-player';\n\n/**\n * A fake {@link IAudioSink} recording every append (decoded back to its base64 form for easy assertion)\n * plus the open/close/mute lifecycle — the seam that lets the player's queue/seq/drain logic be unit-tested\n * with no browser media stack.\n */\nclass FakeAudioSink implements IAudioSink {\n public OpenCount = 0;\n public CloseCount = 0;\n public Appended: string[] = [];\n public MutedStates: boolean[] = [];\n private open = false;\n /** When true, the next {@link Open} rejects (to exercise the open-failure path). */\n public FailNextOpen = false;\n /** When true, every {@link AppendChunk} rejects (to exercise the drop-on-append path). */\n public FailAppends = false;\n\n public get IsOpen(): boolean {\n return this.open;\n }\n\n public async Open(): Promise<void> {\n this.OpenCount++;\n if (this.FailNextOpen) {\n this.FailNextOpen = false;\n throw new Error('open failed');\n }\n this.open = true;\n }\n\n public async AppendChunk(bytes: Uint8Array): Promise<void> {\n if (this.FailAppends) {\n throw new Error('append failed');\n }\n this.Appended.push(Buffer.from(bytes).toString('base64'));\n }\n\n public SetMuted(muted: boolean): void {\n this.MutedStates.push(muted);\n }\n\n public Close(): void {\n this.CloseCount++;\n this.open = false;\n }\n}\n\n/** Builds a webm-opus chunk input with the given base64 payload + seq. */\nfunction chunk(dataBase64: string, seq: number, codec = 'webm-opus'): RemoteBrowserAudioChunkInput {\n return { dataBase64, codec, sampleRate: 48000, channels: 2, seq };\n}\n\ndescribe('RemoteBrowserAudioPlayer', () => {\n let sink: FakeAudioSink;\n let player: RemoteBrowserAudioPlayer;\n\n beforeEach(() => {\n sink = new FakeAudioSink();\n player = new RemoteBrowserAudioPlayer(sink);\n vi.spyOn(console, 'warn').mockImplementation(() => undefined);\n });\n\n it('opens the sink lazily and appends decoded chunk bytes in order', async () => {\n player.Enqueue(chunk('QUJD', 0)); // \"ABC\"\n player.Enqueue(chunk('REVG', 1)); // \"DEF\"\n // Let the async open + drain settle.\n await new Promise((r) => setTimeout(r, 0));\n\n expect(sink.OpenCount).toBe(1);\n expect(sink.Appended).toEqual(['QUJD', 'REVG']);\n });\n\n it('drops chunks whose codec is not webm-opus (never appends them)', async () => {\n player.Enqueue(chunk('QUJD', 0, 'pcm16'));\n await new Promise((r) => setTimeout(r, 0));\n expect(sink.OpenCount).toBe(0);\n expect(sink.Appended).toEqual([]);\n });\n\n it('ignores empty / malformed chunks', async () => {\n player.Enqueue(chunk('', 0));\n await new Promise((r) => setTimeout(r, 0));\n expect(sink.Appended).toEqual([]);\n });\n\n it('warns on a sequence gap but still plays the chunk', async () => {\n player.Enqueue(chunk('QUJD', 0));\n player.Enqueue(chunk('REVG', 5)); // gap: 1..4 missing\n await new Promise((r) => setTimeout(r, 0));\n expect(console.warn).toHaveBeenCalledWith(expect.stringContaining('sequence gap'));\n expect(sink.Appended).toEqual(['QUJD', 'REVG']);\n });\n\n it('bounds the queue (drops oldest) so a burst beyond capacity never grows unbounded', () => {\n // Make appends hang by never opening: enqueue many before any drain completes.\n // Use a sink that stays closed so nothing drains and the queue fills.\n const stuckSink = new FakeAudioSink();\n stuckSink.Open = async () => { /* never marks open → drain never runs */ };\n const stuckPlayer = new RemoteBrowserAudioPlayer(stuckSink);\n for (let i = 0; i < 200; i++) {\n stuckPlayer.Enqueue(chunk('QUJD', i));\n }\n // The internal cap is 64; the queue must not exceed it.\n expect(stuckPlayer.QueueDepth).toBeLessThanOrEqual(64);\n });\n\n it('continues after a single append failure (drops the chunk, keeps draining)', async () => {\n sink.FailAppends = true;\n player.Enqueue(chunk('QUJD', 0));\n await new Promise((r) => setTimeout(r, 0));\n // Open happened, the append was attempted + dropped, nothing recorded.\n expect(sink.OpenCount).toBe(1);\n expect(sink.Appended).toEqual([]);\n });\n\n it('recovers when the sink open fails, then retries on the next chunk', async () => {\n sink.FailNextOpen = true;\n player.Enqueue(chunk('QUJD', 0));\n await new Promise((r) => setTimeout(r, 0));\n expect(sink.OpenCount).toBe(1);\n expect(sink.Appended).toEqual([]);\n\n // Next chunk retries the open (which now succeeds) and plays both queued chunks.\n player.Enqueue(chunk('REVG', 1));\n await new Promise((r) => setTimeout(r, 0));\n expect(sink.OpenCount).toBe(2);\n expect(sink.Appended).toEqual(['QUJD', 'REVG']);\n });\n\n it('applies muted state to the sink once open (toggle before the first chunk)', async () => {\n player.SetMuted(true); // toggled before any audio — latched\n player.Enqueue(chunk('QUJD', 0));\n await new Promise((r) => setTimeout(r, 0));\n // The latched muted state is applied at open time.\n expect(sink.MutedStates).toContain(true);\n });\n\n it('relays a later mute toggle to the open sink', async () => {\n player.Enqueue(chunk('QUJD', 0));\n await new Promise((r) => setTimeout(r, 0));\n player.SetMuted(true);\n expect(sink.MutedStates[sink.MutedStates.length - 1]).toBe(true);\n });\n\n it('Dispose clears the queue and closes the sink; later chunks are ignored', async () => {\n player.Enqueue(chunk('QUJD', 0));\n await new Promise((r) => setTimeout(r, 0));\n player.Dispose();\n expect(sink.CloseCount).toBe(1);\n\n player.Enqueue(chunk('REVG', 1));\n await new Promise((r) => setTimeout(r, 0));\n // No new appends after disposal.\n expect(sink.Appended).toEqual(['QUJD']);\n });\n});\n"]}
@@ -1,2 +0,0 @@
1
- import '@angular/compiler';
2
- //# sourceMappingURL=remote-browser-channel.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-browser-channel.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/remote-browser-channel.test.ts"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,CAAC"}