@syra.fm/sdk 0.4.0 → 0.6.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 +33 -4
- package/lib/commonjs/client.js +268 -0
- package/lib/commonjs/client.js.map +1 -0
- package/lib/commonjs/errors.js +22 -0
- package/lib/commonjs/errors.js.map +1 -0
- package/lib/commonjs/index.js +63 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/index.native.js +28 -0
- package/lib/commonjs/index.native.js.map +1 -0
- package/lib/commonjs/live/assets/icons/spaces-icon.js +42 -0
- package/lib/commonjs/live/assets/icons/spaces-icon.js.map +1 -0
- package/lib/commonjs/live/assets/icons/syra-icon.js +43 -0
- package/lib/commonjs/live/assets/icons/syra-icon.js.map +1 -0
- package/lib/commonjs/live/colors.js +54 -0
- package/lib/commonjs/live/colors.js.map +1 -0
- package/lib/commonjs/live/components/AnimatedPulse.js +38 -0
- package/lib/commonjs/live/components/AnimatedPulse.js.map +1 -0
- package/lib/commonjs/live/components/AnimatedSpeakerRing.js +90 -0
- package/lib/commonjs/live/components/AnimatedSpeakerRing.js.map +1 -0
- package/lib/commonjs/live/components/CreateRoomSheet.js +688 -0
- package/lib/commonjs/live/components/CreateRoomSheet.js.map +1 -0
- package/lib/commonjs/live/components/InsightsPanel.js +333 -0
- package/lib/commonjs/live/components/InsightsPanel.js.map +1 -0
- package/lib/commonjs/live/components/LiveRoomSheet.js +1196 -0
- package/lib/commonjs/live/components/LiveRoomSheet.js.map +1 -0
- package/lib/commonjs/live/components/MiniRoomBar.js +162 -0
- package/lib/commonjs/live/components/MiniRoomBar.js.map +1 -0
- package/lib/commonjs/live/components/PanelHeader.js +57 -0
- package/lib/commonjs/live/components/PanelHeader.js.map +1 -0
- package/lib/commonjs/live/components/PodcastStreamPicker.js +1190 -0
- package/lib/commonjs/live/components/PodcastStreamPicker.js.map +1 -0
- package/lib/commonjs/live/components/RecordingCard.js +192 -0
- package/lib/commonjs/live/components/RecordingCard.js.map +1 -0
- package/lib/commonjs/live/components/RecordingsPanel.js +305 -0
- package/lib/commonjs/live/components/RecordingsPanel.js.map +1 -0
- package/lib/commonjs/live/components/RoomCard.js +349 -0
- package/lib/commonjs/live/components/RoomCard.js.map +1 -0
- package/lib/commonjs/live/components/StreamConfigModal.js +656 -0
- package/lib/commonjs/live/components/StreamConfigModal.js.map +1 -0
- package/lib/commonjs/live/components/StreamConfigPanel.js +822 -0
- package/lib/commonjs/live/components/StreamConfigPanel.js.map +1 -0
- package/lib/commonjs/live/context/LiveConfigContext.js +46 -0
- package/lib/commonjs/live/context/LiveConfigContext.js.map +1 -0
- package/lib/commonjs/live/context/LiveRoomContext.js +195 -0
- package/lib/commonjs/live/context/LiveRoomContext.js.map +1 -0
- package/lib/commonjs/live/hooks/useActiveSpeakers.js +35 -0
- package/lib/commonjs/live/hooks/useActiveSpeakers.js.map +1 -0
- package/lib/commonjs/live/hooks/useRoomAudio.js +129 -0
- package/lib/commonjs/live/hooks/useRoomAudio.js.map +1 -0
- package/lib/commonjs/live/hooks/useRoomConnection.js +177 -0
- package/lib/commonjs/live/hooks/useRoomConnection.js.map +1 -0
- package/lib/commonjs/live/hooks/useRoomManager.js +37 -0
- package/lib/commonjs/live/hooks/useRoomManager.js.map +1 -0
- package/lib/commonjs/live/hooks/useRoomUsers.js +52 -0
- package/lib/commonjs/live/hooks/useRoomUsers.js.map +1 -0
- package/lib/commonjs/live/index.js +341 -0
- package/lib/commonjs/live/index.js.map +1 -0
- package/lib/commonjs/live/services/livekitService.js +20 -0
- package/lib/commonjs/live/services/livekitService.js.map +1 -0
- package/lib/commonjs/live/services/spaceSocketService.js +181 -0
- package/lib/commonjs/live/services/spaceSocketService.js.map +1 -0
- package/lib/commonjs/live/services/spacesService.js +642 -0
- package/lib/commonjs/live/services/spacesService.js.map +1 -0
- package/lib/commonjs/live/types.js +6 -0
- package/lib/commonjs/live/types.js.map +1 -0
- package/lib/commonjs/live/validation.js +238 -0
- package/lib/commonjs/live/validation.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/{dist/cjs → lib/commonjs}/schema.js +55 -47
- package/lib/commonjs/schema.js.map +1 -0
- package/lib/module/client.js +264 -0
- package/lib/module/client.js.map +1 -0
- package/lib/module/errors.js +17 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/index.native.js +5 -0
- package/lib/module/index.native.js.map +1 -0
- package/lib/module/live/assets/icons/spaces-icon.js +34 -0
- package/lib/module/live/assets/icons/spaces-icon.js.map +1 -0
- package/lib/module/live/assets/icons/syra-icon.js +36 -0
- package/lib/module/live/assets/icons/syra-icon.js.map +1 -0
- package/lib/module/live/colors.js +49 -0
- package/lib/module/live/colors.js.map +1 -0
- package/lib/module/live/components/AnimatedPulse.js +33 -0
- package/lib/module/live/components/AnimatedPulse.js.map +1 -0
- package/lib/module/live/components/AnimatedSpeakerRing.js +85 -0
- package/lib/module/live/components/AnimatedSpeakerRing.js.map +1 -0
- package/lib/module/live/components/CreateRoomSheet.js +682 -0
- package/lib/module/live/components/CreateRoomSheet.js.map +1 -0
- package/lib/module/live/components/InsightsPanel.js +327 -0
- package/lib/module/live/components/InsightsPanel.js.map +1 -0
- package/lib/module/live/components/LiveRoomSheet.js +1190 -0
- package/lib/module/live/components/LiveRoomSheet.js.map +1 -0
- package/lib/module/live/components/MiniRoomBar.js +155 -0
- package/lib/module/live/components/MiniRoomBar.js.map +1 -0
- package/lib/module/live/components/PanelHeader.js +52 -0
- package/lib/module/live/components/PanelHeader.js.map +1 -0
- package/lib/module/live/components/PodcastStreamPicker.js +1183 -0
- package/lib/module/live/components/PodcastStreamPicker.js.map +1 -0
- package/lib/module/live/components/RecordingCard.js +187 -0
- package/lib/module/live/components/RecordingCard.js.map +1 -0
- package/lib/module/live/components/RecordingsPanel.js +299 -0
- package/lib/module/live/components/RecordingsPanel.js.map +1 -0
- package/lib/module/live/components/RoomCard.js +343 -0
- package/lib/module/live/components/RoomCard.js.map +1 -0
- package/lib/module/live/components/StreamConfigModal.js +650 -0
- package/lib/module/live/components/StreamConfigModal.js.map +1 -0
- package/lib/module/live/components/StreamConfigPanel.js +816 -0
- package/lib/module/live/components/StreamConfigPanel.js.map +1 -0
- package/lib/module/live/context/LiveConfigContext.js +40 -0
- package/lib/module/live/context/LiveConfigContext.js.map +1 -0
- package/lib/module/live/context/LiveRoomContext.js +189 -0
- package/lib/module/live/context/LiveRoomContext.js.map +1 -0
- package/lib/module/live/hooks/useActiveSpeakers.js +31 -0
- package/lib/module/live/hooks/useActiveSpeakers.js.map +1 -0
- package/lib/module/live/hooks/useRoomAudio.js +125 -0
- package/lib/module/live/hooks/useRoomAudio.js.map +1 -0
- package/lib/module/live/hooks/useRoomConnection.js +173 -0
- package/lib/module/live/hooks/useRoomConnection.js.map +1 -0
- package/lib/module/live/hooks/useRoomManager.js +32 -0
- package/lib/module/live/hooks/useRoomManager.js.map +1 -0
- package/lib/module/live/hooks/useRoomUsers.js +46 -0
- package/lib/module/live/hooks/useRoomUsers.js.map +1 -0
- package/lib/module/live/index.js +42 -0
- package/lib/module/live/index.js.map +1 -0
- package/lib/module/live/services/livekitService.js +16 -0
- package/lib/module/live/services/livekitService.js.map +1 -0
- package/lib/module/live/services/spaceSocketService.js +176 -0
- package/lib/module/live/services/spaceSocketService.js.map +1 -0
- package/lib/module/live/services/spacesService.js +639 -0
- package/lib/module/live/services/spacesService.js.map +1 -0
- package/lib/module/live/types.js +4 -0
- package/lib/module/live/types.js.map +1 -0
- package/lib/module/live/validation.js +229 -0
- package/lib/module/live/validation.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/{dist/esm → lib/module}/schema.js +47 -39
- package/lib/module/schema.js.map +1 -0
- package/{dist/types → lib/typescript/commonjs}/client.d.ts +1 -0
- package/lib/typescript/commonjs/client.d.ts.map +1 -0
- package/{dist/types → lib/typescript/commonjs}/errors.d.ts +1 -0
- package/lib/typescript/commonjs/errors.d.ts.map +1 -0
- package/{dist/types → lib/typescript/commonjs}/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.native.d.ts +3 -0
- package/lib/typescript/commonjs/index.native.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/assets/icons/spaces-icon.d.ts +13 -0
- package/lib/typescript/commonjs/live/assets/icons/spaces-icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/assets/icons/syra-icon.d.ts +13 -0
- package/lib/typescript/commonjs/live/assets/icons/syra-icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/colors.d.ts +35 -0
- package/lib/typescript/commonjs/live/colors.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/AnimatedPulse.d.ts +8 -0
- package/lib/typescript/commonjs/live/components/AnimatedPulse.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/AnimatedSpeakerRing.d.ts +10 -0
- package/lib/typescript/commonjs/live/components/AnimatedSpeakerRing.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/CreateRoomSheet.d.ts +26 -0
- package/lib/typescript/commonjs/live/components/CreateRoomSheet.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/InsightsPanel.d.ts +11 -0
- package/lib/typescript/commonjs/live/components/InsightsPanel.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/LiveRoomSheet.d.ts +11 -0
- package/lib/typescript/commonjs/live/components/LiveRoomSheet.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/MiniRoomBar.d.ts +15 -0
- package/lib/typescript/commonjs/live/components/MiniRoomBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/PanelHeader.d.ts +10 -0
- package/lib/typescript/commonjs/live/components/PanelHeader.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/PodcastStreamPicker.d.ts +54 -0
- package/lib/typescript/commonjs/live/components/PodcastStreamPicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/RecordingCard.d.ts +11 -0
- package/lib/typescript/commonjs/live/components/RecordingCard.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/RecordingsPanel.d.ts +12 -0
- package/lib/typescript/commonjs/live/components/RecordingsPanel.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/RoomCard.d.ts +38 -0
- package/lib/typescript/commonjs/live/components/RoomCard.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/StreamConfigModal.d.ts +11 -0
- package/lib/typescript/commonjs/live/components/StreamConfigModal.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/components/StreamConfigPanel.d.ts +13 -0
- package/lib/typescript/commonjs/live/components/StreamConfigPanel.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/context/LiveConfigContext.d.ts +78 -0
- package/lib/typescript/commonjs/live/context/LiveConfigContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/context/LiveRoomContext.d.ts +12 -0
- package/lib/typescript/commonjs/live/context/LiveRoomContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/hooks/useActiveSpeakers.d.ts +3 -0
- package/lib/typescript/commonjs/live/hooks/useActiveSpeakers.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/hooks/useRoomAudio.d.ts +16 -0
- package/lib/typescript/commonjs/live/hooks/useRoomAudio.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/hooks/useRoomConnection.d.ts +29 -0
- package/lib/typescript/commonjs/live/hooks/useRoomConnection.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/hooks/useRoomManager.d.ts +11 -0
- package/lib/typescript/commonjs/live/hooks/useRoomManager.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/hooks/useRoomUsers.d.ts +5 -0
- package/lib/typescript/commonjs/live/hooks/useRoomUsers.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/index.d.ts +25 -0
- package/lib/typescript/commonjs/live/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/services/livekitService.d.ts +7 -0
- package/lib/typescript/commonjs/live/services/livekitService.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/services/spaceSocketService.d.ts +69 -0
- package/lib/typescript/commonjs/live/services/spaceSocketService.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/services/spacesService.d.ts +181 -0
- package/lib/typescript/commonjs/live/services/spacesService.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/types.d.ts +100 -0
- package/lib/typescript/commonjs/live/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/live/validation.d.ts +658 -0
- package/lib/typescript/commonjs/live/validation.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/{dist/types → lib/typescript/commonjs}/schema.d.ts +1 -0
- package/lib/typescript/commonjs/schema.d.ts.map +1 -0
- package/lib/typescript/module/client.d.ts +141 -0
- package/lib/typescript/module/client.d.ts.map +1 -0
- package/lib/typescript/module/errors.d.ts +9 -0
- package/lib/typescript/module/errors.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +6 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/index.native.d.ts +3 -0
- package/lib/typescript/module/index.native.d.ts.map +1 -0
- package/lib/typescript/module/live/assets/icons/spaces-icon.d.ts +13 -0
- package/lib/typescript/module/live/assets/icons/spaces-icon.d.ts.map +1 -0
- package/lib/typescript/module/live/assets/icons/syra-icon.d.ts +13 -0
- package/lib/typescript/module/live/assets/icons/syra-icon.d.ts.map +1 -0
- package/lib/typescript/module/live/colors.d.ts +35 -0
- package/lib/typescript/module/live/colors.d.ts.map +1 -0
- package/lib/typescript/module/live/components/AnimatedPulse.d.ts +8 -0
- package/lib/typescript/module/live/components/AnimatedPulse.d.ts.map +1 -0
- package/lib/typescript/module/live/components/AnimatedSpeakerRing.d.ts +10 -0
- package/lib/typescript/module/live/components/AnimatedSpeakerRing.d.ts.map +1 -0
- package/lib/typescript/module/live/components/CreateRoomSheet.d.ts +26 -0
- package/lib/typescript/module/live/components/CreateRoomSheet.d.ts.map +1 -0
- package/lib/typescript/module/live/components/InsightsPanel.d.ts +11 -0
- package/lib/typescript/module/live/components/InsightsPanel.d.ts.map +1 -0
- package/lib/typescript/module/live/components/LiveRoomSheet.d.ts +11 -0
- package/lib/typescript/module/live/components/LiveRoomSheet.d.ts.map +1 -0
- package/lib/typescript/module/live/components/MiniRoomBar.d.ts +15 -0
- package/lib/typescript/module/live/components/MiniRoomBar.d.ts.map +1 -0
- package/lib/typescript/module/live/components/PanelHeader.d.ts +10 -0
- package/lib/typescript/module/live/components/PanelHeader.d.ts.map +1 -0
- package/lib/typescript/module/live/components/PodcastStreamPicker.d.ts +54 -0
- package/lib/typescript/module/live/components/PodcastStreamPicker.d.ts.map +1 -0
- package/lib/typescript/module/live/components/RecordingCard.d.ts +11 -0
- package/lib/typescript/module/live/components/RecordingCard.d.ts.map +1 -0
- package/lib/typescript/module/live/components/RecordingsPanel.d.ts +12 -0
- package/lib/typescript/module/live/components/RecordingsPanel.d.ts.map +1 -0
- package/lib/typescript/module/live/components/RoomCard.d.ts +38 -0
- package/lib/typescript/module/live/components/RoomCard.d.ts.map +1 -0
- package/lib/typescript/module/live/components/StreamConfigModal.d.ts +11 -0
- package/lib/typescript/module/live/components/StreamConfigModal.d.ts.map +1 -0
- package/lib/typescript/module/live/components/StreamConfigPanel.d.ts +13 -0
- package/lib/typescript/module/live/components/StreamConfigPanel.d.ts.map +1 -0
- package/lib/typescript/module/live/context/LiveConfigContext.d.ts +78 -0
- package/lib/typescript/module/live/context/LiveConfigContext.d.ts.map +1 -0
- package/lib/typescript/module/live/context/LiveRoomContext.d.ts +12 -0
- package/lib/typescript/module/live/context/LiveRoomContext.d.ts.map +1 -0
- package/lib/typescript/module/live/hooks/useActiveSpeakers.d.ts +3 -0
- package/lib/typescript/module/live/hooks/useActiveSpeakers.d.ts.map +1 -0
- package/lib/typescript/module/live/hooks/useRoomAudio.d.ts +16 -0
- package/lib/typescript/module/live/hooks/useRoomAudio.d.ts.map +1 -0
- package/lib/typescript/module/live/hooks/useRoomConnection.d.ts +29 -0
- package/lib/typescript/module/live/hooks/useRoomConnection.d.ts.map +1 -0
- package/lib/typescript/module/live/hooks/useRoomManager.d.ts +11 -0
- package/lib/typescript/module/live/hooks/useRoomManager.d.ts.map +1 -0
- package/lib/typescript/module/live/hooks/useRoomUsers.d.ts +5 -0
- package/lib/typescript/module/live/hooks/useRoomUsers.d.ts.map +1 -0
- package/lib/typescript/module/live/index.d.ts +25 -0
- package/lib/typescript/module/live/index.d.ts.map +1 -0
- package/lib/typescript/module/live/services/livekitService.d.ts +7 -0
- package/lib/typescript/module/live/services/livekitService.d.ts.map +1 -0
- package/lib/typescript/module/live/services/spaceSocketService.d.ts +69 -0
- package/lib/typescript/module/live/services/spaceSocketService.d.ts.map +1 -0
- package/lib/typescript/module/live/services/spacesService.d.ts +181 -0
- package/lib/typescript/module/live/services/spacesService.d.ts.map +1 -0
- package/lib/typescript/module/live/types.d.ts +100 -0
- package/lib/typescript/module/live/types.d.ts.map +1 -0
- package/lib/typescript/module/live/validation.d.ts +658 -0
- package/lib/typescript/module/live/validation.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/schema.d.ts +1072 -0
- package/lib/typescript/module/schema.d.ts.map +1 -0
- package/package.json +123 -21
- package/src/index.native.ts +2 -0
- package/src/live/assets/icons/spaces-icon.tsx +15 -0
- package/src/live/assets/icons/syra-icon.tsx +13 -0
- package/src/live/assets/sounds/intro.mp3 +0 -0
- package/src/live/colors.ts +57 -0
- package/src/live/components/AnimatedPulse.tsx +52 -0
- package/src/live/components/AnimatedSpeakerRing.tsx +101 -0
- package/src/live/components/CreateRoomSheet.tsx +654 -0
- package/src/live/components/InsightsPanel.tsx +202 -0
- package/src/live/components/LiveRoomSheet.tsx +970 -0
- package/src/live/components/MiniRoomBar.tsx +167 -0
- package/src/live/components/PanelHeader.tsx +36 -0
- package/src/live/components/PodcastStreamPicker.tsx +1155 -0
- package/src/live/components/RecordingCard.tsx +154 -0
- package/src/live/components/RecordingsPanel.tsx +252 -0
- package/src/live/components/RoomCard.tsx +343 -0
- package/src/live/components/StreamConfigModal.tsx +600 -0
- package/src/live/components/StreamConfigPanel.tsx +729 -0
- package/src/live/context/LiveConfigContext.tsx +96 -0
- package/src/live/context/LiveRoomContext.tsx +235 -0
- package/src/live/hooks/useActiveSpeakers.ts +39 -0
- package/src/live/hooks/useRoomAudio.ts +103 -0
- package/src/live/hooks/useRoomConnection.ts +162 -0
- package/src/live/hooks/useRoomManager.ts +17 -0
- package/src/live/hooks/useRoomUsers.ts +52 -0
- package/src/live/index.ts +104 -0
- package/src/live/services/livekitService.ts +11 -0
- package/src/live/services/spaceSocketService.ts +136 -0
- package/src/live/services/spacesService.ts +692 -0
- package/src/live/types.ts +119 -0
- package/src/live/validation.ts +279 -0
- package/dist/cjs/client.js +0 -244
- package/dist/cjs/errors.js +0 -16
- package/dist/cjs/index.js +0 -15
- package/dist/cjs/package.json +0 -3
- package/dist/esm/client.js +0 -240
- package/dist/esm/errors.js +0 -12
- package/dist/esm/index.js +0 -3
- package/dist/esm/package.json +0 -3
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ViewStyle } from 'react-native';
|
|
3
|
+
import type { LiveTheme, UserEntity, HttpClient } from '../types';
|
|
4
|
+
import { type RoomsServiceInstance } from '../services/spacesService';
|
|
5
|
+
import { RoomSocketService } from '../services/spaceSocketService';
|
|
6
|
+
import { type GetRoomTokenFn } from '../services/livekitService';
|
|
7
|
+
/**
|
|
8
|
+
* The viewer's pinned Syra podcast (resolved from their profile media), surfaced
|
|
9
|
+
* by {@link LiveConfig.getPinnedPodcast}. `title`/`artworkUrl` are optional —
|
|
10
|
+
* the id is all the picker needs to drill into the episode list.
|
|
11
|
+
*/
|
|
12
|
+
export interface PinnedPodcast {
|
|
13
|
+
syraPodcastId: string;
|
|
14
|
+
title?: string;
|
|
15
|
+
artworkUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface LiveConfig {
|
|
18
|
+
httpClient: HttpClient;
|
|
19
|
+
socketUrl: string;
|
|
20
|
+
useTheme: () => LiveTheme;
|
|
21
|
+
/**
|
|
22
|
+
* Translate a UI string key to the active locale. Optional: hosts WITH an i18n
|
|
23
|
+
* layer (the Mention frontend) inject their real translator so the shared
|
|
24
|
+
* live-room UI localizes; hosts WITHOUT one (the standalone live-rooms app) omit it
|
|
25
|
+
* and the shared components fall back to their bundled English source copy.
|
|
26
|
+
* Keys are looked up flat (e.g. `agora.podcastStream.disclaimer`).
|
|
27
|
+
*/
|
|
28
|
+
t?: (key: string, options?: Record<string, string | number>) => string;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the viewer's pinned Syra podcast from their profile media, or `null`
|
|
31
|
+
* when they have none / it can't be read. Optional: hosts that expose profile
|
|
32
|
+
* media wire it so the podcast picker can offer a one-tap "stream my pinned
|
|
33
|
+
* podcast" quick-start row. The picker renders nothing when this is absent or
|
|
34
|
+
* resolves to `null`.
|
|
35
|
+
*/
|
|
36
|
+
getPinnedPodcast?: () => Promise<PinnedPodcast | null>;
|
|
37
|
+
useUserById: (id: string | undefined) => UserEntity | undefined;
|
|
38
|
+
ensureUserById: (id: string, loader: (id: string) => Promise<UserEntity | null | undefined>) => Promise<UserEntity | undefined>;
|
|
39
|
+
getCachedFileDownloadUrl: (oxyServices: unknown, fileId: string, variant?: string) => Promise<string>;
|
|
40
|
+
getCachedFileDownloadUrlSync: (oxyServices: unknown, fileId: string, variant?: string) => string;
|
|
41
|
+
AvatarComponent: React.ComponentType<{
|
|
42
|
+
size: number;
|
|
43
|
+
source?: string;
|
|
44
|
+
shape?: string;
|
|
45
|
+
style?: ViewStyle;
|
|
46
|
+
}>;
|
|
47
|
+
toast: {
|
|
48
|
+
(message: string, options?: Record<string, unknown>): void;
|
|
49
|
+
success: (message: string) => void;
|
|
50
|
+
error: (message: string) => void;
|
|
51
|
+
};
|
|
52
|
+
introSound?: number;
|
|
53
|
+
isDesktop?: boolean;
|
|
54
|
+
useIsDesktop?: () => boolean;
|
|
55
|
+
onRoomChanged?: (roomId: string) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Optional NativeWind className applied to the floating live-room dock and its
|
|
58
|
+
* backdrop. Hosts whose web shell uses a DOCUMENT-scroll model (html/body/#root
|
|
59
|
+
* = height:auto + overflow:visible, the window is the scroller) must pass
|
|
60
|
+
* `"web:fixed"` so the dock pins to the VIEWPORT bottom instead of resolving
|
|
61
|
+
* its `position: absolute` against the tall document and sinking to the page
|
|
62
|
+
* bottom. Omitted on hosts with the default fixed-viewport web model (and on
|
|
63
|
+
* native, where `web:fixed` is a no-op and the dock pins via `position:
|
|
64
|
+
* absolute` against the screen-filling root).
|
|
65
|
+
*/
|
|
66
|
+
dockClassName?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface LiveConfigInternal extends LiveConfig {
|
|
69
|
+
roomsService: RoomsServiceInstance;
|
|
70
|
+
roomSocketService: RoomSocketService;
|
|
71
|
+
getRoomToken: GetRoomTokenFn;
|
|
72
|
+
}
|
|
73
|
+
export declare function useLiveConfig(): LiveConfigInternal;
|
|
74
|
+
export declare function LiveConfigProvider({ config, children }: {
|
|
75
|
+
config: LiveConfig;
|
|
76
|
+
children: React.ReactNode;
|
|
77
|
+
}): React.JSX.Element;
|
|
78
|
+
//# sourceMappingURL=LiveConfigContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveConfigContext.d.ts","sourceRoot":"","sources":["../../../../../src/live/context/LiveConfigContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LiveRoomContextProps {
|
|
3
|
+
activeRoomId: string | null;
|
|
4
|
+
joinLiveRoom: (roomId: string) => void;
|
|
5
|
+
leaveLiveRoom: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function useLiveRoom(): LiveRoomContextProps;
|
|
8
|
+
export declare function LiveRoomProvider({ children }: {
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}): React.JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=LiveRoomContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveRoomContext.d.ts","sourceRoot":"","sources":["../../../../../src/live/context/LiveRoomContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAkBzF,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAQD,wBAAgB,WAAW,yBAE1B;AAOD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBA6K3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useActiveSpeakers.d.ts","sourceRoot":"","sources":["../../../../../src/live/hooks/useActiveSpeakers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA0B,MAAM,gBAAgB,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAmChE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Room } from 'livekit-client';
|
|
2
|
+
interface UseRoomAudioOptions {
|
|
3
|
+
roomId: string;
|
|
4
|
+
isSpeaker: boolean;
|
|
5
|
+
isMuted: boolean;
|
|
6
|
+
isConnected: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface UseRoomAudioReturn {
|
|
9
|
+
isLiveKitConnected: boolean;
|
|
10
|
+
localAudioEnabled: boolean;
|
|
11
|
+
micPermissionDenied: boolean;
|
|
12
|
+
livekitRoom: Room | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function useRoomAudio({ roomId, isSpeaker, isMuted, isConnected }: UseRoomAudioOptions): UseRoomAudioReturn;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useRoomAudio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRoomAudio.d.ts","sourceRoot":"","sources":["../../../../../src/live/hooks/useRoomAudio.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAqC,MAAM,gBAAgB,CAAC;AASzE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,mBAAmB,GAAG,kBAAkB,CA6EjH"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { RoomParticipant, StreamInfo } from '../types';
|
|
2
|
+
interface UseRoomConnectionOptions {
|
|
3
|
+
roomId: string;
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
interface UseRoomConnectionReturn {
|
|
7
|
+
isConnected: boolean;
|
|
8
|
+
participants: RoomParticipant[];
|
|
9
|
+
myRole: 'host' | 'speaker' | 'listener' | null;
|
|
10
|
+
isMuted: boolean;
|
|
11
|
+
speakerRequests: Array<{
|
|
12
|
+
userId: string;
|
|
13
|
+
requestedAt: string;
|
|
14
|
+
}>;
|
|
15
|
+
activeStream: StreamInfo | null;
|
|
16
|
+
isRecording: boolean;
|
|
17
|
+
activeRecordingId: string | null;
|
|
18
|
+
join: () => void;
|
|
19
|
+
leave: () => void;
|
|
20
|
+
toggleMute: () => void;
|
|
21
|
+
requestToSpeak: () => void;
|
|
22
|
+
approveSpeaker: (userId: string) => void;
|
|
23
|
+
denySpeaker: (userId: string) => void;
|
|
24
|
+
removeSpeaker: (userId: string) => void;
|
|
25
|
+
isRoomEnded: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function useRoomConnection({ roomId, enabled, }: UseRoomConnectionOptions): UseRoomConnectionReturn;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=useRoomConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRoomConnection.d.ts","sourceRoot":"","sources":["../../../../../src/live/hooks/useRoomConnection.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5D,UAAU,wBAAwB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAc,GACf,EAAE,wBAAwB,GAAG,uBAAuB,CAgIpD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RoomAttachmentData } from "../types";
|
|
2
|
+
export declare const useRoomManager: () => {
|
|
3
|
+
room: RoomAttachmentData | null;
|
|
4
|
+
setRoom: import("react").Dispatch<import("react").SetStateAction<RoomAttachmentData | null>>;
|
|
5
|
+
attachRoom: (data: RoomAttachmentData) => void;
|
|
6
|
+
removeRoom: () => void;
|
|
7
|
+
hasContent: () => boolean;
|
|
8
|
+
loadRoomFromDraft: (draftRoom: RoomAttachmentData | null) => void;
|
|
9
|
+
clearRoom: () => void;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useRoomManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRoomManager.d.ts","sourceRoot":"","sources":["../../../../../src/live/hooks/useRoomManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,eAAO,MAAM,cAAc;;;uBAGa,kBAAkB;;;mCAMN,kBAAkB,GAAG,IAAI;;CAI5E,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { UserEntity } from '../types';
|
|
2
|
+
export declare function useRoomUsers(userIds: string[]): void;
|
|
3
|
+
export declare function getDisplayName(userProfile: UserEntity | undefined, userId: string, isCurrentUser?: boolean): string;
|
|
4
|
+
export declare function getAvatarUrl(userProfile: UserEntity | undefined, oxyServices: unknown, getCachedFileDownloadUrlSync: (oxyServices: unknown, fileId: string, variant?: string) => string): string | undefined;
|
|
5
|
+
//# sourceMappingURL=useRoomUsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRoomUsers.d.ts","sourceRoot":"","sources":["../../../../../src/live/hooks/useRoomUsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAyB7C;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,UAAU,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAUnH;AAED,wBAAgB,YAAY,CAC1B,WAAW,EAAE,UAAU,GAAG,SAAS,EACnC,WAAW,EAAE,OAAO,EACpB,4BAA4B,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,GAC/F,MAAM,GAAG,SAAS,CAGpB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type { Room, RoomParticipant, Recording, House, HouseMember, Series, SeriesEpisode, Recurrence, RoomTemplate, RoomAttachment, RoomAttachmentData, ParticipantsUpdateData, MuteUpdateData, SpeakerRequestData, RecordingStateData, StreamInfo, UserEntity, LiveTheme, HttpRequestConfig, HttpClient, FileDownloadService, } from './types';
|
|
2
|
+
export { LIVE_COLOR, LIVE_TINT_COLOR, LIVE_FOREGROUND_COLOR, ROOM_TYPE_META, getRoomTypeMeta, type BadgedRoomType, type RoomTypeMeta, } from './colors';
|
|
3
|
+
export { ZRoom, ZRoomParticipant, ZHouse, ZHouseMember, ZSeries, ZRecurrence, ZRoomTemplate, ZSeriesEpisode, ZRoomAttachment, ZStartStreamResponse, ZGenerateStreamKeyResponse, ZStreamInfo, ZRecording, validateRoom, validateRooms, validateHouse, validateSeries, validateRecording, validateRecordings, } from './validation';
|
|
4
|
+
export { LiveConfigProvider, useLiveConfig, type LiveConfig, type LiveConfigInternal, } from './context/LiveConfigContext';
|
|
5
|
+
export { LiveRoomProvider, useLiveRoom } from './context/LiveRoomContext';
|
|
6
|
+
export { createRoomsService, type RoomsServiceInstance, type CreateRoomData, type PodcastResult, type EpisodeListItem, } from './services/spacesService';
|
|
7
|
+
export { RoomSocketService } from './services/spaceSocketService';
|
|
8
|
+
export { createGetRoomToken, type GetRoomTokenFn, } from './services/livekitService';
|
|
9
|
+
export { useRoomConnection } from './hooks/useRoomConnection';
|
|
10
|
+
export { useRoomAudio } from './hooks/useRoomAudio';
|
|
11
|
+
export { useRoomUsers, getDisplayName, getAvatarUrl } from './hooks/useRoomUsers';
|
|
12
|
+
export { useRoomManager } from './hooks/useRoomManager';
|
|
13
|
+
export { useActiveSpeakers } from './hooks/useActiveSpeakers';
|
|
14
|
+
export { RoomCard } from './components/RoomCard';
|
|
15
|
+
export { LiveRoomSheet } from './components/LiveRoomSheet';
|
|
16
|
+
export { MiniRoomBar, MINI_BAR_HEIGHT } from './components/MiniRoomBar';
|
|
17
|
+
export { StreamConfigModal } from './components/StreamConfigModal';
|
|
18
|
+
export { StreamConfigPanel } from './components/StreamConfigPanel';
|
|
19
|
+
export { InsightsPanel } from './components/InsightsPanel';
|
|
20
|
+
export { CreateRoomSheet, type CreateRoomSheetRef, type CreateRoomFormState } from './components/CreateRoomSheet';
|
|
21
|
+
export { RecordingsPanel } from './components/RecordingsPanel';
|
|
22
|
+
export { RecordingCard } from './components/RecordingCard';
|
|
23
|
+
export { LiveRoomsIcon, LiveRoomsIconActive } from './assets/icons/spaces-icon';
|
|
24
|
+
export { SyraIcon, SyraIconActive } from './assets/icons/syra-icon';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/live/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,IAAI,EACJ,eAAe,EACf,SAAS,EACT,KAAK,EACL,WAAW,EACX,MAAM,EACN,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAIjB,OAAO,EACL,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,OAAO,EACP,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG1E,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HttpClient } from '../types';
|
|
2
|
+
export type GetRoomTokenFn = (roomId: string) => Promise<{
|
|
3
|
+
token: string;
|
|
4
|
+
url: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function createGetRoomToken(httpClient: Pick<HttpClient, 'post'>): GetRoomTokenFn;
|
|
7
|
+
//# sourceMappingURL=livekitService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"livekitService.d.ts","sourceRoot":"","sources":["../../../../../src/live/services/livekitService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEzF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,cAAc,CAMvF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { RoomParticipant, ParticipantsUpdateData, MuteUpdateData, SpeakerRequestData } from '../types';
|
|
2
|
+
type SimpleRoomCallback = (data: {
|
|
3
|
+
roomId: string;
|
|
4
|
+
timestamp?: string;
|
|
5
|
+
}) => void;
|
|
6
|
+
export declare class RoomSocketService {
|
|
7
|
+
private socket;
|
|
8
|
+
private _isConnected;
|
|
9
|
+
private socketUrl;
|
|
10
|
+
constructor(socketUrl: string);
|
|
11
|
+
get isConnected(): boolean;
|
|
12
|
+
connect(userId: string, token?: string): void;
|
|
13
|
+
disconnect(): void;
|
|
14
|
+
joinRoom(roomId: string, callback?: (res: {
|
|
15
|
+
success: boolean;
|
|
16
|
+
participants?: RoomParticipant[];
|
|
17
|
+
myRole?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}) => void): void;
|
|
20
|
+
leaveRoom(roomId: string): void;
|
|
21
|
+
setMute(roomId: string, isMuted: boolean): void;
|
|
22
|
+
requestToSpeak(roomId: string): void;
|
|
23
|
+
approveSpeaker(roomId: string, targetUserId: string): void;
|
|
24
|
+
denySpeaker(roomId: string, targetUserId: string): void;
|
|
25
|
+
removeSpeaker(roomId: string, targetUserId: string): void;
|
|
26
|
+
onParticipantsUpdate(cb: (data: ParticipantsUpdateData) => void): () => void;
|
|
27
|
+
onParticipantMute(cb: (data: MuteUpdateData) => void): () => void;
|
|
28
|
+
onSpeakerRequestReceived(cb: (data: SpeakerRequestData) => void): () => void;
|
|
29
|
+
onSpeakerApproved(cb: SimpleRoomCallback): () => void;
|
|
30
|
+
onSpeakerDenied(cb: SimpleRoomCallback): () => void;
|
|
31
|
+
onSpeakerRemoved(cb: SimpleRoomCallback): () => void;
|
|
32
|
+
onRoomStarted(cb: SimpleRoomCallback): () => void;
|
|
33
|
+
onRoomEnded(cb: SimpleRoomCallback): () => void;
|
|
34
|
+
onUserJoined(cb: (data: {
|
|
35
|
+
userId: string;
|
|
36
|
+
role: string;
|
|
37
|
+
roomId: string;
|
|
38
|
+
}) => void): () => void;
|
|
39
|
+
onUserLeft(cb: (data: {
|
|
40
|
+
userId: string;
|
|
41
|
+
roomId: string;
|
|
42
|
+
}) => void): () => void;
|
|
43
|
+
onStreamStarted(cb: (data: {
|
|
44
|
+
roomId: string;
|
|
45
|
+
title?: string;
|
|
46
|
+
image?: string;
|
|
47
|
+
description?: string;
|
|
48
|
+
startedAt?: string;
|
|
49
|
+
durationSec?: number;
|
|
50
|
+
timestamp: string;
|
|
51
|
+
}) => void): () => void;
|
|
52
|
+
onStreamStopped(cb: (data: {
|
|
53
|
+
roomId: string;
|
|
54
|
+
timestamp: string;
|
|
55
|
+
}) => void): () => void;
|
|
56
|
+
onRecordingStarted(cb: (data: {
|
|
57
|
+
roomId: string;
|
|
58
|
+
recordingId: string;
|
|
59
|
+
timestamp: string;
|
|
60
|
+
}) => void): () => void;
|
|
61
|
+
onRecordingStopped(cb: (data: {
|
|
62
|
+
roomId: string;
|
|
63
|
+
recordingId?: string;
|
|
64
|
+
reason?: string;
|
|
65
|
+
timestamp: string;
|
|
66
|
+
}) => void): () => void;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=spaceSocketService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spaceSocketService.d.ts","sourceRoot":"","sources":["../../../../../src/live/services/spaceSocketService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { Room, Recording, House, HttpClient } from '../types';
|
|
2
|
+
export interface CreateRoomData {
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
topic?: string;
|
|
7
|
+
scheduledStart?: string;
|
|
8
|
+
speakerPermission?: 'everyone' | 'followers' | 'invited';
|
|
9
|
+
type?: 'talk' | 'stage' | 'broadcast';
|
|
10
|
+
ownerType?: 'profile' | 'house';
|
|
11
|
+
houseId?: string;
|
|
12
|
+
broadcastKind?: 'user';
|
|
13
|
+
recordingEnabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface StreamMetadataUpdate extends Record<string, unknown> {
|
|
16
|
+
url?: string;
|
|
17
|
+
title?: string;
|
|
18
|
+
image?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
}
|
|
21
|
+
/** A Syra podcast show, as proxied by Mention `GET /profile/media/search?type=podcast`. */
|
|
22
|
+
export interface PodcastResult {
|
|
23
|
+
syraPodcastId: string;
|
|
24
|
+
title: string;
|
|
25
|
+
author?: string;
|
|
26
|
+
artworkUrl?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A single episode row for the picker. Deliberately carries NO audio URL — the
|
|
30
|
+
* enclosure stays server-owned and is resolved at stream-start by the backend.
|
|
31
|
+
*/
|
|
32
|
+
export interface EpisodeListItem {
|
|
33
|
+
episodeId: string;
|
|
34
|
+
title: string;
|
|
35
|
+
durationSec?: number;
|
|
36
|
+
publishedAt?: string;
|
|
37
|
+
artworkUrl?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A single Syra music track row for the listening-party picker. Like the podcast
|
|
41
|
+
* rows it carries NO audio URL — the playable source (presigned original /
|
|
42
|
+
* tokenized HLS / Audius passthrough) stays server-owned and is resolved at
|
|
43
|
+
* stream-start by the backend from the opaque `trackId` alone.
|
|
44
|
+
*/
|
|
45
|
+
export interface MusicTrackResult {
|
|
46
|
+
trackId: string;
|
|
47
|
+
title: string;
|
|
48
|
+
artist?: string;
|
|
49
|
+
durationSec?: number;
|
|
50
|
+
artworkUrl?: string;
|
|
51
|
+
}
|
|
52
|
+
/** Optional seed to start a track stream: a single track, an album, or a playlist. */
|
|
53
|
+
export interface StartTrackStreamBody extends Record<string, unknown> {
|
|
54
|
+
trackId?: string;
|
|
55
|
+
albumId?: string;
|
|
56
|
+
playlistId?: string;
|
|
57
|
+
/** Tracks to queue AFTER `trackId` (up-next). Only used with `trackId`. */
|
|
58
|
+
queue?: {
|
|
59
|
+
trackId: string;
|
|
60
|
+
}[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The outcome of a podcast catalog fetch. `ok:false` signals a genuine request
|
|
64
|
+
* failure (network/transport error), letting the picker distinguish it from a
|
|
65
|
+
* successful-but-empty result (`ok:true` with `items: []`). Neither
|
|
66
|
+
* `searchPodcasts` nor `getPodcastEpisodes` throws — a failure resolves to
|
|
67
|
+
* `{ ok:false }`.
|
|
68
|
+
*/
|
|
69
|
+
export type PodcastFetchResult<T> = {
|
|
70
|
+
ok: true;
|
|
71
|
+
items: T[];
|
|
72
|
+
hasMore: boolean;
|
|
73
|
+
offset: number;
|
|
74
|
+
} | {
|
|
75
|
+
ok: false;
|
|
76
|
+
};
|
|
77
|
+
export declare function createRoomsService(httpClient: HttpClient): {
|
|
78
|
+
getRooms(status?: string, type?: string): Promise<Room[]>;
|
|
79
|
+
getRoom(id: string): Promise<Room | null>;
|
|
80
|
+
createRoom(data: CreateRoomData): Promise<Room | null>;
|
|
81
|
+
startRoom(id: string): Promise<boolean>;
|
|
82
|
+
endRoom(id: string): Promise<boolean>;
|
|
83
|
+
stopRoom(id: string): Promise<boolean>;
|
|
84
|
+
joinRoom(id: string): Promise<boolean>;
|
|
85
|
+
leaveRoom(id: string): Promise<boolean>;
|
|
86
|
+
startStream(id: string, data: {
|
|
87
|
+
url: string;
|
|
88
|
+
title?: string;
|
|
89
|
+
image?: string;
|
|
90
|
+
description?: string;
|
|
91
|
+
}): Promise<{
|
|
92
|
+
ingressId: string;
|
|
93
|
+
url: string;
|
|
94
|
+
} | null>;
|
|
95
|
+
generateStreamKey(id: string, data?: {
|
|
96
|
+
title?: string;
|
|
97
|
+
image?: string;
|
|
98
|
+
description?: string;
|
|
99
|
+
}): Promise<{
|
|
100
|
+
rtmpUrl: string;
|
|
101
|
+
streamKey: string;
|
|
102
|
+
} | null>;
|
|
103
|
+
updateStreamMetadata(id: string, data: StreamMetadataUpdate): Promise<boolean>;
|
|
104
|
+
stopStream(id: string): Promise<boolean>;
|
|
105
|
+
searchPodcasts(query: string, offset?: number): Promise<PodcastFetchResult<PodcastResult>>;
|
|
106
|
+
getPodcastEpisodes(syraPodcastId: string, offset?: number): Promise<PodcastFetchResult<EpisodeListItem>>;
|
|
107
|
+
startPodcastStream(roomId: string, body: {
|
|
108
|
+
syraPodcastId: string;
|
|
109
|
+
episodeId: string;
|
|
110
|
+
queue?: {
|
|
111
|
+
syraPodcastId?: string;
|
|
112
|
+
episodeId: string;
|
|
113
|
+
}[];
|
|
114
|
+
}): Promise<{
|
|
115
|
+
ingressId: string;
|
|
116
|
+
url: string;
|
|
117
|
+
} | null>;
|
|
118
|
+
/**
|
|
119
|
+
* Advance a live podcast stream to the next queued episode (manager + live
|
|
120
|
+
* gated server-side). Resolves `{ ended: false }` when the next episode
|
|
121
|
+
* started, `{ ended: true }` when the queue drained (the stream will clear
|
|
122
|
+
* via the `room:stream:stopped` socket event), or `null` on failure.
|
|
123
|
+
*/
|
|
124
|
+
skipPodcastNext(roomId: string): Promise<{
|
|
125
|
+
ended: boolean;
|
|
126
|
+
} | null>;
|
|
127
|
+
/**
|
|
128
|
+
* Search the Syra music catalog for the listening-party picker. Reuses the
|
|
129
|
+
* existing tracks search endpoint (`GET /tracks/search`); like the podcast
|
|
130
|
+
* search it never throws — a failure resolves to `{ ok:false }` so the picker
|
|
131
|
+
* can tell a genuine error from a successful-but-empty result.
|
|
132
|
+
*/
|
|
133
|
+
searchMusic(query: string, offset?: number): Promise<PodcastFetchResult<MusicTrackResult>>;
|
|
134
|
+
/**
|
|
135
|
+
* Start streaming Syra music into the room (a "listening party"): a single
|
|
136
|
+
* track (optionally with an up-next `queue`), or an album / playlist whose
|
|
137
|
+
* ordered tracks the backend resolves into the queue. The client sends only
|
|
138
|
+
* ids — the playable audio URL is resolved server-side at stream-start.
|
|
139
|
+
*/
|
|
140
|
+
startTrackStream(roomId: string, body: StartTrackStreamBody): Promise<{
|
|
141
|
+
ingressId: string;
|
|
142
|
+
url: string;
|
|
143
|
+
} | null>;
|
|
144
|
+
deleteRoom(id: string): Promise<boolean>;
|
|
145
|
+
archiveRoom(id: string): Promise<{
|
|
146
|
+
success: boolean;
|
|
147
|
+
archived: boolean;
|
|
148
|
+
}>;
|
|
149
|
+
getHouses(search?: string): Promise<House[]>;
|
|
150
|
+
getHouse(id: string): Promise<House | null>;
|
|
151
|
+
getMyHouses(userId: string): Promise<House[]>;
|
|
152
|
+
getUserHouses(userId: string): Promise<House[]>;
|
|
153
|
+
getHouseRooms(houseId: string, status?: string): Promise<Room[]>;
|
|
154
|
+
startRecording(roomId: string): Promise<boolean>;
|
|
155
|
+
stopRecording(roomId: string): Promise<boolean>;
|
|
156
|
+
getRoomRecordings(roomId: string): Promise<Recording[]>;
|
|
157
|
+
getRecording(recordingId: string): Promise<{
|
|
158
|
+
recording: Recording;
|
|
159
|
+
playbackUrl: string;
|
|
160
|
+
} | null>;
|
|
161
|
+
updateRecordingAccess(recordingId: string, access: "public" | "participants"): Promise<boolean>;
|
|
162
|
+
deleteRecording(recordingId: string): Promise<boolean>;
|
|
163
|
+
getRecordings(sortBy?: string, limit?: number): Promise<Recording[]>;
|
|
164
|
+
getTopHosts(): Promise<{
|
|
165
|
+
userId: string;
|
|
166
|
+
roomCount: number;
|
|
167
|
+
totalListeners: number;
|
|
168
|
+
}[]>;
|
|
169
|
+
createHouse(data: {
|
|
170
|
+
name: string;
|
|
171
|
+
description?: string;
|
|
172
|
+
tags?: string[];
|
|
173
|
+
isPublic?: boolean;
|
|
174
|
+
}): Promise<House | null>;
|
|
175
|
+
uploadHouseAvatar(houseId: string, formData: FormData): Promise<string | null>;
|
|
176
|
+
uploadHouseCover(houseId: string, formData: FormData): Promise<string | null>;
|
|
177
|
+
uploadRoomImage(roomId: string, formData: FormData): Promise<string | null>;
|
|
178
|
+
uploadSeriesCover(seriesId: string, formData: FormData): Promise<string | null>;
|
|
179
|
+
};
|
|
180
|
+
export type RoomsServiceInstance = ReturnType<typeof createRoomsService>;
|
|
181
|
+
//# sourceMappingURL=spacesService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacesService.d.ts","sourceRoot":"","sources":["../../../../../src/live/services/spacesService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { RoomParticipant } from './validation';
|
|
2
|
+
export type { Room, RoomParticipant, Recording, House, HouseMember, Series, SeriesEpisode, Recurrence, RoomTemplate, RoomAttachment, } from './validation';
|
|
3
|
+
/**
|
|
4
|
+
* The "now playing" stream surfaced in the live room. Derived from the
|
|
5
|
+
* `room:stream:started` socket payload (and the room's persisted stream fields);
|
|
6
|
+
* it is NOT parsed through zod, so it stays a plain structural type rather than
|
|
7
|
+
* `z.infer<typeof ZStreamInfo>`. `startedAt` / `durationSec` are present for
|
|
8
|
+
* length-known streams (e.g. a podcast episode) and drive the progress bar;
|
|
9
|
+
* manual URL/RTMP streams omit them and render no progress UI.
|
|
10
|
+
*/
|
|
11
|
+
export interface StreamInfo {
|
|
12
|
+
title?: string;
|
|
13
|
+
image?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
/** ISO timestamp when the current stream began. */
|
|
16
|
+
startedAt?: string;
|
|
17
|
+
/** Total length of the current stream in seconds, when known. */
|
|
18
|
+
durationSec?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ParticipantsUpdateData {
|
|
21
|
+
roomId: string;
|
|
22
|
+
participants: RoomParticipant[];
|
|
23
|
+
count: number;
|
|
24
|
+
timestamp: string;
|
|
25
|
+
}
|
|
26
|
+
export interface MuteUpdateData {
|
|
27
|
+
userId: string;
|
|
28
|
+
isMuted: boolean;
|
|
29
|
+
timestamp: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SpeakerRequestData {
|
|
32
|
+
roomId: string;
|
|
33
|
+
userId: string;
|
|
34
|
+
timestamp: string;
|
|
35
|
+
}
|
|
36
|
+
export interface RecordingStateData {
|
|
37
|
+
roomId: string;
|
|
38
|
+
recordingId: string;
|
|
39
|
+
reason?: 'manual' | 'max_duration' | 'room_ended' | 'room_stopped';
|
|
40
|
+
timestamp: string;
|
|
41
|
+
}
|
|
42
|
+
export interface RoomAttachmentData {
|
|
43
|
+
roomId: string;
|
|
44
|
+
title: string;
|
|
45
|
+
status?: 'scheduled' | 'live' | 'ended';
|
|
46
|
+
type?: 'talk' | 'stage' | 'broadcast';
|
|
47
|
+
topic?: string;
|
|
48
|
+
host?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface UserEntity {
|
|
51
|
+
id: string;
|
|
52
|
+
username?: string;
|
|
53
|
+
name?: {
|
|
54
|
+
displayName?: string;
|
|
55
|
+
full?: string;
|
|
56
|
+
first?: string;
|
|
57
|
+
last?: string;
|
|
58
|
+
} | string;
|
|
59
|
+
handle?: string;
|
|
60
|
+
avatar?: string | null;
|
|
61
|
+
verified?: boolean;
|
|
62
|
+
bio?: string;
|
|
63
|
+
displayName?: string;
|
|
64
|
+
createdAt?: string;
|
|
65
|
+
[key: string]: unknown;
|
|
66
|
+
}
|
|
67
|
+
export interface LiveTheme {
|
|
68
|
+
isDark?: boolean;
|
|
69
|
+
colors: {
|
|
70
|
+
text: string;
|
|
71
|
+
textSecondary: string;
|
|
72
|
+
background: string;
|
|
73
|
+
backgroundSecondary: string;
|
|
74
|
+
card: string;
|
|
75
|
+
border: string;
|
|
76
|
+
primary: string;
|
|
77
|
+
[key: string]: string;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface HttpRequestConfig {
|
|
81
|
+
params?: Record<string, string | number | boolean | undefined>;
|
|
82
|
+
[key: string]: unknown;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The HTTP client the engine consumes. Deliberately shaped to match an Oxy
|
|
86
|
+
* `oxyServices.createLinkedClient(...).client` as-is: every method resolves to
|
|
87
|
+
* the PARSED RESPONSE BODY directly (not a `{ data }` envelope). Consumers pass
|
|
88
|
+
* that Oxy client straight through — no per-app adapter.
|
|
89
|
+
*/
|
|
90
|
+
export interface HttpClient {
|
|
91
|
+
get: (url: string, config?: HttpRequestConfig) => Promise<Record<string, unknown>>;
|
|
92
|
+
post: (url: string, data?: Record<string, unknown> | FormData, config?: HttpRequestConfig) => Promise<Record<string, unknown>>;
|
|
93
|
+
patch: (url: string, data?: Record<string, unknown>, config?: HttpRequestConfig) => Promise<Record<string, unknown>>;
|
|
94
|
+
delete: (url: string, config?: HttpRequestConfig) => Promise<Record<string, unknown>>;
|
|
95
|
+
}
|
|
96
|
+
export interface FileDownloadService {
|
|
97
|
+
getFileDownloadUrl?(fileId: string, variant?: string, expiresIn?: number): string;
|
|
98
|
+
getFileDownloadUrlAsync?(fileId: string, variant?: string, expiresIn?: number): Promise<string>;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/live/types.ts"],"names":[],"mappings":"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"}
|