@cemscale-voip/voip-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +445 -0
- package/dist/client.d.ts +421 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +651 -0
- package/dist/client.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useCallStatus.d.ts +38 -0
- package/dist/hooks/useCallStatus.d.ts.map +1 -0
- package/dist/hooks/useCallStatus.js +98 -0
- package/dist/hooks/useCallStatus.js.map +1 -0
- package/dist/hooks/usePresence.d.ts +22 -0
- package/dist/hooks/usePresence.d.ts.map +1 -0
- package/dist/hooks/usePresence.js +81 -0
- package/dist/hooks/usePresence.js.map +1 -0
- package/dist/hooks/useVoIP.d.ts +49 -0
- package/dist/hooks/useVoIP.d.ts.map +1 -0
- package/dist/hooks/useVoIP.js +250 -0
- package/dist/hooks/useVoIP.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +628 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/webrtc.d.ts +64 -0
- package/dist/webrtc.d.ts.map +1 -0
- package/dist/webrtc.js +427 -0
- package/dist/webrtc.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useVoIP } from './useVoIP.js';
|
|
2
|
+
export type { UseVoIPConfig, UseVoIPReturn } from './useVoIP.js';
|
|
3
|
+
export { usePresence } from './usePresence.js';
|
|
4
|
+
export type { UsePresenceConfig, UsePresenceReturn } from './usePresence.js';
|
|
5
|
+
export { useCallStatus } from './useCallStatus.js';
|
|
6
|
+
export type { UseCallStatusConfig, UseCallStatusReturn, ActiveCallEntry } from './useCallStatus.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { VoIPClient } from '../client.js';
|
|
2
|
+
import type { CallStats } from '../types.js';
|
|
3
|
+
export interface ActiveCallEntry {
|
|
4
|
+
callUuid: string;
|
|
5
|
+
caller: string;
|
|
6
|
+
destination: string;
|
|
7
|
+
direction: string;
|
|
8
|
+
state: 'ringing' | 'answered' | 'ended';
|
|
9
|
+
startedAt: Date;
|
|
10
|
+
answeredAt: Date | null;
|
|
11
|
+
endedAt: Date | null;
|
|
12
|
+
duration: number | null;
|
|
13
|
+
hangupCause: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface UseCallStatusConfig {
|
|
16
|
+
/** The VoIPClient instance */
|
|
17
|
+
client: VoIPClient;
|
|
18
|
+
/** Max number of recent (ended) calls to keep in memory (default 50) */
|
|
19
|
+
maxRecent?: number;
|
|
20
|
+
/** Fetch server-side stats periodically (default false) */
|
|
21
|
+
fetchStats?: boolean;
|
|
22
|
+
/** Stats refresh interval in ms (default 60000) */
|
|
23
|
+
statsInterval?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface UseCallStatusReturn {
|
|
26
|
+
/** Currently active (ringing or answered) calls */
|
|
27
|
+
activeCalls: ActiveCallEntry[];
|
|
28
|
+
/** Recently ended calls (in-memory, most recent first) */
|
|
29
|
+
recentCalls: ActiveCallEntry[];
|
|
30
|
+
/** Server-side call stats (if fetchStats is true) */
|
|
31
|
+
stats: CallStats['stats'] | null;
|
|
32
|
+
/** Total active call count */
|
|
33
|
+
activeCount: number;
|
|
34
|
+
/** Force refresh stats from server */
|
|
35
|
+
refreshStats: () => Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
export declare function useCallStatus(configOrClient: UseCallStatusConfig | VoIPClient): UseCallStatusReturn;
|
|
38
|
+
//# sourceMappingURL=useCallStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCallStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useCallStatus.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAwC,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,0DAA0D;IAC1D,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,qDAAqD;IACrD,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACjC,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,cAAc,EAAE,mBAAmB,GAAG,UAAU,GAAG,mBAAmB,CA0GnG"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @cemscale/voip-sdk — useCallStatus React Hook
|
|
3
|
+
// ============================================================
|
|
4
|
+
//
|
|
5
|
+
// Real-time call event tracking via WebSocket. Monitors call_start,
|
|
6
|
+
// call_answer, call_end events for the tenant.
|
|
7
|
+
//
|
|
8
|
+
// Usage:
|
|
9
|
+
// const { activeCalls, recentCalls, stats } = useCallStatus(client);
|
|
10
|
+
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
11
|
+
export function useCallStatus(configOrClient) {
|
|
12
|
+
const client = 'client' in configOrClient ? configOrClient.client : configOrClient;
|
|
13
|
+
const maxRecent = 'maxRecent' in configOrClient ? configOrClient.maxRecent ?? 50 : 50;
|
|
14
|
+
const fetchStats = 'fetchStats' in configOrClient ? configOrClient.fetchStats ?? false : false;
|
|
15
|
+
const statsInterval = 'statsInterval' in configOrClient ? configOrClient.statsInterval ?? 60000 : 60000;
|
|
16
|
+
const [activeCalls, setActiveCalls] = useState([]);
|
|
17
|
+
const [recentCalls, setRecentCalls] = useState([]);
|
|
18
|
+
const [stats, setStats] = useState(null);
|
|
19
|
+
const statsTimerRef = useRef(null);
|
|
20
|
+
const refreshStats = useCallback(async () => {
|
|
21
|
+
try {
|
|
22
|
+
const result = await client.getCallStats('today');
|
|
23
|
+
setStats(result.stats);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Non-critical
|
|
27
|
+
}
|
|
28
|
+
}, [client]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
const unsubscribers = [];
|
|
31
|
+
// call_start
|
|
32
|
+
unsubscribers.push(client.onWsEvent('call_start', (msg) => {
|
|
33
|
+
const entry = {
|
|
34
|
+
callUuid: msg.callUuid,
|
|
35
|
+
caller: msg.caller,
|
|
36
|
+
destination: msg.destination,
|
|
37
|
+
direction: msg.direction,
|
|
38
|
+
state: 'ringing',
|
|
39
|
+
startedAt: new Date(),
|
|
40
|
+
answeredAt: null,
|
|
41
|
+
endedAt: null,
|
|
42
|
+
duration: null,
|
|
43
|
+
hangupCause: null,
|
|
44
|
+
};
|
|
45
|
+
setActiveCalls((prev) => {
|
|
46
|
+
// Avoid duplicates
|
|
47
|
+
if (prev.some((c) => c.callUuid === msg.callUuid))
|
|
48
|
+
return prev;
|
|
49
|
+
return [...prev, entry];
|
|
50
|
+
});
|
|
51
|
+
}));
|
|
52
|
+
// call_answer
|
|
53
|
+
unsubscribers.push(client.onWsEvent('call_answer', (msg) => {
|
|
54
|
+
setActiveCalls((prev) => prev.map((c) => c.callUuid === msg.callUuid
|
|
55
|
+
? { ...c, state: 'answered', answeredAt: new Date() }
|
|
56
|
+
: c));
|
|
57
|
+
}));
|
|
58
|
+
// call_end
|
|
59
|
+
unsubscribers.push(client.onWsEvent('call_end', (msg) => {
|
|
60
|
+
setActiveCalls((prev) => {
|
|
61
|
+
const call = prev.find((c) => c.callUuid === msg.callUuid);
|
|
62
|
+
if (call) {
|
|
63
|
+
const ended = {
|
|
64
|
+
...call,
|
|
65
|
+
state: 'ended',
|
|
66
|
+
endedAt: new Date(),
|
|
67
|
+
duration: msg.duration,
|
|
68
|
+
hangupCause: msg.hangupCause,
|
|
69
|
+
};
|
|
70
|
+
// Add to recent calls
|
|
71
|
+
setRecentCalls((recent) => [ended, ...recent].slice(0, maxRecent));
|
|
72
|
+
}
|
|
73
|
+
return prev.filter((c) => c.callUuid !== msg.callUuid);
|
|
74
|
+
});
|
|
75
|
+
}));
|
|
76
|
+
// Fetch stats periodically
|
|
77
|
+
if (fetchStats) {
|
|
78
|
+
refreshStats();
|
|
79
|
+
statsTimerRef.current = setInterval(refreshStats, statsInterval);
|
|
80
|
+
}
|
|
81
|
+
return () => {
|
|
82
|
+
for (const unsub of unsubscribers)
|
|
83
|
+
unsub();
|
|
84
|
+
if (statsTimerRef.current) {
|
|
85
|
+
clearInterval(statsTimerRef.current);
|
|
86
|
+
statsTimerRef.current = null;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}, [client, maxRecent, fetchStats, statsInterval, refreshStats]);
|
|
90
|
+
return {
|
|
91
|
+
activeCalls,
|
|
92
|
+
recentCalls,
|
|
93
|
+
stats,
|
|
94
|
+
activeCount: activeCalls.length,
|
|
95
|
+
refreshStats,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=useCallStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCallStatus.js","sourceRoot":"","sources":["../../src/hooks/useCallStatus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { VoIPClient } from '../client.js';
|
|
2
|
+
import type { PresenceMap, PresenceStatus } from '../types.js';
|
|
3
|
+
export interface UsePresenceConfig {
|
|
4
|
+
/** The VoIPClient instance (must have token set) */
|
|
5
|
+
client: VoIPClient;
|
|
6
|
+
/** Polling interval in ms when WebSocket is not available (default 10000) */
|
|
7
|
+
pollInterval?: number;
|
|
8
|
+
/** Disable polling entirely (only use WebSocket) */
|
|
9
|
+
disablePolling?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface UsePresenceReturn {
|
|
12
|
+
/** Map of extension -> status */
|
|
13
|
+
presence: PresenceMap;
|
|
14
|
+
/** Get the status of a specific extension */
|
|
15
|
+
getStatus: (extension: string) => PresenceStatus;
|
|
16
|
+
/** Whether we're receiving real-time updates via WS */
|
|
17
|
+
isRealtime: boolean;
|
|
18
|
+
/** Force refresh from REST API */
|
|
19
|
+
refresh: () => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare function usePresence(configOrClient: UsePresenceConfig | VoIPClient): UsePresenceReturn;
|
|
22
|
+
//# sourceMappingURL=usePresence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePresence.d.ts","sourceRoot":"","sources":["../../src/hooks/usePresence.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAwC,MAAM,aAAa,CAAC;AAErG,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,MAAM,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,QAAQ,EAAE,WAAW,CAAC;IACtB,6CAA6C;IAC7C,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,cAAc,CAAC;IACjD,uDAAuD;IACvD,UAAU,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,cAAc,EAAE,iBAAiB,GAAG,UAAU,GAAG,iBAAiB,CAwF7F"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @cemscale/voip-sdk — usePresence React Hook
|
|
3
|
+
// ============================================================
|
|
4
|
+
//
|
|
5
|
+
// Subscribes to real-time presence updates via WebSocket.
|
|
6
|
+
// Falls back to polling REST API if WS is not connected.
|
|
7
|
+
//
|
|
8
|
+
// Usage:
|
|
9
|
+
// const { presence, getStatus } = usePresence(client);
|
|
10
|
+
// // presence = { '1001': 'available', '1002': 'oncall', ... }
|
|
11
|
+
// // getStatus('1001') => 'available'
|
|
12
|
+
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
13
|
+
export function usePresence(configOrClient) {
|
|
14
|
+
const client = 'client' in configOrClient ? configOrClient.client : configOrClient;
|
|
15
|
+
const pollInterval = 'pollInterval' in configOrClient ? configOrClient.pollInterval ?? 10000 : 10000;
|
|
16
|
+
const disablePolling = 'disablePolling' in configOrClient ? configOrClient.disablePolling ?? false : false;
|
|
17
|
+
const [presence, setPresence] = useState({});
|
|
18
|
+
const [isRealtime, setIsRealtime] = useState(false);
|
|
19
|
+
const pollRef = useRef(null);
|
|
20
|
+
// Fetch presence via REST
|
|
21
|
+
const refresh = useCallback(async () => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await client.getPresence();
|
|
24
|
+
setPresence(result.presence);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Silently fail — presence is non-critical
|
|
28
|
+
}
|
|
29
|
+
}, [client]);
|
|
30
|
+
// Subscribe to WebSocket events
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const unsubscribers = [];
|
|
33
|
+
// Presence snapshot (sent on WS auth)
|
|
34
|
+
unsubscribers.push(client.onWsEvent('presence_snapshot', (msg) => {
|
|
35
|
+
setPresence(msg.data);
|
|
36
|
+
setIsRealtime(true);
|
|
37
|
+
}));
|
|
38
|
+
// Individual presence changes
|
|
39
|
+
unsubscribers.push(client.onWsEvent('presence_change', (msg) => {
|
|
40
|
+
setPresence((prev) => ({
|
|
41
|
+
...prev,
|
|
42
|
+
[msg.extension]: msg.status,
|
|
43
|
+
}));
|
|
44
|
+
}));
|
|
45
|
+
// Track WS connection state
|
|
46
|
+
unsubscribers.push(client.onWsEvent('auth_success', () => {
|
|
47
|
+
setIsRealtime(true);
|
|
48
|
+
}));
|
|
49
|
+
unsubscribers.push(client.onWsEvent('disconnected', () => {
|
|
50
|
+
setIsRealtime(false);
|
|
51
|
+
}));
|
|
52
|
+
// Initial fetch
|
|
53
|
+
refresh();
|
|
54
|
+
// Polling fallback
|
|
55
|
+
if (!disablePolling) {
|
|
56
|
+
pollRef.current = setInterval(() => {
|
|
57
|
+
if (!client.isWebSocketConnected()) {
|
|
58
|
+
refresh();
|
|
59
|
+
}
|
|
60
|
+
}, pollInterval);
|
|
61
|
+
}
|
|
62
|
+
return () => {
|
|
63
|
+
for (const unsub of unsubscribers)
|
|
64
|
+
unsub();
|
|
65
|
+
if (pollRef.current) {
|
|
66
|
+
clearInterval(pollRef.current);
|
|
67
|
+
pollRef.current = null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}, [client, refresh, pollInterval, disablePolling]);
|
|
71
|
+
const getStatus = useCallback((extension) => {
|
|
72
|
+
return presence[extension] || 'offline';
|
|
73
|
+
}, [presence]);
|
|
74
|
+
return {
|
|
75
|
+
presence,
|
|
76
|
+
getStatus,
|
|
77
|
+
isRealtime,
|
|
78
|
+
refresh,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=usePresence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePresence.js","sourceRoot":"","sources":["../../src/hooks/usePresence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { VoIPClient } from '../client.js';
|
|
2
|
+
import { WebRTCPhone } from '../webrtc.js';
|
|
3
|
+
import type { WebRTCCallInfo, LoginParams, AdminLoginParams, AuthResponse, TurnCredentials, OriginateParams, OriginateResponse } from '../types.js';
|
|
4
|
+
export interface UseVoIPConfig {
|
|
5
|
+
/** API base URL */
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
/** SIP domain (e.g. sip.cemscale.com) */
|
|
8
|
+
sipDomain?: string;
|
|
9
|
+
/** WebSocket SIP URI (e.g. wss://sip.cemscale.com:5065/ws) */
|
|
10
|
+
wsUri?: string;
|
|
11
|
+
/** Pre-existing JWT token */
|
|
12
|
+
token?: string;
|
|
13
|
+
/** Tenant ID */
|
|
14
|
+
tenantId?: string;
|
|
15
|
+
/** Auto-connect WebSocket after login */
|
|
16
|
+
autoConnectWs?: boolean;
|
|
17
|
+
/** Auto-answer incoming calls */
|
|
18
|
+
autoAnswer?: boolean;
|
|
19
|
+
/** Audio element for remote audio playback */
|
|
20
|
+
audioElement?: HTMLAudioElement;
|
|
21
|
+
}
|
|
22
|
+
export interface UseVoIPReturn {
|
|
23
|
+
/** The low-level API client */
|
|
24
|
+
client: VoIPClient;
|
|
25
|
+
/** The WebRTC phone instance (null until startPhone is called) */
|
|
26
|
+
phone: WebRTCPhone | null;
|
|
27
|
+
isLoggedIn: boolean;
|
|
28
|
+
isRegistered: boolean;
|
|
29
|
+
currentCall: WebRTCCallInfo | null;
|
|
30
|
+
error: string | null;
|
|
31
|
+
login: (params: LoginParams) => Promise<AuthResponse>;
|
|
32
|
+
adminLogin: (params: AdminLoginParams) => Promise<AuthResponse>;
|
|
33
|
+
logout: () => void;
|
|
34
|
+
startPhone: (extension: string, password: string, displayName?: string) => Promise<void>;
|
|
35
|
+
stopPhone: () => Promise<void>;
|
|
36
|
+
call: (target: string) => Promise<WebRTCCallInfo>;
|
|
37
|
+
answer: () => Promise<void>;
|
|
38
|
+
reject: () => Promise<void>;
|
|
39
|
+
hangup: () => Promise<void>;
|
|
40
|
+
toggleHold: () => Promise<boolean>;
|
|
41
|
+
toggleMute: () => boolean;
|
|
42
|
+
sendDtmf: (tone: string) => void;
|
|
43
|
+
blindTransfer: (target: string) => Promise<void>;
|
|
44
|
+
originate: (params: OriginateParams) => Promise<OriginateResponse>;
|
|
45
|
+
getTurnCredentials: () => Promise<TurnCredentials>;
|
|
46
|
+
clearError: () => void;
|
|
47
|
+
}
|
|
48
|
+
export declare function useVoIP(config: UseVoIPConfig): UseVoIPReturn;
|
|
49
|
+
//# sourceMappingURL=useVoIP.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVoIP.d.ts","sourceRoot":"","sources":["../../src/hooks/useVoIP.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAGV,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,kEAAkE;IAClE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAG1B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,EAAE,MAAM,IAAI,CAAC;IAGnB,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjD,SAAS,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAGnE,kBAAkB,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IACnD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAsP5D"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// @cemscale/voip-sdk — useVoIP React Hook
|
|
3
|
+
// ============================================================
|
|
4
|
+
//
|
|
5
|
+
// All-in-one hook: API client + WebRTC phone + WebSocket events.
|
|
6
|
+
//
|
|
7
|
+
// Usage:
|
|
8
|
+
// const { client, phone, login, call, hangup, answer, ... } = useVoIP({
|
|
9
|
+
// apiUrl: 'https://voip-api.cemscale.com',
|
|
10
|
+
// sipDomain: 'sip.cemscale.com',
|
|
11
|
+
// wsUri: 'wss://sip.cemscale.com:5065/ws',
|
|
12
|
+
// });
|
|
13
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
14
|
+
import { VoIPClient } from '../client.js';
|
|
15
|
+
import { WebRTCPhone } from '../webrtc.js';
|
|
16
|
+
export function useVoIP(config) {
|
|
17
|
+
const clientRef = useRef(null);
|
|
18
|
+
const phoneRef = useRef(null);
|
|
19
|
+
const [isLoggedIn, setIsLoggedIn] = useState(!!config.token);
|
|
20
|
+
const [isRegistered, setIsRegistered] = useState(false);
|
|
21
|
+
const [currentCall, setCurrentCall] = useState(null);
|
|
22
|
+
const [error, setError] = useState(null);
|
|
23
|
+
// Stable reference to the client (created once)
|
|
24
|
+
if (!clientRef.current) {
|
|
25
|
+
clientRef.current = new VoIPClient({
|
|
26
|
+
apiUrl: config.apiUrl,
|
|
27
|
+
token: config.token,
|
|
28
|
+
tenantId: config.tenantId,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const client = clientRef.current;
|
|
32
|
+
// Cleanup on unmount
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
return () => {
|
|
35
|
+
phoneRef.current?.destroy();
|
|
36
|
+
clientRef.current?.destroy();
|
|
37
|
+
};
|
|
38
|
+
}, []);
|
|
39
|
+
// ----- Auth -----
|
|
40
|
+
const login = useCallback(async (params) => {
|
|
41
|
+
try {
|
|
42
|
+
const result = await client.login(params);
|
|
43
|
+
setIsLoggedIn(true);
|
|
44
|
+
setError(null);
|
|
45
|
+
if (config.autoConnectWs !== false) {
|
|
46
|
+
client.connectWebSocket();
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
setError(err.message);
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}, [client, config.autoConnectWs]);
|
|
55
|
+
const adminLogin = useCallback(async (params) => {
|
|
56
|
+
try {
|
|
57
|
+
const result = await client.adminLogin(params);
|
|
58
|
+
setIsLoggedIn(true);
|
|
59
|
+
setError(null);
|
|
60
|
+
if (config.autoConnectWs !== false) {
|
|
61
|
+
client.connectWebSocket();
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
setError(err.message);
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
}, [client, config.autoConnectWs]);
|
|
70
|
+
const logout = useCallback(() => {
|
|
71
|
+
phoneRef.current?.destroy();
|
|
72
|
+
phoneRef.current = null;
|
|
73
|
+
client.destroy();
|
|
74
|
+
setIsLoggedIn(false);
|
|
75
|
+
setIsRegistered(false);
|
|
76
|
+
setCurrentCall(null);
|
|
77
|
+
setError(null);
|
|
78
|
+
}, [client]);
|
|
79
|
+
// ----- Phone lifecycle -----
|
|
80
|
+
const startPhone = useCallback(async (extension, password, displayName) => {
|
|
81
|
+
if (phoneRef.current) {
|
|
82
|
+
await phoneRef.current.stop();
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
// Fetch TURN credentials from the API
|
|
86
|
+
let turnServers;
|
|
87
|
+
try {
|
|
88
|
+
const creds = await client.getTurnCredentials();
|
|
89
|
+
turnServers = [
|
|
90
|
+
{
|
|
91
|
+
urls: creds.urls,
|
|
92
|
+
username: creds.username,
|
|
93
|
+
credential: creds.credential,
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Fallback to public STUN if TURN fetch fails
|
|
99
|
+
turnServers = [{ urls: 'stun:stun.l.google.com:19302' }];
|
|
100
|
+
}
|
|
101
|
+
const phone = new WebRTCPhone({
|
|
102
|
+
sipDomain: config.sipDomain || 'sip.cemscale.com',
|
|
103
|
+
wsUri: config.wsUri || `wss://${config.sipDomain || 'sip.cemscale.com'}:5065/ws`,
|
|
104
|
+
extension,
|
|
105
|
+
password,
|
|
106
|
+
displayName,
|
|
107
|
+
turnServers,
|
|
108
|
+
audioElement: config.audioElement,
|
|
109
|
+
autoAnswer: config.autoAnswer,
|
|
110
|
+
});
|
|
111
|
+
phone.on('registered', () => setIsRegistered(true));
|
|
112
|
+
phone.on('unregistered', () => setIsRegistered(false));
|
|
113
|
+
phone.on('registrationFailed', (err) => setError(`Registration failed: ${err.message}`));
|
|
114
|
+
phone.on('incomingCall', (callInfo) => setCurrentCall(callInfo));
|
|
115
|
+
phone.on('callStateChanged', (callInfo) => setCurrentCall({ ...callInfo }));
|
|
116
|
+
phone.on('callEnded', () => setCurrentCall(null));
|
|
117
|
+
phone.on('error', (err) => setError(err.message));
|
|
118
|
+
phoneRef.current = phone;
|
|
119
|
+
await phone.start();
|
|
120
|
+
setError(null);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
setError(`Phone start failed: ${err.message}`);
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
}, [client, config.sipDomain, config.wsUri, config.audioElement, config.autoAnswer]);
|
|
127
|
+
const stopPhone = useCallback(async () => {
|
|
128
|
+
if (phoneRef.current) {
|
|
129
|
+
await phoneRef.current.stop();
|
|
130
|
+
phoneRef.current = null;
|
|
131
|
+
}
|
|
132
|
+
setIsRegistered(false);
|
|
133
|
+
setCurrentCall(null);
|
|
134
|
+
}, []);
|
|
135
|
+
// ----- Call actions -----
|
|
136
|
+
const callAction = useCallback(async (target) => {
|
|
137
|
+
if (!phoneRef.current)
|
|
138
|
+
throw new Error('Phone not started');
|
|
139
|
+
try {
|
|
140
|
+
const info = await phoneRef.current.call(target);
|
|
141
|
+
setCurrentCall(info);
|
|
142
|
+
setError(null);
|
|
143
|
+
return info;
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
setError(err.message);
|
|
147
|
+
throw err;
|
|
148
|
+
}
|
|
149
|
+
}, []);
|
|
150
|
+
const answerAction = useCallback(async () => {
|
|
151
|
+
if (!phoneRef.current)
|
|
152
|
+
throw new Error('Phone not started');
|
|
153
|
+
try {
|
|
154
|
+
await phoneRef.current.answer();
|
|
155
|
+
setError(null);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
setError(err.message);
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
}, []);
|
|
162
|
+
const rejectAction = useCallback(async () => {
|
|
163
|
+
if (!phoneRef.current)
|
|
164
|
+
throw new Error('Phone not started');
|
|
165
|
+
try {
|
|
166
|
+
await phoneRef.current.reject();
|
|
167
|
+
setCurrentCall(null);
|
|
168
|
+
setError(null);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
setError(err.message);
|
|
172
|
+
throw err;
|
|
173
|
+
}
|
|
174
|
+
}, []);
|
|
175
|
+
const hangupAction = useCallback(async () => {
|
|
176
|
+
if (!phoneRef.current)
|
|
177
|
+
throw new Error('Phone not started');
|
|
178
|
+
try {
|
|
179
|
+
await phoneRef.current.hangup();
|
|
180
|
+
setCurrentCall(null);
|
|
181
|
+
setError(null);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
setError(err.message);
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
}, []);
|
|
188
|
+
const toggleHold = useCallback(async () => {
|
|
189
|
+
if (!phoneRef.current)
|
|
190
|
+
throw new Error('Phone not started');
|
|
191
|
+
return phoneRef.current.toggleHold();
|
|
192
|
+
}, []);
|
|
193
|
+
const toggleMute = useCallback(() => {
|
|
194
|
+
if (!phoneRef.current)
|
|
195
|
+
throw new Error('Phone not started');
|
|
196
|
+
return phoneRef.current.toggleMute();
|
|
197
|
+
}, []);
|
|
198
|
+
const sendDtmf = useCallback((tone) => {
|
|
199
|
+
if (!phoneRef.current)
|
|
200
|
+
throw new Error('Phone not started');
|
|
201
|
+
phoneRef.current.sendDtmf(tone);
|
|
202
|
+
}, []);
|
|
203
|
+
const blindTransfer = useCallback(async (target) => {
|
|
204
|
+
if (!phoneRef.current)
|
|
205
|
+
throw new Error('Phone not started');
|
|
206
|
+
await phoneRef.current.blindTransfer(target);
|
|
207
|
+
}, []);
|
|
208
|
+
// ----- Server-side originate -----
|
|
209
|
+
const originate = useCallback(async (params) => {
|
|
210
|
+
try {
|
|
211
|
+
const result = await client.originate(params);
|
|
212
|
+
setError(null);
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
setError(err.message);
|
|
217
|
+
throw err;
|
|
218
|
+
}
|
|
219
|
+
}, [client]);
|
|
220
|
+
// ----- Helpers -----
|
|
221
|
+
const getTurnCredentials = useCallback(async () => {
|
|
222
|
+
return client.getTurnCredentials();
|
|
223
|
+
}, [client]);
|
|
224
|
+
const clearError = useCallback(() => setError(null), []);
|
|
225
|
+
return {
|
|
226
|
+
client,
|
|
227
|
+
phone: phoneRef.current,
|
|
228
|
+
isLoggedIn,
|
|
229
|
+
isRegistered,
|
|
230
|
+
currentCall,
|
|
231
|
+
error,
|
|
232
|
+
login,
|
|
233
|
+
adminLogin,
|
|
234
|
+
logout,
|
|
235
|
+
startPhone,
|
|
236
|
+
stopPhone,
|
|
237
|
+
call: callAction,
|
|
238
|
+
answer: answerAction,
|
|
239
|
+
reject: rejectAction,
|
|
240
|
+
hangup: hangupAction,
|
|
241
|
+
toggleHold,
|
|
242
|
+
toggleMute,
|
|
243
|
+
sendDtmf,
|
|
244
|
+
blindTransfer,
|
|
245
|
+
originate,
|
|
246
|
+
getTurnCredentials,
|
|
247
|
+
clearError,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=useVoIP.js.map
|