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.
Files changed (79) hide show
  1. package/package.json +1 -1
  2. package/template/_package-lock.json +82 -0
  3. package/template/android/app/build.gradle +8 -0
  4. package/template/android/build.gradle +3 -0
  5. package/template/bridge/rtc/webNg/RtcEngine.ts +581 -31
  6. package/template/bridge/rtc/webNg/RtcSurfaceView.tsx +2 -1
  7. package/template/bridge/rtm/web/index.ts +2 -1
  8. package/template/customization-api/customize.ts +29 -10
  9. package/template/index.js +17 -1
  10. package/template/index.web.js +2 -2
  11. package/template/package.json +3 -0
  12. package/template/src/SDKAppWrapper.tsx +44 -2
  13. package/template/src/app-state/useNoiseSupression.native.tsx +6 -0
  14. package/template/src/app-state/useNoiseSupression.tsx +17 -0
  15. package/template/src/auth/AuthProvider.tsx +145 -8
  16. package/template/src/auth/IDPAuth.electron.tsx +2 -1
  17. package/template/src/auth/IDPAuth.tsx +8 -2
  18. package/template/src/auth/openIDPURL.native.tsx +14 -3
  19. package/template/src/auth/useTokenAuth.tsx +7 -1
  20. package/template/src/components/Controls.tsx +2 -1
  21. package/template/src/components/DeviceConfigure.tsx +67 -17
  22. package/template/src/components/Precall.tsx +21 -0
  23. package/template/src/components/RTMConfigure.tsx +188 -24
  24. package/template/src/components/SettingsView.tsx +2 -0
  25. package/template/src/components/Share.tsx +11 -0
  26. package/template/src/components/StorageContext.tsx +32 -2
  27. package/template/src/components/chat-messages/useChatMessages.tsx +65 -5
  28. package/template/src/components/contexts/WaitingRoomContext.tsx +5 -1
  29. package/template/src/components/precall/joinCallBtn.tsx +6 -0
  30. package/template/src/components/precall/usePreCall.tsx +18 -2
  31. package/template/src/components/room-info/useRoomInfo.tsx +28 -25
  32. package/template/src/components/useUserPreference.tsx +13 -2
  33. package/template/src/components/useWakeLock.tsx +18 -4
  34. package/template/src/components/virtual-background/VBCard.tsx +40 -1
  35. package/template/src/components/virtual-background/VButils.native.ts +24 -5
  36. package/template/src/components/virtual-background/VButils.ts +29 -5
  37. package/template/src/components/virtual-background/VideoPreview.tsx +11 -1
  38. package/template/src/components/virtual-background/useVB.native.tsx +19 -3
  39. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +32 -5
  40. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +38 -8
  41. package/template/src/components/whiteboard/WhiteboardView.native.tsx +37 -13
  42. package/template/src/language/useLanguage.tsx +10 -4
  43. package/template/src/logger/AppBuilderLogger.tsx +215 -0
  44. package/template/src/logger/constants.ts +18 -0
  45. package/template/src/logger/transports/agora-transport.native.ts +58 -0
  46. package/template/src/logger/transports/agora-transport.ts +28 -0
  47. package/template/src/logger/transports/customer-transport.ts +115 -0
  48. package/template/src/pages/Create.tsx +27 -2
  49. package/template/src/pages/Endcall.tsx +6 -1
  50. package/template/src/pages/Join.tsx +31 -4
  51. package/template/src/pages/VideoCall.tsx +20 -56
  52. package/template/src/pages/video-call/DefaultLayouts.ts +11 -3
  53. package/template/src/pages/video-call/SidePanelHeader.tsx +12 -2
  54. package/template/src/pages/video-call/VideoCallScreen.tsx +8 -0
  55. package/template/src/pages/video-call/VideoRenderer.tsx +6 -0
  56. package/template/src/rtm/RTMEngine.ts +5 -0
  57. package/template/src/rtm-events-api/Events.ts +70 -16
  58. package/template/src/subComponents/LayoutIconDropdown.tsx +6 -0
  59. package/template/src/subComponents/LocalAudioMute.tsx +13 -3
  60. package/template/src/subComponents/LocalEndCall.tsx +8 -3
  61. package/template/src/subComponents/LocalVideoMute.tsx +15 -1
  62. package/template/src/subComponents/SelectDevice.tsx +111 -3
  63. package/template/src/subComponents/caption/CaptionContainer.tsx +17 -2
  64. package/template/src/subComponents/caption/useSTTAPI.tsx +62 -20
  65. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +35 -5
  66. package/template/src/subComponents/caption/useTranscriptDownload.ts +12 -2
  67. package/template/src/subComponents/chat/ChatParticipants.tsx +6 -0
  68. package/template/src/subComponents/recording/useRecording.tsx +102 -15
  69. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +33 -2
  70. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +18 -2
  71. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +26 -0
  72. package/template/src/utils/axiomLogger.ts +2 -1
  73. package/template/src/utils/useCreateRoom.ts +30 -0
  74. package/template/src/utils/useFindActiveSpeaker.ts +43 -0
  75. package/template/src/utils/useFocus.tsx +8 -3
  76. package/template/src/utils/useIsLocalUserSpeaking.ts +19 -3
  77. package/template/src/utils/useJoinRoom.ts +27 -0
  78. package/template/src/utils/useLayout.tsx +9 -3
  79. package/template/src/utils/useSidePanel.tsx +14 -3
