@syra.fm/sdk 0.4.0 → 0.5.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/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/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 +1195 -0
- package/lib/commonjs/live/components/LiveRoomSheet.js.map +1 -0
- package/lib/commonjs/live/components/MiniRoomBar.js +161 -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 +304 -0
- package/lib/commonjs/live/components/RecordingsPanel.js.map +1 -0
- package/lib/commonjs/live/components/RoomCard.js +553 -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 +310 -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/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 +1189 -0
- package/lib/module/live/components/LiveRoomSheet.js.map +1 -0
- package/lib/module/live/components/MiniRoomBar.js +154 -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 +298 -0
- package/lib/module/live/components/RecordingsPanel.js.map +1 -0
- package/lib/module/live/components/RoomCard.js +548 -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 +38 -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/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 +24 -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/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 +24 -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 +133 -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/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 +969 -0
- package/src/live/components/MiniRoomBar.tsx +166 -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 +251 -0
- package/src/live/components/RoomCard.tsx +494 -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 +92 -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,642 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRoomsService = createRoomsService;
|
|
7
|
+
var _validation = require("../validation.js");
|
|
8
|
+
/** A Syra podcast show, as proxied by Mention `GET /profile/media/search?type=podcast`. */
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A single episode row for the picker. Deliberately carries NO audio URL — the
|
|
12
|
+
* enclosure stays server-owned and is resolved at stream-start by the backend.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A single Syra music track row for the listening-party picker. Like the podcast
|
|
17
|
+
* rows it carries NO audio URL — the playable source (presigned original /
|
|
18
|
+
* tokenized HLS / Audius passthrough) stays server-owned and is resolved at
|
|
19
|
+
* stream-start by the backend from the opaque `trackId` alone.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/** Optional seed to start a track stream: a single track, an album, or a playlist. */
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The outcome of a podcast catalog fetch. `ok:false` signals a genuine request
|
|
26
|
+
* failure (network/transport error), letting the picker distinguish it from a
|
|
27
|
+
* successful-but-empty result (`ok:true` with `items: []`). Neither
|
|
28
|
+
* `searchPodcasts` nor `getPodcastEpisodes` throws — a failure resolves to
|
|
29
|
+
* `{ ok:false }`.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
function isRecord(value) {
|
|
33
|
+
return typeof value === 'object' && value !== null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Page size for the Syra podcast catalog reads (search + episode list). */
|
|
37
|
+
const PODCAST_PAGE_SIZE = 20;
|
|
38
|
+
|
|
39
|
+
// Podcast catalog reads hit Syra's native endpoints (`/podcasts/search`,
|
|
40
|
+
// `/podcasts/:id/episodes`) — the raw show/episode shape, NOT Mention's
|
|
41
|
+
// pre-mapped `/profile/media/*` proxy. Map `id`→`syraPodcastId`, the absolute
|
|
42
|
+
// `imageSourceUrl`→`artworkUrl`, `duration`/`pubDate`→`durationSec`/`publishedAt`.
|
|
43
|
+
function parsePodcastSearchResponse(data, requestedOffset) {
|
|
44
|
+
const raw = Array.isArray(data.data) ? data.data : [];
|
|
45
|
+
const items = [];
|
|
46
|
+
for (const entry of raw) {
|
|
47
|
+
if (!isRecord(entry)) continue;
|
|
48
|
+
if (typeof entry.id !== 'string' || typeof entry.title !== 'string') continue;
|
|
49
|
+
items.push({
|
|
50
|
+
syraPodcastId: entry.id,
|
|
51
|
+
title: entry.title,
|
|
52
|
+
author: typeof entry.author === 'string' ? entry.author : undefined,
|
|
53
|
+
artworkUrl: typeof entry.imageSourceUrl === 'string' ? entry.imageSourceUrl : undefined
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
items,
|
|
58
|
+
hasMore: data.hasMore === true,
|
|
59
|
+
offset: typeof data.offset === 'number' ? data.offset : requestedOffset
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function parseEpisodeListResponse(data, requestedOffset) {
|
|
63
|
+
const raw = Array.isArray(data.data) ? data.data : [];
|
|
64
|
+
const items = [];
|
|
65
|
+
for (const entry of raw) {
|
|
66
|
+
if (!isRecord(entry)) continue;
|
|
67
|
+
if (typeof entry.id !== 'string' || typeof entry.title !== 'string') continue;
|
|
68
|
+
items.push({
|
|
69
|
+
episodeId: entry.id,
|
|
70
|
+
title: entry.title,
|
|
71
|
+
durationSec: typeof entry.duration === 'number' ? entry.duration : undefined,
|
|
72
|
+
publishedAt: typeof entry.pubDate === 'string' ? entry.pubDate : undefined,
|
|
73
|
+
artworkUrl: typeof entry.imageSourceUrl === 'string' ? entry.imageSourceUrl : undefined
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Syra episodes are page-based (`{ data, total, page, limit }`); derive hasMore.
|
|
77
|
+
const limit = typeof data.limit === 'number' && data.limit > 0 ? data.limit : PODCAST_PAGE_SIZE;
|
|
78
|
+
const page = typeof data.page === 'number' && data.page > 0 ? data.page : 1;
|
|
79
|
+
const total = typeof data.total === 'number' ? data.total : requestedOffset + items.length;
|
|
80
|
+
return {
|
|
81
|
+
items,
|
|
82
|
+
hasMore: page * limit < total,
|
|
83
|
+
offset: requestedOffset
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Parse the Syra track-search response (`{ tracks, total, hasMore }`) into
|
|
89
|
+
* {@link MusicTrackResult} rows. Unlike the offset-paginated podcast search this
|
|
90
|
+
* endpoint returns a flat `hasMore` boolean, so the next offset is derived by the
|
|
91
|
+
* caller (`offset + items.length`). Each track's `coverArt` is the server's image
|
|
92
|
+
* ref — the host's `AvatarComponent` resolves it, mirroring the podcast rows.
|
|
93
|
+
*/
|
|
94
|
+
function parseMusicSearchResponse(data, requestedOffset) {
|
|
95
|
+
const raw = Array.isArray(data.tracks) ? data.tracks : [];
|
|
96
|
+
const items = [];
|
|
97
|
+
for (const entry of raw) {
|
|
98
|
+
if (!isRecord(entry)) continue;
|
|
99
|
+
if (typeof entry.id !== 'string' || typeof entry.title !== 'string') continue;
|
|
100
|
+
items.push({
|
|
101
|
+
trackId: entry.id,
|
|
102
|
+
title: entry.title,
|
|
103
|
+
artist: typeof entry.artistName === 'string' ? entry.artistName : undefined,
|
|
104
|
+
durationSec: typeof entry.duration === 'number' ? entry.duration : undefined,
|
|
105
|
+
artworkUrl: typeof entry.coverArt === 'string' ? entry.coverArt : undefined
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
items,
|
|
110
|
+
hasMore: data.hasMore === true,
|
|
111
|
+
offset: requestedOffset
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function parseRecordingResponse(value) {
|
|
115
|
+
if (!isRecord(value) || typeof value.playbackUrl !== 'string') {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const recording = (0, _validation.validateRecording)(value.recording);
|
|
119
|
+
if (!recording) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
recording,
|
|
124
|
+
playbackUrl: value.playbackUrl
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function createRoomsService(httpClient) {
|
|
128
|
+
return {
|
|
129
|
+
async getRooms(status, type) {
|
|
130
|
+
try {
|
|
131
|
+
const params = {};
|
|
132
|
+
if (status) params.status = status;
|
|
133
|
+
if (type) params.type = type;
|
|
134
|
+
const res = await httpClient.get("/rooms", {
|
|
135
|
+
params
|
|
136
|
+
});
|
|
137
|
+
const raw = res.rooms || res.data || res || [];
|
|
138
|
+
return (0, _validation.validateRooms)(Array.isArray(raw) ? raw : []);
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.warn("Failed to fetch rooms", error);
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
async getRoom(id) {
|
|
145
|
+
if (!id) return null;
|
|
146
|
+
try {
|
|
147
|
+
const res = await httpClient.get(`/rooms/${id}`);
|
|
148
|
+
const raw = res.room || res.data || res || null;
|
|
149
|
+
return raw ? (0, _validation.validateRoom)(raw) : null;
|
|
150
|
+
} catch (error) {
|
|
151
|
+
console.warn("Failed to fetch room", error);
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
async createRoom(data) {
|
|
156
|
+
try {
|
|
157
|
+
const res = await httpClient.post("/rooms", data);
|
|
158
|
+
const raw = res.room || res.data || res || null;
|
|
159
|
+
return raw ? (0, _validation.validateRoom)(raw) : null;
|
|
160
|
+
} catch (error) {
|
|
161
|
+
console.warn("Failed to create room", error);
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
async startRoom(id) {
|
|
166
|
+
if (!id) return false;
|
|
167
|
+
try {
|
|
168
|
+
await httpClient.post(`/rooms/${id}/start`);
|
|
169
|
+
return true;
|
|
170
|
+
} catch (error) {
|
|
171
|
+
console.warn("Failed to start room", error);
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
async endRoom(id) {
|
|
176
|
+
if (!id) return false;
|
|
177
|
+
try {
|
|
178
|
+
await httpClient.post(`/rooms/${id}/end`);
|
|
179
|
+
return true;
|
|
180
|
+
} catch (error) {
|
|
181
|
+
console.warn("Failed to end room", error);
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
async stopRoom(id) {
|
|
186
|
+
if (!id) return false;
|
|
187
|
+
try {
|
|
188
|
+
await httpClient.post(`/rooms/${id}/stop`);
|
|
189
|
+
return true;
|
|
190
|
+
} catch (error) {
|
|
191
|
+
console.warn("Failed to stop room", error);
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
async joinRoom(id) {
|
|
196
|
+
if (!id) return false;
|
|
197
|
+
try {
|
|
198
|
+
await httpClient.post(`/rooms/${id}/join`);
|
|
199
|
+
return true;
|
|
200
|
+
} catch (error) {
|
|
201
|
+
console.warn("Failed to join room", error);
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
async leaveRoom(id) {
|
|
206
|
+
if (!id) return false;
|
|
207
|
+
try {
|
|
208
|
+
await httpClient.post(`/rooms/${id}/leave`);
|
|
209
|
+
return true;
|
|
210
|
+
} catch (error) {
|
|
211
|
+
console.warn("Failed to leave room", error);
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
async startStream(id, data) {
|
|
216
|
+
if (!id) return null;
|
|
217
|
+
try {
|
|
218
|
+
const res = await httpClient.post(`/rooms/${id}/stream`, data);
|
|
219
|
+
const parsed = _validation.ZStartStreamResponse.safeParse(res);
|
|
220
|
+
if (!parsed.success) {
|
|
221
|
+
console.warn('[live] Invalid startStream response:', parsed.error.issues[0]);
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
return parsed.data;
|
|
225
|
+
} catch (error) {
|
|
226
|
+
console.warn("Failed to start stream", error);
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
async generateStreamKey(id, data) {
|
|
231
|
+
if (!id) return null;
|
|
232
|
+
try {
|
|
233
|
+
const res = await httpClient.post(`/rooms/${id}/stream/rtmp`, data || {});
|
|
234
|
+
const parsed = _validation.ZGenerateStreamKeyResponse.safeParse(res);
|
|
235
|
+
if (!parsed.success) {
|
|
236
|
+
console.warn('[live] Invalid generateStreamKey response:', parsed.error.issues[0]);
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
return parsed.data;
|
|
240
|
+
} catch (error) {
|
|
241
|
+
console.warn("Failed to generate stream key", error);
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
async updateStreamMetadata(id, data) {
|
|
246
|
+
if (!id) return false;
|
|
247
|
+
try {
|
|
248
|
+
await httpClient.patch(`/rooms/${id}/stream`, data);
|
|
249
|
+
return true;
|
|
250
|
+
} catch (error) {
|
|
251
|
+
console.warn("Failed to update stream metadata", error);
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
async stopStream(id) {
|
|
256
|
+
if (!id) return false;
|
|
257
|
+
try {
|
|
258
|
+
await httpClient.delete(`/rooms/${id}/stream`);
|
|
259
|
+
return true;
|
|
260
|
+
} catch (error) {
|
|
261
|
+
console.warn("Failed to stop stream", error);
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
// --- Podcast streaming (Syra catalog → LiveKit URL ingress) ---
|
|
266
|
+
|
|
267
|
+
async searchPodcasts(query, offset = 0) {
|
|
268
|
+
try {
|
|
269
|
+
const res = await httpClient.get('/podcasts/search', {
|
|
270
|
+
params: {
|
|
271
|
+
q: query,
|
|
272
|
+
offset: String(offset),
|
|
273
|
+
limit: String(PODCAST_PAGE_SIZE)
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
return {
|
|
277
|
+
ok: true,
|
|
278
|
+
...parsePodcastSearchResponse(res, offset)
|
|
279
|
+
};
|
|
280
|
+
} catch (error) {
|
|
281
|
+
console.warn("Failed to search podcasts", error);
|
|
282
|
+
return {
|
|
283
|
+
ok: false
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
async getPodcastEpisodes(syraPodcastId, offset = 0) {
|
|
288
|
+
// An empty id is not a failure — it is simply an empty (successful) result.
|
|
289
|
+
if (!syraPodcastId) return {
|
|
290
|
+
ok: true,
|
|
291
|
+
items: [],
|
|
292
|
+
hasMore: false,
|
|
293
|
+
offset
|
|
294
|
+
};
|
|
295
|
+
try {
|
|
296
|
+
const res = await httpClient.get(`/podcasts/${syraPodcastId}/episodes`, {
|
|
297
|
+
params: {
|
|
298
|
+
page: String(Math.floor(offset / PODCAST_PAGE_SIZE) + 1),
|
|
299
|
+
limit: String(PODCAST_PAGE_SIZE)
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
return {
|
|
303
|
+
ok: true,
|
|
304
|
+
...parseEpisodeListResponse(res, offset)
|
|
305
|
+
};
|
|
306
|
+
} catch (error) {
|
|
307
|
+
console.warn("Failed to fetch podcast episodes", error);
|
|
308
|
+
return {
|
|
309
|
+
ok: false
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
async startPodcastStream(roomId, body) {
|
|
314
|
+
if (!roomId) return null;
|
|
315
|
+
try {
|
|
316
|
+
const res = await httpClient.post(`/rooms/${roomId}/stream/podcast`, body);
|
|
317
|
+
const parsed = _validation.ZStartStreamResponse.safeParse(res);
|
|
318
|
+
if (!parsed.success) {
|
|
319
|
+
console.warn('[live] Invalid startPodcastStream response:', parsed.error.issues[0]);
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
return parsed.data;
|
|
323
|
+
} catch (error) {
|
|
324
|
+
console.warn("Failed to start podcast stream", error);
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
/**
|
|
329
|
+
* Advance a live podcast stream to the next queued episode (manager + live
|
|
330
|
+
* gated server-side). Resolves `{ ended: false }` when the next episode
|
|
331
|
+
* started, `{ ended: true }` when the queue drained (the stream will clear
|
|
332
|
+
* via the `room:stream:stopped` socket event), or `null` on failure.
|
|
333
|
+
*/
|
|
334
|
+
async skipPodcastNext(roomId) {
|
|
335
|
+
if (!roomId) return null;
|
|
336
|
+
try {
|
|
337
|
+
const res = await httpClient.post(`/rooms/${roomId}/stream/podcast/next`);
|
|
338
|
+
if (res.ended === true) return {
|
|
339
|
+
ended: true
|
|
340
|
+
};
|
|
341
|
+
const parsed = _validation.ZStartStreamResponse.safeParse(res);
|
|
342
|
+
if (parsed.success) return {
|
|
343
|
+
ended: false
|
|
344
|
+
};
|
|
345
|
+
console.warn('[live] Invalid skipPodcastNext response:', parsed.error.issues[0]);
|
|
346
|
+
return null;
|
|
347
|
+
} catch (error) {
|
|
348
|
+
console.warn("Failed to skip to next podcast episode", error);
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
// --- Music streaming (Syra catalog → LiveKit URL ingress) ---
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Search the Syra music catalog for the listening-party picker. Reuses the
|
|
356
|
+
* existing tracks search endpoint (`GET /tracks/search`); like the podcast
|
|
357
|
+
* search it never throws — a failure resolves to `{ ok:false }` so the picker
|
|
358
|
+
* can tell a genuine error from a successful-but-empty result.
|
|
359
|
+
*/
|
|
360
|
+
async searchMusic(query, offset = 0) {
|
|
361
|
+
try {
|
|
362
|
+
const res = await httpClient.get('/tracks/search', {
|
|
363
|
+
params: {
|
|
364
|
+
q: query,
|
|
365
|
+
offset: String(offset)
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
return {
|
|
369
|
+
ok: true,
|
|
370
|
+
...parseMusicSearchResponse(res, offset)
|
|
371
|
+
};
|
|
372
|
+
} catch (error) {
|
|
373
|
+
console.warn("Failed to search music", error);
|
|
374
|
+
return {
|
|
375
|
+
ok: false
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
/**
|
|
380
|
+
* Start streaming Syra music into the room (a "listening party"): a single
|
|
381
|
+
* track (optionally with an up-next `queue`), or an album / playlist whose
|
|
382
|
+
* ordered tracks the backend resolves into the queue. The client sends only
|
|
383
|
+
* ids — the playable audio URL is resolved server-side at stream-start.
|
|
384
|
+
*/
|
|
385
|
+
async startTrackStream(roomId, body) {
|
|
386
|
+
if (!roomId) return null;
|
|
387
|
+
try {
|
|
388
|
+
const res = await httpClient.post(`/rooms/${roomId}/stream/track`, body);
|
|
389
|
+
const parsed = _validation.ZStartStreamResponse.safeParse(res);
|
|
390
|
+
if (!parsed.success) {
|
|
391
|
+
console.warn('[live] Invalid startTrackStream response:', parsed.error.issues[0]);
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
return parsed.data;
|
|
395
|
+
} catch (error) {
|
|
396
|
+
console.warn("Failed to start track stream", error);
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
async deleteRoom(id) {
|
|
401
|
+
if (!id) return false;
|
|
402
|
+
try {
|
|
403
|
+
await httpClient.delete(`/rooms/${id}`);
|
|
404
|
+
return true;
|
|
405
|
+
} catch (error) {
|
|
406
|
+
console.warn("Failed to delete room", error);
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
async archiveRoom(id) {
|
|
411
|
+
if (!id) return {
|
|
412
|
+
success: false,
|
|
413
|
+
archived: false
|
|
414
|
+
};
|
|
415
|
+
try {
|
|
416
|
+
const res = await httpClient.patch(`/rooms/${id}/archive`);
|
|
417
|
+
return {
|
|
418
|
+
success: res.success !== undefined ? Boolean(res.success) : true,
|
|
419
|
+
archived: res.archived !== undefined ? Boolean(res.archived) : true
|
|
420
|
+
};
|
|
421
|
+
} catch (error) {
|
|
422
|
+
console.warn("Failed to archive room", error);
|
|
423
|
+
return {
|
|
424
|
+
success: false,
|
|
425
|
+
archived: false
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
async getHouses(search) {
|
|
430
|
+
try {
|
|
431
|
+
const params = {};
|
|
432
|
+
if (search) params.search = search;
|
|
433
|
+
const res = await httpClient.get("/houses", {
|
|
434
|
+
params
|
|
435
|
+
});
|
|
436
|
+
const raw = res.houses || res.data || res || [];
|
|
437
|
+
const items = Array.isArray(raw) ? raw : [];
|
|
438
|
+
return items.map(h => (0, _validation.validateHouse)(h)).filter(h => h !== null);
|
|
439
|
+
} catch (error) {
|
|
440
|
+
console.warn("Failed to fetch houses", error);
|
|
441
|
+
return [];
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
async getHouse(id) {
|
|
445
|
+
if (!id) return null;
|
|
446
|
+
try {
|
|
447
|
+
const res = await httpClient.get(`/houses/${id}`);
|
|
448
|
+
const raw = res.house || res.data || res || null;
|
|
449
|
+
return raw ? (0, _validation.validateHouse)(raw) : null;
|
|
450
|
+
} catch (error) {
|
|
451
|
+
console.warn("Failed to fetch house", error);
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
async getMyHouses(userId) {
|
|
456
|
+
if (!userId) return [];
|
|
457
|
+
try {
|
|
458
|
+
const houses = await this.getHouses();
|
|
459
|
+
const ROLE_HIERARCHY = {
|
|
460
|
+
member: 0,
|
|
461
|
+
host: 1,
|
|
462
|
+
admin: 2,
|
|
463
|
+
owner: 3
|
|
464
|
+
};
|
|
465
|
+
return houses.filter(h => h.members.some(m => m.userId === userId && (ROLE_HIERARCHY[m.role] ?? 0) >= 1));
|
|
466
|
+
} catch (error) {
|
|
467
|
+
console.warn("Failed to fetch user houses", error);
|
|
468
|
+
return [];
|
|
469
|
+
}
|
|
470
|
+
},
|
|
471
|
+
async getUserHouses(userId) {
|
|
472
|
+
if (!userId) return [];
|
|
473
|
+
try {
|
|
474
|
+
const houses = await this.getHouses();
|
|
475
|
+
return houses.filter(h => h.members.some(m => m.userId === userId));
|
|
476
|
+
} catch (error) {
|
|
477
|
+
console.warn("Failed to fetch user houses", error);
|
|
478
|
+
return [];
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
async getHouseRooms(houseId, status) {
|
|
482
|
+
if (!houseId) return [];
|
|
483
|
+
try {
|
|
484
|
+
const params = {};
|
|
485
|
+
if (status) params.status = status;
|
|
486
|
+
const res = await httpClient.get(`/houses/${houseId}/rooms`, {
|
|
487
|
+
params
|
|
488
|
+
});
|
|
489
|
+
const raw = res.rooms || res.data || res || [];
|
|
490
|
+
return (0, _validation.validateRooms)(Array.isArray(raw) ? raw : []);
|
|
491
|
+
} catch (error) {
|
|
492
|
+
console.warn("Failed to fetch house rooms", error);
|
|
493
|
+
return [];
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
// --- Recording ---
|
|
497
|
+
|
|
498
|
+
async startRecording(roomId) {
|
|
499
|
+
if (!roomId) return false;
|
|
500
|
+
try {
|
|
501
|
+
await httpClient.post(`/rooms/${roomId}/recording/start`);
|
|
502
|
+
return true;
|
|
503
|
+
} catch (error) {
|
|
504
|
+
console.warn("Failed to start recording", error);
|
|
505
|
+
return false;
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
async stopRecording(roomId) {
|
|
509
|
+
if (!roomId) return false;
|
|
510
|
+
try {
|
|
511
|
+
await httpClient.post(`/rooms/${roomId}/recording/stop`);
|
|
512
|
+
return true;
|
|
513
|
+
} catch (error) {
|
|
514
|
+
console.warn("Failed to stop recording", error);
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
async getRoomRecordings(roomId) {
|
|
519
|
+
if (!roomId) return [];
|
|
520
|
+
try {
|
|
521
|
+
const res = await httpClient.get(`/rooms/${roomId}/recordings`);
|
|
522
|
+
const raw = res.recordings || [];
|
|
523
|
+
return (0, _validation.validateRecordings)(Array.isArray(raw) ? raw : []);
|
|
524
|
+
} catch (error) {
|
|
525
|
+
console.warn("Failed to fetch recordings", error);
|
|
526
|
+
return [];
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
async getRecording(recordingId) {
|
|
530
|
+
if (!recordingId) return null;
|
|
531
|
+
try {
|
|
532
|
+
const res = await httpClient.get(`/recordings/${recordingId}`);
|
|
533
|
+
return parseRecordingResponse(res);
|
|
534
|
+
} catch (error) {
|
|
535
|
+
console.warn("Failed to fetch recording", error);
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
},
|
|
539
|
+
async updateRecordingAccess(recordingId, access) {
|
|
540
|
+
if (!recordingId) return false;
|
|
541
|
+
try {
|
|
542
|
+
await httpClient.patch(`/recordings/${recordingId}`, {
|
|
543
|
+
access
|
|
544
|
+
});
|
|
545
|
+
return true;
|
|
546
|
+
} catch (error) {
|
|
547
|
+
console.warn("Failed to update recording access", error);
|
|
548
|
+
return false;
|
|
549
|
+
}
|
|
550
|
+
},
|
|
551
|
+
async deleteRecording(recordingId) {
|
|
552
|
+
if (!recordingId) return false;
|
|
553
|
+
try {
|
|
554
|
+
await httpClient.delete(`/recordings/${recordingId}`);
|
|
555
|
+
return true;
|
|
556
|
+
} catch (error) {
|
|
557
|
+
console.warn("Failed to delete recording", error);
|
|
558
|
+
return false;
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
async getRecordings(sortBy, limit) {
|
|
562
|
+
try {
|
|
563
|
+
const params = {};
|
|
564
|
+
if (sortBy) params.sortBy = sortBy;
|
|
565
|
+
if (limit) params.limit = String(limit);
|
|
566
|
+
const res = await httpClient.get("/recordings", {
|
|
567
|
+
params
|
|
568
|
+
});
|
|
569
|
+
const raw = res.recordings || res.data || res || [];
|
|
570
|
+
return (0, _validation.validateRecordings)(Array.isArray(raw) ? raw : []);
|
|
571
|
+
} catch (error) {
|
|
572
|
+
console.warn("Failed to fetch recordings", error);
|
|
573
|
+
return [];
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
async getTopHosts() {
|
|
577
|
+
try {
|
|
578
|
+
const res = await httpClient.get("/rooms/top-hosts");
|
|
579
|
+
const raw = res.hosts || res.data || res || [];
|
|
580
|
+
return Array.isArray(raw) ? raw : [];
|
|
581
|
+
} catch (error) {
|
|
582
|
+
console.warn("Failed to fetch top hosts", error);
|
|
583
|
+
return [];
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
// --- Houses ---
|
|
587
|
+
|
|
588
|
+
async createHouse(data) {
|
|
589
|
+
try {
|
|
590
|
+
const res = await httpClient.post("/houses", data);
|
|
591
|
+
const raw = res.house || res.data || res || null;
|
|
592
|
+
return raw ? (0, _validation.validateHouse)(raw) : null;
|
|
593
|
+
} catch (error) {
|
|
594
|
+
console.warn("Failed to create house", error);
|
|
595
|
+
return null;
|
|
596
|
+
}
|
|
597
|
+
},
|
|
598
|
+
// --- Media uploads ---
|
|
599
|
+
|
|
600
|
+
async uploadHouseAvatar(houseId, formData) {
|
|
601
|
+
if (!houseId) return null;
|
|
602
|
+
try {
|
|
603
|
+
const res = await httpClient.post(`/houses/${houseId}/avatar`, formData);
|
|
604
|
+
return res.avatar || null;
|
|
605
|
+
} catch (error) {
|
|
606
|
+
console.warn("Failed to upload house avatar", error);
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
},
|
|
610
|
+
async uploadHouseCover(houseId, formData) {
|
|
611
|
+
if (!houseId) return null;
|
|
612
|
+
try {
|
|
613
|
+
const res = await httpClient.post(`/houses/${houseId}/cover`, formData);
|
|
614
|
+
return res.coverImage || null;
|
|
615
|
+
} catch (error) {
|
|
616
|
+
console.warn("Failed to upload house cover", error);
|
|
617
|
+
return null;
|
|
618
|
+
}
|
|
619
|
+
},
|
|
620
|
+
async uploadRoomImage(roomId, formData) {
|
|
621
|
+
if (!roomId) return null;
|
|
622
|
+
try {
|
|
623
|
+
const res = await httpClient.post(`/rooms/${roomId}/image`, formData);
|
|
624
|
+
return res.streamImage || null;
|
|
625
|
+
} catch (error) {
|
|
626
|
+
console.warn("Failed to upload room image", error);
|
|
627
|
+
return null;
|
|
628
|
+
}
|
|
629
|
+
},
|
|
630
|
+
async uploadSeriesCover(seriesId, formData) {
|
|
631
|
+
if (!seriesId) return null;
|
|
632
|
+
try {
|
|
633
|
+
const res = await httpClient.post(`/series/${seriesId}/cover`, formData);
|
|
634
|
+
return res.coverImage || null;
|
|
635
|
+
} catch (error) {
|
|
636
|
+
console.warn("Failed to upload series cover", error);
|
|
637
|
+
return null;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
//# sourceMappingURL=spacesService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_validation","require","isRecord","value","PODCAST_PAGE_SIZE","parsePodcastSearchResponse","data","requestedOffset","raw","Array","isArray","items","entry","id","title","push","syraPodcastId","author","undefined","artworkUrl","imageSourceUrl","hasMore","offset","parseEpisodeListResponse","episodeId","durationSec","duration","publishedAt","pubDate","limit","page","total","length","parseMusicSearchResponse","tracks","trackId","artist","artistName","coverArt","parseRecordingResponse","playbackUrl","recording","validateRecording","createRoomsService","httpClient","getRooms","status","type","params","res","get","rooms","validateRooms","error","console","warn","getRoom","room","validateRoom","createRoom","post","startRoom","endRoom","stopRoom","joinRoom","leaveRoom","startStream","parsed","ZStartStreamResponse","safeParse","success","issues","generateStreamKey","ZGenerateStreamKeyResponse","updateStreamMetadata","patch","stopStream","delete","searchPodcasts","query","q","String","ok","getPodcastEpisodes","Math","floor","startPodcastStream","roomId","body","skipPodcastNext","ended","searchMusic","startTrackStream","deleteRoom","archiveRoom","archived","Boolean","getHouses","search","houses","map","h","validateHouse","filter","getHouse","house","getMyHouses","userId","ROLE_HIERARCHY","member","host","admin","owner","members","some","m","role","getUserHouses","getHouseRooms","houseId","startRecording","stopRecording","getRoomRecordings","recordings","validateRecordings","getRecording","recordingId","updateRecordingAccess","access","deleteRecording","getRecordings","sortBy","getTopHosts","hosts","createHouse","uploadHouseAvatar","formData","avatar","uploadHouseCover","coverImage","uploadRoomImage","streamImage","uploadSeriesCover","seriesId"],"sourceRoot":"../../../../src","sources":["live/services/spacesService.ts"],"mappings":"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","ignoreList":[]}
|