@memberjunction/ng-conversations 5.40.2 → 5.41.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.
- package/README.md +57 -0
- package/dist/__tests__/channel-optional-surface.test.d.ts +2 -0
- package/dist/__tests__/channel-optional-surface.test.d.ts.map +1 -0
- package/dist/__tests__/channel-optional-surface.test.js +53 -0
- package/dist/__tests__/channel-optional-surface.test.js.map +1 -0
- package/dist/__tests__/chat-events.test.d.ts +14 -0
- package/dist/__tests__/chat-events.test.d.ts.map +1 -0
- package/dist/__tests__/chat-events.test.js +109 -0
- package/dist/__tests__/chat-events.test.js.map +1 -0
- package/dist/__tests__/conversation-naming.test.d.ts +2 -0
- package/dist/__tests__/conversation-naming.test.d.ts.map +1 -0
- package/dist/__tests__/conversation-naming.test.js +110 -0
- package/dist/__tests__/conversation-naming.test.js.map +1 -0
- package/dist/__tests__/delegation-result-parser.test.d.ts +2 -0
- package/dist/__tests__/delegation-result-parser.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-result-parser.test.js +107 -0
- package/dist/__tests__/delegation-result-parser.test.js.map +1 -0
- package/dist/__tests__/event-wiring.test.d.ts +15 -0
- package/dist/__tests__/event-wiring.test.d.ts.map +1 -0
- package/dist/__tests__/event-wiring.test.js +100 -0
- package/dist/__tests__/event-wiring.test.js.map +1 -0
- package/dist/__tests__/narration-template.test.d.ts +2 -0
- package/dist/__tests__/narration-template.test.d.ts.map +1 -0
- package/dist/__tests__/narration-template.test.js +76 -0
- package/dist/__tests__/narration-template.test.js.map +1 -0
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts +2 -0
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-agent-picker-models.test.js +49 -0
- package/dist/__tests__/realtime-agent-picker-models.test.js.map +1 -0
- package/dist/__tests__/realtime-audio-visuals.test.d.ts +2 -0
- package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-audio-visuals.test.js +123 -0
- package/dist/__tests__/realtime-audio-visuals.test.js.map +1 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +2 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.js +48 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +1 -0
- package/dist/__tests__/realtime-disclosure.test.d.ts +2 -0
- package/dist/__tests__/realtime-disclosure.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-disclosure.test.js +164 -0
- package/dist/__tests__/realtime-disclosure.test.js.map +1 -0
- package/dist/__tests__/realtime-pairing.test.d.ts +2 -0
- package/dist/__tests__/realtime-pairing.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-pairing.test.js +207 -0
- package/dist/__tests__/realtime-pairing.test.js.map +1 -0
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts +2 -0
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-review-lifecycle.test.js +154 -0
- package/dist/__tests__/realtime-review-lifecycle.test.js.map +1 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.js +230 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.js.map +1 -0
- package/dist/__tests__/realtime-session-channels.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-channels.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-channels.test.js +252 -0
- package/dist/__tests__/realtime-session-channels.test.js.map +1 -0
- package/dist/__tests__/realtime-session-client-tools.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-client-tools.test.js +103 -0
- package/dist/__tests__/realtime-session-client-tools.test.js.map +1 -0
- package/dist/__tests__/realtime-session-minimized.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-minimized.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-minimized.test.js +32 -0
- package/dist/__tests__/realtime-session-minimized.test.js.map +1 -0
- package/dist/__tests__/realtime-session-mint.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-mint.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-mint.test.js +69 -0
- package/dist/__tests__/realtime-session-mint.test.js.map +1 -0
- package/dist/__tests__/realtime-session-policy.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-policy.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-policy.test.js +303 -0
- package/dist/__tests__/realtime-session-policy.test.js.map +1 -0
- package/dist/__tests__/realtime-session-review.service.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-review.service.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-review.service.test.js +743 -0
- package/dist/__tests__/realtime-session-review.service.test.js.map +1 -0
- package/dist/__tests__/realtime-session-state.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-state.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-state.test.js +83 -0
- package/dist/__tests__/realtime-session-state.test.js.map +1 -0
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-timeline-card.test.js +106 -0
- package/dist/__tests__/realtime-session-timeline-card.test.js.map +1 -0
- package/dist/__tests__/realtime-session-timeline.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-timeline.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-timeline.test.js +142 -0
- package/dist/__tests__/realtime-session-timeline.test.js.map +1 -0
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts +19 -0
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-sessions-adapter.test.js +188 -0
- package/dist/__tests__/realtime-sessions-adapter.test.js.map +1 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +2 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.js +100 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +1 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +2 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.js +193 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.js.map +1 -0
- package/dist/__tests__/remote-browser-audio-player.test.d.ts +2 -0
- package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +1 -0
- package/dist/__tests__/remote-browser-audio-player.test.js +137 -0
- package/dist/__tests__/remote-browser-audio-player.test.js.map +1 -0
- package/dist/__tests__/remote-browser-channel.test.d.ts +2 -0
- package/dist/__tests__/remote-browser-channel.test.d.ts.map +1 -0
- package/dist/__tests__/remote-browser-channel.test.js +423 -0
- package/dist/__tests__/remote-browser-channel.test.js.map +1 -0
- package/dist/__tests__/slot-defaults.test.d.ts +24 -0
- package/dist/__tests__/slot-defaults.test.d.ts.map +1 -0
- package/dist/__tests__/slot-defaults.test.js +63 -0
- package/dist/__tests__/slot-defaults.test.js.map +1 -0
- package/dist/__tests__/user-authorization.test.d.ts +2 -0
- package/dist/__tests__/user-authorization.test.d.ts.map +1 -0
- package/dist/__tests__/user-authorization.test.js +97 -0
- package/dist/__tests__/user-authorization.test.js.map +1 -0
- package/dist/__tests__/voice-session-narration.test.d.ts +2 -0
- package/dist/__tests__/voice-session-narration.test.d.ts.map +1 -0
- package/dist/__tests__/voice-session-narration.test.js +609 -0
- package/dist/__tests__/voice-session-narration.test.js.map +1 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.js +101 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +1 -0
- package/dist/__tests__/whiteboard-channel.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-channel.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-channel.test.js +260 -0
- package/dist/__tests__/whiteboard-channel.test.js.map +1 -0
- package/dist/__tests__/whiteboard-restore-state.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-restore-state.test.js +108 -0
- package/dist/__tests__/whiteboard-restore-state.test.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +205 -3
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +911 -342
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +35 -17
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +4 -0
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +43 -19
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +17 -1
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +73 -15
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +142 -6
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +328 -82
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +28 -3
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +180 -108
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +81 -2
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +252 -87
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +282 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +158 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts +25 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js +140 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +35 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +58 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +63 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +260 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +117 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +504 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +168 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.js +556 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +97 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.js +139 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts +29 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.js +69 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +65 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.js +256 -0
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +71 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +324 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-disclosure.d.ts +135 -0
- package/dist/lib/components/realtime/realtime-disclosure.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-disclosure.js +188 -0
- package/dist/lib/components/realtime/realtime-disclosure.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +491 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +1274 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-state.d.ts +191 -0
- package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-state.js +244 -0
- package/dist/lib/components/realtime/realtime-session-state.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +56 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.js +246 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +51 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +193 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts +77 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.js +114 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +173 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +496 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +181 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +223 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts +163 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js +309 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +168 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +524 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts +346 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js +851 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +86 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +210 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts +48 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js +180 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +119 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +274 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts +11 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js +98 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts +9 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js +35 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts +28 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.js +104 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.d.ts +11 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.js +103 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts +15 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js +73 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts +9 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.js +34 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.js.map +1 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts +95 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -0
- package/dist/lib/components/slots/slot-interfaces.js +18 -0
- package/dist/lib/components/slots/slot-interfaces.js.map +1 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +28 -4
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +12 -1
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +93 -5
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/directives/chat-slot.directive.d.ts +44 -0
- package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -0
- package/dist/lib/directives/chat-slot.directive.js +54 -0
- package/dist/lib/directives/chat-slot.directive.js.map +1 -0
- package/dist/lib/events/chat-events.d.ts +137 -0
- package/dist/lib/events/chat-events.d.ts.map +1 -0
- package/dist/lib/events/chat-events.js +189 -0
- package/dist/lib/events/chat-events.js.map +1 -0
- package/dist/lib/models/conversation-state.model.d.ts +2 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/models/conversation-state.model.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +23 -6
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +60 -74
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +100 -313
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-bridge.service.d.ts +11 -70
- package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-bridge.service.js +51 -85
- package/dist/lib/services/conversation-bridge.service.js.map +1 -1
- package/dist/lib/services/conversation-naming.d.ts +63 -0
- package/dist/lib/services/conversation-naming.d.ts.map +1 -0
- package/dist/lib/services/conversation-naming.js +58 -0
- package/dist/lib/services/conversation-naming.js.map +1 -0
- package/dist/lib/services/conversation-streaming.service.d.ts +24 -154
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +39 -361
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts +10 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts.map +1 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.js +104 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.js.map +1 -0
- package/dist/lib/services/delegation-result-parser.d.ts +45 -0
- package/dist/lib/services/delegation-result-parser.d.ts.map +1 -0
- package/dist/lib/services/delegation-result-parser.js +48 -0
- package/dist/lib/services/delegation-result-parser.js.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts +19 -4
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +65 -4
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +8 -53
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +32 -243
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/lib/services/narration-template.d.ts +42 -0
- package/dist/lib/services/narration-template.d.ts.map +1 -0
- package/dist/lib/services/narration-template.js +73 -0
- package/dist/lib/services/narration-template.js.map +1 -0
- package/dist/lib/services/realtime-pairing.d.ts +120 -0
- package/dist/lib/services/realtime-pairing.d.ts.map +1 -0
- package/dist/lib/services/realtime-pairing.js +150 -0
- package/dist/lib/services/realtime-pairing.js.map +1 -0
- package/dist/lib/services/realtime-session-review.service.d.ts +233 -0
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -0
- package/dist/lib/services/realtime-session-review.service.js +417 -0
- package/dist/lib/services/realtime-session-review.service.js.map +1 -0
- package/dist/lib/services/realtime-session.service.d.ts +739 -0
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -0
- package/dist/lib/services/realtime-session.service.js +1647 -0
- package/dist/lib/services/realtime-session.service.js.map +1 -0
- package/dist/lib/services/realtime-sessions-adapter.d.ts +54 -0
- package/dist/lib/services/realtime-sessions-adapter.d.ts.map +1 -0
- package/dist/lib/services/realtime-sessions-adapter.js +154 -0
- package/dist/lib/services/realtime-sessions-adapter.js.map +1 -0
- package/dist/lib/services/user-authorization.d.ts +67 -0
- package/dist/lib/services/user-authorization.d.ts.map +1 -0
- package/dist/lib/services/user-authorization.js +66 -0
- package/dist/lib/services/user-authorization.js.map +1 -0
- package/dist/lib/utils/realtime-session-timeline.d.ts +84 -0
- package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -0
- package/dist/lib/utils/realtime-session-timeline.js +94 -0
- package/dist/lib/utils/realtime-session-timeline.js.map +1 -0
- package/dist/public-api.d.ts +41 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +50 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +27 -24
- package/dist/__tests__/conversation-bridge.service.test.d.ts +0 -2
- package/dist/__tests__/conversation-bridge.service.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-bridge.service.test.js +0 -98
- package/dist/__tests__/conversation-bridge.service.test.js.map +0 -1
- package/dist/__tests__/mention-parser.test.d.ts +0 -2
- package/dist/__tests__/mention-parser.test.d.ts.map +0 -1
- package/dist/__tests__/mention-parser.test.js +0 -154
- package/dist/__tests__/mention-parser.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-defaults.test.js","sourceRoot":"","sources":["../../src/__tests__/slot-defaults.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,+DAA+D,CAAC;AACjH,OAAO,EAAE,mCAAmC,EAAE,MAAM,kEAAkE,CAAC;AACvH,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,EAAE,kCAAkC,EAAE,MAAM,iEAAiE,CAAC;AACrH,OAAO,EAAE,0CAA0C,EAAE,MAAM,yEAAyE,CAAC;AACrI,OAAO,EAAE,mCAAmC,EAAE,MAAM,kEAAkE,CAAC;AAWvH,QAAQ,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACvE,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAQjE,MAAM,eAAe,GAAW,IAAI,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,OAAO,mCAAmC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAIpE,MAAM,eAAe,GAAW,IAAI,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAI7D,MAAM,eAAe,GAAW,IAAI,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,OAAO,kCAAkC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAInE,MAAM,eAAe,GAAW,IAAI,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,OAAO,0CAA0C,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAI3E,MAAM,eAAe,GAAW,IAAI,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,OAAO,mCAAmC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAIpE,MAAM,eAAe,GAAW,IAAI,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["/**\n * @fileoverview Compile-time interface-conformance checks for the 5 default\n * slot components.\n *\n * These tests deliberately do NOT instantiate the components (instantiating\n * Angular standalone components at runtime requires `@angular/compiler` +\n * a TestBed, which adds substantial machinery for very little signal).\n * Instead we verify that:\n *\n * - Each default class is importable and is a class (`typeof === 'function'`).\n * - The class satisfies its declared interface at compile time (the\n * `interfaceCheck` assignments fail TypeScript if a contract drifts).\n *\n * That's the actual contract we care about: any consumer-supplied component\n * for a given slot will be type-compatible with the widget's interaction\n * because the default it replaces was compatible.\n *\n * Behavioral tests for slot content rendering belong in a future commit that\n * sets up TestBed + the ChatSlotDirective + the chat-area component\n * together — once those are in place we'll have end-to-end coverage of the\n * projection path, not just the type shape.\n */\n\nimport '@angular/compiler';\nimport { describe, it, expect } from 'vitest';\n\nimport { MJChatEmptyStateDefaultComponent } from '../lib/components/slots/mj-chat-empty-state-default.component';\nimport { MJChatAgentPresenceDefaultComponent } from '../lib/components/slots/mj-chat-agent-presence-default.component';\nimport { MJChatHeaderDefaultComponent } from '../lib/components/slots/mj-chat-header-default.component';\nimport { MJChatMessageExtraDefaultComponent } from '../lib/components/slots/mj-chat-message-extra-default.component';\nimport { MJChatDemonstrationSurfaceDefaultComponent } from '../lib/components/slots/mj-chat-demonstration-surface-default.component';\nimport { MJChatMessageBubbleDefaultComponent } from '../lib/components/slots/mj-chat-message-bubble-default.component';\n\nimport type {\n IMJChatEmptyStateComponent,\n IMJChatAgentPresenceComponent,\n IMJChatHeaderComponent,\n IMJChatMessageExtraComponent,\n IMJChatDemonstrationSurfaceComponent,\n IMJChatMessageRendererComponent,\n} from '../lib/components/slots/slot-interfaces';\n\ndescribe('Slot default components — exports + interface conformance', () => {\n it('MJChatEmptyStateDefaultComponent is exported as a class', () => {\n expect(typeof MJChatEmptyStateDefaultComponent).toBe('function');\n // Compile-time check: the class must structurally satisfy the interface.\n // If this assignment ever fails to type-check, the interface drifted from\n // the default — fix one or the other. Using a no-op cast keeps this at\n // type-level only (no runtime instantiation).\n type _Check = InstanceType<typeof MJChatEmptyStateDefaultComponent> extends IMJChatEmptyStateComponent\n ? true\n : never;\n const _interfaceCheck: _Check = true;\n expect(_interfaceCheck).toBe(true);\n });\n\n it('MJChatAgentPresenceDefaultComponent is exported as a class', () => {\n expect(typeof MJChatAgentPresenceDefaultComponent).toBe('function');\n type _Check = InstanceType<typeof MJChatAgentPresenceDefaultComponent> extends IMJChatAgentPresenceComponent\n ? true\n : never;\n const _interfaceCheck: _Check = true;\n expect(_interfaceCheck).toBe(true);\n });\n\n it('MJChatHeaderDefaultComponent is exported as a class', () => {\n expect(typeof MJChatHeaderDefaultComponent).toBe('function');\n type _Check = InstanceType<typeof MJChatHeaderDefaultComponent> extends IMJChatHeaderComponent\n ? true\n : never;\n const _interfaceCheck: _Check = true;\n expect(_interfaceCheck).toBe(true);\n });\n\n it('MJChatMessageExtraDefaultComponent is exported as a class', () => {\n expect(typeof MJChatMessageExtraDefaultComponent).toBe('function');\n type _Check = InstanceType<typeof MJChatMessageExtraDefaultComponent> extends IMJChatMessageExtraComponent\n ? true\n : never;\n const _interfaceCheck: _Check = true;\n expect(_interfaceCheck).toBe(true);\n });\n\n it('MJChatDemonstrationSurfaceDefaultComponent is exported as a class', () => {\n expect(typeof MJChatDemonstrationSurfaceDefaultComponent).toBe('function');\n type _Check = InstanceType<typeof MJChatDemonstrationSurfaceDefaultComponent> extends IMJChatDemonstrationSurfaceComponent\n ? true\n : never;\n const _interfaceCheck: _Check = true;\n expect(_interfaceCheck).toBe(true);\n });\n\n it('MJChatMessageBubbleDefaultComponent is exported as a class', () => {\n expect(typeof MJChatMessageBubbleDefaultComponent).toBe('function');\n type _Check = InstanceType<typeof MJChatMessageBubbleDefaultComponent> extends IMJChatMessageRendererComponent\n ? true\n : never;\n const _interfaceCheck: _Check = true;\n expect(_interfaceCheck).toBe(true);\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-authorization.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/user-authorization.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { REALTIME_ADVANCED_SESSION_CONTROLS, UserHoldsAuthorization, } from '../lib/services/user-authorization';
|
|
3
|
+
/**
|
|
4
|
+
* Pure client-side authorization check — resolves the cached-metadata
|
|
5
|
+
* Authorizations ↔ Authorization Roles ↔ user.UserRoles chain with
|
|
6
|
+
* `AuthorizationInfo.UserCanExecute` semantics (Deny wins, Allow required,
|
|
7
|
+
* inactive never grants) and is DEFENSIVE: every missing-data shape resolves
|
|
8
|
+
* to false. This is the disclosure gate for the realtime advanced session
|
|
9
|
+
* controls (model picker / config overrides); the server enforces the same
|
|
10
|
+
* authorization on the mint mutation.
|
|
11
|
+
*/
|
|
12
|
+
const AUTH_ID = 'A0000000-0000-0000-0000-00000000000A';
|
|
13
|
+
const ROLE_ADMIN = 'B0000000-0000-0000-0000-00000000000B';
|
|
14
|
+
const ROLE_USER = 'C0000000-0000-0000-0000-00000000000C';
|
|
15
|
+
function source(overrides) {
|
|
16
|
+
return {
|
|
17
|
+
Authorizations: [{ ID: AUTH_ID, Name: REALTIME_ADVANCED_SESSION_CONTROLS, IsActive: true }],
|
|
18
|
+
AuthorizationRoles: [{ AuthorizationID: AUTH_ID, RoleID: ROLE_ADMIN, Type: 'Allow' }],
|
|
19
|
+
...overrides,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function userWithRoles(...roleIds) {
|
|
23
|
+
return { UserRoles: roleIds.map(RoleID => ({ RoleID })) };
|
|
24
|
+
}
|
|
25
|
+
describe('UserHoldsAuthorization', () => {
|
|
26
|
+
describe('grants', () => {
|
|
27
|
+
it('returns true when one of the user roles has an Allow row on the active authorization', () => {
|
|
28
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('matches the authorization name case-insensitively with surrounding whitespace', () => {
|
|
31
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), ' realtime: ADVANCED session controls ', source())).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
it('matches role ids across SQL Server (upper) vs PostgreSQL (lower) UUID casing', () => {
|
|
34
|
+
const user = userWithRoles(ROLE_ADMIN.toLowerCase());
|
|
35
|
+
const src = source({
|
|
36
|
+
Authorizations: [{ ID: AUTH_ID.toLowerCase(), Name: REALTIME_ADVANCED_SESSION_CONTROLS, IsActive: true }],
|
|
37
|
+
AuthorizationRoles: [{ AuthorizationID: AUTH_ID.toUpperCase(), RoleID: ROLE_ADMIN.toUpperCase(), Type: 'allow' }],
|
|
38
|
+
});
|
|
39
|
+
expect(UserHoldsAuthorization(user, REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
it('grants when the user holds an unrelated role plus the allowed role', () => {
|
|
42
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_USER, ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('denials', () => {
|
|
46
|
+
it('returns false when none of the user roles is mapped to the authorization', () => {
|
|
47
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_USER), REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
it('Deny on any user role vetoes an Allow on another role (Deny wins globally)', () => {
|
|
50
|
+
const src = source({
|
|
51
|
+
AuthorizationRoles: [
|
|
52
|
+
{ AuthorizationID: AUTH_ID, RoleID: ROLE_ADMIN, Type: 'Allow' },
|
|
53
|
+
{ AuthorizationID: AUTH_ID, RoleID: ROLE_USER, Type: 'Deny' },
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN, ROLE_USER), REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('returns false when the authorization is inactive', () => {
|
|
59
|
+
const src = source({
|
|
60
|
+
Authorizations: [{ ID: AUTH_ID, Name: REALTIME_ADVANCED_SESSION_CONTROLS, IsActive: false }],
|
|
61
|
+
});
|
|
62
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('returns false for an unknown authorization name', () => {
|
|
65
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), 'Some Other Authorization', source())).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
it('treats a matching row with a null/blank Type as a Deny (missing data never grants)', () => {
|
|
68
|
+
const src = source({
|
|
69
|
+
AuthorizationRoles: [{ AuthorizationID: AUTH_ID, RoleID: ROLE_ADMIN, Type: null }],
|
|
70
|
+
});
|
|
71
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('defensive missing-data shapes — always false', () => {
|
|
75
|
+
it('null/undefined user', () => {
|
|
76
|
+
expect(UserHoldsAuthorization(null, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);
|
|
77
|
+
expect(UserHoldsAuthorization(undefined, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
it('user with no roles', () => {
|
|
80
|
+
expect(UserHoldsAuthorization({ UserRoles: [] }, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);
|
|
81
|
+
expect(UserHoldsAuthorization({}, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
it('null/undefined metadata source', () => {
|
|
84
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, null)).toBe(false);
|
|
85
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, undefined)).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
it('metadata source missing either collection', () => {
|
|
88
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source({ Authorizations: [] }))).toBe(false);
|
|
89
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source({ AuthorizationRoles: null }))).toBe(false);
|
|
90
|
+
});
|
|
91
|
+
it('empty authorization name', () => {
|
|
92
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), '', source())).toBe(false);
|
|
93
|
+
expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), ' ', source())).toBe(false);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=user-authorization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-authorization.test.js","sourceRoot":"","sources":["../../src/__tests__/user-authorization.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it, expect } from 'vitest';\nimport {\n AuthorizationMetadataSource,\n AuthorizationUserLike,\n REALTIME_ADVANCED_SESSION_CONTROLS,\n UserHoldsAuthorization,\n} from '../lib/services/user-authorization';\n\n/**\n * Pure client-side authorization check — resolves the cached-metadata\n * Authorizations ↔ Authorization Roles ↔ user.UserRoles chain with\n * `AuthorizationInfo.UserCanExecute` semantics (Deny wins, Allow required,\n * inactive never grants) and is DEFENSIVE: every missing-data shape resolves\n * to false. This is the disclosure gate for the realtime advanced session\n * controls (model picker / config overrides); the server enforces the same\n * authorization on the mint mutation.\n */\n\nconst AUTH_ID = 'A0000000-0000-0000-0000-00000000000A';\nconst ROLE_ADMIN = 'B0000000-0000-0000-0000-00000000000B';\nconst ROLE_USER = 'C0000000-0000-0000-0000-00000000000C';\n\nfunction source(overrides?: Partial<AuthorizationMetadataSource>): AuthorizationMetadataSource {\n return {\n Authorizations: [{ ID: AUTH_ID, Name: REALTIME_ADVANCED_SESSION_CONTROLS, IsActive: true }],\n AuthorizationRoles: [{ AuthorizationID: AUTH_ID, RoleID: ROLE_ADMIN, Type: 'Allow' }],\n ...overrides,\n };\n}\n\nfunction userWithRoles(...roleIds: string[]): AuthorizationUserLike {\n return { UserRoles: roleIds.map(RoleID => ({ RoleID })) };\n}\n\ndescribe('UserHoldsAuthorization', () => {\n describe('grants', () => {\n it('returns true when one of the user roles has an Allow row on the active authorization', () => {\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(true);\n });\n\n it('matches the authorization name case-insensitively with surrounding whitespace', () => {\n expect(\n UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), ' realtime: ADVANCED session controls ', source())\n ).toBe(true);\n });\n\n it('matches role ids across SQL Server (upper) vs PostgreSQL (lower) UUID casing', () => {\n const user = userWithRoles(ROLE_ADMIN.toLowerCase());\n const src = source({\n Authorizations: [{ ID: AUTH_ID.toLowerCase(), Name: REALTIME_ADVANCED_SESSION_CONTROLS, IsActive: true }],\n AuthorizationRoles: [{ AuthorizationID: AUTH_ID.toUpperCase(), RoleID: ROLE_ADMIN.toUpperCase(), Type: 'allow' }],\n });\n expect(UserHoldsAuthorization(user, REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(true);\n });\n\n it('grants when the user holds an unrelated role plus the allowed role', () => {\n expect(UserHoldsAuthorization(userWithRoles(ROLE_USER, ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(true);\n });\n });\n\n describe('denials', () => {\n it('returns false when none of the user roles is mapped to the authorization', () => {\n expect(UserHoldsAuthorization(userWithRoles(ROLE_USER), REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);\n });\n\n it('Deny on any user role vetoes an Allow on another role (Deny wins globally)', () => {\n const src = source({\n AuthorizationRoles: [\n { AuthorizationID: AUTH_ID, RoleID: ROLE_ADMIN, Type: 'Allow' },\n { AuthorizationID: AUTH_ID, RoleID: ROLE_USER, Type: 'Deny' },\n ],\n });\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN, ROLE_USER), REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(false);\n });\n\n it('returns false when the authorization is inactive', () => {\n const src = source({\n Authorizations: [{ ID: AUTH_ID, Name: REALTIME_ADVANCED_SESSION_CONTROLS, IsActive: false }],\n });\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(false);\n });\n\n it('returns false for an unknown authorization name', () => {\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), 'Some Other Authorization', source())).toBe(false);\n });\n\n it('treats a matching row with a null/blank Type as a Deny (missing data never grants)', () => {\n const src = source({\n AuthorizationRoles: [{ AuthorizationID: AUTH_ID, RoleID: ROLE_ADMIN, Type: null }],\n });\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, src)).toBe(false);\n });\n });\n\n describe('defensive missing-data shapes — always false', () => {\n it('null/undefined user', () => {\n expect(UserHoldsAuthorization(null, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);\n expect(UserHoldsAuthorization(undefined, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);\n });\n\n it('user with no roles', () => {\n expect(UserHoldsAuthorization({ UserRoles: [] }, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);\n expect(UserHoldsAuthorization({}, REALTIME_ADVANCED_SESSION_CONTROLS, source())).toBe(false);\n });\n\n it('null/undefined metadata source', () => {\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, null)).toBe(false);\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, undefined)).toBe(false);\n });\n\n it('metadata source missing either collection', () => {\n expect(\n UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source({ Authorizations: [] }))\n ).toBe(false);\n expect(\n UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), REALTIME_ADVANCED_SESSION_CONTROLS, source({ AuthorizationRoles: null }))\n ).toBe(false);\n });\n\n it('empty authorization name', () => {\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), '', source())).toBe(false);\n expect(UserHoldsAuthorization(userWithRoles(ROLE_ADMIN), ' ', source())).toBe(false);\n });\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-session-narration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/voice-session-narration.test.ts"],"names":[],"mappings":""}
|