@kshema/communications-client 0.1.0 → 0.1.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.
Files changed (61) hide show
  1. package/dist/core/AcsSessionManager.d.ts +10 -0
  2. package/dist/core/AcsSessionManager.d.ts.map +1 -0
  3. package/dist/core/AcsSessionManager.js +31 -0
  4. package/dist/core/AcsSupport.d.ts +23 -0
  5. package/dist/core/AcsSupport.d.ts.map +1 -0
  6. package/dist/core/AcsSupport.js +100 -0
  7. package/dist/core/EventEmitter.d.ts +10 -0
  8. package/dist/core/EventEmitter.d.ts.map +1 -0
  9. package/dist/core/EventEmitter.js +19 -0
  10. package/dist/core/types.d.ts +27 -0
  11. package/dist/core/types.d.ts.map +1 -0
  12. package/dist/core/types.js +7 -0
  13. package/dist/hooks/useCall.d.ts +8 -0
  14. package/dist/hooks/useCall.d.ts.map +1 -0
  15. package/dist/hooks/useCall.js +33 -0
  16. package/dist/hooks/usePresence.d.ts +5 -0
  17. package/dist/hooks/usePresence.d.ts.map +1 -0
  18. package/dist/hooks/usePresence.js +17 -0
  19. package/dist/hooks/useSocket.d.ts +6 -0
  20. package/dist/hooks/useSocket.d.ts.map +1 -0
  21. package/dist/hooks/useSocket.js +11 -0
  22. package/dist/index.d.ts +13 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +12 -0
  25. package/dist/native/NativeAcsBridge.d.ts +18 -0
  26. package/dist/native/NativeAcsBridge.d.ts.map +1 -0
  27. package/dist/native/NativeAcsBridge.js +2 -0
  28. package/dist/native/RemoteControlSession.d.ts +12 -0
  29. package/dist/native/RemoteControlSession.d.ts.map +1 -0
  30. package/dist/native/RemoteControlSession.js +28 -0
  31. package/dist/native/SupportCallSession.d.ts +18 -0
  32. package/dist/native/SupportCallSession.d.ts.map +1 -0
  33. package/dist/native/SupportCallSession.js +43 -0
  34. package/dist/services/CallingService.d.ts +10 -0
  35. package/dist/services/CallingService.d.ts.map +1 -0
  36. package/dist/services/CallingService.js +41 -0
  37. package/dist/services/NotificationService.d.ts +8 -0
  38. package/dist/services/NotificationService.d.ts.map +1 -0
  39. package/dist/services/NotificationService.js +28 -0
  40. package/dist/services/PresenceService.d.ts +9 -0
  41. package/dist/services/PresenceService.d.ts.map +1 -0
  42. package/dist/services/PresenceService.js +33 -0
  43. package/dist/services/RecordingService.d.ts +13 -0
  44. package/dist/services/RecordingService.d.ts.map +1 -0
  45. package/dist/services/RecordingService.js +30 -0
  46. package/dist/services/RemoteControlService.d.ts +11 -0
  47. package/dist/services/RemoteControlService.d.ts.map +1 -0
  48. package/dist/services/RemoteControlService.js +26 -0
  49. package/dist/services/TokenService.d.ts +8 -0
  50. package/dist/services/TokenService.d.ts.map +1 -0
  51. package/dist/services/TokenService.js +24 -0
  52. package/dist/sockets/socket.d.ts +10 -0
  53. package/dist/sockets/socket.d.ts.map +1 -0
  54. package/dist/sockets/socket.js +23 -0
  55. package/package.json +6 -2
  56. package/src/index.ts +0 -5
  57. package/tsconfig.json +24 -0
  58. package/src/screens/ActiveCallScreen.tsx +0 -54
  59. package/src/screens/CallHistoryScreen.tsx +0 -41
  60. package/src/screens/IncomingCallScreen.tsx +0 -51
  61. package/src/screens/ScreenShareScreen.tsx +0 -28
