agora-appbuilder-core 4.0.7 → 4.0.8
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/package.json +1 -1
- package/template/_package-lock.json +82 -0
- package/template/android/app/build.gradle +8 -0
- package/template/android/build.gradle +3 -0
- package/template/bridge/rtc/webNg/RtcEngine.ts +581 -31
- package/template/bridge/rtc/webNg/RtcSurfaceView.tsx +2 -1
- package/template/bridge/rtm/web/index.ts +2 -1
- package/template/customization-api/customize.ts +29 -10
- package/template/index.js +17 -1
- package/template/index.web.js +2 -2
- package/template/package.json +3 -0
- package/template/src/SDKAppWrapper.tsx +44 -2
- package/template/src/app-state/useNoiseSupression.native.tsx +6 -0
- package/template/src/app-state/useNoiseSupression.tsx +17 -0
- package/template/src/auth/AuthProvider.tsx +145 -8
- package/template/src/auth/IDPAuth.electron.tsx +2 -1
- package/template/src/auth/IDPAuth.tsx +8 -2
- package/template/src/auth/openIDPURL.native.tsx +14 -3
- package/template/src/auth/useTokenAuth.tsx +7 -1
- package/template/src/components/Controls.tsx +2 -1
- package/template/src/components/DeviceConfigure.tsx +67 -17
- package/template/src/components/Precall.tsx +21 -0
- package/template/src/components/RTMConfigure.tsx +188 -24
- package/template/src/components/SettingsView.tsx +2 -0
- package/template/src/components/Share.tsx +11 -0
- package/template/src/components/StorageContext.tsx +32 -2
- package/template/src/components/chat-messages/useChatMessages.tsx +65 -5
- package/template/src/components/contexts/WaitingRoomContext.tsx +5 -1
- package/template/src/components/precall/joinCallBtn.tsx +6 -0
- package/template/src/components/precall/usePreCall.tsx +18 -2
- package/template/src/components/room-info/useRoomInfo.tsx +28 -25
- package/template/src/components/useUserPreference.tsx +13 -2
- package/template/src/components/useWakeLock.tsx +18 -4
- package/template/src/components/virtual-background/VBCard.tsx +40 -1
- package/template/src/components/virtual-background/VButils.native.ts +24 -5
- package/template/src/components/virtual-background/VButils.ts +29 -5
- package/template/src/components/virtual-background/VideoPreview.tsx +11 -1
- package/template/src/components/virtual-background/useVB.native.tsx +19 -3
- package/template/src/components/whiteboard/WhiteboardConfigure.tsx +32 -5
- package/template/src/components/whiteboard/WhiteboardToolBox.tsx +38 -8
- package/template/src/components/whiteboard/WhiteboardView.native.tsx +37 -13
- package/template/src/language/useLanguage.tsx +10 -4
- package/template/src/logger/AppBuilderLogger.tsx +215 -0
- package/template/src/logger/constants.ts +18 -0
- package/template/src/logger/transports/agora-transport.native.ts +58 -0
- package/template/src/logger/transports/agora-transport.ts +28 -0
- package/template/src/logger/transports/customer-transport.ts +115 -0
- package/template/src/pages/Create.tsx +27 -2
- package/template/src/pages/Endcall.tsx +6 -1
- package/template/src/pages/Join.tsx +31 -4
- package/template/src/pages/VideoCall.tsx +20 -56
- package/template/src/pages/video-call/DefaultLayouts.ts +11 -3
- package/template/src/pages/video-call/SidePanelHeader.tsx +12 -2
- package/template/src/pages/video-call/VideoCallScreen.tsx +8 -0
- package/template/src/pages/video-call/VideoRenderer.tsx +6 -0
- package/template/src/rtm/RTMEngine.ts +5 -0
- package/template/src/rtm-events-api/Events.ts +70 -16
- package/template/src/subComponents/LayoutIconDropdown.tsx +6 -0
- package/template/src/subComponents/LocalAudioMute.tsx +13 -3
- package/template/src/subComponents/LocalEndCall.tsx +8 -3
- package/template/src/subComponents/LocalVideoMute.tsx +15 -1
- package/template/src/subComponents/SelectDevice.tsx +111 -3
- package/template/src/subComponents/caption/CaptionContainer.tsx +17 -2
- package/template/src/subComponents/caption/useSTTAPI.tsx +62 -20
- package/template/src/subComponents/caption/useTranscriptDownload.native.ts +35 -5
- package/template/src/subComponents/caption/useTranscriptDownload.ts +12 -2
- package/template/src/subComponents/chat/ChatParticipants.tsx +6 -0
- package/template/src/subComponents/recording/useRecording.tsx +102 -15
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +33 -2
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +18 -2
- package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +26 -0
- package/template/src/utils/axiomLogger.ts +2 -1
- package/template/src/utils/useCreateRoom.ts +30 -0
- package/template/src/utils/useFindActiveSpeaker.ts +43 -0
- package/template/src/utils/useFocus.tsx +8 -3
- package/template/src/utils/useIsLocalUserSpeaking.ts +19 -3
- package/template/src/utils/useJoinRoom.ts +27 -0
- package/template/src/utils/useLayout.tsx +9 -3
- package/template/src/utils/useSidePanel.tsx +14 -3
|
@@ -47,6 +47,7 @@ import LocalEventEmitter, {
|
|
|
47
47
|
} from '../rtm-events-api/LocalEvents';
|
|
48
48
|
import {PSTNUserLabel} from '../language/default-labels/videoCallScreenLabels';
|
|
49
49
|
import {controlMessageEnum} from '../components/ChatContext';
|
|
50
|
+
import {LogSource, logger} from '../logger/AppBuilderLogger';
|
|
50
51
|
import {RECORDING_BOT_UID} from '../utils/constants';
|
|
51
52
|
|
|
52
53
|
export enum UserType {
|
|
@@ -139,14 +140,19 @@ const RtmConfigure = (props: any) => {
|
|
|
139
140
|
|
|
140
141
|
const doLoginAndSetupRTM = async () => {
|
|
141
142
|
try {
|
|
143
|
+
logger.log(LogSource.AgoraSDK, 'API', 'RTM login starts');
|
|
142
144
|
await engine.current.login({
|
|
143
145
|
uid: localUid.toString(),
|
|
144
146
|
token: rtcProps.rtm,
|
|
145
147
|
});
|
|
148
|
+
logger.log(LogSource.AgoraSDK, 'API', 'RTM login done');
|
|
146
149
|
RTMEngine.getInstance().setLocalUID(localUid.toString());
|
|
150
|
+
logger.log(LogSource.AgoraSDK, 'API', 'RTM local Uid set');
|
|
147
151
|
timerValueRef.current = 5;
|
|
148
152
|
await setAttribute();
|
|
153
|
+
logger.log(LogSource.AgoraSDK, 'Log', 'RTM setting attribute done');
|
|
149
154
|
} catch (error) {
|
|
155
|
+
logger.error(LogSource.AgoraSDK, 'Log', 'RTM login failed..Trying again');
|
|
150
156
|
setTimeout(async () => {
|
|
151
157
|
timerValueRef.current = timerValueRef.current + timerValueRef.current;
|
|
152
158
|
doLoginAndSetupRTM();
|
|
@@ -160,11 +166,35 @@ const RtmConfigure = (props: any) => {
|
|
|
160
166
|
];
|
|
161
167
|
try {
|
|
162
168
|
await engine.current.setLocalUserAttributes(rtmAttributes);
|
|
169
|
+
logger.log(
|
|
170
|
+
LogSource.AgoraSDK,
|
|
171
|
+
'API',
|
|
172
|
+
'RTM setting local user attributes',
|
|
173
|
+
{
|
|
174
|
+
attr: rtmAttributes,
|
|
175
|
+
},
|
|
176
|
+
);
|
|
163
177
|
timerValueRef.current = 5;
|
|
164
178
|
await joinChannel();
|
|
179
|
+
logger.log(LogSource.AgoraSDK, 'Log', 'RTM join channel done', {
|
|
180
|
+
data: rtmAttributes,
|
|
181
|
+
});
|
|
165
182
|
setHasUserJoinedRTM(true);
|
|
166
183
|
await runQueuedEvents();
|
|
184
|
+
logger.log(
|
|
185
|
+
LogSource.AgoraSDK,
|
|
186
|
+
'Log',
|
|
187
|
+
'RTM queued events finished running',
|
|
188
|
+
{
|
|
189
|
+
attr: rtmAttributes,
|
|
190
|
+
},
|
|
191
|
+
);
|
|
167
192
|
} catch (error) {
|
|
193
|
+
logger.error(
|
|
194
|
+
LogSource.AgoraSDK,
|
|
195
|
+
'Log',
|
|
196
|
+
'RTM setAttribute failed..Trying again',
|
|
197
|
+
);
|
|
168
198
|
setTimeout(async () => {
|
|
169
199
|
timerValueRef.current = timerValueRef.current + timerValueRef.current;
|
|
170
200
|
setAttribute();
|
|
@@ -176,15 +206,40 @@ const RtmConfigure = (props: any) => {
|
|
|
176
206
|
try {
|
|
177
207
|
if (RTMEngine.getInstance().channelUid !== rtcProps.channel) {
|
|
178
208
|
await engine.current.joinChannel(rtcProps.channel);
|
|
209
|
+
logger.log(LogSource.AgoraSDK, 'API', 'RTM joinChannel', {
|
|
210
|
+
data: rtcProps.channel,
|
|
211
|
+
});
|
|
179
212
|
RTMEngine.getInstance().setChannelId(rtcProps.channel);
|
|
180
|
-
|
|
213
|
+
logger.log(
|
|
214
|
+
LogSource.AgoraSDK,
|
|
215
|
+
'API',
|
|
216
|
+
'RTM setChannelId',
|
|
217
|
+
rtcProps.channel,
|
|
218
|
+
);
|
|
219
|
+
logger.debug(
|
|
220
|
+
LogSource.SDK,
|
|
221
|
+
'Event',
|
|
222
|
+
'Emitting rtm joined',
|
|
223
|
+
rtcProps.channel,
|
|
224
|
+
);
|
|
181
225
|
SDKEvents.emit('_rtm-joined', rtcProps.channel);
|
|
182
226
|
} else {
|
|
183
|
-
|
|
227
|
+
logger.debug(
|
|
228
|
+
LogSource.AgoraSDK,
|
|
229
|
+
'Log',
|
|
230
|
+
'RTM already joined channel skipping',
|
|
231
|
+
rtcProps.channel,
|
|
232
|
+
);
|
|
184
233
|
}
|
|
185
234
|
timerValueRef.current = 5;
|
|
186
235
|
await getMembers();
|
|
236
|
+
logger.log(LogSource.AgoraSDK, 'Log', 'RTM getMembers done');
|
|
187
237
|
} catch (error) {
|
|
238
|
+
logger.error(
|
|
239
|
+
LogSource.AgoraSDK,
|
|
240
|
+
'Log',
|
|
241
|
+
'RTM joinChannel failed..Trying again',
|
|
242
|
+
);
|
|
188
243
|
setTimeout(async () => {
|
|
189
244
|
timerValueRef.current = timerValueRef.current + timerValueRef.current;
|
|
190
245
|
joinChannel();
|
|
@@ -201,19 +256,48 @@ const RtmConfigure = (props: any) => {
|
|
|
201
256
|
|
|
202
257
|
const getMembers = async () => {
|
|
203
258
|
try {
|
|
259
|
+
logger.log(
|
|
260
|
+
LogSource.AgoraSDK,
|
|
261
|
+
'API',
|
|
262
|
+
'RTM getChannelMembersByID(getMembers) start',
|
|
263
|
+
);
|
|
204
264
|
await engine.current
|
|
205
265
|
.getChannelMembersBychannelId(rtcProps.channel)
|
|
206
266
|
.then(async data => {
|
|
267
|
+
logger.log(
|
|
268
|
+
LogSource.AgoraSDK,
|
|
269
|
+
'API',
|
|
270
|
+
'RTM getChannelMembersByID data received',
|
|
271
|
+
data,
|
|
272
|
+
);
|
|
207
273
|
await Promise.all(
|
|
208
274
|
data.members.map(async (member: any) => {
|
|
209
275
|
const backoffAttributes = backOff(
|
|
210
276
|
async () => {
|
|
277
|
+
logger.log(
|
|
278
|
+
LogSource.AgoraSDK,
|
|
279
|
+
'API',
|
|
280
|
+
`RTM fetching getUserAttributesByUid for member ${member.uid}`,
|
|
281
|
+
);
|
|
211
282
|
const attr = await engine.current.getUserAttributesByUid(
|
|
212
283
|
member.uid,
|
|
213
284
|
);
|
|
214
285
|
if (!attr || !attr.attributes) {
|
|
286
|
+
logger.log(
|
|
287
|
+
LogSource.AgoraSDK,
|
|
288
|
+
'API',
|
|
289
|
+
'RTM attributes for member not found',
|
|
290
|
+
);
|
|
215
291
|
throw attr;
|
|
216
292
|
}
|
|
293
|
+
logger.log(
|
|
294
|
+
LogSource.AgoraSDK,
|
|
295
|
+
'API',
|
|
296
|
+
`RTM getUserAttributesByUid for member ${member.uid} received`,
|
|
297
|
+
{
|
|
298
|
+
attr,
|
|
299
|
+
},
|
|
300
|
+
);
|
|
217
301
|
for (const key in attr.attributes) {
|
|
218
302
|
if (
|
|
219
303
|
attr.attributes.hasOwnProperty(key) &&
|
|
@@ -227,7 +311,9 @@ const RtmConfigure = (props: any) => {
|
|
|
227
311
|
},
|
|
228
312
|
{
|
|
229
313
|
retry: (e, idx) => {
|
|
230
|
-
|
|
314
|
+
logger.debug(
|
|
315
|
+
LogSource.AgoraSDK,
|
|
316
|
+
'Log',
|
|
231
317
|
`[retrying] Attempt ${idx}. Fetching ${member.uid}'s name`,
|
|
232
318
|
e,
|
|
233
319
|
);
|
|
@@ -279,12 +365,20 @@ const RtmConfigure = (props: any) => {
|
|
|
279
365
|
}
|
|
280
366
|
}
|
|
281
367
|
} catch (e) {
|
|
282
|
-
|
|
368
|
+
logger.error(
|
|
369
|
+
LogSource.AgoraSDK,
|
|
370
|
+
'Log',
|
|
371
|
+
`Could not retrieve name of ${member.uid}`,
|
|
372
|
+
e,
|
|
373
|
+
);
|
|
283
374
|
}
|
|
284
375
|
}),
|
|
285
376
|
);
|
|
286
|
-
|
|
287
|
-
|
|
377
|
+
logger.debug(
|
|
378
|
+
LogSource.AgoraSDK,
|
|
379
|
+
'Log',
|
|
380
|
+
'RTM fetched all data and user attr...RTM init done',
|
|
381
|
+
);
|
|
288
382
|
});
|
|
289
383
|
timerValueRef.current = 5;
|
|
290
384
|
} catch (error) {
|
|
@@ -296,8 +390,10 @@ const RtmConfigure = (props: any) => {
|
|
|
296
390
|
};
|
|
297
391
|
|
|
298
392
|
const init = async () => {
|
|
393
|
+
logger.log(LogSource.AgoraSDK, 'Log', 'RTM creating engine...');
|
|
299
394
|
engine.current = RTMEngine.getInstance().engine;
|
|
300
395
|
RTMEngine.getInstance();
|
|
396
|
+
logger.log(LogSource.AgoraSDK, 'Log', 'RTM engine creation done');
|
|
301
397
|
|
|
302
398
|
engine.current.on('connectionStateChanged', (evt: any) => {
|
|
303
399
|
//console.log(evt);
|
|
@@ -306,12 +402,31 @@ const RtmConfigure = (props: any) => {
|
|
|
306
402
|
// console.log(evt);
|
|
307
403
|
});
|
|
308
404
|
engine.current.on('channelMemberJoined', (data: any) => {
|
|
405
|
+
logger.log(LogSource.AgoraSDK, 'Event', 'channelMemberJoined', data);
|
|
309
406
|
const backoffAttributes = backOff(
|
|
310
407
|
async () => {
|
|
408
|
+
logger.log(
|
|
409
|
+
LogSource.AgoraSDK,
|
|
410
|
+
'API',
|
|
411
|
+
`RTM fetching getUserAttributesByUid for member ${data.uid}`,
|
|
412
|
+
);
|
|
311
413
|
const attr = await engine.current.getUserAttributesByUid(data.uid);
|
|
312
414
|
if (!attr || !attr.attributes) {
|
|
415
|
+
logger.log(
|
|
416
|
+
LogSource.AgoraSDK,
|
|
417
|
+
'API',
|
|
418
|
+
'RTM attributes for member not found',
|
|
419
|
+
);
|
|
313
420
|
throw attr;
|
|
314
421
|
}
|
|
422
|
+
logger.log(
|
|
423
|
+
LogSource.AgoraSDK,
|
|
424
|
+
'API',
|
|
425
|
+
`RTM getUserAttributesByUid for member ${data.uid} received`,
|
|
426
|
+
{
|
|
427
|
+
attr,
|
|
428
|
+
},
|
|
429
|
+
);
|
|
315
430
|
for (const key in attr.attributes) {
|
|
316
431
|
if (attr.attributes.hasOwnProperty(key) && attr.attributes[key]) {
|
|
317
432
|
return attr;
|
|
@@ -322,7 +437,9 @@ const RtmConfigure = (props: any) => {
|
|
|
322
437
|
},
|
|
323
438
|
{
|
|
324
439
|
retry: (e, idx) => {
|
|
325
|
-
|
|
440
|
+
logger.debug(
|
|
441
|
+
LogSource.AgoraSDK,
|
|
442
|
+
'Log',
|
|
326
443
|
`[retrying] Attempt ${idx}. Fetching ${data.uid}'s name`,
|
|
327
444
|
e,
|
|
328
445
|
);
|
|
@@ -356,14 +473,19 @@ const RtmConfigure = (props: any) => {
|
|
|
356
473
|
updateRenderListState(screenUid, screenShareUser);
|
|
357
474
|
//end - updating screenshare data in rtc
|
|
358
475
|
} catch (e) {
|
|
359
|
-
|
|
476
|
+
logger.error(
|
|
477
|
+
LogSource.AgoraSDK,
|
|
478
|
+
'Event',
|
|
479
|
+
`Failed to retrive name of ${data.uid}`,
|
|
480
|
+
e,
|
|
481
|
+
);
|
|
360
482
|
}
|
|
361
483
|
}
|
|
362
484
|
getname();
|
|
363
485
|
});
|
|
364
486
|
|
|
365
487
|
engine.current.on('channelMemberLeft', (data: any) => {
|
|
366
|
-
|
|
488
|
+
logger.debug(LogSource.AgoraSDK, 'Event', 'channelMemberLeft', data);
|
|
367
489
|
// Chat of left user becomes undefined. So don't cleanup
|
|
368
490
|
const uid = data?.uid ? parseInt(data?.uid) : undefined;
|
|
369
491
|
if (!uid) return;
|
|
@@ -374,12 +496,15 @@ const RtmConfigure = (props: any) => {
|
|
|
374
496
|
});
|
|
375
497
|
|
|
376
498
|
engine.current.on('messageReceived', (evt: any) => {
|
|
377
|
-
|
|
499
|
+
logger.debug(LogSource.Events, 'CUSTOM_EVENTS', 'messageReceived', evt);
|
|
378
500
|
const {peerId, ts, text} = evt;
|
|
379
501
|
const [err, msg] = safeJsonParse(text);
|
|
380
502
|
if (err) {
|
|
381
|
-
|
|
382
|
-
|
|
503
|
+
logger.error(
|
|
504
|
+
LogSource.Events,
|
|
505
|
+
'CUSTOM_EVENTS',
|
|
506
|
+
'JSON payload incorrect, Error while parsing the payload',
|
|
507
|
+
err,
|
|
383
508
|
);
|
|
384
509
|
}
|
|
385
510
|
|
|
@@ -390,22 +515,36 @@ const RtmConfigure = (props: any) => {
|
|
|
390
515
|
try {
|
|
391
516
|
eventDispatcher(msg, sender, timestamp);
|
|
392
517
|
} catch (error) {
|
|
393
|
-
|
|
518
|
+
logger.error(
|
|
519
|
+
LogSource.Events,
|
|
520
|
+
'CUSTOM_EVENTS',
|
|
521
|
+
'error while dispatching through eventDispatcher',
|
|
522
|
+
err,
|
|
523
|
+
);
|
|
394
524
|
}
|
|
395
525
|
});
|
|
396
526
|
|
|
397
527
|
engine.current.on('channelMessageReceived', evt => {
|
|
398
|
-
|
|
528
|
+
logger.debug(
|
|
529
|
+
LogSource.Events,
|
|
530
|
+
'CUSTOM_EVENTS',
|
|
531
|
+
'channelMessageReceived',
|
|
532
|
+
evt,
|
|
533
|
+
);
|
|
399
534
|
|
|
400
535
|
const {uid, channelId, text, ts} = evt;
|
|
401
536
|
//whiteboard upload
|
|
402
537
|
if (uid == 1010101) {
|
|
403
538
|
const [err, res] = safeJsonParse(text);
|
|
404
539
|
if (err) {
|
|
405
|
-
|
|
406
|
-
|
|
540
|
+
logger.error(
|
|
541
|
+
LogSource.Events,
|
|
542
|
+
'CUSTOM_EVENTS',
|
|
543
|
+
'JSON payload incorrect, Error while parsing the payload',
|
|
544
|
+
err,
|
|
407
545
|
);
|
|
408
546
|
}
|
|
547
|
+
|
|
409
548
|
if (res?.data?.data?.images) {
|
|
410
549
|
LocalEventEmitter.emit(
|
|
411
550
|
LocalEventsEnum.WHITEBOARD_FILE_UPLOAD,
|
|
@@ -415,8 +554,11 @@ const RtmConfigure = (props: any) => {
|
|
|
415
554
|
} else {
|
|
416
555
|
const [err, msg] = safeJsonParse(text);
|
|
417
556
|
if (err) {
|
|
418
|
-
|
|
419
|
-
|
|
557
|
+
logger.error(
|
|
558
|
+
LogSource.Events,
|
|
559
|
+
'CUSTOM_EVENTS',
|
|
560
|
+
'JSON payload incorrect, Error while parsing the payload',
|
|
561
|
+
err,
|
|
420
562
|
);
|
|
421
563
|
}
|
|
422
564
|
|
|
@@ -428,7 +570,12 @@ const RtmConfigure = (props: any) => {
|
|
|
428
570
|
try {
|
|
429
571
|
eventDispatcher(msg, sender, timestamp);
|
|
430
572
|
} catch (error) {
|
|
431
|
-
|
|
573
|
+
logger.error(
|
|
574
|
+
LogSource.Events,
|
|
575
|
+
'CUSTOM_EVENTS',
|
|
576
|
+
'error while dispatching through eventDispatcher',
|
|
577
|
+
error,
|
|
578
|
+
);
|
|
432
579
|
}
|
|
433
580
|
}
|
|
434
581
|
}
|
|
@@ -443,7 +590,12 @@ const RtmConfigure = (props: any) => {
|
|
|
443
590
|
await eventDispatcher(currEvt.data, currEvt.uid, currEvt.ts);
|
|
444
591
|
}
|
|
445
592
|
} catch (error) {
|
|
446
|
-
|
|
593
|
+
logger.error(
|
|
594
|
+
LogSource.Events,
|
|
595
|
+
'CUSTOM_EVENTS',
|
|
596
|
+
'error while running queue events',
|
|
597
|
+
error,
|
|
598
|
+
);
|
|
447
599
|
}
|
|
448
600
|
};
|
|
449
601
|
|
|
@@ -455,7 +607,13 @@ const RtmConfigure = (props: any) => {
|
|
|
455
607
|
sender: string,
|
|
456
608
|
ts: number,
|
|
457
609
|
) => {
|
|
458
|
-
|
|
610
|
+
logger.debug(
|
|
611
|
+
LogSource.Events,
|
|
612
|
+
'CUSTOM_EVENTS',
|
|
613
|
+
'inside eventDispatcher ',
|
|
614
|
+
data,
|
|
615
|
+
);
|
|
616
|
+
|
|
459
617
|
let evt = '',
|
|
460
618
|
value = {};
|
|
461
619
|
|
|
@@ -521,7 +679,7 @@ const RtmConfigure = (props: any) => {
|
|
|
521
679
|
await engine.current.addOrUpdateLocalUserAttributes([rtmAttribute]);
|
|
522
680
|
}
|
|
523
681
|
// Step 2: Emit the event
|
|
524
|
-
|
|
682
|
+
logger.debug(LogSource.Events, 'CUSTOM_EVENTS', 'emiting event..: ');
|
|
525
683
|
EventUtils.emitEvent(evt, source, {payload, persistLevel, sender, ts});
|
|
526
684
|
// Because async gets evaluated in a different order when in an sdk
|
|
527
685
|
if (evt === 'name') {
|
|
@@ -535,7 +693,12 @@ const RtmConfigure = (props: any) => {
|
|
|
535
693
|
}, 200);
|
|
536
694
|
}
|
|
537
695
|
} catch (error) {
|
|
538
|
-
|
|
696
|
+
logger.error(
|
|
697
|
+
LogSource.Events,
|
|
698
|
+
'CUSTOM_EVENTS',
|
|
699
|
+
'error while emiting event:',
|
|
700
|
+
error,
|
|
701
|
+
);
|
|
539
702
|
}
|
|
540
703
|
};
|
|
541
704
|
|
|
@@ -544,11 +707,12 @@ const RtmConfigure = (props: any) => {
|
|
|
544
707
|
return;
|
|
545
708
|
}
|
|
546
709
|
await RTMEngine.getInstance().destroy();
|
|
710
|
+
logger.log(LogSource.AgoraSDK, 'API', 'RTM destroy done');
|
|
547
711
|
if (isIOS() || isAndroid()) {
|
|
548
712
|
EventUtils.clear();
|
|
549
713
|
}
|
|
550
714
|
setHasUserJoinedRTM(false);
|
|
551
|
-
|
|
715
|
+
logger.debug(LogSource.AgoraSDK, 'Log', 'RTM cleanup done');
|
|
552
716
|
};
|
|
553
717
|
|
|
554
718
|
useAsyncEffect(async () => {
|
|
@@ -53,6 +53,7 @@ import {
|
|
|
53
53
|
settingPanelNameCantbeChangedInfo,
|
|
54
54
|
settingPanelNameInputLabel,
|
|
55
55
|
} from '../../src/language/default-labels/videoCallScreenLabels';
|
|
56
|
+
import {LogSource, logger} from '../logger/AppBuilderLogger';
|
|
56
57
|
|
|
57
58
|
interface EditNameProps {}
|
|
58
59
|
const EditName: React.FC = (props?: EditNameProps) => {
|
|
@@ -100,6 +101,7 @@ const EditName: React.FC = (props?: EditNameProps) => {
|
|
|
100
101
|
setSaved(false);
|
|
101
102
|
}, 2000);
|
|
102
103
|
setEditable(false);
|
|
104
|
+
logger.log(LogSource.Internals, 'NAME', `Name changed ${newName}`);
|
|
103
105
|
saveName(trimmedText ? trimmedText : username);
|
|
104
106
|
} else {
|
|
105
107
|
setEditable(true);
|
|
@@ -51,6 +51,7 @@ import {
|
|
|
51
51
|
shareRoomPSTNSubText,
|
|
52
52
|
shareRoomStartBtnText,
|
|
53
53
|
} from '../language/default-labels/shareLinkScreenLabels';
|
|
54
|
+
import {LogSource, logger} from '../logger/AppBuilderLogger';
|
|
54
55
|
|
|
55
56
|
export interface CopyMeetingInfoProps {
|
|
56
57
|
showSubLabel?: boolean;
|
|
@@ -342,7 +343,17 @@ const Share = () => {
|
|
|
342
343
|
const copyInviteButton = useString(shareRoomCopyBtnText)();
|
|
343
344
|
const history = useHistory();
|
|
344
345
|
const enterMeeting = () => {
|
|
346
|
+
logger.log(
|
|
347
|
+
LogSource.Internals,
|
|
348
|
+
'ENTER_MEETING_ROOM',
|
|
349
|
+
'user clicked on button - Start meeting',
|
|
350
|
+
);
|
|
345
351
|
if (roomId?.host) {
|
|
352
|
+
logger.log(
|
|
353
|
+
LogSource.Internals,
|
|
354
|
+
'ENTER_MEETING_ROOM',
|
|
355
|
+
'user is being navigated to meeting room',
|
|
356
|
+
);
|
|
346
357
|
history.push(roomId.host);
|
|
347
358
|
}
|
|
348
359
|
};
|
|
@@ -13,6 +13,7 @@ import React, {createContext, ReactChildren, useEffect, useState} from 'react';
|
|
|
13
13
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
14
14
|
import useMount from './useMount';
|
|
15
15
|
import {ENABLE_AUTH} from '../auth/config';
|
|
16
|
+
import {logger, LogSource} from '../logger/AppBuilderLogger';
|
|
16
17
|
|
|
17
18
|
type rememberedDevicesListEntries = Record<
|
|
18
19
|
string,
|
|
@@ -74,9 +75,16 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
|
|
|
74
75
|
useMount(() => {
|
|
75
76
|
const hydrateStore = async () => {
|
|
76
77
|
try {
|
|
78
|
+
logger.log(LogSource.Internals, 'STORE', 'hydrating store');
|
|
77
79
|
const storeString = await AsyncStorage.getItem('store');
|
|
78
80
|
if (storeString === null) {
|
|
79
81
|
await AsyncStorage.setItem('store', JSON.stringify(initStoreValue));
|
|
82
|
+
logger.log(
|
|
83
|
+
LogSource.Internals,
|
|
84
|
+
'STORE',
|
|
85
|
+
'hydrating store from initial values done',
|
|
86
|
+
initStoreValue,
|
|
87
|
+
);
|
|
80
88
|
setReady(true);
|
|
81
89
|
} else {
|
|
82
90
|
const storeFromStorage = JSON.parse(storeString);
|
|
@@ -91,11 +99,22 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
|
|
|
91
99
|
}
|
|
92
100
|
storeFromStorage['whiteboardNativeInfoToast'] = false;
|
|
93
101
|
setStore(storeFromStorage);
|
|
102
|
+
logger.log(
|
|
103
|
+
LogSource.Internals,
|
|
104
|
+
'STORE',
|
|
105
|
+
'hydrating store from already stored values done',
|
|
106
|
+
storeFromStorage,
|
|
107
|
+
);
|
|
94
108
|
setReady(true);
|
|
95
109
|
}
|
|
96
110
|
setReady(true);
|
|
97
111
|
} catch (e) {
|
|
98
|
-
|
|
112
|
+
logger.error(
|
|
113
|
+
LogSource.Internals,
|
|
114
|
+
'STORE',
|
|
115
|
+
'problem hydrating store',
|
|
116
|
+
e,
|
|
117
|
+
);
|
|
99
118
|
}
|
|
100
119
|
};
|
|
101
120
|
hydrateStore();
|
|
@@ -115,8 +134,19 @@ export const StorageProvider = (props: {children: React.ReactNode}) => {
|
|
|
115
134
|
tempStore['token'] = null;
|
|
116
135
|
}
|
|
117
136
|
await AsyncStorage.setItem('store', JSON.stringify(tempStore));
|
|
137
|
+
logger.log(
|
|
138
|
+
LogSource.Internals,
|
|
139
|
+
'STORE',
|
|
140
|
+
'syncing storage done',
|
|
141
|
+
tempStore,
|
|
142
|
+
);
|
|
118
143
|
} catch (e) {
|
|
119
|
-
|
|
144
|
+
logger.error(
|
|
145
|
+
LogSource.Internals,
|
|
146
|
+
'STORE',
|
|
147
|
+
'problem syncing the store',
|
|
148
|
+
e,
|
|
149
|
+
);
|
|
120
150
|
}
|
|
121
151
|
};
|
|
122
152
|
ready && syncStore();
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
multiplePublicAndPrivateChatToastSubHeading,
|
|
39
39
|
multiplePublicChatToastSubHeading,
|
|
40
40
|
} from '../../language/default-labels/videoCallScreenLabels';
|
|
41
|
+
import {LogSource, logger} from '../../logger/AppBuilderLogger';
|
|
41
42
|
|
|
42
43
|
enum ChatMessageActionEnum {
|
|
43
44
|
Create = 'Create_Chat_Message',
|
|
@@ -463,7 +464,12 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
463
464
|
lastMessageTimeStamp: new Date().getTime(),
|
|
464
465
|
});
|
|
465
466
|
} catch (error) {
|
|
466
|
-
|
|
467
|
+
logger.error(
|
|
468
|
+
LogSource.Internals,
|
|
469
|
+
'CHAT',
|
|
470
|
+
'ERROR : couldnt update the last message timestamp',
|
|
471
|
+
error,
|
|
472
|
+
);
|
|
467
473
|
}
|
|
468
474
|
showMessageNotification(messageData.msg, `${data.sender}`, true);
|
|
469
475
|
addMessageToPrivateStore(
|
|
@@ -605,6 +611,13 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
605
611
|
|
|
606
612
|
const sendChatMessage = (msg: string, toUid?: UidType) => {
|
|
607
613
|
if (typeof msg == 'string' && msg.trim() === '') return;
|
|
614
|
+
logger.log(
|
|
615
|
+
LogSource.Internals,
|
|
616
|
+
'CHAT',
|
|
617
|
+
`sending ${toUid ? 'private' : 'public'} chat message -> ${msg} ${
|
|
618
|
+
toUid ? toUid : ''
|
|
619
|
+
}`,
|
|
620
|
+
);
|
|
608
621
|
if (toUid) {
|
|
609
622
|
const messageData = {
|
|
610
623
|
msg,
|
|
@@ -643,6 +656,15 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
643
656
|
|
|
644
657
|
const editChatMessage = (msgId: string, msg: string, toUid?: UidType) => {
|
|
645
658
|
if (typeof msg == 'string' && msg.trim() === '') return;
|
|
659
|
+
logger.log(
|
|
660
|
+
LogSource.Internals,
|
|
661
|
+
'CHAT',
|
|
662
|
+
`editing ${toUid ? 'private' : 'public'} chat message..`,
|
|
663
|
+
{
|
|
664
|
+
msgId,
|
|
665
|
+
msg,
|
|
666
|
+
},
|
|
667
|
+
);
|
|
646
668
|
if (toUid) {
|
|
647
669
|
const checkData = privateMessageStore[toUid].filter(
|
|
648
670
|
item => item.msgId === msgId && item.uid === localUid,
|
|
@@ -671,7 +693,15 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
671
693
|
return newState;
|
|
672
694
|
});
|
|
673
695
|
} else {
|
|
674
|
-
|
|
696
|
+
logger.debug(
|
|
697
|
+
LogSource.Internals,
|
|
698
|
+
'CHAT',
|
|
699
|
+
"You don't have permission to edit",
|
|
700
|
+
{
|
|
701
|
+
msgId,
|
|
702
|
+
msg,
|
|
703
|
+
},
|
|
704
|
+
);
|
|
675
705
|
}
|
|
676
706
|
} else {
|
|
677
707
|
//check if user has permission to edit
|
|
@@ -699,12 +729,28 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
699
729
|
return newState;
|
|
700
730
|
});
|
|
701
731
|
} else {
|
|
702
|
-
|
|
732
|
+
logger.debug(
|
|
733
|
+
LogSource.Internals,
|
|
734
|
+
'CHAT',
|
|
735
|
+
"You don't have permission to edit",
|
|
736
|
+
{
|
|
737
|
+
msgId,
|
|
738
|
+
msg,
|
|
739
|
+
},
|
|
740
|
+
);
|
|
703
741
|
}
|
|
704
742
|
}
|
|
705
743
|
};
|
|
706
744
|
|
|
707
745
|
const deleteChatMessage = (msgId: string, toUid?: UidType) => {
|
|
746
|
+
logger.log(
|
|
747
|
+
LogSource.Internals,
|
|
748
|
+
'CHAT',
|
|
749
|
+
`deleting ${toUid ? 'private' : 'public'} chat message..`,
|
|
750
|
+
{
|
|
751
|
+
msgId,
|
|
752
|
+
},
|
|
753
|
+
);
|
|
708
754
|
if (toUid) {
|
|
709
755
|
const checkData = privateMessageStore[toUid].filter(
|
|
710
756
|
item => item.msgId === msgId && item.uid === localUid,
|
|
@@ -733,7 +779,14 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
733
779
|
return newState;
|
|
734
780
|
});
|
|
735
781
|
} else {
|
|
736
|
-
|
|
782
|
+
logger.debug(
|
|
783
|
+
LogSource.Internals,
|
|
784
|
+
'CHAT',
|
|
785
|
+
"You don't have permission to delete",
|
|
786
|
+
{
|
|
787
|
+
msgId,
|
|
788
|
+
},
|
|
789
|
+
);
|
|
737
790
|
}
|
|
738
791
|
} else {
|
|
739
792
|
//check if user has permission to delete
|
|
@@ -761,7 +814,14 @@ const ChatMessagesProvider = (props: ChatMessagesProviderProps) => {
|
|
|
761
814
|
return newState;
|
|
762
815
|
});
|
|
763
816
|
} else {
|
|
764
|
-
|
|
817
|
+
logger.debug(
|
|
818
|
+
LogSource.Internals,
|
|
819
|
+
'CHAT',
|
|
820
|
+
"You don't have permission to delete",
|
|
821
|
+
{
|
|
822
|
+
msgId,
|
|
823
|
+
},
|
|
824
|
+
);
|
|
765
825
|
}
|
|
766
826
|
}
|
|
767
827
|
};
|
|
@@ -4,6 +4,7 @@ import {UidType} from '../../../agora-rn-uikit';
|
|
|
4
4
|
import {useContent} from 'customization-api';
|
|
5
5
|
import {createHook} from 'customization-implementation';
|
|
6
6
|
import {filterObject} from '../../utils';
|
|
7
|
+
import {LogSource, logger} from '../../logger/AppBuilderLogger';
|
|
7
8
|
|
|
8
9
|
export interface WaitingRoomContextInterface {
|
|
9
10
|
waitingRoomUids: UidType[];
|
|
@@ -29,7 +30,10 @@ const WaitingRoomProvider = ({children}) => {
|
|
|
29
30
|
v?.type === 'rtc' && !v.offline && v?.isInWaitingRoom === true,
|
|
30
31
|
),
|
|
31
32
|
).map(Number);
|
|
32
|
-
|
|
33
|
+
logger.debug(LogSource.Internals, 'WAITING_ROOM', 'users in waiting room', {
|
|
34
|
+
uids,
|
|
35
|
+
defaultContent,
|
|
36
|
+
});
|
|
33
37
|
|
|
34
38
|
setwaitingRoomUids(uids);
|
|
35
39
|
}, [defaultContent]);
|
|
@@ -26,6 +26,7 @@ import isMobileOrTablet from '../../utils/isMobileOrTablet';
|
|
|
26
26
|
import {isWebInternal} from '../../utils/common';
|
|
27
27
|
import useSetName from '../../utils/useSetName';
|
|
28
28
|
import {useUserPreference} from '../useUserPreference';
|
|
29
|
+
import {LogSource, logger} from '../../logger/AppBuilderLogger';
|
|
29
30
|
|
|
30
31
|
const audio = new Audio(
|
|
31
32
|
'https://dl.dropboxusercontent.com/s/1cdwpm3gca9mlo0/kick.mp3',
|
|
@@ -59,6 +60,11 @@ const JoinCallBtn = (props: PreCallJoinCallBtnProps) => {
|
|
|
59
60
|
);
|
|
60
61
|
|
|
61
62
|
const onSubmit = () => {
|
|
63
|
+
logger.log(
|
|
64
|
+
LogSource.Internals,
|
|
65
|
+
'PRECALL_SCREEN',
|
|
66
|
+
'User clicked on join call button. setting call active to true',
|
|
67
|
+
);
|
|
62
68
|
setUsername(username.trim());
|
|
63
69
|
setCallActive(true);
|
|
64
70
|
//updating name in the backend
|