@@ -262,6 +262,43 @@ var constructor = function () {
262262
263263 self . domain = domain ;
264264
265+ // Register reporting services with the core SDK
266+ var reportingConfig = {
267+ loggingUrl : settings . loggingUrl ,
268+ errorUrl : settings . errorUrl ,
269+ isLoggingEnabled :
270+ settings . isLoggingEnabled === 'true' ||
271+ settings . isLoggingEnabled === true ,
272+ } ;
273+ var errorReportingService = new ErrorReportingService (
274+ reportingConfig ,
275+ self . integrationName ,
276+ window . __rokt_li_guid__ ,
277+ settings . accountId
278+ ) ;
279+ var loggingService = new LoggingService (
280+ reportingConfig ,
281+ errorReportingService ,
282+ self . integrationName ,
283+ window . __rokt_li_guid__ ,
284+ settings . accountId
285+ ) ;
286+
287+ self . errorReportingService = errorReportingService ;
288+ self . loggingService = loggingService ;
289+
290+ if (
291+ window . mParticle &&
292+ window . mParticle . _registerErrorReportingService
293+ ) {
294+ window . mParticle . _registerErrorReportingService (
295+ errorReportingService
296+ ) ;
297+ }
298+ if ( window . mParticle && window . mParticle . _registerLoggingService ) {
299+ window . mParticle . _registerLoggingService ( loggingService ) ;
300+ }
301+
265302 if ( testMode ) {
266303 self . testHelpers = {
267304 generateLauncherScript : generateLauncherScript ,
@@ -277,6 +314,12 @@ var constructor = function () {
277314 setAllowedOriginHashes : function ( hashes ) {
278315 _allowedOriginHashes = hashes ;
279316 } ,
317+ ReportingTransport : ReportingTransport ,
318+ ErrorReportingService : ErrorReportingService ,
319+ LoggingService : LoggingService ,
320+ RateLimiter : RateLimiter ,
321+ ErrorCodes : ErrorCodes ,
322+ WSDKErrorSeverity : WSDKErrorSeverity ,
280323 } ;
281324 attachLauncher ( accountId , launcherOptions ) ;
282325 return ;
@@ -877,7 +920,7 @@ var constructor = function () {
877920
878921function generateIntegrationName ( customIntegrationName ) {
879922 var coreSdkVersion = window . mParticle . getVersion ( ) ;
880- var kitVersion = "1.21 .0" ;
923+ var kitVersion = "1.22 .0" ;
881924 var name = 'mParticle_' + 'wsdkv_' + coreSdkVersion + '_kitv_' + kitVersion ;
882925
883926 if ( customIntegrationName ) {
@@ -987,6 +1030,225 @@ function isString(value) {
9871030 return typeof value === 'string' ;
9881031}
9891032
1033+ // --- Reporting Services ---
1034+
1035+ var ErrorCodes = {
1036+ UNKNOWN_ERROR : 'UNKNOWN_ERROR' ,
1037+ UNHANDLED_EXCEPTION : 'UNHANDLED_EXCEPTION' ,
1038+ IDENTITY_REQUEST : 'IDENTITY_REQUEST' ,
1039+ } ;
1040+
1041+ var WSDKErrorSeverity = {
1042+ ERROR : 'ERROR' ,
1043+ INFO : 'INFO' ,
1044+ WARNING : 'WARNING' ,
1045+ } ;
1046+
1047+ var DEFAULT_LOGGING_URL = 'apps.rokt-api.com/v1/log' ;
1048+ var DEFAULT_ERROR_URL = 'apps.rokt-api.com/v1/errors' ;
1049+ var RATE_LIMIT_PER_SEVERITY = 10 ;
1050+
1051+ function RateLimiter ( ) {
1052+ this . _logCount = { } ;
1053+ }
1054+
1055+ RateLimiter . prototype . incrementAndCheck = function ( severity ) {
1056+ var count = this . _logCount [ severity ] || 0 ;
1057+ var newCount = count + 1 ;
1058+ this . _logCount [ severity ] = newCount ;
1059+ return newCount > RATE_LIMIT_PER_SEVERITY ;
1060+ } ;
1061+
1062+ // --- ReportingTransport: shared transport layer for reporting services ---
1063+
1064+ function ReportingTransport (
1065+ config ,
1066+ integrationName ,
1067+ launcherInstanceGuid ,
1068+ accountId ,
1069+ rateLimiter
1070+ ) {
1071+ var self = this ;
1072+ self . _isLoggingEnabled = ( config && config . isLoggingEnabled ) || false ;
1073+ self . _integrationName = integrationName || '' ;
1074+ self . _launcherInstanceGuid = launcherInstanceGuid ;
1075+ self . _accountId = accountId || null ;
1076+ self . _rateLimiter = rateLimiter || new RateLimiter ( ) ;
1077+ self . _reporter = 'mp-wsdk' ;
1078+ self . _isEnabled = _isReportingEnabled ( self ) ;
1079+ }
1080+
1081+ ReportingTransport . prototype . send = function (
1082+ url ,
1083+ severity ,
1084+ msg ,
1085+ code ,
1086+ stackTrace ,
1087+ onError
1088+ ) {
1089+ if ( ! this . _isEnabled || this . _rateLimiter . incrementAndCheck ( severity ) ) {
1090+ return ;
1091+ }
1092+
1093+ try {
1094+ var logRequest = {
1095+ additionalInformation : {
1096+ message : msg ,
1097+ version : this . _integrationName || '' ,
1098+ } ,
1099+ severity : severity ,
1100+ code : code || ErrorCodes . UNKNOWN_ERROR ,
1101+ url : _getUrl ( ) ,
1102+ deviceInfo : _getUserAgent ( ) ,
1103+ stackTrace : stackTrace ,
1104+ reporter : this . _reporter ,
1105+ integration : this . _integrationName || '' ,
1106+ } ;
1107+ var headers = {
1108+ Accept : 'text/plain;charset=UTF-8' ,
1109+ 'Content-Type' : 'application/json' ,
1110+ 'rokt-launcher-version' : this . _integrationName || '' ,
1111+ 'rokt-wsdk-version' : 'joint' ,
1112+ } ;
1113+ if ( this . _launcherInstanceGuid ) {
1114+ headers [ 'rokt-launcher-instance-guid' ] = this . _launcherInstanceGuid ;
1115+ }
1116+ if ( this . _accountId ) {
1117+ headers [ 'rokt-account-id' ] = this . _accountId ;
1118+ }
1119+ var payload = {
1120+ method : 'POST' ,
1121+ headers : headers ,
1122+ body : JSON . stringify ( logRequest ) ,
1123+ } ;
1124+ fetch ( url , payload ) . catch ( function ( error ) {
1125+ console . error ( 'ReportingTransport: Failed to send log' , error ) ;
1126+ if ( onError ) {
1127+ onError ( error ) ;
1128+ }
1129+ } ) ;
1130+ } catch ( error ) {
1131+ console . error ( 'ReportingTransport: Failed to send log' , error ) ;
1132+ if ( onError ) {
1133+ onError ( error ) ;
1134+ }
1135+ }
1136+ } ;
1137+
1138+ function _isReportingEnabled ( transport ) {
1139+ return (
1140+ _isDebugModeEnabled ( ) ||
1141+ ( _isRoktDomainPresent ( ) && transport . _isLoggingEnabled )
1142+ ) ;
1143+ }
1144+
1145+ function _isRoktDomainPresent ( ) {
1146+ return typeof window !== 'undefined' && Boolean ( window [ 'ROKT_DOMAIN' ] ) ;
1147+ }
1148+
1149+ function _isDebugModeEnabled ( ) {
1150+ return (
1151+ typeof window !== 'undefined' &&
1152+ window . location &&
1153+ window . location . search &&
1154+ window . location . search
1155+ . toLowerCase ( )
1156+ . indexOf ( 'mp_enable_logging=true' ) !== - 1
1157+ ) ;
1158+ }
1159+
1160+ function _getUrl ( ) {
1161+ return typeof window !== 'undefined' && window . location
1162+ ? window . location . href
1163+ : undefined ;
1164+ }
1165+
1166+ function _getUserAgent ( ) {
1167+ return typeof window !== 'undefined' && window . navigator
1168+ ? window . navigator . userAgent
1169+ : undefined ;
1170+ }
1171+
1172+ // --- ErrorReportingService: handles ERROR and WARNING severity ---
1173+
1174+ function ErrorReportingService (
1175+ config ,
1176+ integrationName ,
1177+ launcherInstanceGuid ,
1178+ accountId ,
1179+ rateLimiter
1180+ ) {
1181+ this . _transport = new ReportingTransport (
1182+ config ,
1183+ integrationName ,
1184+ launcherInstanceGuid ,
1185+ accountId ,
1186+ rateLimiter
1187+ ) ;
1188+ this . _errorUrl =
1189+ 'https://' + ( ( config && config . errorUrl ) || DEFAULT_ERROR_URL ) ;
1190+ }
1191+
1192+ ErrorReportingService . prototype . report = function ( error ) {
1193+ if ( ! error ) {
1194+ return ;
1195+ }
1196+ var severity = error . severity || WSDKErrorSeverity . ERROR ;
1197+ this . _transport . send (
1198+ this . _errorUrl ,
1199+ severity ,
1200+ error . message ,
1201+ error . code ,
1202+ error . stackTrace
1203+ ) ;
1204+ } ;
1205+
1206+ // --- LoggingService: handles INFO severity ---
1207+
1208+ function LoggingService (
1209+ config ,
1210+ errorReportingService ,
1211+ integrationName ,
1212+ launcherInstanceGuid ,
1213+ accountId ,
1214+ rateLimiter
1215+ ) {
1216+ this . _transport = new ReportingTransport (
1217+ config ,
1218+ integrationName ,
1219+ launcherInstanceGuid ,
1220+ accountId ,
1221+ rateLimiter
1222+ ) ;
1223+ this . _loggingUrl =
1224+ 'https://' + ( ( config && config . loggingUrl ) || DEFAULT_LOGGING_URL ) ;
1225+ this . _errorReportingService = errorReportingService ;
1226+ }
1227+
1228+ LoggingService . prototype . log = function ( entry ) {
1229+ if ( ! entry ) {
1230+ return ;
1231+ }
1232+ var self = this ;
1233+ self . _transport . send (
1234+ self . _loggingUrl ,
1235+ WSDKErrorSeverity . INFO ,
1236+ entry . message ,
1237+ entry . code ,
1238+ undefined ,
1239+ function ( error ) {
1240+ if ( self . _errorReportingService ) {
1241+ self . _errorReportingService . report ( {
1242+ message :
1243+ 'LoggingService: Failed to send log: ' + error . message ,
1244+ code : ErrorCodes . UNKNOWN_ERROR ,
1245+ severity : WSDKErrorSeverity . ERROR ,
1246+ } ) ;
1247+ }
1248+ }
1249+ ) ;
1250+ } ;
1251+
9901252if ( window && window . mParticle && window . mParticle . addForwarder ) {
9911253 window . mParticle . addForwarder ( {
9921254 name : name ,
@@ -997,8 +1259,26 @@ if (window && window.mParticle && window.mParticle.addForwarder) {
9971259
9981260var RoktKit = {
9991261 register : register ,
1262+ ReportingTransport : ReportingTransport ,
1263+ ErrorReportingService : ErrorReportingService ,
1264+ LoggingService : LoggingService ,
1265+ RateLimiter : RateLimiter ,
1266+ ErrorCodes : ErrorCodes ,
1267+ WSDKErrorSeverity : WSDKErrorSeverity ,
10001268} ;
10011269var RoktKit_1 = RoktKit . register ;
1002-
1270+ var RoktKit_2 = RoktKit . ReportingTransport ;
1271+ var RoktKit_3 = RoktKit . ErrorReportingService ;
1272+ var RoktKit_4 = RoktKit . LoggingService ;
1273+ var RoktKit_5 = RoktKit . RateLimiter ;
1274+ var RoktKit_6 = RoktKit . ErrorCodes ;
1275+ var RoktKit_7 = RoktKit . WSDKErrorSeverity ;
1276+
1277+ exports . ErrorCodes = RoktKit_6 ;
1278+ exports . ErrorReportingService = RoktKit_3 ;
1279+ exports . LoggingService = RoktKit_4 ;
1280+ exports . RateLimiter = RoktKit_5 ;
1281+ exports . ReportingTransport = RoktKit_2 ;
1282+ exports . WSDKErrorSeverity = RoktKit_7 ;
10031283exports . default = RoktKit ;
10041284exports . register = RoktKit_1 ;
0 commit comments