@@ -21,6 +21,8 @@ import AutoConfig from "./AutoConfig";
21
21
import { ScrollStopper } from "./ScrollStopper" ;
22
22
import { isLocalNetwork } from "./NetworkUtils" ;
23
23
import { ScreenRecorder } from "./ScreenRecorder" ;
24
+ import GleapConsoleLogManager from "./GleapConsoleLogManager" ;
25
+ import GleapCrashDetector from "./GleapCrashDetector" ;
24
26
25
27
if ( typeof HTMLCanvasElement !== "undefined" && HTMLCanvasElement . prototype ) {
26
28
HTMLCanvasElement . prototype . __originalGetContext =
@@ -53,11 +55,9 @@ class Gleap {
53
55
screenshot = null ;
54
56
autostartDrawing = false ;
55
57
actionLog = [ ] ;
56
- logArray = [ ] ;
57
58
customData = { } ;
58
59
formData = { } ;
59
60
excludeData = { } ;
60
- logMaxLength = 500 ;
61
61
buttonType = Gleap . FEEDBACK_BUTTON_NONE ;
62
62
feedbackType = "BUG" ;
63
63
sessionStart = new Date ( ) ;
@@ -197,7 +197,7 @@ class Gleap {
197
197
oldSession . gleapHash = gleapHash ;
198
198
199
199
saveToGleapCache ( `session-${ sdkKey } ` , oldSession ) ;
200
- } catch ( exp ) { }
200
+ } catch ( exp ) { }
201
201
}
202
202
203
203
const sessionInstance = Session . getInstance ( ) ;
@@ -209,7 +209,7 @@ class Gleap {
209
209
. then ( function ( ) {
210
210
instance . postInit ( ) ;
211
211
} )
212
- . catch ( function ( err ) { } ) ;
212
+ . catch ( function ( err ) { } ) ;
213
213
} , 0 ) ;
214
214
} ) ;
215
215
sessionInstance . startSession ( ) ;
@@ -477,7 +477,7 @@ class Gleap {
477
477
/**
478
478
* Enable Intercom compatibility mode
479
479
*/
480
- static enableIntercomCompatibilityMode ( ) { }
480
+ static enableIntercomCompatibilityMode ( ) { }
481
481
482
482
/**
483
483
* Show or hide the feedback button
@@ -539,13 +539,13 @@ class Gleap {
539
539
* Enables the privacy policy.
540
540
* @param {boolean } enabled
541
541
*/
542
- static enablePrivacyPolicy ( enabled ) { }
542
+ static enablePrivacyPolicy ( enabled ) { }
543
543
544
544
/**
545
545
* Sets the privacy policy url.
546
546
* @param {string } privacyPolicyUrl
547
547
*/
548
- static setPrivacyPolicyUrl ( privacyPolicyUrl ) { }
548
+ static setPrivacyPolicyUrl ( privacyPolicyUrl ) { }
549
549
550
550
/**
551
551
* Sets the widget info texts.
@@ -833,12 +833,11 @@ class Gleap {
833
833
instance . overrideLanguage ,
834
834
instance . customLogoUrl ,
835
835
instance . poweredByHidden ,
836
- function ( ) { } ,
836
+ function ( ) { } ,
837
837
`${ translateText (
838
838
"Hi" ,
839
839
instance . overrideLanguage
840
- ) } <span id="bb-user-name">${ displayUserName } </span> ${
841
- instance . welcomeIcon
840
+ ) } <span id="bb-user-name">${ displayUserName } </span> ${ instance . welcomeIcon
842
841
} `,
843
842
translateText (
844
843
instance . widgetInfo . dialogSubtitle ,
@@ -913,7 +912,7 @@ class Gleap {
913
912
// Deep copy to prevent changes.
914
913
try {
915
914
feedbackOptions = JSON . parse ( JSON . stringify ( feedbackOptions ) ) ;
916
- } catch ( e ) { }
915
+ } catch ( e ) { }
917
916
918
917
return feedbackOptions ;
919
918
}
@@ -970,16 +969,16 @@ class Gleap {
970
969
971
970
const emailFormItem =
972
971
feedbackOptions . collectEmail === true ||
973
- feedbackOptions . collectEmail === undefined
972
+ feedbackOptions . collectEmail === undefined
974
973
? {
975
- title : "Email" ,
976
- placeholder : "Your e-mail" ,
977
- type : "text" ,
978
- inputtype : "email" ,
979
- name : "reportedBy" ,
980
- required : true ,
981
- remember : true ,
982
- }
974
+ title : "Email" ,
975
+ placeholder : "Your e-mail" ,
976
+ type : "text" ,
977
+ inputtype : "email" ,
978
+ name : "reportedBy" ,
979
+ required : true ,
980
+ remember : true ,
981
+ }
983
982
: null ;
984
983
985
984
// Collect email when user needs to enter it.
@@ -1087,114 +1086,8 @@ class Gleap {
1087
1086
}
1088
1087
}
1089
1088
1090
- startCrashDetection ( ) {
1091
- const self = this ;
1092
- window . onerror = function ( msg , url , lineNo , columnNo , error ) {
1093
- var stackTrace = "" ;
1094
- if ( error !== null && typeof error . stack !== "undefined" ) {
1095
- stackTrace = error . stack ;
1096
- }
1097
- var message = [
1098
- "Message: " + msg ,
1099
- "URL: " + url ,
1100
- "Line: " + lineNo ,
1101
- "Column: " + columnNo ,
1102
- "Stack: " + stackTrace ,
1103
- ] ;
1104
- self . addLog ( message , "ERROR" ) ;
1105
-
1106
- if (
1107
- self . enabledCrashDetector &&
1108
- ! self . appCrashDetected &&
1109
- ! self . currentlySendingBug
1110
- ) {
1111
- self . appCrashDetected = true ;
1112
- if ( self . enabledCrashDetectorSilent ) {
1113
- return Gleap . sendSilentReport (
1114
- {
1115
- errorMessage : msg ,
1116
- url : url ,
1117
- lineNo : lineNo ,
1118
- columnNo : columnNo ,
1119
- stackTrace : stackTrace ,
1120
- } ,
1121
- Gleap . PRIORITY_MEDIUM ,
1122
- "CRASH" ,
1123
- {
1124
- screenshot : true ,
1125
- replays : true ,
1126
- }
1127
- ) ;
1128
- } else {
1129
- Gleap . startFeedbackFlow ( "crash" ) ;
1130
- }
1131
- }
1132
-
1133
- return false ;
1134
- } ;
1135
- }
1136
-
1137
- truncateString ( str , num ) {
1138
- if ( str . length > num ) {
1139
- return str . slice ( 0 , num ) + "..." ;
1140
- } else {
1141
- return str ;
1142
- }
1143
- }
1144
-
1145
- addLog ( args , priority ) {
1146
- if ( ! args ) {
1147
- return ;
1148
- }
1149
-
1150
- var log = "" ;
1151
- for ( var i = 0 ; i < args . length ; i ++ ) {
1152
- log += args [ i ] + " " ;
1153
- }
1154
- this . logArray . push ( {
1155
- log : this . truncateString ( log , 1000 ) ,
1156
- date : new Date ( ) ,
1157
- priority,
1158
- } ) ;
1159
-
1160
- if ( this . logArray . length > this . logMaxLength ) {
1161
- this . logArray . shift ( ) ;
1162
- }
1163
- }
1164
-
1165
1089
static disableConsoleLogOverwrite ( ) {
1166
- window . console = this . getInstance ( ) . originalConsoleLog ;
1167
- }
1168
-
1169
- overwriteConsoleLog ( ) {
1170
- const self = this ;
1171
- window . console = ( function ( origConsole ) {
1172
- if ( ! window . console || ! origConsole ) {
1173
- origConsole = { } ;
1174
- }
1175
-
1176
- self . originalConsoleLog = origConsole ;
1177
-
1178
- return {
1179
- ...origConsole ,
1180
- log : function ( ) {
1181
- self . addLog ( arguments , "INFO" ) ;
1182
- origConsole . log && origConsole . log . apply ( origConsole , arguments ) ;
1183
- } ,
1184
- warn : function ( ) {
1185
- self . addLog ( arguments , "WARNING" ) ;
1186
- origConsole . warn && origConsole . warn . apply ( origConsole , arguments ) ;
1187
- } ,
1188
- error : function ( ) {
1189
- self . addLog ( arguments , "ERROR" ) ;
1190
- origConsole . error && origConsole . error . apply ( origConsole , arguments ) ;
1191
- } ,
1192
- info : function ( v ) {
1193
- self . addLog ( arguments , "INFO" ) ;
1194
- origConsole . info && origConsole . info . apply ( origConsole , arguments ) ;
1195
- } ,
1196
- } ;
1197
- } ) ( window . console ) ;
1090
+ GleapConsoleLogManager . getInstance ( ) . stop ( ) ;
1198
1091
}
1199
1092
1200
1093
resetLoading ( resetProgress ) {
@@ -1377,10 +1270,10 @@ class Gleap {
1377
1270
reportCleanupOnClose ( ) {
1378
1271
try {
1379
1272
Gleap . enableReplays ( this . replaysEnabled ) ;
1380
- } catch ( exp ) { }
1273
+ } catch ( exp ) { }
1381
1274
try {
1382
1275
this . networkIntercepter . setStopped ( false ) ;
1383
- } catch ( exp ) { }
1276
+ } catch ( exp ) { }
1384
1277
1385
1278
this . actionToPerform = undefined ;
1386
1279
@@ -1422,8 +1315,9 @@ class Gleap {
1422
1315
}
1423
1316
1424
1317
init ( ) {
1425
- this . overwriteConsoleLog ( ) ;
1426
- this . startCrashDetection ( ) ;
1318
+ GleapConsoleLogManager . getInstance ( ) . start ( ) ;
1319
+ GleapCrashDetector . getInstance ( ) . start ( ) ;
1320
+
1427
1321
this . registerKeyboardListener ( ) ;
1428
1322
this . registerEscListener ( ) ;
1429
1323
@@ -1512,18 +1406,16 @@ class Gleap {
1512
1406
this . buttonType === Gleap . FEEDBACK_BUTTON_CLASSIC_BOTTOM ||
1513
1407
this . buttonType === Gleap . FEEDBACK_BUTTON_CLASSIC_LEFT
1514
1408
) {
1515
- elem . innerHTML = `<div class="bb-feedback-button-classic ${
1516
- this . buttonType === Gleap . FEEDBACK_BUTTON_CLASSIC_LEFT
1517
- ? "bb-feedback-button-classic--left"
1518
- : ""
1519
- } ${
1520
- this . buttonType === Gleap . FEEDBACK_BUTTON_CLASSIC_BOTTOM
1409
+ elem . innerHTML = `<div class="bb-feedback-button-classic ${ this . buttonType === Gleap . FEEDBACK_BUTTON_CLASSIC_LEFT
1410
+ ? "bb-feedback-button-classic--left"
1411
+ : ""
1412
+ } ${ this . buttonType === Gleap . FEEDBACK_BUTTON_CLASSIC_BOTTOM
1521
1413
? "bb-feedback-button-classic--bottom"
1522
1414
: ""
1523
- } ">${ translateText (
1524
- this . feedbackButtonText ,
1525
- this . overrideLanguage
1526
- ) } </div>`;
1415
+ } ">${ translateText (
1416
+ this . feedbackButtonText ,
1417
+ this . overrideLanguage
1418
+ ) } </div>`;
1527
1419
} else {
1528
1420
elem . innerHTML = `<div class="bb-feedback-button-icon">${ buttonIcon } ${ loadIcon (
1529
1421
"arrowdown" ,
@@ -1570,7 +1462,7 @@ class Gleap {
1570
1462
// Prevent shoutout from showing again.
1571
1463
try {
1572
1464
localStorage . setItem ( "bb-fto" , true ) ;
1573
- } catch ( exp ) { }
1465
+ } catch ( exp ) { }
1574
1466
1575
1467
this . notifyEvent ( "open" ) ;
1576
1468
}
@@ -1691,7 +1583,7 @@ class Gleap {
1691
1583
priority : this . severity ,
1692
1584
customData : this . customData ,
1693
1585
metaData : this . getMetaData ( ) ,
1694
- consoleLog : this . logArray ,
1586
+ consoleLog : GleapConsoleLogManager . getInstance ( ) . getLogs ( ) ,
1695
1587
networkLogs : this . networkIntercepter . getRequests ( ) ,
1696
1588
customEventLog : StreamedEvent . getInstance ( ) . eventArray ,
1697
1589
type : this . feedbackType ,
0 commit comments