@@ -14,6 +14,7 @@ import {ILocalVideoTrack, IRemoteVideoTrack} from 'agora-rtc-sdk-ng';
14
14
  import React, {useEffect} from 'react';
15
15
  import {StyleProp, StyleSheet, ViewProps, ViewStyle} from 'react-native';
16
16
  import {RenderModeType} from './Types';
17
+ import {LogSource, logger} from '../../../src/logger/AppBuilderLogger';
17
18
 
18
19
  export interface RtcSurfaceViewProps extends ViewProps {
19
20
  canvas: {
@@ -29,7 +30,7 @@ export interface StyleProps {
29
30
  interface SurfaceViewInterface extends RtcSurfaceViewProps, StyleProps {}
30
31
 
31
32
  const RtcSurfaceView = (props: SurfaceViewInterface) => {
32
- console.log('Rtc Surface View props', props);
33
+ logger.debug(LogSource.Internals, 'LAYOUT', 'Rtc Surface View props', props);
33
34
  const {uid, renderMode} = props.canvas;
34
35
  const stream: ILocalVideoTrack | IRemoteVideoTrack =
35
36
  uid === 0
@@ -19,6 +19,7 @@ import {
19
19
  import {RtmClientEvents} from 'agora-react-native-rtm/lib/typescript/src/RtmEngine';
20
20
  import AgoraRTM, {VERSION} from 'agora-rtm-sdk';
21
21
  import RtmClient from 'agora-react-native-rtm';
22
+ import {LogSource, logger} from '../../../src/logger/AppBuilderLogger';
22
23
  // export {RtmAttribute}
23
24
  //
24
25
  interface RtmAttributePlaceholder {}
@@ -59,7 +60,7 @@ export default class RtmEngine {
59
60
  ]);
60
61
  constructor() {
61
62
  this.appId = '';
62
- console.log('Using RTM Bridge');
63
+ logger.debug(LogSource.AgoraSDK, 'Log', 'Using RTM Bridge');
63
64
  }
64
65
 
65
66
  on(event: any, listener: any) {
@@ -9,6 +9,7 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
+ import {LogSource, logger} from '../src/logger/AppBuilderLogger';
12
13
  import {CustomizationApiInterface} from './typeDefinition';
13
14
  import ReactIs from 'react-is';
14
15
  /**
@@ -58,15 +59,21 @@ function validateComponents(components: any) {
58
59
  validateComponents(comp);
59
60
  }
60
61
  } else {
61
- console.error(
62
- `Customize:Error ${key} should be a react component or object`,
62
+ logger.error(
63
+ LogSource.CustomizationAPI,
64
+ 'Log',
65
+ `Error ${key} should be a react component or object`,
63
66
  );
64
67
  }
65
68
  }
66
69
  } else {
67
70
  let comp = components[key];
68
71
  if (comp && !isFunction(comp)) {
69
- console.error(`Customize:Error ${key} should be an function`);
72
+ logger.error(
73
+ LogSource.CustomizationAPI,
74
+ 'Log',
75
+ `Error ${key} should be an function`,
76
+ );
70
77
  }
71
78
  }
72
79
  }
@@ -76,8 +83,10 @@ function validateLifecycle(data: any) {
76
83
  for (const key in data) {
77
84
  const callback = data[key];
78
85
  if (callback && !isFunction(callback)) {
79
- console.error(
80
- `Customize:Error ${key} should be a function that return async function`,
86
+ logger.error(
87
+ LogSource.CustomizationAPI,
88
+ 'Log',
89
+ `Error ${key} should be a function that return async function`,
81
90
  );
82
91
  }
83
92
  }
@@ -85,23 +94,33 @@ function validateLifecycle(data: any) {
85
94
 
86
95
  function validateCustomRoutes(routes: any) {
87
96
  if (routes && !Array.isArray(routes)) {
88
- console.error(`Customize:Error customRoutes should be an array`);
97
+ logger.error(
98
+ LogSource.CustomizationAPI,
99
+ 'Log',
100
+ 'Error customRoutes should be an array',
101
+ );
89
102
  }
90
103
  }
91
104
 
92
105
  function validatei18n(data: any) {
93
106
  if (data) {
94
107
  if (!Array.isArray(data)) {
95
- console.error(`Customize:Error i18n should be an array`);
108
+ logger.error(
109
+ LogSource.CustomizationAPI,
110
+ 'Log',
111
+ 'Error i18n should be an array',
112
+ );
96
113
  } else {
97
- data.map((item) => {
114
+ data.map(item => {
98
115
  const langData = item.data;
99
116
  for (const key in langData) {
100
117
  const value = langData[key];
101
118
  if (value) {
102
119
  if (!(isString(value) || isFunction(value))) {
103
- console.error(
104
- `Customize:Error ${item.locale} ${key} should be a string or function`,
120
+ logger.error(
121
+ LogSource.CustomizationAPI,
122
+ 'Log',
123
+ `Error ${item.locale} ${key} should be a string or function`,
105
124
  );
106
125
  }
107
126
  }
package/template/index.js CHANGED
@@ -17,5 +17,21 @@ import {AppRegistry} from 'react-native';
17
17
  import 'react-native-url-polyfill/auto';
18
18
  import App from './src/App';
19
19
  import {name as appName} from './app.json';
20
+ import React from 'react';
21
+ import {
22
+ DatadogProvider,
23
+ getConfig,
24
+ } from './src/logger/transports/agora-transport';
25
+ import {ENABLE_AGORA_LOGGER_TRANSPORT} from './src/logger/constants';
20
26
 
21
- AppRegistry.registerComponent(appName, () => App);
27
+ if (ENABLE_AGORA_LOGGER_TRANSPORT) {
28
+ const config = getConfig();
29
+ const AppWithLogs = () => (
30
+ <DatadogProvider configuration={config}>
31
+ <App />
32
+ </DatadogProvider>
33
+ );
34
+ AppRegistry.registerComponent(appName, () => AppWithLogs);
35
+ } else {
36
+ AppRegistry.registerComponent(appName, () => App);
37
+ }
@@ -9,9 +9,9 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import { AppRegistry } from 'react-native';
12
+ import {AppRegistry} from 'react-native';
13
13
  import Video from './src/App';
14
- import './src/assets/font-styles.css'
14
+ import './src/assets/font-styles.css';
15
15
 
16
16
  AppRegistry.registerComponent('App', () => Video);
17
17
 
@@ -49,6 +49,8 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "@apollo/client": "3.8.1",
52
+ "@datadog/browser-logs": "^5.15.0",
53
+ "@datadog/mobile-react-native": "^2.3.2",
52
54
  "@gorhom/bottom-sheet": "4.4.7",
53
55
  "@netless/react-native-whiteboard": "^0.0.14",
54
56
  "@openspacelabs/react-native-zoomable-view": "^2.1.1",
@@ -86,6 +88,7 @@
86
88
  "react-native-exit-app": "1.1.0",
87
89
  "react-native-fs": "^2.20.0",
88
90
  "react-native-gesture-handler": "2.8.0",
91
+ "react-native-get-random-values": "^1.11.0",
89
92
  "react-native-hyperlink": "0.0.19",
90
93
  "react-native-inappbrowser-reborn": "3.5.1",
91
94
  "react-native-keep-awake": "4.0.0",
@@ -12,6 +12,7 @@ import App from './App';
12
12
  import SdkApiContextProvider from './components/SdkApiContext';
13
13
  import {Unsubscribe} from 'nanoevents';
14
14
  import {deviceId} from './components/DeviceConfigure';
15
+ import {LogSource, logger} from './logger/AppBuilderLogger';
15
16
 
16
17
  type meetingData = Partial<RoomInfoContextInterface['data']>;
17
18
 
@@ -54,16 +55,23 @@ export interface AppBuilderSdkApiInterface {
54
55
 
55
56
  export const AppBuilderSdkApi: AppBuilderSdkApiInterface = {
56
57
  login: async (token: string) => {
58
+ logger.log(LogSource.SDK, 'Event', 'emiting event - login');
57
59
  return await SDKMethodEventsManager.emit('login', token);
58
60
  },
59
61
  logout: async () => {
62
+ logger.log(LogSource.SDK, 'Event', 'emiting event - logout');
60
63
  return await SDKMethodEventsManager.emit('logout');
61
64
  },
62
65
  customize: async customization => {
66
+ logger.log(LogSource.SDK, 'Event', 'emiting event - customize');
63
67
  return await SDKMethodEventsManager.emit('customize', customization);
64
68
  },
65
69
  customEvents: customEvents,
66
70
  joinRoom: async (roomDetails, userName) => {
71
+ logger.log(LogSource.SDK, 'Event', 'emiting event for joinRoom - join', {
72
+ room: roomDetails,
73
+ userName: userName,
74
+ });
67
75
  return await SDKMethodEventsManager.emit(
68
76
  'join',
69
77
  roomDetails,
@@ -72,8 +80,18 @@ export const AppBuilderSdkApi: AppBuilderSdkApiInterface = {
72
80
  );
73
81
  },
74
82
  joinPrecall: async (roomDetails, userName, skipPrecall) => {
75
- if (!$config.PRECALL)
83
+ logger.log(LogSource.SDK, 'Event', 'emiting event for joinPrecall - join', {
84
+ room: roomDetails,
85
+ userName: userName,
86
+ });
87
+ if (!$config.PRECALL) {
88
+ logger.error(
89
+ LogSource.SDK,
90
+ 'Log',
91
+ 'Precall disabled in config, cant join precall',
92
+ );
76
93
  throw new Error('Precall disabled in config, cant join precall');
94
+ }
77
95
  const t = await SDKMethodEventsManager.emit(
78
96
  'join',
79
97
  roomDetails,
@@ -86,23 +104,47 @@ export const AppBuilderSdkApi: AppBuilderSdkApiInterface = {
86
104
  ];
87
105
  },
88
106
  setMicrophone: async deviceId => {
107
+ logger.log(
108
+ LogSource.SDK,
109
+ 'Event',
110
+ 'emiting event - microphoneDevice',
111
+ deviceId,
112
+ );
89
113
  return await SDKMethodEventsManager.emit('microphoneDevice', deviceId);
90
114
  },
91
115
  setSpeaker: async deviceId => {
116
+ logger.log(
117
+ LogSource.SDK,
118
+ 'Event',
119
+ 'emiting event - speakerDevice',
120
+ deviceId,
121
+ );
92
122
  return await SDKMethodEventsManager.emit('speakerDevice', deviceId);
93
123
  },
94
124
  setCamera: async deviceId => {
125
+ logger.log(
126
+ LogSource.SDK,
127
+ 'Event',
128
+ 'emiting event - cameraDevice',
129
+ deviceId,
130
+ );
95
131
  return await SDKMethodEventsManager.emit('cameraDevice', deviceId);
96
132
  },
97
133
  muteAudio: async state => {
134
+ logger.log(LogSource.SDK, 'Event', 'emiting event - muteAudio', state);
98
135
  return await SDKMethodEventsManager.emit('muteAudio', state);
99
136
  },
100
137
  muteVideo: async state => {
138
+ logger.log(LogSource.SDK, 'Event', 'emiting event - muteVideo', state);
101
139
  return await SDKMethodEventsManager.emit('muteVideo', state);
102
140
  },
103
141
  createCustomization: customize,
104
142
  on: (userEventName, cb) => {
105
- console.log('SDKEvents: Event Registered', userEventName);
143
+ logger.debug(
144
+ LogSource.SDK,
145
+ 'Event',
146
+ `Event Registered for SDK event- ${userEventName}`,
147
+ );
106
148
  return SDKEvents.on(userEventName, cb);
107
149
  },
108
150
  };
@@ -1,6 +1,7 @@
1
1
  import React, {createContext, useState, useEffect} from 'react';
2
2
  import {ToggleState} from '../../agora-rn-uikit';
3
3
  import {createHook} from 'customization-implementation';
4
+ import {LogSource, logger} from '../logger/AppBuilderLogger';
4
5
 
5
6
  export interface NoiseSupressionContextInterface {
6
7
  isNoiseSupressionEnabled: ToggleState;
@@ -35,6 +36,11 @@ export function NoiseSupressionProvider(props) {
35
36
  isNoiseSupressionEnabled === ToggleState.disabling ||
36
37
  isNoiseSupressionEnabled === ToggleState.enabling
37
38
  ) {
39
+ logger.error(
40
+ LogSource.Internals,
41
+ 'NOISE_CANCELLATION',
42
+ 'Cant change noise supression, already in transition',
43
+ );
38
44
  throw new Error('Cant change noise supression, already in transition');
39
45
  }
40
46
  let stateToBeSet =
@@ -8,6 +8,7 @@ import wasm1 from './../../node_modules/agora-extension-ai-denoiser/external/den
8
8
  //@ts-ignore
9
9
  import wasm2 from './../../node_modules/agora-extension-ai-denoiser/external/denoiser-wasm-simd.wasm';
10
10
  import {createHook} from 'customization-implementation';
11
+ import {LogSource, logger} from '../logger/AppBuilderLogger';
11
12
  // Necessary To bypass treeshaking, dont remove
12
13
  console.log('wasm files loaded are', wasm1, wasm2);
13
14
 
@@ -59,13 +60,24 @@ export function NoiseSupressionProvider(props) {
59
60
  localAudioTrack
60
61
  ?.pipe(processor.current)
61
62
  .pipe(localAudioTrack?.processorDestination);
63
+
62
64
  await processor?.current?.enable();
65
+ logger.log(
66
+ LogSource.Internals,
67
+ 'NOISE_CANCELLATION',
68
+ 'noise suppression enabled',
69
+ );
63
70
  }
64
71
  };
65
72
 
66
73
  const disableNoiseSuppression = async () => {
67
74
  if (processor?.current) {
68
75
  await processor?.current?.disable();
76
+ logger.log(
77
+ LogSource.Internals,
78
+ 'NOISE_CANCELLATION',
79
+ 'noise suppression disabled',
80
+ );
69
81
  }
70
82
  };
71
83
 
@@ -75,6 +87,11 @@ export function NoiseSupressionProvider(props) {
75
87
  isNoiseSupressionEnabled === ToggleState.disabling ||
76
88
  isNoiseSupressionEnabled === ToggleState.enabling
77
89
  ) {
90
+ logger.error(
91
+ LogSource.Internals,
92
+ 'NOISE_CANCELLATION',
93
+ 'Cant change noise supression, already in transition',
94
+ );
78
95
  throw new Error('Cant change noise supression, already in transition');
79
96
  }
80
97
  let stateToBeSet =
@@ -37,6 +37,7 @@ import {
37
37
  authSessionTimeoutToastHeading,
38
38
  loadingText,
39
39
  } from '../language/default-labels/commonLabels';
40
+ import {LogSource, logger} from '../logger/AppBuilderLogger';
40
41
 
41
42
  export const GET_USER = gql`
42
43
  query getUser {
@@ -169,20 +170,37 @@ const AuthProvider = (props: AuthProviderProps) => {
169
170
  })
170
171
  .catch(() => {
171
172
  setIsAuthenticated(false);
172
- console.log('debugging error on IDP token setting');
173
+ logger.error(
174
+ LogSource.Internals,
175
+ 'AUTH',
176
+ 'error on IDP token setting',
177
+ );
173
178
  });
174
179
  } else {
175
- console.log('debugging deep-linking token is empty');
180
+ logger.error(
181
+ LogSource.Internals,
182
+ 'AUTH',
183
+ 'deep-linking token is empty',
184
+ );
176
185
  history.push('/');
177
186
  }
178
187
  } else if (url?.indexOf('authorize') === -1) {
179
- console.log('debugging deep-linking setting return to');
188
+ logger.error(
189
+ LogSource.Internals,
190
+ 'AUTH',
191
+ `deep-linking setting return to - ${url}`,
192
+ );
180
193
  setReturnTo(url);
181
194
  } else {
182
195
  history.push(url);
183
196
  }
184
197
  } catch (error) {
185
- console.log('debugging deep-linking error catch');
198
+ logger.error(
199
+ LogSource.Internals,
200
+ 'AUTH',
201
+ 'deep-linking error catch',
202
+ error,
203
+ );
186
204
  history.push('/');
187
205
  }
188
206
  } else {
@@ -285,12 +303,18 @@ const AuthProvider = (props: AuthProviderProps) => {
285
303
  useEffect(() => {
286
304
  // Ignore if on sdk since IDP flow is not supported
287
305
  // For unauthenticated flow authLogin should be called to get the token
306
+ logger.log(LogSource.Internals, 'AUTH', 'App loaded');
288
307
  if (isSDK() && ENABLE_AUTH) {
289
308
  setIsAuthenticated(true);
290
309
  setLoading(false);
291
310
  return () => {};
292
311
  }
293
312
  //if application in authorization state then don't call authlogin
313
+ logger.log(
314
+ LogSource.Internals,
315
+ 'AUTH',
316
+ 'check if application is in authorized state ?',
317
+ );
294
318
  if (
295
319
  //to check authoriztion
296
320
  location?.pathname?.indexOf('authorize') === -1 &&
@@ -299,12 +323,22 @@ const AuthProvider = (props: AuthProviderProps) => {
299
323
  location?.search?.indexOf('msg') === -1
300
324
  ) {
301
325
  //fetch user details
326
+ logger.log(
327
+ LogSource.NetworkRest,
328
+ 'user_details',
329
+ 'API fetching user_details, to check if user is authenticated',
330
+ );
302
331
  getUserDetails()
303
332
  .then(_ => {
304
333
  //Each time user refresh the page we have to redirect the user to IDP login.then only we can able to refresh the token
305
334
  //because we can't read the cookie so we don't know expirytime.
306
335
  //so each time page refresh will get new token
307
336
  //then only
337
+ logger.log(
338
+ LogSource.NetworkRest,
339
+ 'user_details',
340
+ 'API user_details query succesful. User is authenticated',
341
+ );
308
342
  if (isWeb() && $config.ENABLE_IDP_AUTH) {
309
343
  //authLogin();this is for cookie based authentication
310
344
  setIsAuthenticated(true);
@@ -312,7 +346,13 @@ const AuthProvider = (props: AuthProviderProps) => {
312
346
  setIsAuthenticated(true);
313
347
  }
314
348
  })
315
- .catch(() => {
349
+ .catch(error => {
350
+ logger.error(
351
+ LogSource.NetworkRest,
352
+ 'user_details',
353
+ 'API user details query failed. User is un-authenticated',
354
+ error,
355
+ );
316
356
  setIsAuthenticated(false);
317
357
  authLogin();
318
358
  });
@@ -338,11 +378,18 @@ const AuthProvider = (props: AuthProviderProps) => {
338
378
 
339
379
  const authLogin = () => {
340
380
  // Authenticated login flow
381
+ logger.log(LogSource.Internals, 'AUTH', 'Trying to authenticate the user');
341
382
  if (ENABLE_AUTH) {
342
383
  //AUTH -> IDP -> NATIVE and WEB and DESKTOP
343
384
  if ($config.ENABLE_IDP_AUTH && !isSDK()) {
344
385
  //it will open external web link and post authentication it will redirect to application
345
386
  //@ts-ignore
387
+ logger.log(LogSource.Internals, 'AUTH', 'IDP auth enabled');
388
+ logger.log(
389
+ LogSource.NetworkRest,
390
+ 'idp_login',
391
+ 'API idp_login Trying to authenticate user',
392
+ );
346
393
  enableIDPAuth(
347
394
  isWeb()
348
395
  ? location.pathname
@@ -353,6 +400,12 @@ const AuthProvider = (props: AuthProviderProps) => {
353
400
  : '',
354
401
  timeoutHeading,
355
402
  )?.then((response: any) => {
403
+ logger.log(
404
+ LogSource.NetworkRest,
405
+ 'idp_login',
406
+ 'API idp_login authentication successful',
407
+ response,
408
+ );
356
409
  if (isAndroid() || isIOS()) {
357
410
  if (response && response?.showNativePopup) {
358
411
  setShowNativePopup(true);
@@ -364,8 +417,20 @@ const AuthProvider = (props: AuthProviderProps) => {
364
417
  }
365
418
  //AUTH -> IDP -> SDK ONLY
366
419
  else if ($config.ENABLE_TOKEN_AUTH && isSDK()) {
420
+ logger.log(LogSource.Internals, 'AUTH', 'Token auth enabled');
421
+ logger.log(
422
+ LogSource.NetworkRest,
423
+ 'token_login',
424
+ 'API token_login Trying to authenticate user',
425
+ );
367
426
  enableTokenAuth()
368
427
  .then(res => {
428
+ logger.log(
429
+ LogSource.NetworkRest,
430
+ 'token_login',
431
+ 'API token_login User Authenticated successfully',
432
+ res,
433
+ );
369
434
  setIsAuthenticated(true);
370
435
  history.push('/create');
371
436
  })
@@ -373,6 +438,12 @@ const AuthProvider = (props: AuthProviderProps) => {
373
438
  //don't show token expire/not found toast in the sdk
374
439
  //we have event emitter to inform the customer application
375
440
  //they have to listen for those events
441
+ logger.error(
442
+ LogSource.NetworkRest,
443
+ 'token_login',
444
+ 'API token_login failed. There was an error',
445
+ error,
446
+ );
376
447
  if (!isSDK()) {
377
448
  if (error instanceof Error) {
378
449
  setAuthError(error.message);
@@ -388,6 +459,16 @@ const AuthProvider = (props: AuthProviderProps) => {
388
459
  }
389
460
  // Unauthenticated login flow
390
461
  else {
462
+ logger.log(
463
+ LogSource.Internals,
464
+ 'AUTH',
465
+ 'Project has No auth(token or idp) enabled',
466
+ );
467
+ logger.log(
468
+ LogSource.NetworkRest,
469
+ 'unauth_login',
470
+ 'API unauth_login Trying to authenticate user',
471
+ );
391
472
  fetch(GET_UNAUTH_FLOW_API_ENDPOINT(), {
392
473
  credentials: 'include',
393
474
  })
@@ -395,7 +476,21 @@ const AuthProvider = (props: AuthProviderProps) => {
395
476
  .then(response => {
396
477
  // unauthenticated flow all platform we will have to handle the token manually
397
478
  // we need to store token manually
479
+ logger.log(
480
+ LogSource.NetworkRest,
481
+ 'unauth_login',
482
+ 'API unauth_login authentication successful. User is logged in.',
483
+ response.token,
484
+ );
398
485
  if (!response.token) {
486
+ logger.error(
487
+ LogSource.NetworkRest,
488
+ 'unauth_login',
489
+ 'API unauth_login failed. There was an error',
490
+ {
491
+ data: 'Token not received',
492
+ },
493
+ );
399
494
  throw new Error('Token not received');
400
495
  } else {
401
496
  enableTokenAuth(response.token)
@@ -418,6 +513,12 @@ const AuthProvider = (props: AuthProviderProps) => {
418
513
  }
419
514
  })
420
515
  .catch(error => {
516
+ logger.error(
517
+ LogSource.NetworkRest,
518
+ 'unauth_login',
519
+ 'API unauth_login failed. There was an error',
520
+ error,
521
+ );
421
522
  if (error instanceof Error) {
422
523
  setAuthError(error.message);
423
524
  } else {
@@ -430,12 +531,30 @@ const AuthProvider = (props: AuthProviderProps) => {
430
531
 
431
532
  const authLogout = () => {
432
533
  if (ENABLE_AUTH && $config.ENABLE_IDP_AUTH && !isSDK()) {
534
+ logger.log(LogSource.Internals, 'AUTH', 'Request to log out');
535
+ logger.log(
536
+ LogSource.NetworkRest,
537
+ 'idp_logout',
538
+ 'API idp_logout Trying to log out IDP authenticated user',
539
+ );
433
540
  idpLogout(isAndroid() || isIOS() ? setShowNativePopup : {})
434
541
  .then(res => {
542
+ logger.log(
543
+ LogSource.NetworkRest,
544
+ 'idp_logout',
545
+ 'API idp_logout User logged out successfully',
546
+ res,
547
+ );
435
548
  setIsAuthenticated(false);
436
549
  })
437
- .catch(() => {
550
+ .catch(error => {
438
551
  setIsAuthenticated(false);
552
+ logger.error(
553
+ LogSource.NetworkRest,
554
+ 'idp_logout',
555
+ 'API idp_logout failed. There was an error',
556
+ error,
557
+ );
439
558
  console.error('user logout failed');
440
559
  setAuthError('Error occured on Logout, please try again.');
441
560
  setTimeout(() => {
@@ -449,10 +568,28 @@ const AuthProvider = (props: AuthProviderProps) => {
449
568
  //sdk with auth flow will use sdk api for logout
450
569
  history.push('/create');
451
570
  } else {
571
+ logger.log(LogSource.Internals, 'AUTH', 'Request to log out');
572
+ logger.log(
573
+ LogSource.NetworkRest,
574
+ 'token_logout',
575
+ 'API token_logout Trying to log out token authenticated user',
576
+ );
452
577
  tokenLogout()
453
- .then(res => {})
454
- .catch(() => {
578
+ .then(res => {
579
+ logger.log(
580
+ LogSource.NetworkRest,
581
+ 'token_logout',
582
+ 'API token_logout. Logged out user successfully',
583
+ );
584
+ })
585
+ .catch(error => {
455
586
  console.error('user logout failed');
587
+ logger.error(
588
+ LogSource.NetworkRest,
589
+ 'token_logout',
590
+ 'API token_logout failed. There was an error',
591
+ error,
592
+ );
456
593
  setAuthError('Error occured on Logout, please try again.');
457
594
  })
458
595
  .finally(() => {
@@ -5,6 +5,7 @@ import Loading from '../subComponents/Loading';
5
5
  import useTokenAuth from './useTokenAuth';
6
6
  import {useString} from '../utils/useString';
7
7
  import {authAuthorizingApplicationText} from '../language/default-labels/commonLabels';
8
+ import {LogSource, logger} from '../logger/AppBuilderLogger';
8
9
 
9
10
  export const IDPAuth = () => {
10
11
  const {setIsAuthenticated} = useAuth();
@@ -22,7 +23,7 @@ export const IDPAuth = () => {
22
23
  })
23
24
  .catch(() => {
24
25
  setIsAuthenticated(false);
25
- console.log('debugging electron login failed');
26
+ logger.error(LogSource.Internals, 'AUTH', 'electron login failed');
26
27
  });
27
28
  }
28
29
  }, []);
@@ -11,6 +11,7 @@ import {
11
11
  authAuthorizingApplicationText,
12
12
  authErrorOnLoginToastHeading,
13
13
  } from '../language/default-labels/commonLabels';
14
+ import {LogSource, logger} from '../logger/AppBuilderLogger';
14
15
 
15
16
  export const IDPAuth = () => {
16
17
  const toastheading = useString(authErrorOnLoginToastHeading)();
@@ -45,9 +46,14 @@ export const IDPAuth = () => {
45
46
  history.push('/');
46
47
  }
47
48
  })
48
- .catch(() => {
49
+ .catch(error => {
49
50
  setIsAuthenticated(false);
50
- console.log('debugging error on IDP token setting');
51
+ logger.error(
52
+ LogSource.Internals,
53
+ 'AUTH',
54
+ 'error on IDP token setting',
55
+ error,
56
+ );
51
57
  });
52
58
  } else {
53
59
  setIsAuthenticated(false);