@streamyy/client 0.1.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.
Files changed (51) hide show
  1. package/README.md +40 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/client.d.ts +26 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +98 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/components/CallControls.d.ts +9 -0
  8. package/dist/components/CallControls.d.ts.map +1 -0
  9. package/dist/components/CallControls.js +31 -0
  10. package/dist/components/CallControls.js.map +1 -0
  11. package/dist/components/IncomingCallCard.d.ts +8 -0
  12. package/dist/components/IncomingCallCard.d.ts.map +1 -0
  13. package/dist/components/IncomingCallCard.js +27 -0
  14. package/dist/components/IncomingCallCard.js.map +1 -0
  15. package/dist/components/StreammyCallWidget.d.ts +10 -0
  16. package/dist/components/StreammyCallWidget.d.ts.map +1 -0
  17. package/dist/components/StreammyCallWidget.js +139 -0
  18. package/dist/components/StreammyCallWidget.js.map +1 -0
  19. package/dist/components/VideoStage.d.ts +11 -0
  20. package/dist/components/VideoStage.d.ts.map +1 -0
  21. package/dist/components/VideoStage.js +58 -0
  22. package/dist/components/VideoStage.js.map +1 -0
  23. package/dist/components/VideoTile.d.ts +11 -0
  24. package/dist/components/VideoTile.d.ts.map +1 -0
  25. package/dist/components/VideoTile.js +29 -0
  26. package/dist/components/VideoTile.js.map +1 -0
  27. package/dist/hooks/useRingtone.d.ts +15 -0
  28. package/dist/hooks/useRingtone.d.ts.map +1 -0
  29. package/dist/hooks/useRingtone.js +99 -0
  30. package/dist/hooks/useRingtone.js.map +1 -0
  31. package/dist/hooks/useStreammy.d.ts +23 -0
  32. package/dist/hooks/useStreammy.d.ts.map +1 -0
  33. package/dist/hooks/useStreammy.js +183 -0
  34. package/dist/hooks/useStreammy.js.map +1 -0
  35. package/dist/index.d.ts +12 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +12 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/types.d.ts +105 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/webrtc/media.d.ts +7 -0
  44. package/dist/webrtc/media.d.ts.map +1 -0
  45. package/dist/webrtc/media.js +15 -0
  46. package/dist/webrtc/media.js.map +1 -0
  47. package/dist/webrtc/peer-session.d.ts +19 -0
  48. package/dist/webrtc/peer-session.d.ts.map +1 -0
  49. package/dist/webrtc/peer-session.js +38 -0
  50. package/dist/webrtc/peer-session.js.map +1 -0
  51. package/package.json +39 -0
