@fishjam-cloud/react-client 0.24.0 → 0.25.0-rc.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useScreenshareManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useScreenshareManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAsC,MAAM,0BAA0B,CAAC;AAI/G,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE;QACvB,gBAAgB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;QACnD,gBAAgB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;KACpD,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B;;OAEG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC;;OAEG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,uBAAuB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,EAAE,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E,CAAC;AAEF,UAAU,uBAAuB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,GAAI,wCAInC,uBAAuB,KAAG,oBAyJ5B,CAAC"}
1
+ {"version":3,"file":"useScreenshareManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useScreenshareManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAsC,MAAM,0BAA0B,CAAC;AAI/G,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE;QACvB,gBAAgB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;QACnD,gBAAgB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;KACpD,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B;;OAEG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC;;OAEG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,uBAAuB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,EAAE,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E,CAAC;AAEF,UAAU,uBAAuB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,GAAI,wCAInC,uBAAuB,KAAG,oBAkK5B,CAAC"}
@@ -35,11 +35,21 @@ export const useScreenShareManager = ({ fishjamClient, peerStatus, logger, }) =>
35
35
  audio = audioTrack;
36
36
  cleanMiddlewareFnRef.current = onClear;
37
37
  }
38
- const addTrackPromises = [addTrackToFishjamClient(video, { displayName, type: "screenShareVideo", paused: false })];
39
- if (audio)
40
- addTrackPromises.push(addTrackToFishjamClient(audio, { displayName, type: "screenShareAudio", paused: false }));
41
- const [videoId, audioId] = await Promise.all(addTrackPromises);
42
- setState({ stream: displayStream, trackIds: { videoId, audioId } });
38
+ // TODO: FCE-2659 Refactor this hook so this check is not required.
39
+ // This check is needed to support screensharing in livestreams which don't use the FishjamClient.
40
+ // trackIds are simply ignored because they are not used in this use case.
41
+ if (fishjamClient.status === "initialized") {
42
+ const addTrackPromises = [
43
+ addTrackToFishjamClient(video, { displayName, type: "screenShareVideo", paused: false }),
44
+ ];
45
+ if (audio)
46
+ addTrackPromises.push(addTrackToFishjamClient(audio, { displayName, type: "screenShareAudio", paused: false }));
47
+ const [videoId, audioId] = await Promise.all(addTrackPromises);
48
+ setState({ stream: displayStream, trackIds: { videoId, audioId } });
49
+ }
50
+ else {
51
+ setState({ stream: displayStream, trackIds: {} });
52
+ }
43
53
  };