@@ -0,0 +1,10 @@
1
+ import { SessionData } from "./types";
2
+ declare class AcsSessionManager {
3
+ save(session: SessionData): Promise<void>;
4
+ get(): Promise<SessionData | null>;
5
+ clear(): Promise<void>;
6
+ isExpired(): Promise<boolean>;
7
+ }
8
+ export declare const sessionManager: AcsSessionManager;
9
+ export {};
10
+ //# sourceMappingURL=AcsSessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcsSessionManager.d.ts","sourceRoot":"","sources":["../../src/core/AcsSessionManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,WAAW,EACZ,MAAM,SAAS,CAAC;AASjB,cAAM,iBAAiB;IAEf,IAAI,CACR,OAAO,EAAE,WAAW;IAchB,GAAG;IAgBH,KAAK;IAWL,SAAS;CAmBhB;AAED,eAAO,MAAM,cAAc,mBACF,CAAC"}
@@ -0,0 +1,31 @@
1
+ import AsyncStorage from "@react-native-async-storage/async-storage";
2
+ import { AcsEvents, } from "./types";
3
+ import { eventEmitter, } from "./EventEmitter";
4
+ const STORAGE_KEY = "@acs_session";
5
+ class AcsSessionManager {
6
+ async save(session) {
7
+ await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(session));
8
+ eventEmitter.emit(AcsEvents.SESSION_CREATED, session);
9
+ }
10
+ async get() {
11
+ const value = await AsyncStorage.getItem(STORAGE_KEY);
12
+ if (!value) {
13
+ return null;
14
+ }
15
+ return JSON.parse(value);
16
+ }
17
+ async clear() {
18
+ await AsyncStorage.removeItem(STORAGE_KEY);
19
+ eventEmitter.emit(AcsEvents.SESSION_CLEARED);
20
+ }
21
+ async isExpired() {
22
+ const session = await this.get();
23
+ if (!session) {
24
+ return true;
25
+ }
26
+ const now = new Date().getTime();
27
+ const expiry = new Date(session.expiresOn).getTime();
28
+ return now >= expiry;
29
+ }
30
+ }
31
+ export const sessionManager = new AcsSessionManager();
@@ -0,0 +1,23 @@
1
+ import { AcsConfig } from "./types";
2
+ import { PresenceService } from "../services/PresenceService";
3
+ import { CallingService } from "../services/CallingService";
4
+ import { NotificationService } from "../services/NotificationService";
5
+ import { RecordingService } from "../services/RecordingService";
6
+ import { RemoteControlService } from "../services/RemoteControlService";
7
+ export declare class AcsSupport {
8
+ private config;
9
+ private tokenService;
10
+ presence: PresenceService;
11
+ calling: CallingService;
12
+ notifications: NotificationService;
13
+ recordings: RecordingService;
14
+ remoteControl: RemoteControlService;
15
+ constructor(config: AcsConfig);
16
+ initialize(): Promise<import("./types").SessionData>;
17
+ private startHeartbeat;
18
+ getSession(): Promise<import("./types").SessionData | null>;
19
+ logout(): Promise<void>;
20
+ on(event: string, callback: (...args: any[]) => void): void;
21
+ off(event: string, callback: (...args: any[]) => void): void;
22
+ }
23
+ //# sourceMappingURL=AcsSupport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcsSupport.d.ts","sourceRoot":"","sources":["../../src/core/AcsSupport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAEV,MAAM,SAAS,CAAC;AAcjB,OAAO,EACL,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,cAAc,EACf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,oBAAoB,EACrB,MAAM,kCAAkC,CAAC;AAM1C,qBAAa,UAAU;IAenB,OAAO,CAAC,MAAM;IAbhB,OAAO,CAAC,YAAY,CAAe;IAE5B,QAAQ,EAAG,eAAe,CAAC;IAE3B,OAAO,EAAG,cAAc,CAAC;IAEzB,aAAa,EAAG,mBAAmB,CAAC;IAEpC,UAAU,EAAG,gBAAgB,CAAC;IAE9B,aAAa,EAAG,oBAAoB,CAAC;gBAGlC,MAAM,EAAE,SAAS;IAMrB,UAAU;IAyHhB,OAAO,CAAC,cAAc;IAmBhB,UAAU;IAKV,MAAM;IAOZ,EAAE,CACA,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;IASpC,GAAG,CACD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;CAQrC"}
@@ -0,0 +1,100 @@
1
+ import { AcsEvents, } from "./types";
2
+ import { sessionManager, } from "./AcsSessionManager";
3
+ import { eventEmitter, } from "./EventEmitter";
4
+ import { TokenService, } from "../services/TokenService";
5
+ import { PresenceService, } from "../services/PresenceService";
6
+ import { CallingService, } from "../services/CallingService";
7
+ import { NotificationService, } from "../services/NotificationService";
8
+ import { RecordingService, } from "../services/RecordingService";
9
+ import { RemoteControlService, } from "../services/RemoteControlService";
10
+ import { socketManager, } from "../sockets/socket";
11
+ export class AcsSupport {
12
+ config;
13
+ tokenService;
14
+ presence;
15
+ calling;
16
+ notifications;
17
+ recordings;
18
+ remoteControl;
19
+ constructor(config) {
20
+ this.config = config;
21
+ this.tokenService =
22
+ new TokenService(config);
23
+ }
24
+ async initialize() {
25
+ let session = await sessionManager.get();
26
+ if (!session) {
27
+ const token = await this.tokenService
28
+ .generateToken();
29
+ session = {
30
+ acsUserId: token.acsUserId,
31
+ acsToken: token.token,
32
+ expiresOn: token.expiresOn,
33
+ userId: token.userId,
34
+ };
35
+ await sessionManager.save(session);
36
+ eventEmitter.emit(AcsEvents.SESSION_CREATED, session);
37
+ }
38
+ const expired = await sessionManager.isExpired();
39
+ if (expired) {
40
+ eventEmitter.emit(AcsEvents.SESSION_EXPIRED);
41
+ const token = await this.tokenService
42
+ .generateToken();
43
+ session = {
44
+ acsUserId: token.acsUserId,
45
+ acsToken: token.token,
46
+ expiresOn: token.expiresOn,
47
+ userId: token.userId,
48
+ };
49
+ await sessionManager.save(session);
50
+ eventEmitter.emit(AcsEvents.TOKEN_REFRESHED, session);
51
+ }
52
+ /**
53
+ * Initialize Services
54
+ */
55
+ this.presence =
56
+ new PresenceService(this.config.apiBaseUrl, this.config.jwtToken);
57
+ this.calling =
58
+ new CallingService(this.config.apiBaseUrl, this.config.jwtToken);
59
+ this.notifications =
60
+ new NotificationService();
61
+ this.recordings =
62
+ new RecordingService(this.config.apiBaseUrl, this.config.jwtToken);
63
+ this.remoteControl =
64
+ new RemoteControlService();
65
+ /**
66
+ * Connect Socket.IO
67
+ */
68
+ if (this.config.socketUrl) {
69
+ socketManager.connect(this.config.socketUrl, this.config.jwtToken);
70
+ }
71
+ /**
72
+ * Start Heartbeat
73
+ */
74
+ this.startHeartbeat();
75
+ return session;
76
+ }
77
+ startHeartbeat() {
78
+ setInterval(async () => {
79
+ try {
80
+ await this.presence.heartbeat();
81
+ }
82
+ catch (error) {
83
+ console.error("Presence heartbeat failed", error);
84
+ }
85
+ }, 30000);
86
+ }
87
+ async getSession() {
88
+ return sessionManager.get();
89
+ }
90
+ async logout() {
91
+ socketManager.disconnect();
92
+ await sessionManager.clear();
93
+ }
94
+ on(event, callback) {
95
+ eventEmitter.on(event, callback);
96
+ }
97
+ off(event, callback) {
98
+ eventEmitter.off(event, callback);
99
+ }
100
+ }
@@ -0,0 +1,10 @@
1
+ type EventCallback = (payload?: any) => void;
2
+ declare class EventEmitter {
3
+ private listeners;
4
+ on(event: string, callback: EventCallback): void;
5
+ emit(event: string, payload?: any): void;
6
+ off(event: string, callback: EventCallback): void;
7
+ }
8
+ export declare const eventEmitter: EventEmitter;
9
+ export {};
10
+ //# sourceMappingURL=EventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../src/core/EventEmitter.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,CACnB,OAAO,CAAC,EAAE,GAAG,KACV,IAAI,CAAC;AAEV,cAAM,YAAY;IAChB,OAAO,CAAC,SAAS,CACsB;IAEvC,EAAE,CACA,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa;IAWzB,IAAI,CACF,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,GAAG;IAUf,GAAG,CACD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa;CAU1B;AAED,eAAO,MAAM,YAAY,cACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ class EventEmitter {
2
+ listeners = {};
3
+ on(event, callback) {
4
+ if (!this.listeners[event]) {
5
+ this.listeners[event] = [];
6
+ }
7
+ this.listeners[event].push(callback);
8
+ }
9
+ emit(event, payload) {
10
+ const callbacks = this.listeners[event] || [];
11
+ callbacks.forEach(cb => cb(payload));
12
+ }
13
+ off(event, callback) {
14
+ const callbacks = this.listeners[event] || [];
15
+ this.listeners[event] =
16
+ callbacks.filter(listener => listener !== callback);
17
+ }
18
+ }
19
+ export const eventEmitter = new EventEmitter();
@@ -0,0 +1,27 @@
1
+ export interface AcsTokenResponse {
2
+ source: "new" | "cached" | "refreshed";
3
+ userId: string;
4
+ username?: string;
5
+ displayName?: string;
6
+ acsUserId: string;
7
+ token: string;
8
+ expiresOn: string;
9
+ }
10
+ export interface AcsConfig {
11
+ apiBaseUrl: string;
12
+ jwtToken: string;
13
+ socketUrl?: string;
14
+ }
15
+ export interface SessionData {
16
+ acsUserId: string;
17
+ acsToken: string;
18
+ expiresOn: string;
19
+ userId: string;
20
+ }
21
+ export declare enum AcsEvents {
22
+ TOKEN_REFRESHED = "TOKEN_REFRESHED",
23
+ SESSION_CREATED = "SESSION_CREATED",
24
+ SESSION_EXPIRED = "SESSION_EXPIRED",
25
+ SESSION_CLEARED = "SESSION_CLEARED"
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC;IAEvC,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IAEtB,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,SAAS;IACjB,eAAe,oBAAoB;IAEnC,eAAe,oBAAoB;IAEnC,eAAe,oBAAoB;IAEnC,eAAe,oBAAoB;CACtC"}
@@ -0,0 +1,7 @@
1
+ export var AcsEvents;
2
+ (function (AcsEvents) {
3
+ AcsEvents["TOKEN_REFRESHED"] = "TOKEN_REFRESHED";
4
+ AcsEvents["SESSION_CREATED"] = "SESSION_CREATED";
5
+ AcsEvents["SESSION_EXPIRED"] = "SESSION_EXPIRED";
6
+ AcsEvents["SESSION_CLEARED"] = "SESSION_CLEARED";
7
+ })(AcsEvents || (AcsEvents = {}));
@@ -0,0 +1,8 @@
1
+ export declare const useCall: (support: any) => {
2
+ call: any;
3
+ createCall: () => Promise<any>;
4
+ acceptCall: (callId: string) => Promise<any>;
5
+ rejectCall: (callId: string) => Promise<any>;
6
+ endCall: (callId: string) => Promise<any>;
7
+ };
8
+ //# sourceMappingURL=useCall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCall.d.ts","sourceRoot":"","sources":["../../src/hooks/useCall.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,GAClB,SAAS,GAAG;;;yBAuBK,MAAM;yBAQN,MAAM;sBAQN,MAAM;CAcxB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { useState } from "react";
2
+ export const useCall = (support) => {
3
+ const [call, setCall] = useState(null);
4
+ const createCall = async () => {
5
+ const response = await support
6
+ .calling
7
+ .createCall();
8
+ setCall(response.data.call);
9
+ return response;
10
+ };
11
+ const acceptCall = async (callId) => {
12
+ return support
13
+ .calling
14
+ .acceptCall(callId);
15
+ };
16
+ const rejectCall = async (callId) => {
17
+ return support
18
+ .calling
19
+ .rejectCall(callId);
20
+ };
21
+ const endCall = async (callId) => {
22
+ return support
23
+ .calling
24
+ .endCall(callId);
25
+ };
26
+ return {
27
+ call,
28
+ createCall,
29
+ acceptCall,
30
+ rejectCall,
31
+ endCall,
32
+ };
33
+ };
@@ -0,0 +1,5 @@
1
+ export declare const usePresence: (support: any) => {
2
+ agents: never[];
3
+ refresh: () => Promise<void>;
4
+ };
5
+ //# sourceMappingURL=usePresence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePresence.d.ts","sourceRoot":"","sources":["../../src/hooks/usePresence.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,GACtB,SAAS,GAAG;;;CAyBb,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { useEffect, useState } from "react";
2
+ export const usePresence = (support) => {
3
+ const [agents, setAgents] = useState([]);
4
+ const loadAgents = async () => {
5
+ const response = await support
6
+ .presence
7
+ .getAvailableAgents();
8
+ setAgents(response.data || []);
9
+ };
10
+ useEffect(() => {
11
+ loadAgents();
12
+ }, []);
13
+ return {
14
+ agents,
15
+ refresh: loadAgents,
16
+ };
17
+ };
@@ -0,0 +1,6 @@
1
+ export declare const useSocket: (support: any, handlers: {
2
+ onIncomingCall?: (call: any) => void;
3
+ onCallAccepted?: (call: any) => void;
4
+ onCallEnded?: (call: any) => void;
5
+ }) => void;
6
+ //# sourceMappingURL=useSocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSocket.d.ts","sourceRoot":"","sources":["../../src/hooks/useSocket.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GACpB,SAAS,GAAG,EACZ,UAAU;IACR,cAAc,CAAC,EAAE,CACf,IAAI,EAAE,GAAG,KACN,IAAI,CAAC;IAEV,cAAc,CAAC,EAAE,CACf,IAAI,EAAE,GAAG,KACN,IAAI,CAAC;IAEV,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,GAAG,KACN,IAAI,CAAC;CACX,SAqBF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { useEffect } from "react";
2
+ export const useSocket = (support, handlers) => {
3
+ useEffect(() => {
4
+ support.notifications
5
+ .listenIncomingCall(handlers.onIncomingCall);
6
+ support.notifications
7
+ .listenCallAccepted(handlers.onCallAccepted);
8
+ support.notifications
9
+ .listenCallEnded(handlers.onCallEnded);
10
+ }, []);
11
+ };
@@ -0,0 +1,13 @@
1
+ export * from "./core/AcsSupport";
2
+ export * from "./core/AcsSessionManager";
3
+ export * from "./core/EventEmitter";
4
+ export * from "./core/types";
5
+ export * from "./services/PresenceService";
6
+ export * from "./services/CallingService";
7
+ export * from "./services/NotificationService";
8
+ export * from "./services/RecordingService";
9
+ export * from "./services/RemoteControlService";
10
+ export * from "./hooks/useCall";
11
+ export * from "./hooks/usePresence";
12
+ export * from "./hooks/useSocket";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAE7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAEhD,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export * from "./core/AcsSupport";
2
+ export * from "./core/AcsSessionManager";
3
+ export * from "./core/EventEmitter";
4
+ export * from "./core/types";
5
+ export * from "./services/PresenceService";
6
+ export * from "./services/CallingService";
7
+ export * from "./services/NotificationService";
8
+ export * from "./services/RecordingService";
9
+ export * from "./services/RemoteControlService";
10
+ export * from "./hooks/useCall";
11
+ export * from "./hooks/usePresence";
12
+ export * from "./hooks/useSocket";
@@ -0,0 +1,18 @@
1
+ export interface NativeAcsModule {
2
+ initialize(token: string): Promise<void>;
3
+ joinCall(groupId: string): Promise<void>;
4
+ leaveCall(): Promise<void>;
5
+ mute(): Promise<void>;
6
+ unmute(): Promise<void>;
7
+ startVideo(): Promise<void>;
8
+ stopVideo(): Promise<void>;
9
+ startScreenShare(): Promise<void>;
10
+ stopScreenShare(): Promise<void>;
11
+ startRecording(): Promise<void>;
12
+ stopRecording(): Promise<void>;
13
+ requestRemoteControl(): Promise<void>;
14
+ approveRemoteControl(): Promise<void>;
15
+ denyRemoteControl(): Promise<void>;
16
+ }
17
+ export declare const NativeAcsBridge: NativeAcsModule;
18
+ //# sourceMappingURL=NativeAcsBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeAcsBridge.d.ts","sourceRoot":"","sources":["../../src/native/NativeAcsBridge.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,eAAe,EACQ,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { NativeModules } from "react-native";
2
+ export const NativeAcsBridge = NativeModules.KshemaAcsSupport;
@@ -0,0 +1,12 @@
1
+ export declare class RemoteControlSession {
2
+ requestControl(): Promise<void>;
3
+ approveControl(): Promise<void>;
4
+ denyControl(): Promise<void>;
5
+ pointerMove(x: number, y: number): void;
6
+ click(x: number, y: number): void;
7
+ scroll(delta: number): void;
8
+ keyboardInput(text: string): void;
9
+ revokeConsent(): void;
10
+ }
11
+ export declare const remoteControlSession: RemoteControlSession;
12
+ //# sourceMappingURL=RemoteControlSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteControlSession.d.ts","sourceRoot":"","sources":["../../src/native/RemoteControlSession.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAEzB,cAAc;IAKd,cAAc;IAKd,WAAW;IAKjB,WAAW,CACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM;IAUX,KAAK,CACH,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM;IAUX,MAAM,CACJ,KAAK,EAAE,MAAM;IASf,aAAa,CACX,IAAI,EAAE,MAAM;IASd,aAAa;CAMd;AAED,eAAO,MAAM,oBAAoB,sBACL,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { NativeAcsBridge } from "./NativeAcsBridge";
2
+ export class RemoteControlSession {
3
+ async requestControl() {
4
+ await NativeAcsBridge.requestRemoteControl();
5
+ }
6
+ async approveControl() {
7
+ await NativeAcsBridge.approveRemoteControl();
8
+ }
9
+ async denyControl() {
10
+ await NativeAcsBridge.denyRemoteControl();
11
+ }
12
+ pointerMove(x, y) {
13
+ console.log("POINTER_MOVE", x, y);
14
+ }
15
+ click(x, y) {
16
+ console.log("CLICK", x, y);
17
+ }
18
+ scroll(delta) {
19
+ console.log("SCROLL", delta);
20
+ }
21
+ keyboardInput(text) {
22
+ console.log("KEYBOARD_INPUT", text);
23
+ }
24
+ revokeConsent() {
25
+ console.log("CONSENT_REVOKED");
26
+ }
27
+ }
28
+ export const remoteControlSession = new RemoteControlSession();
@@ -0,0 +1,18 @@
1
+ export declare class SupportCallSession {
2
+ private callId?;
3
+ private groupId?;
4
+ initialize(acsToken: string): Promise<void>;
5
+ joinCall(groupId: string): Promise<void>;
6
+ leaveCall(): Promise<void>;
7
+ mute(): Promise<void>;
8
+ unmute(): Promise<void>;
9
+ startVideo(): Promise<void>;
10
+ stopVideo(): Promise<void>;
11
+ startScreenShare(): Promise<void>;
12
+ stopScreenShare(): Promise<void>;
13
+ startRecording(): Promise<void>;
14
+ stopRecording(): Promise<void>;
15
+ getGroupId(): string | undefined;
16
+ }
17
+ export declare const supportCallSession: SupportCallSession;
18
+ //# sourceMappingURL=SupportCallSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupportCallSession.d.ts","sourceRoot":"","sources":["../../src/native/SupportCallSession.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,OAAO,CAAC,CAAS;IAEnB,UAAU,CACd,QAAQ,EAAE,MAAM;IAQZ,QAAQ,CACZ,OAAO,EAAE,MAAM;IAUX,SAAS;IAKT,IAAI;IAKJ,MAAM;IAKN,UAAU;IAKV,SAAS;IAKT,gBAAgB;IAKhB,eAAe;IAKf,cAAc;IAKd,aAAa;IAKnB,UAAU;CAGX;AAED,eAAO,MAAM,kBAAkB,oBACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { NativeAcsBridge } from "./NativeAcsBridge";
2
+ export class SupportCallSession {
3
+ callId;
4
+ groupId;
5
+ async initialize(acsToken) {
6
+ await NativeAcsBridge.initialize(acsToken);
7
+ }
8
+ async joinCall(groupId) {
9
+ this.groupId = groupId;
10
+ await NativeAcsBridge.joinCall(groupId);
11
+ }
12
+ async leaveCall() {
13
+ await NativeAcsBridge.leaveCall();
14
+ }
15
+ async mute() {
16
+ await NativeAcsBridge.mute();
17
+ }
18
+ async unmute() {
19
+ await NativeAcsBridge.unmute();
20
+ }
21
+ async startVideo() {
22
+ await NativeAcsBridge.startVideo();
23
+ }
24
+ async stopVideo() {
25
+ await NativeAcsBridge.stopVideo();
26
+ }
27
+ async startScreenShare() {
28
+ await NativeAcsBridge.startScreenShare();
29
+ }
30
+ async stopScreenShare() {
31
+ await NativeAcsBridge.stopScreenShare();
32
+ }
33
+ async startRecording() {
34
+ await NativeAcsBridge.startRecording();
35
+ }
36
+ async stopRecording() {
37
+ await NativeAcsBridge.stopRecording();
38
+ }
39
+ getGroupId() {
40
+ return this.groupId;
41
+ }
42
+ }
43
+ export const supportCallSession = new SupportCallSession();
@@ -0,0 +1,10 @@
1
+ export declare class CallingService {
2
+ private apiBaseUrl;
3
+ private jwtToken;
4
+ constructor(apiBaseUrl: string, jwtToken: string);
5
+ createCall(): Promise<any>;
6
+ acceptCall(callId: string): Promise<any>;
7
+ rejectCall(callId: string): Promise<any>;
8
+ endCall(callId: string): Promise<any>;
9
+ }
10
+ //# sourceMappingURL=CallingService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CallingService.d.ts","sourceRoot":"","sources":["../../src/services/CallingService.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IAEvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;gBADR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAGpB,UAAU;IAeV,UAAU,CAAC,MAAM,EAAE,MAAM;IAezB,UAAU,CAAC,MAAM,EAAE,MAAM;IAezB,OAAO,CAAC,MAAM,EAAE,MAAM;CAc7B"}
@@ -0,0 +1,41 @@
1
+ import axios from "axios";
2
+ export class CallingService {
3
+ apiBaseUrl;
4
+ jwtToken;
5
+ constructor(apiBaseUrl, jwtToken) {
6
+ this.apiBaseUrl = apiBaseUrl;
7
+ this.jwtToken = jwtToken;
8
+ }
9
+ async createCall() {
10
+ const response = await axios.post(`${this.apiBaseUrl}/api/v1/calls`, {}, {
11
+ headers: {
12
+ Authorization: `Bearer ${this.jwtToken}`,
13
+ },
14
+ });
15
+ return response.data;
16
+ }
17
+ async acceptCall(callId) {
18
+ const response = await axios.post(`${this.apiBaseUrl}/api/v1/calls/${callId}/accept`, {}, {
19
+ headers: {
20
+ Authorization: `Bearer ${this.jwtToken}`,
21
+ },
22
+ });
23
+ return response.data;
24
+ }
25
+ async rejectCall(callId) {
26
+ const response = await axios.post(`${this.apiBaseUrl}/api/v1/calls/${callId}/reject`, {}, {
27
+ headers: {
28
+ Authorization: `Bearer ${this.jwtToken}`,
29
+ },
30
+ });
31
+ return response.data;
32
+ }
33
+ async endCall(callId) {
34
+ const response = await axios.post(`${this.apiBaseUrl}/api/v1/calls/${callId}/end`, {}, {
35
+ headers: {
36
+ Authorization: `Bearer ${this.jwtToken}`,
37
+ },
38
+ });
39
+ return response.data;
40
+ }
41
+ }
@@ -0,0 +1,8 @@
1
+ export declare class NotificationService {
2
+ listenIncomingCall(callback: (payload: any) => void): void;
3
+ listenCallAccepted(callback: (payload: any) => void): void;
4
+ listenCallRejected(callback: (payload: any) => void): void;
5
+ listenCallTaken(callback: (payload: any) => void): void;
6
+ listenCallEnded(callback: (payload: any) => void): void;
7
+ }
8
+ //# sourceMappingURL=NotificationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationService.d.ts","sourceRoot":"","sources":["../../src/services/NotificationService.ts"],"names":[],"mappings":"AAEA,qBAAa,mBAAmB;IAC9B,kBAAkB,CAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;IAUlC,kBAAkB,CAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;IAUlC,kBAAkB,CAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;IAUlC,eAAe,CACb,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;IAUlC,eAAe,CACb,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI;CASnC"}
@@ -0,0 +1,28 @@
1
+ import { socketManager } from "../sockets/socket";
2
+ export class NotificationService {
3
+ listenIncomingCall(callback) {
4
+ socketManager
5
+ .getSocket()
6
+ ?.on("INCOMING_CALL", callback);
7
+ }
8
+ listenCallAccepted(callback) {
9
+ socketManager
10
+ .getSocket()
11
+ ?.on("CALL_ACCEPTED", callback);
12
+ }
13
+ listenCallRejected(callback) {
14
+ socketManager
15
+ .getSocket()
16
+ ?.on("CALL_REJECTED", callback);
17
+ }
18
+ listenCallTaken(callback) {
19
+ socketManager
20
+ .getSocket()
21
+ ?.on("CALL_TAKEN", callback);
22
+ }
23
+ listenCallEnded(callback) {
24
+ socketManager
25
+ .getSocket()
26
+ ?.on("CALL_ENDED", callback);
27
+ }
28
+ }
@@ -0,0 +1,9 @@
1
+ export declare class PresenceService {
2
+ private apiBaseUrl;
3
+ private jwtToken;
4
+ constructor(apiBaseUrl: string, jwtToken: string);
5
+ heartbeat(): Promise<any>;
6
+ updateStatus(status: "Available" | "Busy" | "Away" | "Offline"): Promise<any>;
7
+ getAvailableAgents(): Promise<any>;
8
+ }
9
+ //# sourceMappingURL=PresenceService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PresenceService.d.ts","sourceRoot":"","sources":["../../src/services/PresenceService.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IAExB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;gBADR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAGpB,SAAS;IAeT,YAAY,CAChB,MAAM,EACF,WAAW,GACX,MAAM,GACN,MAAM,GACN,SAAS;IAgBT,kBAAkB;CAazB"}
@@ -0,0 +1,33 @@
1
+ import axios from "axios";
2
+ export class PresenceService {
3
+ apiBaseUrl;
4
+ jwtToken;
5
+ constructor(apiBaseUrl, jwtToken) {
6
+ this.apiBaseUrl = apiBaseUrl;
7
+ this.jwtToken = jwtToken;
8
+ }
9
+ async heartbeat() {
10
+ const response = await axios.post(`${this.apiBaseUrl}/api/v1/presence/heartbeat`, {}, {
11
+ headers: {
12
+ Authorization: `Bearer ${this.jwtToken}`,
13
+ },
14
+ });
15
+ return response.data;
16
+ }
17
+ async updateStatus(status) {
18
+ const response = await axios.put(`${this.apiBaseUrl}/api/v1/presence/status`, { status }, {
19
+ headers: {
20
+ Authorization: `Bearer ${this.jwtToken}`,
21
+ },
22
+ });
23
+ return response.data;
24
+ }
25
+ async getAvailableAgents() {
26
+ const response = await axios.get(`${this.apiBaseUrl}/api/v1/presence/agents`, {
27
+ headers: {
28
+ Authorization: `Bearer ${this.jwtToken}`,
29
+ },
30
+ });
31
+ return response.data;
32
+ }
33
+ }
@@ -0,0 +1,13 @@
1
+ export declare class RecordingService {
2
+ private apiBaseUrl;
3
+ private jwtToken;
4
+ constructor(apiBaseUrl: string, jwtToken: string);
5
+ startRecording(callId: string): Promise<import("axios").AxiosResponse<any, {
6
+ callId: string;
7
+ }, {}, any>>;
8
+ stopRecording(recordingId: string): Promise<import("axios").AxiosResponse<any, {
9
+ recordingId: string;
10
+ }, {}, any>>;
11
+ getHistory(): Promise<import("axios").AxiosResponse<any, any, {}, any>>;
12
+ }
13
+ //# sourceMappingURL=RecordingService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordingService.d.ts","sourceRoot":"","sources":["../../src/services/RecordingService.ts"],"names":[],"mappings":"AAEA,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;gBADR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAGpB,cAAc,CAClB,MAAM,EAAE,MAAM;;;IAcV,aAAa,CACjB,WAAW,EAAE,MAAM;;;IAcf,UAAU;CAWjB"}
@@ -0,0 +1,30 @@
1
+ import axios from "axios";
2
+ export class RecordingService {
3
+ apiBaseUrl;
4
+ jwtToken;
5
+ constructor(apiBaseUrl, jwtToken) {
6
+ this.apiBaseUrl = apiBaseUrl;
7
+ this.jwtToken = jwtToken;
8
+ }
9
+ async startRecording(callId) {
10
+ return axios.post(`${this.apiBaseUrl}/api/v1/recordings/start`, { callId }, {
11
+ headers: {
12
+ Authorization: `Bearer ${this.jwtToken}`,
13
+ },
14
+ });
15
+ }
16
+ async stopRecording(recordingId) {
17
+ return axios.post(`${this.apiBaseUrl}/api/v1/recordings/stop`, { recordingId }, {
18
+ headers: {
19
+ Authorization: `Bearer ${this.jwtToken}`,
20
+ },
21
+ });
22
+ }
23
+ async getHistory() {
24
+ return axios.get(`${this.apiBaseUrl}/api/v1/recordings`, {
25
+ headers: {
26
+ Authorization: `Bearer ${this.jwtToken}`,
27
+ },
28
+ });
29
+ }
30
+ }
@@ -0,0 +1,11 @@
1
+ export declare class RemoteControlService {
2
+ requestControl(): void;
3
+ approveControl(): void;
4
+ denyControl(): void;
5
+ endControl(): void;
6
+ pointerMove(x: number, y: number): void;
7
+ click(x: number, y: number): void;
8
+ scroll(delta: number): void;
9
+ keyInput(text: string): void;
10
+ }
11
+ //# sourceMappingURL=RemoteControlService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteControlService.d.ts","sourceRoot":"","sources":["../../src/services/RemoteControlService.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAoB;IAE/B,cAAc;IAMd,cAAc;IAMd,WAAW;IAMX,UAAU;IAMV,WAAW,CACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM;IASX,KAAK,CACH,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM;IASX,MAAM,CACJ,KAAK,EAAE,MAAM;IAQf,QAAQ,CAAC,IAAI,EAAE,MAAM;CAMtB"}
@@ -0,0 +1,26 @@
1
+ export class RemoteControlService {
2
+ requestControl() {
3
+ console.log("CONTROL_REQUEST");
4
+ }
5
+ approveControl() {
6
+ console.log("CONTROL_APPROVED");
7
+ }
8
+ denyControl() {
9
+ console.log("CONTROL_DENIED");
10
+ }
11
+ endControl() {
12
+ console.log("CONTROL_ENDED");
13
+ }
14
+ pointerMove(x, y) {
15
+ console.log("POINTER_MOVE", x, y);
16
+ }
17
+ click(x, y) {
18
+ console.log("CLICK", x, y);
19
+ }
20
+ scroll(delta) {
21
+ console.log("SCROLL", delta);
22
+ }
23
+ keyInput(text) {
24
+ console.log("KEY_INPUT", text);
25
+ }
26
+ }
@@ -0,0 +1,8 @@
1
+ import { AcsConfig, AcsTokenResponse } from "../core/types";
2
+ export declare class TokenService {
3
+ private config;
4
+ constructor(config: AcsConfig);
5
+ generateToken(): Promise<AcsTokenResponse>;
6
+ checkTokenStatus(): Promise<any>;
7
+ }
8
+ //# sourceMappingURL=TokenService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenService.d.ts","sourceRoot":"","sources":["../../src/services/TokenService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,qBAAa,YAAY;IAGrB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAGrB,aAAa;IAkBb,gBAAgB;CAevB"}
@@ -0,0 +1,24 @@
1
+ import axios from "axios";
2
+ export class TokenService {
3
+ config;
4
+ constructor(config) {
5
+ this.config = config;
6
+ }
7
+ async generateToken() {
8
+ const response = await axios.post(`${this.config.apiBaseUrl}/api/v1/acs/token`, {}, {
9
+ headers: {
10
+ Authorization: `Bearer ${this.config.jwtToken}`,
11
+ },
12
+ });
13
+ return response.data
14
+ .data;
15
+ }
16
+ async checkTokenStatus() {
17
+ const response = await axios.get(`${this.config.apiBaseUrl}/api/v1/acs/token/status`, {
18
+ headers: {
19
+ Authorization: `Bearer ${this.config.jwtToken}`,
20
+ },
21
+ });
22
+ return response.data.data;
23
+ }
24
+ }
@@ -0,0 +1,10 @@
1
+ import { Socket } from "socket.io-client";
2
+ declare class SocketManager {
3
+ private socket;
4
+ connect(url: string, jwtToken: string): Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap>;
5
+ getSocket(): Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap> | null;
6
+ disconnect(): void;
7
+ }
8
+ export declare const socketManager: SocketManager;
9
+ export {};
10
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/sockets/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE9C,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAerC,SAAS;IAIT,UAAU;CAGX;AAED,eAAO,MAAM,aAAa,eACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { io } from "socket.io-client";
2
+ class SocketManager {
3
+ socket = null;
4
+ connect(url, jwtToken) {
5
+ if (this.socket?.connected) {
6
+ return this.socket;
7
+ }
8
+ this.socket = io(url, {
9
+ transports: ["websocket"],
10
+ auth: {
11
+ token: jwtToken,
12
+ },
13
+ });
14
+ return this.socket;
15
+ }
16
+ getSocket() {
17
+ return this.socket;
18
+ }
19
+ disconnect() {
20
+ this.socket?.disconnect();
21
+ }
22
+ }
23
+ export const socketManager = new SocketManager();
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "@kshema/communications-client",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "clean": "rm -rf dist"
9
+ },
6
10
  "dependencies": {
7
11
  "@azure/communication-common": "^2.5.0",
8
12
  "@react-native-async-storage/async-storage": "^3.1.1",
@@ -20,4 +24,4 @@
20
24
  "@types/react-native": "^0.72.8",
21
25
  "typescript": "^5.9.2"
22
26
  }