@@ -0,0 +1,11 @@
1
+ export interface VideoStageProps {
2
+ localStream: MediaStream | null;
3
+ remoteStream: MediaStream | null;
4
+ localLabel?: string;
5
+ remoteLabel?: string;
6
+ localMirrored?: boolean;
7
+ remoteMirrored?: boolean;
8
+ defaultMainView?: "local" | "remote";
9
+ }
10
+ export declare const VideoStage: ({ localStream, remoteStream, localLabel, remoteLabel, localMirrored, remoteMirrored, defaultMainView, }: VideoStageProps) => any;
11
+ //# sourceMappingURL=VideoStage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoStage.d.ts","sourceRoot":"","sources":["../../src/components/VideoStage.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACtC;AAED,eAAO,MAAM,UAAU,GAAI,yGAQxB,eAAe,QAkGjB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState } from "react";
3
+ import { VideoTile } from "./VideoTile.js";
4
+ export const VideoStage = ({ localStream, remoteStream, localLabel = "You", remoteLabel = "Remote", localMirrored = false, remoteMirrored = false, defaultMainView = "remote", }) => {
5
+ const [mainView, setMainView] = useState(defaultMainView);
6
+ const mainTile = useMemo(() => mainView === "local"
7
+ ? {
8
+ stream: localStream,
9
+ label: localLabel,
10
+ mirrored: localMirrored,
11
+ muted: true,
12
+ }
13
+ : {
14
+ stream: remoteStream,
15
+ label: remoteLabel,
16
+ mirrored: remoteMirrored,
17
+ muted: false,
18
+ }, [localLabel, localMirrored, localStream, mainView, remoteLabel, remoteMirrored, remoteStream]);
19
+ const thumbnailTile = useMemo(() => mainView === "local"
20
+ ? {
21
+ stream: remoteStream,
22
+ label: remoteLabel,
23
+ mirrored: remoteMirrored,
24
+ muted: false,
25
+ key: "remote",
26
+ }
27
+ : {
28
+ stream: localStream,
29
+ label: localLabel,
30
+ mirrored: localMirrored,
31
+ muted: true,
32
+ key: "local",
33
+ }, [localLabel, localMirrored, localStream, mainView, remoteLabel, remoteMirrored, remoteStream]);
34
+ const toggleMainView = () => {
35
+ setMainView((current) => (current === "local" ? "remote" : "local"));
36
+ };
37
+ return (_jsxs("section", { style: {
38
+ position: "relative",
39
+ display: "grid",
40
+ gap: "0.75rem",
41
+ }, children: [_jsx(VideoTile, { stream: mainTile.stream, label: mainTile.label, mirrored: mainTile.mirrored, muted: mainTile.muted, active: true }), _jsx("div", { style: {
42
+ position: "absolute",
43
+ right: "1rem",
44
+ bottom: "3.25rem",
45
+ width: "30%",
46
+ minWidth: "8rem",
47
+ maxWidth: "12rem",
48
+ }, children: _jsx(VideoTile, { stream: thumbnailTile.stream, label: thumbnailTile.label, mirrored: thumbnailTile.mirrored, muted: thumbnailTile.muted, compact: true, onClick: toggleMainView }) }), _jsx("button", { type: "button", onClick: toggleMainView, style: {
49
+ justifySelf: "start",
50
+ borderRadius: "999px",
51
+ border: "1px solid rgba(148, 163, 184, 0.2)",
52
+ background: "rgba(15, 23, 42, 0.88)",
53
+ color: "white",
54
+ padding: "0.7rem 0.95rem",
55
+ cursor: "pointer",
56
+ }, children: "Swap videos" })] }));
57
+ };
58
+ //# sourceMappingURL=VideoStage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoStage.js","sourceRoot":"","sources":["../../src/components/VideoStage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface VideoTileProps {
2
+ stream: MediaStream | null;
3
+ muted?: boolean;
4
+ label: string;
5
+ mirrored?: boolean;
6
+ onClick?: () => void;
7
+ active?: boolean;
8
+ compact?: boolean;
9
+ }
10
+ export declare const VideoTile: ({ stream, muted, label, mirrored, onClick, active, compact, }: VideoTileProps) => any;
11
+ //# sourceMappingURL=VideoTile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoTile.d.ts","sourceRoot":"","sources":["../../src/components/VideoTile.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,SAAS,GAAI,+DAQvB,cAAc,QA6ChB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ export const VideoTile = ({ stream, muted = false, label, mirrored = false, onClick, active = false, compact = false, }) => {
4
+ const ref = useRef(null);
5
+ useEffect(() => {
6
+ if (ref.current) {
7
+ ref.current.srcObject = stream;
8
+ }
9
+ }, [stream]);
10
+ return (_jsxs("figure", { style: {
11
+ display: "grid",
12
+ gap: "0.5rem",
13
+ margin: 0,
14
+ }, children: [_jsx("video", { ref: ref, autoPlay: true, playsInline: true, muted: muted, onClick: onClick, style: {
15
+ width: "100%",
16
+ minHeight: compact ? "7rem" : "12rem",
17
+ background: "#111827",
18
+ borderRadius: "1rem",
19
+ objectFit: "cover",
20
+ transform: mirrored ? "scaleX(-1)" : "none",
21
+ cursor: onClick ? "pointer" : "default",
22
+ border: active ? "2px solid rgba(56, 189, 248, 0.9)" : "1px solid rgba(148, 163, 184, 0.18)",
23
+ boxShadow: active ? "0 0 0 4px rgba(14, 165, 233, 0.12)" : "none",
24
+ } }), _jsx("figcaption", { style: {
25
+ color: "rgba(226, 232, 240, 0.82)",
26
+ fontSize: compact ? "0.85rem" : "0.95rem",
27
+ }, children: label })] }));
28
+ };
29
+ //# sourceMappingURL=VideoTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoTile.js","sourceRoot":"","sources":["../../src/components/VideoTile.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAY1C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,MAAM,EACN,KAAK,GAAG,KAAK,EACb,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,MAAM,GAAG,KAAK,EACd,OAAO,GAAG,KAAK,GACA,EAAE,EAAE;IACnB,MAAM,GAAG,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,kBACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,CAAC;SACV,aAED,gBACE,GAAG,EAAE,GAAG,EACR,QAAQ,QACR,WAAW,QACX,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE;oBACL,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACrC,UAAU,EAAE,SAAS;oBACrB,YAAY,EAAE,MAAM;oBACpB,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;oBAC3C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oBACvC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qCAAqC;oBAC5F,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,MAAM;iBAClE,GACD,EACF,qBACE,KAAK,EAAE;oBACL,KAAK,EAAE,2BAA2B;oBAClC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;iBAC1C,YAEA,KAAK,GACK,IACN,CACV,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { StreammyRingtoneSource } from "../types.js";
2
+ export declare const defaultRingtones: {
3
+ readonly incoming: {
4
+ kind: "pattern";
5
+ pattern: import("../types.js").TonePattern;
6
+ volume?: number;
7
+ };
8
+ readonly outgoing: {
9
+ kind: "pattern";
10
+ pattern: import("../types.js").TonePattern;
11
+ volume?: number;
12
+ };
13
+ };
14
+ export declare const useRingtone: (active: boolean, source: StreammyRingtoneSource | undefined, fallback: "incoming" | "outgoing") => void;
15
+ //# sourceMappingURL=useRingtone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRingtone.d.ts","sourceRoot":"","sources":["../../src/hooks/useRingtone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAmB,MAAM,aAAa,CAAC;AAqB3E,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAGnB,CAAC;AA+EX,eAAO,MAAM,WAAW,GACtB,QAAQ,OAAO,EACf,QAAQ,sBAAsB,GAAG,SAAS,EAC1C,UAAU,UAAU,GAAG,UAAU,KAChC,IAoBF,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { useEffect, useRef } from "react";
2
+ const defaultIncoming = {
3
+ kind: "pattern",
4
+ pattern: {
5
+ steps: [
6
+ { frequency: 880, durationMs: 220, gain: 0.06 },
7
+ { frequency: 660, durationMs: 220, gain: 0.06 },
8
+ ],
9
+ pauseMs: 900,
10
+ },
11
+ };
12
+ const defaultOutgoing = {
13
+ kind: "pattern",
14
+ pattern: {
15
+ steps: [{ frequency: 520, durationMs: 850, gain: 0.05 }],
16
+ pauseMs: 1100,
17
+ },
18
+ };
19
+ export const defaultRingtones = {
20
+ incoming: defaultIncoming,
21
+ outgoing: defaultOutgoing,
22
+ };
23
+ const playToneStep = (context, gainNode, step, startAt) => {
24
+ const oscillator = context.createOscillator();
25
+ oscillator.type = "sine";
26
+ oscillator.frequency.setValueAtTime(step.frequency, startAt);
27
+ gainNode.gain.setValueAtTime(step.gain ?? 0.05, startAt);
28
+ oscillator.connect(gainNode);
29
+ oscillator.start(startAt);
30
+ oscillator.stop(startAt + step.durationMs / 1000);
31
+ return step.durationMs;
32
+ };
33
+ const startPatternPlayback = (source) => {
34
+ const AudioContextCtor = window.AudioContext;
35
+ if (!AudioContextCtor) {
36
+ return () => { };
37
+ }
38
+ const context = new AudioContextCtor();
39
+ const gainNode = context.createGain();
40
+ gainNode.connect(context.destination);
41
+ let cancelled = false;
42
+ let timer = null;
43
+ const schedule = async () => {
44
+ if (cancelled) {
45
+ return;
46
+ }
47
+ if (context.state === "suspended") {
48
+ await context.resume();
49
+ }
50
+ let cursor = context.currentTime;
51
+ let totalMs = 0;
52
+ for (const step of source.pattern.steps) {
53
+ totalMs += playToneStep(context, gainNode, step, cursor);
54
+ cursor += step.durationMs / 1000;
55
+ }
56
+ const pauseMs = source.pattern.pauseMs ?? 600;
57
+ timer = window.setTimeout(() => {
58
+ void schedule();
59
+ }, totalMs + pauseMs);
60
+ };
61
+ void schedule();
62
+ return () => {
63
+ cancelled = true;
64
+ if (timer !== null) {
65
+ window.clearTimeout(timer);
66
+ }
67
+ gainNode.disconnect();
68
+ void context.close();
69
+ };
70
+ };
71
+ const startUrlPlayback = (source) => {
72
+ const audio = new Audio(source.src);
73
+ audio.loop = true;
74
+ audio.volume = source.volume ?? 1;
75
+ void audio.play().catch(() => { });
76
+ return () => {
77
+ audio.pause();
78
+ audio.currentTime = 0;
79
+ };
80
+ };
81
+ export const useRingtone = (active, source, fallback) => {
82
+ const stopRef = useRef(null);
83
+ useEffect(() => {
84
+ if (!active) {
85
+ stopRef.current?.();
86
+ stopRef.current = null;
87
+ return;
88
+ }
89
+ const selected = source ?? defaultRingtones[fallback];
90
+ stopRef.current?.();
91
+ stopRef.current =
92
+ selected.kind === "url" ? startUrlPlayback(selected) : startPatternPlayback(selected);
93
+ return () => {
94
+ stopRef.current?.();
95
+ stopRef.current = null;
96
+ };
97
+ }, [active, fallback, source]);
98
+ };
99
+ //# sourceMappingURL=useRingtone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRingtone.js","sourceRoot":"","sources":["../../src/hooks/useRingtone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type PropsWithChildren } from "react";
2
+ import type { CallStatus, CallType } from "@streamyy/core";
3
+ import { type StreammyClient } from "../client.js";
4
+ import type { StreammyActiveCall, StreammyClientOptions } from "../types.js";
5
+ interface StreammyContextValue {
6
+ client: StreammyClient;
7
+ activeCall: StreammyActiveCall | null;
8
+ callStatus: CallStatus | "idle";
9
+ connected: boolean;
10
+ reconnecting: boolean;
11
+ initiateCall(receiverId: string, callType: CallType, metadata?: Record<string, unknown>): void;
12
+ acceptCall(callId?: string): void;
13
+ declineCall(callId?: string, reason?: string): void;
14
+ cancelCall(callId?: string): void;
15
+ endCall(callId?: string): void;
16
+ clearActiveCall(): void;
17
+ }
18
+ export declare const StreammyProvider: ({ options, children, }: PropsWithChildren<{
19
+ options: StreammyClientOptions;
20
+ }>) => any;
21
+ export declare const useStreammy: () => StreammyContextValue;
22
+ export {};
23
+ //# sourceMappingURL=useStreammy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStreammy.d.ts","sourceRoot":"","sources":["../../src/hooks/useStreammy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE7E,UAAU,oBAAoB;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/F,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,IAAI,IAAI,CAAC;CACzB;AAID,eAAO,MAAM,gBAAgB,GAAI,wBAG9B,iBAAiB,CAAC;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAAE,CAAC,QAsMvD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,oBAO9B,CAAC"}
@@ -0,0 +1,183 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useMemo, useRef, useState, } from "react";
3
+ import { createStreammyClient } from "../client.js";
4
+ const StreammyContext = createContext(null);
5
+ export const StreammyProvider = ({ options, children, }) => {
6
+ const clientRef = useRef(null);
7
+ if (!clientRef.current) {
8
+ clientRef.current = createStreammyClient(options);
9
+ }
10
+ const client = clientRef.current;
11
+ const [connected, setConnected] = useState(false);
12
+ const [reconnecting, setReconnecting] = useState(false);
13
+ const [activeCall, setActiveCall] = useState(null);
14
+ const [callStatus, setCallStatus] = useState("idle");
15
+ useEffect(() => {
16
+ const unsubscribers = [
17
+ client.on("connected", () => {
18
+ setConnected(true);
19
+ setReconnecting(false);
20
+ }),
21
+ client.on("disconnected", () => {
22
+ setConnected(false);
23
+ }),
24
+ client.on("reconnecting", () => {
25
+ setConnected(false);
26
+ setReconnecting(true);
27
+ }),
28
+ client.on("reconnected", () => {
29
+ setConnected(true);
30
+ setReconnecting(false);
31
+ }),
32
+ client.on("incomingCall", (call) => {
33
+ setActiveCall({
34
+ ...call,
35
+ direction: "incoming",
36
+ });
37
+ setCallStatus(call.status);
38
+ }),
39
+ client.on("callInitiated", (call) => {
40
+ setActiveCall({
41
+ callId: call.callId,
42
+ callerId: call.callerId,
43
+ receiverId: call.receiverId,
44
+ callType: call.callType,
45
+ status: call.status,
46
+ direction: call.callerId === options.userId ? "outgoing" : "incoming",
47
+ ...(call.metadata ? { metadata: call.metadata } : {}),
48
+ });
49
+ setCallStatus(call.status);
50
+ }),
51
+ client.on("callAccepted", (payload) => {
52
+ setActiveCall((current) => current && current.callId === payload.callId
53
+ ? {
54
+ ...current,
55
+ status: payload.status,
56
+ }
57
+ : current);
58
+ setCallStatus(payload.status);
59
+ }),
60
+ client.on("callDeclined", (payload) => {
61
+ setActiveCall((current) => current && current.callId === payload.callId
62
+ ? {
63
+ ...current,
64
+ status: payload.status,
65
+ }
66
+ : current);
67
+ setCallStatus(payload.status);
68
+ }),
69
+ client.on("callCancelled", (payload) => {
70
+ setActiveCall((current) => current && current.callId === payload.callId
71
+ ? {
72
+ ...current,
73
+ status: payload.status,
74
+ }
75
+ : current);
76
+ setCallStatus(payload.status);
77
+ }),
78
+ client.on("callEnded", (payload) => {
79
+ setActiveCall((current) => current && current.callId === payload.callId
80
+ ? {
81
+ ...current,
82
+ status: payload.status,
83
+ }
84
+ : current);
85
+ setCallStatus(payload.status);
86
+ }),
87
+ ];
88
+ return () => {
89
+ for (const unsubscribe of unsubscribers) {
90
+ unsubscribe();
91
+ }
92
+ };
93
+ }, [client, options.userId]);
94
+ const value = useMemo(() => ({
95
+ client,
96
+ connected,
97
+ reconnecting,
98
+ activeCall,
99
+ callStatus,
100
+ initiateCall(receiverId, callType, metadata) {
101
+ client.initiateCall(receiverId, callType, metadata);
102
+ setActiveCall({
103
+ callId: `pending-${Date.now()}`,
104
+ callerId: options.userId,
105
+ receiverId,
106
+ callType,
107
+ status: "initiated",
108
+ direction: "outgoing",
109
+ ...(metadata ? { metadata } : {}),
110
+ });
111
+ setCallStatus("initiated");
112
+ },
113
+ acceptCall(callId) {
114
+ const resolvedCallId = callId ?? activeCall?.callId;
115
+ if (!resolvedCallId) {
116
+ return;
117
+ }
118
+ client.acceptCall(resolvedCallId);
119
+ setActiveCall((current) => current && current.callId === resolvedCallId
120
+ ? {
121
+ ...current,
122
+ status: "accepted",
123
+ }
124
+ : current);
125
+ setCallStatus("accepted");
126
+ },
127
+ declineCall(callId, reason) {
128
+ const resolvedCallId = callId ?? activeCall?.callId;
129
+ if (!resolvedCallId) {
130
+ return;
131
+ }
132
+ client.declineCall(resolvedCallId, reason);
133
+ setActiveCall((current) => current && current.callId === resolvedCallId
134
+ ? {
135
+ ...current,
136
+ status: "declined",
137
+ }
138
+ : current);
139
+ setCallStatus("declined");
140
+ },
141
+ cancelCall(callId) {
142
+ const resolvedCallId = callId ?? activeCall?.callId;
143
+ if (!resolvedCallId) {
144
+ return;
145
+ }
146
+ client.cancelCall(resolvedCallId);
147
+ setActiveCall((current) => current && current.callId === resolvedCallId
148
+ ? {
149
+ ...current,
150
+ status: "cancelled",
151
+ }
152
+ : current);
153
+ setCallStatus("cancelled");
154
+ },
155
+ endCall(callId) {
156
+ const resolvedCallId = callId ?? activeCall?.callId;
157
+ if (!resolvedCallId) {
158
+ return;
159
+ }
160
+ client.endCall(resolvedCallId);
161
+ setActiveCall((current) => current && current.callId === resolvedCallId
162
+ ? {
163
+ ...current,
164
+ status: "ended",
165
+ }
166
+ : current);
167
+ setCallStatus("ended");
168
+ },
169
+ clearActiveCall() {
170
+ setActiveCall(null);
171
+ setCallStatus("idle");
172
+ },
173
+ }), [activeCall, callStatus, client, connected, options.userId, reconnecting]);
174
+ return _jsx(StreammyContext.Provider, { value: value, children: children });
175
+ };
176
+ export const useStreammy = () => {
177
+ const context = useContext(StreammyContext);
178
+ if (!context) {
179
+ throw new Error("useStreammy must be used inside StreammyProvider.");
180
+ }
181
+ return context;
182
+ };
183
+ //# sourceMappingURL=useStreammy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStreammy.js","sourceRoot":"","sources":["../../src/hooks/useStreammy.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export * from "./client.js";
2
+ export * from "./components/CallControls.js";
3
+ export * from "./components/IncomingCallCard.js";
4
+ export * from "./components/StreammyCallWidget.js";
5
+ export * from "./components/VideoStage.js";
6
+ export * from "./components/VideoTile.js";
7
+ export * from "./hooks/useRingtone.js";
8
+ export * from "./hooks/useStreammy.js";
9
+ export * from "./types.js";
10
+ export * from "./webrtc/media.js";
11
+ export * from "./webrtc/peer-session.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export * from "./client.js";
2
+ export * from "./components/CallControls.js";
3
+ export * from "./components/IncomingCallCard.js";
4
+ export * from "./components/StreammyCallWidget.js";
5
+ export * from "./components/VideoStage.js";
6
+ export * from "./components/VideoTile.js";
7
+ export * from "./hooks/useRingtone.js";
8
+ export * from "./hooks/useStreammy.js";
9
+ export * from "./types.js";
10
+ export * from "./webrtc/media.js";
11
+ export * from "./webrtc/peer-session.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,105 @@
1
+ import type { CallSessionRecord, CallType, PresenceRecord } from "@streamyy/core";
2
+ export interface StreammyClientOptions {
3
+ url: string;
4
+ token?: string;
5
+ userId: string;
6
+ deviceId?: string;
7
+ metadata?: Record<string, unknown>;
8
+ autoConnect?: boolean;
9
+ lowBandwidthMode?: boolean;
10
+ reconnection?: boolean;
11
+ reconnectionAttempts?: number;
12
+ reconnectionDelayMs?: number;
13
+ reconnectionDelayMaxMs?: number;
14
+ connectionTimeoutMs?: number;
15
+ }
16
+ export interface StreammyIncomingCall {
17
+ callId: string;
18
+ callerId: string;
19
+ receiverId: string;
20
+ callType: CallType;
21
+ status: CallSessionRecord["status"];
22
+ metadata?: Record<string, unknown>;
23
+ }
24
+ export interface StreammyCallAccepted {
25
+ callId: string;
26
+ acceptedBy: string;
27
+ deviceId?: string;
28
+ startedAt?: Date | string;
29
+ status: CallSessionRecord["status"];
30
+ }
31
+ export interface StreammyCallEnded {
32
+ callId: string;
33
+ endedBy: string;
34
+ deviceId?: string;
35
+ status: CallSessionRecord["status"];
36
+ endedAt?: Date | string;
37
+ duration?: number;
38
+ reason?: string;
39
+ }
40
+ export interface StreammySimpleCallEvent {
41
+ callId: string;
42
+ deviceId?: string;
43
+ status: CallSessionRecord["status"];
44
+ reason?: string;
45
+ }
46
+ export interface StreammySignalEvent {
47
+ callId: string;
48
+ fromUserId: string;
49
+ payload: Record<string, unknown>;
50
+ }
51
+ export interface StreammyClientEvents {
52
+ connected: void;
53
+ disconnected: void;
54
+ reconnecting: {
55
+ attempt: number;
56
+ };
57
+ reconnected: void;
58
+ incomingCall: StreammyIncomingCall;
59
+ callInitiated: CallSessionRecord;
60
+ callAccepted: StreammyCallAccepted;
61
+ callDeclined: StreammySimpleCallEvent;
62
+ callCancelled: StreammySimpleCallEvent;
63
+ callEnded: StreammyCallEnded;
64
+ offer: StreammySignalEvent;
65
+ answer: StreammySignalEvent;
66
+ iceCandidate: StreammySignalEvent;
67
+ presenceUpdated: PresenceRecord;
68
+ }
69
+ export interface CallControlsState {
70
+ muted: boolean;
71
+ videoEnabled: boolean;
72
+ }
73
+ export type StreammyCallDirection = "incoming" | "outgoing";
74
+ export interface StreammyActiveCall {
75
+ callId: string;
76
+ callerId: string;
77
+ receiverId: string;
78
+ callType: CallType;
79
+ status: CallSessionRecord["status"];
80
+ direction: StreammyCallDirection;
81
+ metadata?: Record<string, unknown>;
82
+ }
83
+ export interface TonePatternStep {
84
+ frequency: number;
85
+ durationMs: number;
86
+ gain?: number;
87
+ }
88
+ export interface TonePattern {
89
+ steps: TonePatternStep[];
90
+ pauseMs?: number;
91
+ }
92
+ export type StreammyRingtoneSource = {
93
+ kind: "url";
94
+ src: string;
95
+ volume?: number;
96
+ } | {
97
+ kind: "pattern";
98
+ pattern: TonePattern;
99
+ volume?: number;
100
+ };
101
+ export interface StreammyRingtoneSet {
102
+ incoming?: StreammyRingtoneSource;
103
+ outgoing?: StreammyRingtoneSource;
104
+ }
105
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export interface LocalMediaOptions {
2
+ audio?: boolean | MediaTrackConstraints;
3
+ video?: boolean | MediaTrackConstraints;
4
+ }
5
+ export declare const getUserMedia: (options: LocalMediaOptions) => Promise<MediaStream>;
6
+ export declare const toggleStreamTracks: (stream: MediaStream | null, kind: "audio" | "video", enabled: boolean) => void;
7
+ //# sourceMappingURL=media.d.ts.map