44
54
  const replaceTracks = async (newVideoTrack, newAudioTrack) => {
45
55
  if (!state?.stream)
@@ -1 +1 @@
1
- {"version":3,"file":"useLivestreamStreamer.d.ts","sourceRoot":"","sources":["../../src/hooks/useLivestreamStreamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmD,MAAM,0BAA0B,CAAC;AAK5G,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GACtB;IACE,sHAAsH;IACtH,KAAK,EAAE,WAAW,CAAC;IACnB,8HAA8H;IAC9H,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B,GACD;IACE,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEN,2BAA2B;AAC3B,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,2BAA2B;AAC3B,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,qFAAqF;IACrF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,yEAAyE;IACzE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,iEAAiE;IACjE,WAAW,EAAE,OAAO,CAAC;CACtB;AAKD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAO,2BAyCxC,CAAC"}
1
+ {"version":3,"file":"useLivestreamStreamer.d.ts","sourceRoot":"","sources":["../../src/hooks/useLivestreamStreamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmD,MAAM,0BAA0B,CAAC;AAM5G,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GACtB;IACE,sHAAsH;IACtH,KAAK,EAAE,WAAW,CAAC;IACnB,8HAA8H;IAC9H,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B,GACD;IACE,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEN,2BAA2B;AAC3B,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,cAAc,CAAC;IACvB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,2BAA2B;AAC3B,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,qFAAqF;IACrF,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,yEAAyE;IACzE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,iEAAiE;IACjE,WAAW,EAAE,OAAO,CAAC;CACtB;AAKD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAO,2BA0CxC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { LivestreamError, publishLivestream } from "@fishjam-cloud/ts-client";
2
2
  import { useCallback, useRef, useState } from "react";
3
- import { FISHJAM_WHIP_URL } from "../consts";
3
+ import { useFishjamId } from "../contexts/fishjamId";
4
+ import { buildLivestreamWhipUrl } from "../utils/fishjamUrl";
4
5
  const isLivestreamError = (err) => Object.values(LivestreamError).includes(err);
5
6
  /**
6
7
  * Hook for publishing a livestream, which can be then received with {@link useLivestreamViewer}
@@ -10,6 +11,7 @@ const isLivestreamError = (err) => Object.values(LivestreamError).includes(err);
10
11
  export const useLivestreamStreamer = () => {
11
12
  const [error, setError] = useState(null);
12
13
  const [isConnected, setIsConnected] = useState(false);
14
+ const fishjamId = useFishjamId();
13
15
  const resultRef = useRef(null);
14
16
  const disconnect = useCallback(() => {
15
17
  resultRef.current?.stopPublishing();
@@ -27,7 +29,7 @@ export const useLivestreamStreamer = () => {
27
29
  const audioTrack = audio?.getAudioTracks().at(0);
28
30
  const stream = new MediaStream([videoTrack, audioTrack].filter((v) => v != null));
29
31
  try {
30
- const result = await publishLivestream(stream, urlOverride ?? FISHJAM_WHIP_URL, token, {
32
+ const result = await publishLivestream(stream, urlOverride ?? buildLivestreamWhipUrl(fishjamId), token, {
31
33
  onConnectionStateChange,
32
34
  });
33
35
  resultRef.current = result;
@@ -39,6 +41,6 @@ export const useLivestreamStreamer = () => {
39
41
  else
40
42
  console.error(e);
41
43
  }
42
- }, [disconnect, onConnectionStateChange]);
44
+ }, [disconnect, onConnectionStateChange, fishjamId]);
43
45
  return { connect, disconnect, error, isConnected };
44
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useLivestreamViewer.d.ts","sourceRoot":"","sources":["../../src/hooks/useLivestreamViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmD,MAAM,0BAA0B,CAAC;AAK5G,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE5G;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,oCAAoC;IACpC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,6FAA6F;IAC7F,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,+EAA+E;IAC/E,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,iEAAiE;IACjE,WAAW,EAAE,OAAO,CAAC;CACtB;AAUD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAO,yBAqCtC,CAAC"}
1
+ {"version":3,"file":"useLivestreamViewer.d.ts","sourceRoot":"","sources":["../../src/hooks/useLivestreamViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmD,MAAM,0BAA0B,CAAC;AAM5G,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE5G;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,oCAAoC;IACpC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,6FAA6F;IAC7F,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,+EAA+E;IAC/E,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B,iEAAiE;IACjE,WAAW,EAAE,OAAO,CAAC;CACtB;AAUD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAO,yBAyCtC,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { LivestreamError, receiveLivestream } from "@fishjam-cloud/ts-client";
2
2
  import { useCallback, useRef, useState } from "react";
3
- import { FISHJAM_WHEP_URL } from "../consts";
3
+ import { useFishjamId } from "../contexts/fishjamId";
4
+ import { buildLivestreamWhepUrl } from "../utils/fishjamUrl";
4
5
  const isLivestreamError = (err) => Object.values(LivestreamError).includes(err);
5
- const urlFromConfig = (config) => {
6
+ const urlFromConfig = (config, baseUrl) => {
6
7
  if (config.streamId)
7
- return `${FISHJAM_WHEP_URL}/${config.streamId}`;
8
- return FISHJAM_WHEP_URL;
8
+ return `${baseUrl}/${config.streamId}`;
9
+ return baseUrl;
9
10
  };
10
11
  /**
11
12
  * Hook for receiving a published livestream.
@@ -17,6 +18,7 @@ export const useLivestreamViewer = () => {
17
18
  const [error, setError] = useState(null);
18
19
  const resultRef = useRef(null);
19
20
  const [isConnected, setIsConnected] = useState(false);
21
+ const fishjamId = useFishjamId();
20
22
  const disconnect = useCallback(() => {
21
23
  setStream(null);
22
24
  resultRef.current?.stop();
@@ -31,7 +33,10 @@ export const useLivestreamViewer = () => {
31
33
  if (resultRef.current !== null)
32
34
  disconnect();
33
35
  try {
34
- const result = await receiveLivestream(url ?? urlFromConfig(config), config.token, { onConnectionStateChange });
36
+ const baseUrl = buildLivestreamWhepUrl(fishjamId);
37
+ const result = await receiveLivestream(url ?? urlFromConfig(config, baseUrl), config.token, {
38
+ onConnectionStateChange,
39
+ });
35
40
  resultRef.current = result;
36
41
  setError(null);
37
42
  setStream(result.stream);
@@ -40,6 +45,6 @@ export const useLivestreamViewer = () => {
40
45
  if (isLivestreamError(e))
41
46
  setError(e);
42
47
  }
43
- }, [disconnect, onConnectionStateChange]);
48
+ }, [disconnect, onConnectionStateChange, fishjamId]);
44
49
  return { stream, connect, disconnect, error, isConnected };
45
50
  };
@@ -2,6 +2,8 @@ import type { PeerId } from "../types/public";
2
2
  /**
3
3
  * Voice activity detection. Use this hook to check if voice is detected in audio track for given peer(s).
4
4
  *
5
+ * @param options - Options object containing `peerIds` - a list of ids of peers to subscribe to for voice activity detection notifications.
6
+ *
5
7
  * Example usage:
6
8
  * ```tsx
7
9
  * import { useVAD, type PeerId } from "@fishjam-cloud/react-client";
@@ -9,15 +11,14 @@ import type { PeerId } from "../types/public";
9
11
  * const peersInfo = useVAD({peerIds});
10
12
  * const activePeers = (Object.keys(peersInfo) as PeerId[]).filter((peerId) => peersInfo[peerId]);
11
13
  *
12
- * return `Now talking: ${activePeers.join(", ")}`;
14
+ * return "Now talking: " + activePeers.join(", ");
13
15
  * }
14
16
  * ```
15
- * @param peerIds List of ids of peers to subscribe to for voice activity detection notifications.
16
17
  * @category Connection
17
18
  * @group Hooks
18
19
  * @returns Each key is a peerId and the boolean value indicates if voice activity is currently detected for that peer.
19
20
  */
20
- export declare const useVAD: ({ peerIds }: {
21
+ export declare const useVAD: (options: {
21
22
  peerIds: ReadonlyArray<PeerId>;
22
23
  }) => Record<PeerId, boolean>;
23
24
  //# sourceMappingURL=useVAD.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useVAD.d.ts","sourceRoot":"","sources":["../../src/hooks/useVAD.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,MAAM,GAAI,aAAa;IAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAAE,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAgE9F,CAAC"}
1
+ {"version":3,"file":"useVAD.d.ts","sourceRoot":"","sources":["../../src/hooks/useVAD.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS;IAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAAE,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAiE1F,CAAC"}
@@ -3,6 +3,8 @@ import { FishjamClientStateContext } from "../contexts/fishjamState";
3
3
  /**
4
4
  * Voice activity detection. Use this hook to check if voice is detected in audio track for given peer(s).
5
5
  *
6
+ * @param options - Options object containing `peerIds` - a list of ids of peers to subscribe to for voice activity detection notifications.
7
+ *
6
8
  * Example usage:
7
9
  * ```tsx
8
10
  * import { useVAD, type PeerId } from "@fishjam-cloud/react-client";
@@ -10,15 +12,15 @@ import { FishjamClientStateContext } from "../contexts/fishjamState";
10
12
  * const peersInfo = useVAD({peerIds});
11
13
  * const activePeers = (Object.keys(peersInfo) as PeerId[]).filter((peerId) => peersInfo[peerId]);
12
14
  *
13
- * return `Now talking: ${activePeers.join(", ")}`;
15
+ * return "Now talking: " + activePeers.join(", ");
14
16
  * }
15
17
  * ```
16
- * @param peerIds List of ids of peers to subscribe to for voice activity detection notifications.
17
18
  * @category Connection
18
19
  * @group Hooks
19
20
  * @returns Each key is a peerId and the boolean value indicates if voice activity is currently detected for that peer.
20
21
  */
21
- export const useVAD = ({ peerIds }) => {
22
+ export const useVAD = (options) => {
23
+ const { peerIds } = options;
22
24
  const clientState = useContext(FishjamClientStateContext);
23
25
  if (!clientState)
24
26
  throw Error("useVAD must be used within FishjamProvider");
@@ -1,3 +1,9 @@
1
+ type LivestreamKind = "whip" | "whep";
1
2
  export declare function resolveFishjamUrl(fishjamId: string): string;
2
3
  export declare function httpToWebsocketUrl(url: string): string;
4
+ export declare function extractDomainFromFishjamId(fishjamId: string): string;
5
+ export declare function buildLivestreamUrl(fishjamId: string, kind: LivestreamKind): string;
6
+ export declare function buildLivestreamWhipUrl(fishjamId: string): string;
7
+ export declare function buildLivestreamWhepUrl(fishjamId: string): string;
8
+ export {};
3
9
  //# sourceMappingURL=fishjamUrl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fishjamUrl.d.ts","sourceRoot":"","sources":["../../src/utils/fishjamUrl.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"fishjamUrl.d.ts","sourceRoot":"","sources":["../../src/utils/fishjamUrl.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAMlF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE"}
@@ -9,3 +9,25 @@ export function resolveFishjamUrl(fishjamId) {
9
9
  export function httpToWebsocketUrl(url) {
10
10
  return url.replace("https://", "wss://").replace("http://", "ws://");
11
11
  }
12
+ export function extractDomainFromFishjamId(fishjamId) {
13
+ try {
14
+ const url = new URL(fishjamId);
15
+ return url.origin;
16
+ }
17
+ catch {
18
+ return "https://fishjam.io";
19
+ }
20
+ }
21
+ export function buildLivestreamUrl(fishjamId, kind) {
22
+ if (!fishjamId || fishjamId.trim() === "") {
23
+ throw new Error("fishjamId is required to build a livestream WHEP URL.");
24
+ }
25
+ const domain = extractDomainFromFishjamId(fishjamId);
26
+ return `${domain}/api/v1/live/api/${kind}`;
27
+ }
28
+ export function buildLivestreamWhipUrl(fishjamId) {
29
+ return buildLivestreamUrl(fishjamId, "whip");
30
+ }
31
+ export function buildLivestreamWhepUrl(fishjamId) {
32
+ return buildLivestreamUrl(fishjamId, "whep");
33
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fishjam-cloud/react-client",
3
- "version": "0.24.0",
3
+ "version": "0.25.0-rc.2",
4
4
  "description": "React client library for Fishjam",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Fishjam Team",
@@ -42,6 +42,9 @@
42
42
  "lint:check": "eslint . --ext .ts,.tsx",
43
43
  "prepack": "yarn workspace @fishjam-cloud/ts-client build && yarn build"
44
44
  },
45
+ "peerDependencies": {
46
+ "react": "^19.1.0"
47
+ },
45
48
  "devDependencies": {
46
49
  "@playwright/test": "^1.51.1",
47
50
  "@testing-library/dom": "^10.4.0",
@@ -49,10 +52,9 @@
49
52
  "@types/events": "^3.0.3",
50
53
  "@types/lodash.isequal": "^4.5.8",
51
54
  "@types/node": "^22.14.0",
52
- "@types/react": "^19.0.12",
55
+ "@types/react": "19.1.0",
53
56
  "fake-mediastreamtrack": "^2.0.0",
54
57
  "jsdom": "^26.0.0",
55
- "react": "^19.0.0",
56
58
  "typed-emitter": "^2.1.0",
57
59
  "typedoc": "^0.28.2",
58
60
  "typedoc-plugin-mdn-links": "^5.0.1",
@@ -60,12 +62,21 @@
60
62
  "vitest": "^3.1.1"
61
63
  },
62
64
  "dependencies": {
63
- "@fishjam-cloud/ts-client": "0.24.0",
65
+ "@fishjam-cloud/ts-client": "0.25.0-rc.2",
64
66
  "events": "3.3.0",
65
67
  "lodash.isequal": "4.5.0"
66
68
  },
67
69
  "directories": {
68
70
  "example": "examples"
69
71
  },
70
- "packageManager": "yarn@4.9.2+sha256.ca4310f8ba997b4643a000ce512d9772e01c1485df35511114b325315960acb7"
72
+ "packageManager": "yarn@4.12.0",
73
+ "lint-staged": {
74
+ "*": [
75
+ "yarn format"
76
+ ],
77
+ "*.(js|ts|tsx)": [
78
+ "yarn lint"
79
+ ]
80
+ },
81
+ "stableVersion": "0.24.0"
71
82
  }