23
- }
27
+ }
package/src/index.ts CHANGED
@@ -12,8 +12,3 @@ export * from "./services/RemoteControlService";
12
12
  export * from "./hooks/useCall";
13
13
  export * from "./hooks/usePresence";
14
14
  export * from "./hooks/useSocket";
15
-
16
- export * from "./screens/IncomingCallScreen";
17
- export * from "./screens/ActiveCallScreen";
18
- export * from "./screens/ScreenShareScreen";
19
- export * from "./screens/CallHistoryScreen";
package/tsconfig.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Node",
6
+ "jsx": "react-jsx",
7
+ "declaration": true,
8
+ "declarationMap": true,
9
+ "outDir": "dist",
10
+ "strict": true,
11
+ "esModuleInterop": true,
12
+ "skipLibCheck": true,
13
+ "allowSyntheticDefaultImports": true
14
+ },
15
+
16
+ "include": [
17
+ "src/**/*"
18
+ ],
19
+
20
+ "exclude": [
21
+ "dist",
22
+ "node_modules"
23
+ ]
24
+ }
@@ -1,54 +0,0 @@
1
- import React from "react";
2
-
3
- import {
4
- View,
5
- Button,
6
- } from "react-native";
7
-
8
- export default function
9
- ActiveCallScreen({
10
- onMute,
11
- onUnmute,
12
- onEnd,
13
- onVideoOn,
14
- onVideoOff,
15
- onShareScreen,
16
- }: any) {
17
-
18
- return (
19
- <View>
20
-
21
- <Button
22
- title="Mute"
23
- onPress={onMute}
24
- />
25
-
26
- <Button
27
- title="Unmute"
28
- onPress={onUnmute}
29
- />
30
-
31
- <Button
32
- title="Video On"
33
- onPress={onVideoOn}
34
- />
35
-
36
- <Button
37
- title="Video Off"
38
- onPress={onVideoOff}
39
- />
40
-
41
- <Button
42
- title="Share Screen"
43
- onPress={
44
- onShareScreen
45
- }
46
- />
47
-
48
- <Button
49
- title="End Call"
50
- onPress={onEnd}
51
- />
52
- </View>
53
- );
54
- }
@@ -1,41 +0,0 @@
1
- import React from "react";
2
-
3
- import {
4
- FlatList,
5
- Text,
6
- View,
7
- } from "react-native";
8
-
9
- export default function
10
- CallHistoryScreen({
11
- calls,
12
- }: any) {
13
-
14
- return (
15
- <FlatList
16
- data={calls}
17
- keyExtractor={item =>
18
- item.id
19
- }
20
- renderItem={({
21
- item,
22
- }) => (
23
- <View>
24
-
25
- <Text>
26
- {item.customerName}
27
- </Text>
28
-
29
- <Text>
30
- {item.status}
31
- </Text>
32
-
33
- <Text>
34
- {item.createdAt}
35
- </Text>
36
-
37
- </View>
38
- )}
39
- />
40
- );
41
- }
@@ -1,51 +0,0 @@
1
- import React from "react";
2
-
3
- import {
4
- View,
5
- Text,
6
- Button,
7
- } from "react-native";
8
-
9
- export default function
10
- IncomingCallScreen({
11
- call,
12
- onAccept,
13
- onReject,
14
- }: any) {
15
-
16
- return (
17
- <View
18
- style={{
19
- flex: 1,
20
- justifyContent:
21
- "center",
22
- }}
23
- >
24
- <Text>
25
- Incoming Call
26
- </Text>
27
-
28
- <Text>
29
- {call?.customerName}
30
- </Text>
31
-
32
- <Button
33
- title="Accept"
34
- onPress={() =>
35
- onAccept(
36
- call.id
37
- )
38
- }
39
- />
40
-
41
- <Button
42
- title="Reject"
43
- onPress={() =>
44
- onReject(
45
- call.id
46
- )
47
- }
48
- />
49
- </View>
50
- );
51
- }
@@ -1,28 +0,0 @@
1
- import React from "react";
2
-
3
- import {
4
- View,
5
- Text,
6
- Button,
7
- } from "react-native";
8
-
9
- export default function
10
- ScreenShareScreen({
11
- onStop,
12
- }: any) {
13
-
14
- return (
15
- <View>
16
-
17
- <Text>
18
- Screen Sharing Active
19
- </Text>
20
-
21
- <Button
22
- title="Stop Sharing"
23
- onPress={onStop}
24
- />
25
-
26
- </View>
27
- );
28
- }