@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,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { trackSummarySchema, podcastSummarySchema, episodeSummarySchema } from "./schema.js";
|
|
4
|
+
import { SyraApiError } from "./errors.js";
|
|
5
|
+
|
|
6
|
+
/** Default base URL of the public Syra API. */
|
|
7
|
+
export const DEFAULT_SYRA_BASE_URL = 'https://api.syra.fm';
|
|
8
|
+
|
|
9
|
+
/** Default base URL of the Syra web app, used for deep links. */
|
|
10
|
+
export const DEFAULT_SYRA_WEB_BASE_URL = 'https://syra.fm';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* One page of paginated catalog search results.
|
|
14
|
+
*
|
|
15
|
+
* `hasMore` reflects the BACKEND's pagination over the full matching set — NOT
|
|
16
|
+
* `items.length`. {@link SyraClient.searchTracks} additionally filters its page
|
|
17
|
+
* client-side to preview-available tracks, so `items.length` can be smaller than
|
|
18
|
+
* `limit` while `hasMore` is still `true`; callers must paginate by advancing
|
|
19
|
+
* `offset` by `limit` (the page size), never by `items.length`.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/** Minimal shape from which track artwork URLs can be derived. */
|
|
23
|
+
|
|
24
|
+
/** Minimal shape from which podcast-show artwork URLs can be derived. */
|
|
25
|
+
|
|
26
|
+
/** Minimal shape from which podcast-episode artwork URLs can be derived. */
|
|
27
|
+
|
|
28
|
+
/** Order used to pick the best available artwork variant when none is named. */
|
|
29
|
+
const ARTWORK_FALLBACK_ORDER = ['original', 'xxlarge', 'xlarge', 'large', 'medium', 'small'];
|
|
30
|
+
const OBJECT_ID_PATTERN = /^[a-f\d]{24}$/i;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Default episode page size, matching the backend's own default so the SDK's
|
|
34
|
+
* offset→page translation lines up with the server's pagination window.
|
|
35
|
+
*/
|
|
36
|
+
const DEFAULT_EPISODES_PAGE_SIZE = 20;
|
|
37
|
+
|
|
38
|
+
/** Read a finite number from an unknown response field, else a fallback. */
|
|
39
|
+
function numberOr(value, fallback) {
|
|
40
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a headless client for the public Syra API. Public reads only — there
|
|
44
|
+
* is no authentication in this version.
|
|
45
|
+
*/
|
|
46
|
+
export function createSyraClient(options = {}) {
|
|
47
|
+
const baseURL = (options.baseURL ?? DEFAULT_SYRA_BASE_URL).replace(/\/+$/, '');
|
|
48
|
+
const webBaseURL = (options.webBaseURL ?? DEFAULT_SYRA_WEB_BASE_URL).replace(/\/+$/, '');
|
|
49
|
+
function resolveFetch() {
|
|
50
|
+
if (options.fetch) {
|
|
51
|
+
return options.fetch;
|
|
52
|
+
}
|
|
53
|
+
const globalFetch = globalThis.fetch;
|
|
54
|
+
if (typeof globalFetch === 'function') {
|
|
55
|
+
return globalFetch.bind(globalThis);
|
|
56
|
+
}
|
|
57
|
+
throw new Error('@syra.fm/sdk: no global fetch is available. Pass `fetch` in createSyraClient options, ' + 'or run on Node 18+, a browser, or React Native.');
|
|
58
|
+
}
|
|
59
|
+
async function getJson(path) {
|
|
60
|
+
const doFetch = resolveFetch();
|
|
61
|
+
const response = await doFetch(`${baseURL}${path}`, {
|
|
62
|
+
headers: {
|
|
63
|
+
Accept: 'application/json'
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new SyraApiError(response.status, `Syra API request failed: ${response.status} ${response.statusText} (${path})`);
|
|
68
|
+
}
|
|
69
|
+
return response.json();
|
|
70
|
+
}
|
|
71
|
+
function resolveImageRef(ref) {
|
|
72
|
+
if (!ref) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
if (/^https?:\/\//i.test(ref)) {
|
|
76
|
+
return ref;
|
|
77
|
+
}
|
|
78
|
+
if (ref.startsWith('/api/images/')) {
|
|
79
|
+
return `${baseURL}${ref}`;
|
|
80
|
+
}
|
|
81
|
+
if (OBJECT_ID_PATTERN.test(ref)) {
|
|
82
|
+
return `${baseURL}/api/images/${ref}`;
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
async searchTracks(query, searchOptions = {}) {
|
|
88
|
+
const params = new URLSearchParams({
|
|
89
|
+
q: query,
|
|
90
|
+
category: 'tracks'
|
|
91
|
+
});
|
|
92
|
+
if (typeof searchOptions.limit === 'number') {
|
|
93
|
+
params.set('limit', String(searchOptions.limit));
|
|
94
|
+
}
|
|
95
|
+
if (typeof searchOptions.offset === 'number') {
|
|
96
|
+
params.set('offset', String(searchOptions.offset));
|
|
97
|
+
}
|
|
98
|
+
const json = await getJson(`/api/search?${params.toString()}`);
|
|
99
|
+
const rawTracks = Array.isArray(json?.results?.tracks) ? json.results.tracks : [];
|
|
100
|
+
const items = [];
|
|
101
|
+
for (const raw of rawTracks) {
|
|
102
|
+
// A single malformed catalog row must not fail the whole search.
|
|
103
|
+
const parsed = trackSummarySchema.safeParse(raw);
|
|
104
|
+
if (parsed.success && parsed.data.previewAvailable === true) {
|
|
105
|
+
items.push(parsed.data);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
items,
|
|
110
|
+
// `hasMore` is sourced from the backend's pagination over the FULL result
|
|
111
|
+
// set; the client-side preview filter above may shrink `items` below
|
|
112
|
+
// `limit`, but must NOT corrupt `hasMore` (else a page whose tail was
|
|
113
|
+
// filtered out would falsely report the end of the catalog).
|
|
114
|
+
hasMore: json?.hasMore === true,
|
|
115
|
+
limit: numberOr(json?.limit, searchOptions.limit ?? rawTracks.length),
|
|
116
|
+
offset: numberOr(json?.offset, searchOptions.offset ?? 0)
|
|
117
|
+
};
|
|
118
|
+
},
|
|
119
|
+
async getTrack(id) {
|
|
120
|
+
const json = await getJson(`/api/tracks/${encodeURIComponent(id)}`);
|
|
121
|
+
return trackSummarySchema.parse(json);
|
|
122
|
+
},
|
|
123
|
+
previewUrl(id, startSec = 0) {
|
|
124
|
+
const safeStart = Number.isFinite(startSec) ? Math.max(0, Math.trunc(startSec)) : 0;
|
|
125
|
+
return `${baseURL}/api/preview/${encodeURIComponent(id)}.mp3?start=${safeStart}`;
|
|
126
|
+
},
|
|
127
|
+
artworkUrl(source, size) {
|
|
128
|
+
if (typeof source === 'string') {
|
|
129
|
+
return resolveImageRef(source);
|
|
130
|
+
}
|
|
131
|
+
if (size && source.coverArtSizes) {
|
|
132
|
+
const resolved = resolveImageRef(source.coverArtSizes[size]?.url);
|
|
133
|
+
if (resolved) {
|
|
134
|
+
return resolved;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const fromCoverArt = resolveImageRef(source.coverArt);
|
|
138
|
+
if (fromCoverArt) {
|
|
139
|
+
return fromCoverArt;
|
|
140
|
+
}
|
|
141
|
+
if (source.coverArtSizes) {
|
|
142
|
+
for (const key of ARTWORK_FALLBACK_ORDER) {
|
|
143
|
+
const resolved = resolveImageRef(source.coverArtSizes[key]?.url);
|
|
144
|
+
if (resolved) {
|
|
145
|
+
return resolved;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
},
|
|
151
|
+
async searchPodcasts(query, searchOptions = {}) {
|
|
152
|
+
const params = new URLSearchParams({
|
|
153
|
+
q: query
|
|
154
|
+
});
|
|
155
|
+
if (typeof searchOptions.limit === 'number') {
|
|
156
|
+
params.set('limit', String(searchOptions.limit));
|
|
157
|
+
}
|
|
158
|
+
if (typeof searchOptions.offset === 'number') {
|
|
159
|
+
params.set('offset', String(searchOptions.offset));
|
|
160
|
+
}
|
|
161
|
+
const json = await getJson(`/api/podcasts/search?${params.toString()}`);
|
|
162
|
+
const rawPodcasts = Array.isArray(json?.data) ? json.data : [];
|
|
163
|
+
const items = [];
|
|
164
|
+
for (const raw of rawPodcasts) {
|
|
165
|
+
// A single malformed catalog row must not fail the whole search.
|
|
166
|
+
const parsed = podcastSummarySchema.safeParse(raw);
|
|
167
|
+
if (parsed.success) {
|
|
168
|
+
items.push(parsed.data);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
items,
|
|
173
|
+
// `hasMore` reflects the backend's pagination over the full result set.
|
|
174
|
+
hasMore: json?.hasMore === true,
|
|
175
|
+
limit: numberOr(json?.limit, searchOptions.limit ?? rawPodcasts.length),
|
|
176
|
+
offset: numberOr(json?.offset, searchOptions.offset ?? 0)
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
async getPodcast(id) {
|
|
180
|
+
const json = await getJson(`/api/podcasts/${encodeURIComponent(id)}`);
|
|
181
|
+
return podcastSummarySchema.parse(json?.data?.podcast);
|
|
182
|
+
},
|
|
183
|
+
podcastUrl(id) {
|
|
184
|
+
return `${webBaseURL}/podcasts/${encodeURIComponent(id)}`;
|
|
185
|
+
},
|
|
186
|
+
podcastArtworkUrl(source, size) {
|
|
187
|
+
if (size && source.imageSizes) {
|
|
188
|
+
const resolved = resolveImageRef(source.imageSizes[size]?.url);
|
|
189
|
+
if (resolved) {
|
|
190
|
+
return resolved;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const fromImage = resolveImageRef(source.image);
|
|
194
|
+
if (fromImage) {
|
|
195
|
+
return fromImage;
|
|
196
|
+
}
|
|
197
|
+
if (source.imageSizes) {
|
|
198
|
+
for (const key of ARTWORK_FALLBACK_ORDER) {
|
|
199
|
+
const resolved = resolveImageRef(source.imageSizes[key]?.url);
|
|
200
|
+
if (resolved) {
|
|
201
|
+
return resolved;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return resolveImageRef(source.imageSourceUrl);
|
|
206
|
+
},
|
|
207
|
+
async getPodcastEpisodes(podcastId, listOptions = {}) {
|
|
208
|
+
// The endpoint paginates by 1-based `page`; translate the SDK's uniform
|
|
209
|
+
// offset-based paging into it. `limit` must be concrete (unlike search,
|
|
210
|
+
// which can omit it) because the page number is derived from it.
|
|
211
|
+
const limit = listOptions.limit ?? DEFAULT_EPISODES_PAGE_SIZE;
|
|
212
|
+
const offset = listOptions.offset ?? 0;
|
|
213
|
+
const page = Math.floor(offset / limit) + 1;
|
|
214
|
+
const json = await getJson(`/api/podcasts/${encodeURIComponent(podcastId)}/episodes?page=${page}&limit=${limit}`);
|
|
215
|
+
const rawEpisodes = Array.isArray(json?.data) ? json.data : [];
|
|
216
|
+
const items = [];
|
|
217
|
+
for (const raw of rawEpisodes) {
|
|
218
|
+
// A single malformed episode row must not fail the whole listing.
|
|
219
|
+
const parsed = episodeSummarySchema.safeParse(raw);
|
|
220
|
+
if (parsed.success) {
|
|
221
|
+
items.push(parsed.data);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// `total` is the backend's full count over the show; derive `hasMore` from
|
|
226
|
+
// it rather than `items.length`, which the schema/enclosure filter above may
|
|
227
|
+
// shrink below `limit` on a page that is NOT the last one. Absent a count,
|
|
228
|
+
// fall back to what we have (this page ends the listing).
|
|
229
|
+
const total = numberOr(json?.total, offset + items.length);
|
|
230
|
+
return {
|
|
231
|
+
items,
|
|
232
|
+
hasMore: page * limit < total,
|
|
233
|
+
limit,
|
|
234
|
+
offset
|
|
235
|
+
};
|
|
236
|
+
},
|
|
237
|
+
async getEpisode(episodeId) {
|
|
238
|
+
const json = await getJson(`/api/episodes/${encodeURIComponent(episodeId)}`);
|
|
239
|
+
return episodeSummarySchema.parse(json?.data?.episode);
|
|
240
|
+
},
|
|
241
|
+
episodeImageUrl(source, size) {
|
|
242
|
+
if (size && source.imageSizes) {
|
|
243
|
+
const resolved = resolveImageRef(source.imageSizes[size]?.url);
|
|
244
|
+
if (resolved) {
|
|
245
|
+
return resolved;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const fromImage = resolveImageRef(source.image);
|
|
249
|
+
if (fromImage) {
|
|
250
|
+
return fromImage;
|
|
251
|
+
}
|
|
252
|
+
if (source.imageSizes) {
|
|
253
|
+
for (const key of ARTWORK_FALLBACK_ORDER) {
|
|
254
|
+
const resolved = resolveImageRef(source.imageSizes[key]?.url);
|
|
255
|
+
if (resolved) {
|
|
256
|
+
return resolved;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return resolveImageRef(source.imageSourceUrl);
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["trackSummarySchema","podcastSummarySchema","episodeSummarySchema","SyraApiError","DEFAULT_SYRA_BASE_URL","DEFAULT_SYRA_WEB_BASE_URL","ARTWORK_FALLBACK_ORDER","OBJECT_ID_PATTERN","DEFAULT_EPISODES_PAGE_SIZE","numberOr","value","fallback","Number","isFinite","createSyraClient","options","baseURL","replace","webBaseURL","resolveFetch","fetch","globalFetch","globalThis","bind","Error","getJson","path","doFetch","response","headers","Accept","ok","status","statusText","json","resolveImageRef","ref","undefined","test","startsWith","searchTracks","query","searchOptions","params","URLSearchParams","q","category","limit","set","String","offset","toString","rawTracks","Array","isArray","results","tracks","items","raw","parsed","safeParse","success","data","previewAvailable","push","hasMore","length","getTrack","id","encodeURIComponent","parse","previewUrl","startSec","safeStart","Math","max","trunc","artworkUrl","source","size","coverArtSizes","resolved","url","fromCoverArt","coverArt","key","searchPodcasts","rawPodcasts","getPodcast","podcast","podcastUrl","podcastArtworkUrl","imageSizes","fromImage","image","imageSourceUrl","getPodcastEpisodes","podcastId","listOptions","page","floor","rawEpisodes","total","getEpisode","episodeId","episode","episodeImageUrl"],"sourceRoot":"../../src","sources":["client.ts"],"mappings":";;AAAA,SACEA,kBAAkB,EAClBC,oBAAoB,EACpBC,oBAAoB,QAMf,aAAU;AACjB,SAASC,YAAY,QAAQ,aAAU;;AAEvC;AACA,OAAO,MAAMC,qBAAqB,GAAG,qBAAqB;;AAE1D;AACA,OAAO,MAAMC,yBAAyB,GAAG,iBAAiB;;AAwC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;;AAMA;;AAOA;;AAuEA;AACA,MAAMC,sBAAqC,GAAG,CAC5C,UAAU,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,CACR;AAED,MAAMC,iBAAiB,GAAG,gBAAgB;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,0BAA0B,GAAG,EAAE;;AAErC;AACA,SAASC,QAAQA,CAACC,KAAc,EAAEC,QAAgB,EAAU;EAC1D,OAAO,OAAOD,KAAK,KAAK,QAAQ,IAAIE,MAAM,CAACC,QAAQ,CAACH,KAAK,CAAC,GAAGA,KAAK,GAAGC,QAAQ;AAC/E;AA+BA;AACA;AACA;AACA;AACA,OAAO,SAASG,gBAAgBA,CAACC,OAA0B,GAAG,CAAC,CAAC,EAAc;EAC5E,MAAMC,OAAO,GAAG,CAACD,OAAO,CAACC,OAAO,IAAIZ,qBAAqB,EAAEa,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;EAC9E,MAAMC,UAAU,GAAG,CAACH,OAAO,CAACG,UAAU,IAAIb,yBAAyB,EAAEY,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;EAExF,SAASE,YAAYA,CAAA,EAAiB;IACpC,IAAIJ,OAAO,CAACK,KAAK,EAAE;MACjB,OAAOL,OAAO,CAACK,KAAK;IACtB;IACA,MAAMC,WAAW,GAAIC,UAAU,CAA8BF,KAAK;IAClE,IAAI,OAAOC,WAAW,KAAK,UAAU,EAAE;MACrC,OAAOA,WAAW,CAACE,IAAI,CAACD,UAAU,CAAC;IACrC;IACA,MAAM,IAAIE,KAAK,CACb,wFAAwF,GACtF,iDACJ,CAAC;EACH;EAEA,eAAeC,OAAOA,CAACC,IAAY,EAAoB;IACrD,MAAMC,OAAO,GAAGR,YAAY,CAAC,CAAC;IAC9B,MAAMS,QAAQ,GAAG,MAAMD,OAAO,CAAC,GAAGX,OAAO,GAAGU,IAAI,EAAE,EAAE;MAClDG,OAAO,EAAE;QAAEC,MAAM,EAAE;MAAmB;IACxC,CAAC,CAAC;IACF,IAAI,CAACF,QAAQ,CAACG,EAAE,EAAE;MAChB,MAAM,IAAI5B,YAAY,CACpByB,QAAQ,CAACI,MAAM,EACf,4BAA4BJ,QAAQ,CAACI,MAAM,IAAIJ,QAAQ,CAACK,UAAU,KAAKP,IAAI,GAC7E,CAAC;IACH;IACA,OAAOE,QAAQ,CAACM,IAAI,CAAC,CAAC;EACxB;EAEA,SAASC,eAAeA,CAACC,GAA8B,EAAsB;IAC3E,IAAI,CAACA,GAAG,EAAE;MACR,OAAOC,SAAS;IAClB;IACA,IAAI,eAAe,CAACC,IAAI,CAACF,GAAG,CAAC,EAAE;MAC7B,OAAOA,GAAG;IACZ;IACA,IAAIA,GAAG,CAACG,UAAU,CAAC,cAAc,CAAC,EAAE;MAClC,OAAO,GAAGvB,OAAO,GAAGoB,GAAG,EAAE;IAC3B;IACA,IAAI7B,iBAAiB,CAAC+B,IAAI,CAACF,GAAG,CAAC,EAAE;MAC/B,OAAO,GAAGpB,OAAO,eAAeoB,GAAG,EAAE;IACvC;IACA,OAAOC,SAAS;EAClB;EAEA,OAAO;IACL,MAAMG,YAAYA,CAACC,KAAK,EAAEC,aAAa,GAAG,CAAC,CAAC,EAAE;MAC5C,MAAMC,MAAM,GAAG,IAAIC,eAAe,CAAC;QAAEC,CAAC,EAAEJ,KAAK;QAAEK,QAAQ,EAAE;MAAS,CAAC,CAAC;MACpE,IAAI,OAAOJ,aAAa,CAACK,KAAK,KAAK,QAAQ,EAAE;QAC3CJ,MAAM,CAACK,GAAG,CAAC,OAAO,EAAEC,MAAM,CAACP,aAAa,CAACK,KAAK,CAAC,CAAC;MAClD;MACA,IAAI,OAAOL,aAAa,CAACQ,MAAM,KAAK,QAAQ,EAAE;QAC5CP,MAAM,CAACK,GAAG,CAAC,QAAQ,EAAEC,MAAM,CAACP,aAAa,CAACQ,MAAM,CAAC,CAAC;MACpD;MAEA,MAAMhB,IAAI,GAAI,MAAMT,OAAO,CAAC,eAAekB,MAAM,CAACQ,QAAQ,CAAC,CAAC,EAAE,CAAyB;MACvF,MAAMC,SAAS,GAAGC,KAAK,CAACC,OAAO,CAACpB,IAAI,EAAEqB,OAAO,EAAEC,MAAM,CAAC,GAAGtB,IAAI,CAACqB,OAAO,CAACC,MAAM,GAAG,EAAE;MAEjF,MAAMC,KAAqB,GAAG,EAAE;MAChC,KAAK,MAAMC,GAAG,IAAIN,SAAS,EAAE;QAC3B;QACA,MAAMO,MAAM,GAAG3D,kBAAkB,CAAC4D,SAAS,CAACF,GAAG,CAAC;QAChD,IAAIC,MAAM,CAACE,OAAO,IAAIF,MAAM,CAACG,IAAI,CAACC,gBAAgB,KAAK,IAAI,EAAE;UAC3DN,KAAK,CAACO,IAAI,CAACL,MAAM,CAACG,IAAI,CAAC;QACzB;MACF;MAEA,OAAO;QACLL,KAAK;QACL;QACA;QACA;QACA;QACAQ,OAAO,EAAE/B,IAAI,EAAE+B,OAAO,KAAK,IAAI;QAC/BlB,KAAK,EAAEtC,QAAQ,CAACyB,IAAI,EAAEa,KAAK,EAAEL,aAAa,CAACK,KAAK,IAAIK,SAAS,CAACc,MAAM,CAAC;QACrEhB,MAAM,EAAEzC,QAAQ,CAACyB,IAAI,EAAEgB,MAAM,EAAER,aAAa,CAACQ,MAAM,IAAI,CAAC;MAC1D,CAAC;IACH,CAAC;IAED,MAAMiB,QAAQA,CAACC,EAAE,EAAE;MACjB,MAAMlC,IAAI,GAAG,MAAMT,OAAO,CAAC,eAAe4C,kBAAkB,CAACD,EAAE,CAAC,EAAE,CAAC;MACnE,OAAOpE,kBAAkB,CAACsE,KAAK,CAACpC,IAAI,CAAC;IACvC,CAAC;IAEDqC,UAAUA,CAACH,EAAE,EAAEI,QAAQ,GAAG,CAAC,EAAE;MAC3B,MAAMC,SAAS,GAAG7D,MAAM,CAACC,QAAQ,CAAC2D,QAAQ,CAAC,GAAGE,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAACJ,QAAQ,CAAC,CAAC,GAAG,CAAC;MACnF,OAAO,GAAGxD,OAAO,gBAAgBqD,kBAAkB,CAACD,EAAE,CAAC,cAAcK,SAAS,EAAE;IAClF,CAAC;IAEDI,UAAUA,CAACC,MAAM,EAAEC,IAAI,EAAE;MACvB,IAAI,OAAOD,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO3C,eAAe,CAAC2C,MAAM,CAAC;MAChC;MAEA,IAAIC,IAAI,IAAID,MAAM,CAACE,aAAa,EAAE;QAChC,MAAMC,QAAQ,GAAG9C,eAAe,CAAC2C,MAAM,CAACE,aAAa,CAACD,IAAI,CAAC,EAAEG,GAAG,CAAC;QACjE,IAAID,QAAQ,EAAE;UACZ,OAAOA,QAAQ;QACjB;MACF;MAEA,MAAME,YAAY,GAAGhD,eAAe,CAAC2C,MAAM,CAACM,QAAQ,CAAC;MACrD,IAAID,YAAY,EAAE;QAChB,OAAOA,YAAY;MACrB;MAEA,IAAIL,MAAM,CAACE,aAAa,EAAE;QACxB,KAAK,MAAMK,GAAG,IAAI/E,sBAAsB,EAAE;UACxC,MAAM2E,QAAQ,GAAG9C,eAAe,CAAC2C,MAAM,CAACE,aAAa,CAACK,GAAG,CAAC,EAAEH,GAAG,CAAC;UAChE,IAAID,QAAQ,EAAE;YACZ,OAAOA,QAAQ;UACjB;QACF;MACF;MAEA,OAAO5C,SAAS;IAClB,CAAC;IAED,MAAMiD,cAAcA,CAAC7C,KAAK,EAAEC,aAAa,GAAG,CAAC,CAAC,EAAE;MAC9C,MAAMC,MAAM,GAAG,IAAIC,eAAe,CAAC;QAAEC,CAAC,EAAEJ;MAAM,CAAC,CAAC;MAChD,IAAI,OAAOC,aAAa,CAACK,KAAK,KAAK,QAAQ,EAAE;QAC3CJ,MAAM,CAACK,GAAG,CAAC,OAAO,EAAEC,MAAM,CAACP,aAAa,CAACK,KAAK,CAAC,CAAC;MAClD;MACA,IAAI,OAAOL,aAAa,CAACQ,MAAM,KAAK,QAAQ,EAAE;QAC5CP,MAAM,CAACK,GAAG,CAAC,QAAQ,EAAEC,MAAM,CAACP,aAAa,CAACQ,MAAM,CAAC,CAAC;MACpD;MAEA,MAAMhB,IAAI,GAAI,MAAMT,OAAO,CACzB,wBAAwBkB,MAAM,CAACQ,QAAQ,CAAC,CAAC,EAC3C,CAAgC;MAChC,MAAMoC,WAAW,GAAGlC,KAAK,CAACC,OAAO,CAACpB,IAAI,EAAE4B,IAAI,CAAC,GAAG5B,IAAI,CAAC4B,IAAI,GAAG,EAAE;MAE9D,MAAML,KAAuB,GAAG,EAAE;MAClC,KAAK,MAAMC,GAAG,IAAI6B,WAAW,EAAE;QAC7B;QACA,MAAM5B,MAAM,GAAG1D,oBAAoB,CAAC2D,SAAS,CAACF,GAAG,CAAC;QAClD,IAAIC,MAAM,CAACE,OAAO,EAAE;UAClBJ,KAAK,CAACO,IAAI,CAACL,MAAM,CAACG,IAAI,CAAC;QACzB;MACF;MAEA,OAAO;QACLL,KAAK;QACL;QACAQ,OAAO,EAAE/B,IAAI,EAAE+B,OAAO,KAAK,IAAI;QAC/BlB,KAAK,EAAEtC,QAAQ,CAACyB,IAAI,EAAEa,KAAK,EAAEL,aAAa,CAACK,KAAK,IAAIwC,WAAW,CAACrB,MAAM,CAAC;QACvEhB,MAAM,EAAEzC,QAAQ,CAACyB,IAAI,EAAEgB,MAAM,EAAER,aAAa,CAACQ,MAAM,IAAI,CAAC;MAC1D,CAAC;IACH,CAAC;IAED,MAAMsC,UAAUA,CAACpB,EAAE,EAAE;MACnB,MAAMlC,IAAI,GAAI,MAAMT,OAAO,CACzB,iBAAiB4C,kBAAkB,CAACD,EAAE,CAAC,EACzC,CAAgC;MAChC,OAAOnE,oBAAoB,CAACqE,KAAK,CAACpC,IAAI,EAAE4B,IAAI,EAAE2B,OAAO,CAAC;IACxD,CAAC;IAEDC,UAAUA,CAACtB,EAAE,EAAE;MACb,OAAO,GAAGlD,UAAU,aAAamD,kBAAkB,CAACD,EAAE,CAAC,EAAE;IAC3D,CAAC;IAEDuB,iBAAiBA,CAACb,MAAM,EAAEC,IAAI,EAAE;MAC9B,IAAIA,IAAI,IAAID,MAAM,CAACc,UAAU,EAAE;QAC7B,MAAMX,QAAQ,GAAG9C,eAAe,CAAC2C,MAAM,CAACc,UAAU,CAACb,IAAI,CAAC,EAAEG,GAAG,CAAC;QAC9D,IAAID,QAAQ,EAAE;UACZ,OAAOA,QAAQ;QACjB;MACF;MAEA,MAAMY,SAAS,GAAG1D,eAAe,CAAC2C,MAAM,CAACgB,KAAK,CAAC;MAC/C,IAAID,SAAS,EAAE;QACb,OAAOA,SAAS;MAClB;MAEA,IAAIf,MAAM,CAACc,UAAU,EAAE;QACrB,KAAK,MAAMP,GAAG,IAAI/E,sBAAsB,EAAE;UACxC,MAAM2E,QAAQ,GAAG9C,eAAe,CAAC2C,MAAM,CAACc,UAAU,CAACP,GAAG,CAAC,EAAEH,GAAG,CAAC;UAC7D,IAAID,QAAQ,EAAE;YACZ,OAAOA,QAAQ;UACjB;QACF;MACF;MAEA,OAAO9C,eAAe,CAAC2C,MAAM,CAACiB,cAAc,CAAC;IAC/C,CAAC;IAED,MAAMC,kBAAkBA,CAACC,SAAS,EAAEC,WAAW,GAAG,CAAC,CAAC,EAAE;MACpD;MACA;MACA;MACA,MAAMnD,KAAK,GAAGmD,WAAW,CAACnD,KAAK,IAAIvC,0BAA0B;MAC7D,MAAM0C,MAAM,GAAGgD,WAAW,CAAChD,MAAM,IAAI,CAAC;MACtC,MAAMiD,IAAI,GAAGzB,IAAI,CAAC0B,KAAK,CAAClD,MAAM,GAAGH,KAAK,CAAC,GAAG,CAAC;MAE3C,MAAMb,IAAI,GAAI,MAAMT,OAAO,CACzB,iBAAiB4C,kBAAkB,CAAC4B,SAAS,CAAC,kBAAkBE,IAAI,UAAUpD,KAAK,EACrF,CAAkC;MAClC,MAAMsD,WAAW,GAAGhD,KAAK,CAACC,OAAO,CAACpB,IAAI,EAAE4B,IAAI,CAAC,GAAG5B,IAAI,CAAC4B,IAAI,GAAG,EAAE;MAE9D,MAAML,KAAuB,GAAG,EAAE;MAClC,KAAK,MAAMC,GAAG,IAAI2C,WAAW,EAAE;QAC7B;QACA,MAAM1C,MAAM,GAAGzD,oBAAoB,CAAC0D,SAAS,CAACF,GAAG,CAAC;QAClD,IAAIC,MAAM,CAACE,OAAO,EAAE;UAClBJ,KAAK,CAACO,IAAI,CAACL,MAAM,CAACG,IAAI,CAAC;QACzB;MACF;;MAEA;MACA;MACA;MACA;MACA,MAAMwC,KAAK,GAAG7F,QAAQ,CAACyB,IAAI,EAAEoE,KAAK,EAAEpD,MAAM,GAAGO,KAAK,CAACS,MAAM,CAAC;MAC1D,OAAO;QACLT,KAAK;QACLQ,OAAO,EAAEkC,IAAI,GAAGpD,KAAK,GAAGuD,KAAK;QAC7BvD,KAAK;QACLG;MACF,CAAC;IACH,CAAC;IAED,MAAMqD,UAAUA,CAACC,SAAS,EAAE;MAC1B,MAAMtE,IAAI,GAAI,MAAMT,OAAO,CACzB,iBAAiB4C,kBAAkB,CAACmC,SAAS,CAAC,EAChD,CAAgC;MAChC,OAAOtG,oBAAoB,CAACoE,KAAK,CAACpC,IAAI,EAAE4B,IAAI,EAAE2C,OAAO,CAAC;IACxD,CAAC;IAEDC,eAAeA,CAAC5B,MAAM,EAAEC,IAAI,EAAE;MAC5B,IAAIA,IAAI,IAAID,MAAM,CAACc,UAAU,EAAE;QAC7B,MAAMX,QAAQ,GAAG9C,eAAe,CAAC2C,MAAM,CAACc,UAAU,CAACb,IAAI,CAAC,EAAEG,GAAG,CAAC;QAC9D,IAAID,QAAQ,EAAE;UACZ,OAAOA,QAAQ;QACjB;MACF;MAEA,MAAMY,SAAS,GAAG1D,eAAe,CAAC2C,MAAM,CAACgB,KAAK,CAAC;MAC/C,IAAID,SAAS,EAAE;QACb,OAAOA,SAAS;MAClB;MAEA,IAAIf,MAAM,CAACc,UAAU,EAAE;QACrB,KAAK,MAAMP,GAAG,IAAI/E,sBAAsB,EAAE;UACxC,MAAM2E,QAAQ,GAAG9C,eAAe,CAAC2C,MAAM,CAACc,UAAU,CAACP,GAAG,CAAC,EAAEH,GAAG,CAAC;UAC7D,IAAID,QAAQ,EAAE;YACZ,OAAOA,QAAQ;UACjB;QACF;MACF;MAEA,OAAO9C,eAAe,CAAC2C,MAAM,CAACiB,cAAc,CAAC;IAC/C;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Error thrown when the Syra API returns a non-2xx response.
|
|
5
|
+
*/
|
|
6
|
+
export class SyraApiError extends Error {
|
|
7
|
+
/** HTTP status code returned by the API. */
|
|
8
|
+
|
|
9
|
+
constructor(status, message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'SyraApiError';
|
|
12
|
+
this.status = status;
|
|
13
|
+
// Restore the prototype chain when targeting ES5-ish runtimes.
|
|
14
|
+
Object.setPrototypeOf(this, SyraApiError.prototype);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SyraApiError","Error","constructor","status","message","name","Object","setPrototypeOf","prototype"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":";;AAAA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,SAASC,KAAK,CAAC;EACtC;;EAGAC,WAAWA,CAACC,MAAc,EAAEC,OAAe,EAAE;IAC3C,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACC,IAAI,GAAG,cAAc;IAC1B,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB;IACAG,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEP,YAAY,CAACQ,SAAS,CAAC;EACrD;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { createSyraClient, DEFAULT_SYRA_BASE_URL, DEFAULT_SYRA_WEB_BASE_URL } from "./client.js";
|
|
4
|
+
export { trackSummarySchema, podcastSummarySchema, episodeSummarySchema, coverArtSizesSchema, coverArtVariantSchema } from "./schema.js";
|
|
5
|
+
export { SyraApiError } from "./errors.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createSyraClient","DEFAULT_SYRA_BASE_URL","DEFAULT_SYRA_WEB_BASE_URL","trackSummarySchema","podcastSummarySchema","episodeSummarySchema","coverArtSizesSchema","coverArtVariantSchema","SyraApiError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SACEA,gBAAgB,EAChBC,qBAAqB,EACrBC,yBAAyB,QACpB,aAAU;AAYjB,SACEC,kBAAkB,EAClBC,oBAAoB,EACpBC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,QAChB,aAAU;AASjB,SAASC,YAAY,QAAQ,aAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.native.ts"],"mappings":";;AAAA,cAAc,SAAS;AACvB,cAAc,iBAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import Svg, { Path } from 'react-native-svg';
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
export const LiveRoomsIcon = ({
|
|
7
|
+
color = 'currentColor',
|
|
8
|
+
size = 26,
|
|
9
|
+
style
|
|
10
|
+
}) => /*#__PURE__*/_jsx(Svg, {
|
|
11
|
+
viewBox: "0 0 24 24",
|
|
12
|
+
width: size,
|
|
13
|
+
height: size,
|
|
14
|
+
style: style,
|
|
15
|
+
children: /*#__PURE__*/_jsx(Path, {
|
|
16
|
+
d: "M12 22.25c-4.99 0-9.18-3.393-10.39-7.994l1.93-.512c.99 3.746 4.4 6.506 8.46 6.506s7.47-2.76 8.46-6.506l1.93.512c-1.21 4.601-5.4 7.994-10.39 7.994zM5 11.5c0 3.866 3.13 7 7 7s7-3.134 7-7V8.75c0-3.866-3.13-7-7-7s-7 3.134-7 7v2.75zm12-2.75v2.75c0 2.761-2.24 5-5 5s-5-2.239-5-5V8.75c0-2.761 2.24-5 5-5s5 2.239 5 5zM11.25 8v4.25c0 .414.34.75.75.75s.75-.336.75-.75V8c0-.414-.34-.75-.75-.75s-.75.336-.75.75zm-3 1v2.25c0 .414.34.75.75.75s.75-.336.75-.75V9c0-.414-.34-.75-.75-.75s-.75.336-.75.75zm7.5 0c0-.414-.34-.75-.75-.75s-.75.336-.75.75v2.25c0 .414.34.75.75.75s.75-.336.75-.75V9z",
|
|
17
|
+
fill: color
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
export const LiveRoomsIconActive = ({
|
|
21
|
+
color = 'currentColor',
|
|
22
|
+
size = 26,
|
|
23
|
+
style
|
|
24
|
+
}) => /*#__PURE__*/_jsx(Svg, {
|
|
25
|
+
viewBox: "0 0 24 24",
|
|
26
|
+
width: size,
|
|
27
|
+
height: size,
|
|
28
|
+
style: style,
|
|
29
|
+
children: /*#__PURE__*/_jsx(Path, {
|
|
30
|
+
d: "M12 22.25c-4.99 0-9.18-3.393-10.39-7.994l1.93-.512c.99 3.746 4.4 6.506 8.46 6.506s7.47-2.76 8.46-6.506l1.93.512c-1.21 4.601-5.4 7.994-10.39 7.994zm0-20.5c-3.87 0-7 3.134-7 7v2.75c0 3.866 3.13 7 7 7s7-3.134 7-7V8.75c0-3.866-3.13-7-7-7zm-2.25 9.5c0 .414-.34.75-.75.75s-.75-.336-.75-.75V9c0-.414.34-.75.75-.75s.75.336.75.75v2.25zm3 1c0 .414-.34.75-.75.75s-.75-.336-.75-.75V8c0-.414.34-.75.75-.75s.75.336.75.75v4.25zm3-1c0 .414-.34.75-.75.75s-.75-.336-.75-.75V9c0-.414.34-.75.75-.75s.75.336.75.75v2.25z",
|
|
31
|
+
fill: color
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=spaces-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Svg","Path","jsx","_jsx","LiveRoomsIcon","color","size","style","viewBox","width","height","children","d","fill","LiveRoomsIconActive"],"sourceRoot":"../../../../../src","sources":["live/assets/icons/spaces-icon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG7C,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAAEC,KAAK,GAAG,cAAc;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAAgE,CAAC,kBAClIJ,IAAA,CAACH,GAAG;EAACQ,OAAO,EAAC,WAAW;EAACC,KAAK,EAAEH,IAAK;EAACI,MAAM,EAAEJ,IAAK;EAACC,KAAK,EAAEA,KAAM;EAAAI,QAAA,eAC/DR,IAAA,CAACF,IAAI;IAACW,CAAC,EAAC,gkBAAgkB;IAACC,IAAI,EAAER;EAAM,CAAE;AAAC,CACrlB,CACN;AAED,OAAO,MAAMS,mBAAmB,GAAGA,CAAC;EAAET,KAAK,GAAG,cAAc;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAAgE,CAAC,kBACxIJ,IAAA,CAACH,GAAG;EAACQ,OAAO,EAAC,WAAW;EAACC,KAAK,EAAEH,IAAK;EAACI,MAAM,EAAEJ,IAAK;EAACC,KAAK,EAAEA,KAAM;EAAAI,QAAA,eAC/DR,IAAA,CAACF,IAAI;IAACW,CAAC,EAAC,ofAAof;IAACC,IAAI,EAAER;EAAM,CAAE;AAAC,CACzgB,CACN","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import Svg, { Rect } from 'react-native-svg';
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
export const SyraIcon = ({
|
|
7
|
+
color = 'currentColor',
|
|
8
|
+
size = 26,
|
|
9
|
+
style
|
|
10
|
+
}) => /*#__PURE__*/_jsxs(Svg, {
|
|
11
|
+
viewBox: "0 0 500 500",
|
|
12
|
+
width: size,
|
|
13
|
+
height: size,
|
|
14
|
+
style: style,
|
|
15
|
+
children: [/*#__PURE__*/_jsx(Rect, {
|
|
16
|
+
x: "303.35",
|
|
17
|
+
y: "46.22",
|
|
18
|
+
width: "128.77",
|
|
19
|
+
height: "407.56",
|
|
20
|
+
fill: color
|
|
21
|
+
}), /*#__PURE__*/_jsx(Rect, {
|
|
22
|
+
x: "153.71",
|
|
23
|
+
y: "88.97",
|
|
24
|
+
width: "106.76",
|
|
25
|
+
height: "322.05",
|
|
26
|
+
fill: color
|
|
27
|
+
}), /*#__PURE__*/_jsx(Rect, {
|
|
28
|
+
x: "25",
|
|
29
|
+
y: "131.94",
|
|
30
|
+
width: "86.2",
|
|
31
|
+
height: "236.13",
|
|
32
|
+
fill: color
|
|
33
|
+
})]
|
|
34
|
+
});
|
|
35
|
+
export const SyraIconActive = SyraIcon;
|
|
36
|
+
//# sourceMappingURL=syra-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Svg","Rect","jsx","_jsx","jsxs","_jsxs","SyraIcon","color","size","style","viewBox","width","height","children","x","y","fill","SyraIconActive"],"sourceRoot":"../../../../../src","sources":["live/assets/icons/syra-icon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,GAAG,IAAIC,IAAI,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG7C,OAAO,MAAMC,QAAQ,GAAGA,CAAC;EAAEC,KAAK,GAAG,cAAc;EAAEC,IAAI,GAAG,EAAE;EAAEC;AAAgE,CAAC,kBAC7HJ,KAAA,CAACL,GAAG;EAACU,OAAO,EAAC,aAAa;EAACC,KAAK,EAAEH,IAAK;EAACI,MAAM,EAAEJ,IAAK;EAACC,KAAK,EAAEA,KAAM;EAAAI,QAAA,gBACjEV,IAAA,CAACF,IAAI;IAACa,CAAC,EAAC,QAAQ;IAACC,CAAC,EAAC,OAAO;IAACJ,KAAK,EAAC,QAAQ;IAACC,MAAM,EAAC,QAAQ;IAACI,IAAI,EAAET;EAAM,CAAE,CAAC,eACzEJ,IAAA,CAACF,IAAI;IAACa,CAAC,EAAC,QAAQ;IAACC,CAAC,EAAC,OAAO;IAACJ,KAAK,EAAC,QAAQ;IAACC,MAAM,EAAC,QAAQ;IAACI,IAAI,EAAET;EAAM,CAAE,CAAC,eACzEJ,IAAA,CAACF,IAAI;IAACa,CAAC,EAAC,IAAI;IAACC,CAAC,EAAC,QAAQ;IAACJ,KAAK,EAAC,MAAM;IAACC,MAAM,EAAC,QAAQ;IAACI,IAAI,EAAET;EAAM,CAAE,CAAC;AAAA,CACjE,CACN;AAED,OAAO,MAAMU,cAAc,GAAGX,QAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect } from 'react';
|
|
4
|
+
import { StyleSheet } from 'react-native';
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withTiming, Easing } from 'react-native-reanimated';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const AnimatedPulse = /*#__PURE__*/React.memo(function AnimatedPulse({
|
|
8
|
+
size = 8,
|
|
9
|
+
color = '#FFFFFF'
|
|
10
|
+
}) {
|
|
11
|
+
const opacity = useSharedValue(1);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
opacity.value = withRepeat(withTiming(0.3, {
|
|
14
|
+
duration: 500,
|
|
15
|
+
easing: Easing.inOut(Easing.ease)
|
|
16
|
+
}), -1, true);
|
|
17
|
+
}, [opacity]);
|
|
18
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
19
|
+
opacity: opacity.value
|
|
20
|
+
}));
|
|
21
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
22
|
+
style: [styles.dot, {
|
|
23
|
+
width: size,
|
|
24
|
+
height: size,
|
|
25
|
+
borderRadius: size / 2,
|
|
26
|
+
backgroundColor: color
|
|
27
|
+
}, animatedStyle]
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
const styles = StyleSheet.create({
|
|
31
|
+
dot: {}
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=AnimatedPulse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withTiming","Easing","jsx","_jsx","AnimatedPulse","memo","size","color","opacity","value","duration","easing","inOut","ease","animatedStyle","View","style","styles","dot","width","height","borderRadius","backgroundColor","create"],"sourceRoot":"../../../../src","sources":["live/components/AnimatedPulse.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,IACbC,cAAc,EACdC,gBAAgB,EAChBC,UAAU,EACVC,UAAU,EACVC,MAAM,QACD,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOjC,OAAO,MAAMC,aAAa,gBAAGX,KAAK,CAACY,IAAI,CAAC,SAASD,aAAaA,CAAC;EAC7DE,IAAI,GAAG,CAAC;EACRC,KAAK,GAAG;AACU,CAAC,EAAE;EACrB,MAAMC,OAAO,GAAGX,cAAc,CAAC,CAAC,CAAC;EAEjCH,SAAS,CAAC,MAAM;IACdc,OAAO,CAACC,KAAK,GAAGV,UAAU,CACxBC,UAAU,CAAC,GAAG,EAAE;MAAEU,QAAQ,EAAE,GAAG;MAAEC,MAAM,EAAEV,MAAM,CAACW,KAAK,CAACX,MAAM,CAACY,IAAI;IAAE,CAAC,CAAC,EACrE,CAAC,CAAC,EACF,IACF,CAAC;EACH,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC;EAEb,MAAMM,aAAa,GAAGhB,gBAAgB,CAAC,OAAO;IAC5CU,OAAO,EAAEA,OAAO,CAACC;EACnB,CAAC,CAAC,CAAC;EAEH,oBACEN,IAAA,CAACP,QAAQ,CAACmB,IAAI;IACZC,KAAK,EAAE,CACLC,MAAM,CAACC,GAAG,EACV;MACEC,KAAK,EAAEb,IAAI;MACXc,MAAM,EAAEd,IAAI;MACZe,YAAY,EAAEf,IAAI,GAAG,CAAC;MACtBgB,eAAe,EAAEf;IACnB,CAAC,EACDO,aAAa;EACb,CACH,CAAC;AAEN,CAAC,CAAC;AAEF,MAAMG,MAAM,GAAGtB,UAAU,CAAC4B,MAAM,CAAC;EAC/BL,GAAG,EAAE,CAAC;AACR,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect } from 'react';
|
|
4
|
+
import { View, StyleSheet } from 'react-native';
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withSequence, withTiming, Easing, cancelAnimation } from 'react-native-reanimated';
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
export const AnimatedSpeakerRing = /*#__PURE__*/React.memo(function AnimatedSpeakerRing({
|
|
8
|
+
isSpeaking,
|
|
9
|
+
isMuted,
|
|
10
|
+
primaryColor,
|
|
11
|
+
children
|
|
12
|
+
}) {
|
|
13
|
+
const pulseScale = useSharedValue(1);
|
|
14
|
+
const pulseOpacity = useSharedValue(0);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (isSpeaking && !isMuted) {
|
|
17
|
+
pulseOpacity.value = withRepeat(withSequence(withTiming(0.4, {
|
|
18
|
+
duration: 600,
|
|
19
|
+
easing: Easing.out(Easing.ease)
|
|
20
|
+
}), withTiming(0, {
|
|
21
|
+
duration: 600,
|
|
22
|
+
easing: Easing.in(Easing.ease)
|
|
23
|
+
})), -1, false);
|
|
24
|
+
pulseScale.value = withRepeat(withSequence(withTiming(1.15, {
|
|
25
|
+
duration: 600,
|
|
26
|
+
easing: Easing.out(Easing.ease)
|
|
27
|
+
}), withTiming(1, {
|
|
28
|
+
duration: 600,
|
|
29
|
+
easing: Easing.in(Easing.ease)
|
|
30
|
+
})), -1, false);
|
|
31
|
+
} else {
|
|
32
|
+
cancelAnimation(pulseScale);
|
|
33
|
+
cancelAnimation(pulseOpacity);
|
|
34
|
+
pulseScale.value = withTiming(1, {
|
|
35
|
+
duration: 200
|
|
36
|
+
});
|
|
37
|
+
pulseOpacity.value = withTiming(0, {
|
|
38
|
+
duration: 200
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}, [isSpeaking, isMuted, pulseScale, pulseOpacity]);
|
|
42
|
+
const pulseStyle = useAnimatedStyle(() => ({
|
|
43
|
+
transform: [{
|
|
44
|
+
scale: pulseScale.value
|
|
45
|
+
}],
|
|
46
|
+
opacity: pulseOpacity.value
|
|
47
|
+
}));
|
|
48
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
49
|
+
style: styles.container,
|
|
50
|
+
children: [/*#__PURE__*/_jsx(Animated.View, {
|
|
51
|
+
style: [styles.pulseRing, {
|
|
52
|
+
borderColor: primaryColor
|
|
53
|
+
}, pulseStyle]
|
|
54
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
55
|
+
style: [styles.avatarRing, !isMuted ? {
|
|
56
|
+
borderColor: primaryColor,
|
|
57
|
+
borderWidth: 3
|
|
58
|
+
} : {
|
|
59
|
+
borderColor: 'transparent',
|
|
60
|
+
borderWidth: 3
|
|
61
|
+
}],
|
|
62
|
+
children: children
|
|
63
|
+
})]
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
const styles = StyleSheet.create({
|
|
67
|
+
container: {
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
justifyContent: 'center',
|
|
70
|
+
position: 'relative'
|
|
71
|
+
},
|
|
72
|
+
pulseRing: {
|
|
73
|
+
position: 'absolute',
|
|
74
|
+
width: '100%',
|
|
75
|
+
height: '100%',
|
|
76
|
+
borderRadius: 19,
|
|
77
|
+
borderWidth: 3
|
|
78
|
+
},
|
|
79
|
+
avatarRing: {
|
|
80
|
+
borderRadius: 19,
|
|
81
|
+
padding: 2,
|
|
82
|
+
position: 'relative'
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=AnimatedSpeakerRing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","View","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withSequence","withTiming","Easing","cancelAnimation","jsx","_jsx","jsxs","_jsxs","AnimatedSpeakerRing","memo","isSpeaking","isMuted","primaryColor","children","pulseScale","pulseOpacity","value","duration","easing","out","ease","in","pulseStyle","transform","scale","opacity","style","styles","container","pulseRing","borderColor","avatarRing","borderWidth","create","alignItems","justifyContent","position","width","height","borderRadius","padding"],"sourceRoot":"../../../../src","sources":["live/components/AnimatedSpeakerRing.tsx"],"mappings":"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","ignoreList":[]}
|