@@ -181,6 +181,9 @@ function isPromise(p) {
181181function isBrowser ( ) {
182182 return typeof window !== 'undefined' ;
183183}
184+ function isRequestObject ( input ) {
185+ return typeof Request !== 'undefined' && input instanceof Request ;
186+ }
184187function redact ( ) {
185188 return '********' ;
186189}
@@ -825,6 +828,70 @@ function merge() {
825828 }
826829 return result ;
827830}
831+ function shouldAddBaggageHeader ( options , tracing , url ) {
832+ var _options$tracing ;
833+ if ( ! ( tracing !== null && tracing !== void 0 && tracing . sessionId ) || ! url ) {
834+ return false ;
835+ }
836+ var propagation = options === null || options === void 0 || ( _options$tracing = options . tracing ) === null || _options$tracing === void 0 ? void 0 : _options$tracing . propagation ;
837+ var enabledHeaders = propagation === null || propagation === void 0 ? void 0 : propagation . enabledHeaders ;
838+ if ( ! Array . isArray ( enabledHeaders ) || ! enabledHeaders . includes ( 'baggage' ) ) {
839+ return false ;
840+ }
841+ var enabledCorsUrls = propagation === null || propagation === void 0 ? void 0 : propagation . enabledCorsUrls ;
842+ if ( ! Array . isArray ( enabledCorsUrls ) || enabledCorsUrls . length === 0 ) {
843+ return false ;
844+ }
845+ return enabledCorsUrls . some ( function ( pattern ) {
846+ if ( isType ( pattern , 'string' ) ) {
847+ return url === pattern ;
848+ }
849+ if ( isType ( pattern , 'regexp' ) ) {
850+ return pattern . test ( url ) ;
851+ }
852+ return false ;
853+ } ) ;
854+ }
855+ function addHeadersToFetch ( args , newHeaders ) {
856+ var _init ;
857+ // Headers may be in the request object or the init object.
858+ // If present in both places, the init object must be used.
859+ //
860+ var init = args [ 1 ] ;
861+ var initHeaders = ( _init = init ) === null || _init === void 0 ? void 0 : _init . headers ;
862+ var reqHeaders = isRequestObject ( args [ 0 ] ) && args [ 0 ] . headers ;
863+ var headers = initHeaders || reqHeaders ;
864+
865+ // If headers are not present in either place, they are added to the init object.
866+ // If there is no init object, one must be created and added to args.
867+ if ( ! headers ) {
868+ if ( ! init ) {
869+ args [ 1 ] = init = { } ;
870+ }
871+ headers = init . headers = { } ;
872+ }
873+
874+ // `headers` may be a Headers object or a plain object.
875+ if ( headers instanceof Headers ) {
876+ for ( var _i = 0 , _Object$keys = Object . keys ( newHeaders ) ; _i < _Object$keys . length ; _i ++ ) {
877+ var key = _Object$keys [ _i ] ;
878+ headers . append ( key , newHeaders [ key ] ) ;
879+ }
880+ } else if ( isObject ( headers ) ) {
881+ for ( var _i2 = 0 , _Object$keys2 = Object . keys ( newHeaders ) ; _i2 < _Object$keys2 . length ; _i2 ++ ) {
882+ var _key = _Object$keys2 [ _i2 ] ;
883+ headers [ _key ] = newHeaders [ _key ] ;
884+ }
885+ }
886+ }
887+ function getSessionIdFromAsyncLocalStorage ( client ) {
888+ var storage = client . asyncLocalStorage ;
889+ if ( ! storage || typeof storage . getStore !== 'function' ) {
890+ return null ;
891+ }
892+ var store = storage . getStore ( ) ;
893+ return ( store === null || store === void 0 ? void 0 : store . sessionId ) || null ;
894+ }
828895
829896; // ./src/apiUtility.js
830897
@@ -1130,7 +1197,7 @@ function _getOTLPTransport(options, url) {
11301197/**
11311198 * Default options shared across platforms
11321199 */
1133- var version = '3.0 .0' ;
1200+ var version = '3.1 .0' ;
11341201var endpoint = 'api.rollbar.com/api/1/item/' ;
11351202var logLevel = 'debug' ;
11361203var reportLevel = 'debug' ;
@@ -2167,9 +2234,11 @@ Rollbar.prototype._log = function (defaultLevel, item) {
21672234Rollbar . prototype . _addItemAttributes = function ( item ) {
21682235 var _this$tracing , _this$tracing2 ;
21692236 var span = ( _this$tracing = this . tracing ) === null || _this$tracing === void 0 ? void 0 : _this$tracing . getSpan ( ) ;
2237+ var asyncLocalSessionId = getSessionIdFromAsyncLocalStorage ( this ) ;
2238+ var sessionId = asyncLocalSessionId || ( ( _this$tracing2 = this . tracing ) === null || _this$tracing2 === void 0 ? void 0 : _this$tracing2 . sessionId ) ;
21702239 var attributes = [ {
21712240 key : 'session_id' ,
2172- value : ( _this$tracing2 = this . tracing ) === null || _this$tracing2 === void 0 ? void 0 : _this$tracing2 . sessionId
2241+ value : sessionId
21732242 } , {
21742243 key : 'span_id' ,
21752244 value : span === null || span === void 0 ? void 0 : span . spanId
@@ -3098,6 +3167,83 @@ function defaults_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r
30983167var notifierName = 'node_rollbar' ;
30993168var scrubHeaders = commonScrubHeaders ;
31003169var scrubFields = [ ] . concat ( _toConsumableArray ( commonScrubFields ) , _toConsumableArray ( apiScrubFields ) , _toConsumableArray ( requestScrubFields ) ) ;
3170+ ; // external "node:async_hooks"
3171+ const external_node_async_hooks_namespaceObject = require ( "node:async_hooks" ) ;
3172+ ; // ./src/server/middleware/rollbarExpressMiddleware.js
3173+ function rollbarExpressMiddleware_createForOfIteratorHelper ( r , e ) { var t = "undefined" != typeof Symbol && r [ Symbol . iterator ] || r [ "@@iterator" ] ; if ( ! t ) { if ( Array . isArray ( r ) || ( t = rollbarExpressMiddleware_unsupportedIterableToArray ( r ) ) || e && r && "number" == typeof r . length ) { t && ( r = t ) ; var _n = 0 , F = function F ( ) { } ; return { s : F , n : function n ( ) { return _n >= r . length ? { done : ! 0 } : { done : ! 1 , value : r [ _n ++ ] } ; } , e : function e ( r ) { throw r ; } , f : F } ; } throw new TypeError ( "Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; } var o , a = ! 0 , u = ! 1 ; return { s : function s ( ) { t = t . call ( r ) ; } , n : function n ( ) { var r = t . next ( ) ; return a = r . done , r ; } , e : function e ( r ) { u = ! 0 , o = r ; } , f : function f ( ) { try { a || null == t . return || t . return ( ) ; } finally { if ( u ) throw o ; } } } ; }
3174+ function rollbarExpressMiddleware_unsupportedIterableToArray ( r , a ) { if ( r ) { if ( "string" == typeof r ) return rollbarExpressMiddleware_arrayLikeToArray ( r , a ) ; var t = { } . toString . call ( r ) . slice ( 8 , - 1 ) ; return "Object" === t && r . constructor && ( t = r . constructor . name ) , "Map" === t || "Set" === t ? Array . from ( r ) : "Arguments" === t || / ^ (?: U i | I ) n t (?: 8 | 1 6 | 3 2 ) (?: C l a m p e d ) ? A r r a y $ / . test ( t ) ? rollbarExpressMiddleware_arrayLikeToArray ( r , a ) : void 0 ; } }
3175+ function rollbarExpressMiddleware_arrayLikeToArray ( r , a ) { ( null == a || a > r . length ) && ( a = r . length ) ; for ( var e = 0 , n = Array ( a ) ; e < a ; e ++ ) n [ e ] = r [ e ] ; return n ; }
3176+
3177+ function extractSessionId ( headerValue ) {
3178+ if ( ! headerValue ) {
3179+ return null ;
3180+ }
3181+ var rawValue = Array . isArray ( headerValue ) ? headerValue . join ( ',' ) : headerValue ;
3182+ if ( typeof rawValue !== 'string' ) {
3183+ return null ;
3184+ }
3185+ var entries = rawValue . split ( ',' ) ;
3186+ var _iterator = rollbarExpressMiddleware_createForOfIteratorHelper ( entries ) ,
3187+ _step ;
3188+ try {
3189+ for ( _iterator . s ( ) ; ! ( _step = _iterator . n ( ) ) . done ; ) {
3190+ var entry = _step . value ;
3191+ var trimmed = entry . trim ( ) ;
3192+ if ( ! trimmed ) {
3193+ continue ;
3194+ }
3195+ var equalsIndex = trimmed . indexOf ( '=' ) ;
3196+ if ( equalsIndex === - 1 ) {
3197+ continue ;
3198+ }
3199+ var key = trimmed . slice ( 0 , equalsIndex ) . trim ( ) ;
3200+ if ( key !== 'rollbar.session.id' ) {
3201+ continue ;
3202+ }
3203+ var value = trimmed . slice ( equalsIndex + 1 ) . trim ( ) ;
3204+ if ( ! value ) {
3205+ return null ;
3206+ }
3207+ try {
3208+ return decodeURIComponent ( value ) ;
3209+ } catch ( _e ) {
3210+ return value ;
3211+ }
3212+ }
3213+ } catch ( err ) {
3214+ _iterator . e ( err ) ;
3215+ } finally {
3216+ _iterator . f ( ) ;
3217+ }
3218+ return null ;
3219+ }
3220+ function getBaggageHeader ( req ) {
3221+ var _req$headers ;
3222+ if ( ! req ) {
3223+ return null ;
3224+ }
3225+ if ( typeof req . get === 'function' ) {
3226+ return req . get ( 'baggage' ) ;
3227+ }
3228+ return ( ( _req$headers = req . headers ) === null || _req$headers === void 0 ? void 0 : _req$headers . baggage ) || null ;
3229+ }
3230+ function rollbarExpressMiddleware ( rollbar ) {
3231+ var storage = ( rollbar === null || rollbar === void 0 ? void 0 : rollbar . client . asyncLocalStorage ) || new external_node_async_hooks_namespaceObject . AsyncLocalStorage ( ) ;
3232+ if ( rollbar ) {
3233+ rollbar . client . asyncLocalStorage = storage ;
3234+ }
3235+ return function rollbarExpressMiddlewareHandler ( req , _res , next ) {
3236+ var sessionId = extractSessionId ( getBaggageHeader ( req ) ) ;
3237+ if ( ! sessionId ) {
3238+ return next ( ) ;
3239+ }
3240+ return storage . run ( {
3241+ sessionId : sessionId
3242+ } , function ( ) {
3243+ return next ( ) ;
3244+ } ) ;
3245+ } ;
3246+ }
31013247; // external "http"
31023248const external_http_namespaceObject = require ( "http" ) ;
31033249; // external "https"
@@ -3246,6 +3392,9 @@ Instrumenter.prototype.deinstrumentNetwork = function () {
32463392Instrumenter . prototype . instrumentNetwork = function ( ) {
32473393 utility_replace ( external_http_namespaceObject , 'request' , networkRequestWrapper . bind ( this ) , this . replacements , 'network' ) ;
32483394 utility_replace ( external_https_namespaceObject , 'request' , networkRequestWrapper . bind ( this ) , this . replacements , 'network' ) ;
3395+ if ( typeof globalThis . fetch === 'function' ) {
3396+ utility_replace ( globalThis , 'fetch' , fetchRequestWrapper . bind ( this ) , this . replacements , 'network' ) ;
3397+ }
32493398} ;
32503399function networkRequestWrapper ( orig ) {
32513400 var _this = this ;
@@ -3258,9 +3407,19 @@ function networkRequestWrapper(orig) {
32583407 options = args [ 1 ] ,
32593408 cb = args [ 2 ] ;
32603409 var mergedOptions = mergeOptions ( url , options , cb ) ;
3410+ var requestUrl = constructUrl ( mergedOptions . options ) ;
3411+ var sessionId = getSessionIdFromAsyncLocalStorage ( _this . rollbar . client ) ;
3412+ if ( sessionId && shouldAddBaggageHeader ( _this . options , {
3413+ sessionId : sessionId
3414+ } , requestUrl ) ) {
3415+ if ( ! mergedOptions . options . headers ) {
3416+ mergedOptions . options . headers = { } ;
3417+ }
3418+ mergedOptions . options . headers . baggage = "rollbar.session.id=" . concat ( sessionId ) ;
3419+ }
32613420 var metadata = {
32623421 method : mergedOptions . options . method || 'GET' ,
3263- url : constructUrl ( mergedOptions . options ) ,
3422+ url : requestUrl ,
32643423 status_code : null ,
32653424 start_time_ms : now ( ) ,
32663425 end_time_ms : null
@@ -3295,6 +3454,93 @@ function responseCallbackWrapper(options, metadata, callback) {
32953454 }
32963455 } ;
32973456}
3457+ function fetchRequestWrapper ( orig ) {
3458+ var _this2 = this ;
3459+ var telemeter = this . telemeter ;
3460+ return function ( ) {
3461+ for ( var _len2 = arguments . length , args = new Array ( _len2 ) , _key2 = 0 ; _key2 < _len2 ; _key2 ++ ) {
3462+ args [ _key2 ] = arguments [ _key2 ] ;
3463+ }
3464+ var input = args [ 0 ] ;
3465+ var init = args [ 1 ] ;
3466+ var method = 'GET' ;
3467+ var url ;
3468+ var sessionId = getSessionIdFromAsyncLocalStorage ( _this2 . rollbar . client ) ;
3469+ if ( isType ( input , 'string' ) || input instanceof URL ) {
3470+ url = input . toString ( ) ;
3471+ } else if ( input ) {
3472+ url = input . url ;
3473+ if ( input . method ) {
3474+ method = input . method ;
3475+ }
3476+ }
3477+ if ( init && init . method ) {
3478+ method = init . method ;
3479+ }
3480+ if ( sessionId && shouldAddBaggageHeader ( _this2 . options , {
3481+ sessionId : sessionId
3482+ } , url ) ) {
3483+ var headers = {
3484+ baggage : "rollbar.session.id=" . concat ( sessionId )
3485+ } ;
3486+ addHeadersToFetch ( args , headers ) ;
3487+ }
3488+ var metadata = {
3489+ method : method ,
3490+ url : url ,
3491+ status_code : null ,
3492+ start_time_ms : now ( ) ,
3493+ end_time_ms : null
3494+ } ;
3495+ if ( _this2 . autoInstrument . networkRequestHeaders ) {
3496+ var requestHeaders = normalizeFetchHeaders ( init && init . headers ? init . headers : input && input . headers ) ;
3497+ if ( requestHeaders ) {
3498+ metadata . request_headers = requestHeaders ;
3499+ }
3500+ }
3501+ telemeter . captureNetwork ( metadata , 'fetch' ) ;
3502+ return orig . apply ( globalThis , args ) . then ( function ( res ) {
3503+ metadata . end_time_ms = now ( ) ;
3504+ metadata . status_code = res . status ;
3505+ if ( _this2 . autoInstrument . networkResponseHeaders ) {
3506+ var responseHeaders = normalizeFetchHeaders ( res . headers ) ;
3507+ if ( responseHeaders ) {
3508+ metadata . response = metadata . response || { } ;
3509+ metadata . response . headers = responseHeaders ;
3510+ }
3511+ }
3512+ return res ;
3513+ } , function ( err ) {
3514+ metadata . end_time_ms = now ( ) ;
3515+ metadata . status_code = 0 ;
3516+ metadata . error = [ err . name , err . message ] . join ( ': ' ) ;
3517+ throw err ;
3518+ } ) ;
3519+ } ;
3520+ }
3521+ function normalizeFetchHeaders ( headers ) {
3522+ if ( ! headers ) return null ;
3523+ if ( typeof headers . forEach === 'function' ) {
3524+ var normalized = { } ;
3525+ headers . forEach ( function ( value , key ) {
3526+ normalized [ key ] = value ;
3527+ } ) ;
3528+ return normalized ;
3529+ }
3530+ if ( Array . isArray ( headers ) ) {
3531+ var _normalized = { } ;
3532+ headers . forEach ( function ( pair ) {
3533+ if ( pair && pair . length > 1 ) {
3534+ _normalized [ pair [ 0 ] ] = pair [ 1 ] ;
3535+ }
3536+ } ) ;
3537+ return _normalized ;
3538+ }
3539+ if ( isType ( headers , 'object' ) ) {
3540+ return headers ;
3541+ }
3542+ return null ;
3543+ }
32983544Instrumenter . prototype . captureNetwork = function ( metadata , subtype , rollbarUUID ) {
32993545 return this . telemeter . captureNetwork ( metadata , subtype , rollbarUUID ) ;
33003546} ;
@@ -4434,6 +4680,7 @@ function _currentTime() {
44344680
44354681
44364682
4683+
44374684function rollbar_Rollbar ( options , client ) {
44384685 if ( isType ( options , 'string' ) ) {
44394686 var accessToken = options ;
@@ -4839,6 +5086,16 @@ rollbar_Rollbar.wrapCallback = function (f) {
48395086 handleUninitialized ( ) ;
48405087 }
48415088} ;
5089+ rollbar_Rollbar . prototype . expressMiddleware = function ( ) {
5090+ return rollbarExpressMiddleware ( this ) ;
5091+ } ;
5092+ rollbar_Rollbar . expressMiddleware = function ( ) {
5093+ if ( _instance ) {
5094+ return rollbarExpressMiddleware ( _instance ) ;
5095+ }
5096+ handleUninitialized ( ) ;
5097+ return undefined ;
5098+ } ;
48425099rollbar_Rollbar . prototype . captureEvent = function ( ) {
48435100 var event = createTelemetryEvent ( arguments ) ;
48445101 return this . client . captureEvent ( event . type , event . metadata , event . level ) ;
0 commit comments