@@ -63,6 +63,7 @@ describe('Unit | coreHandlers | handleNetworkBreadcrumbs', () => {
6363 textEncoder : new TextEncoder ( ) ,
6464 replay : setupReplayContainer ( ) ,
6565 networkDetailAllowUrls : [ 'https://example.com' ] ,
66+ networkDetailDenyUrls : [ 'http://localhost:8080' ] ,
6667 networkCaptureBodies : false ,
6768 networkRequestHeaders : [ 'content-type' , 'accept' , 'x-custom-header' ] ,
6869 networkResponseHeaders : [ 'content-type' , 'accept' , 'x-custom-header' ] ,
@@ -1382,5 +1383,166 @@ other-header: test`;
13821383 ] ) ;
13831384 } ) ;
13841385 } ) ;
1386+
1387+ describe . each ( [
1388+ [ 'exact string match' , 'https://example.com/foo' ] ,
1389+ [ 'partial string match' , 'https://example.com/bar/what' ] ,
1390+ [ 'exact regex match' , 'http://example.com/exact' ] ,
1391+ [ 'partial regex match' , 'http://example.com/partial/string' ] ,
1392+ ] ) ( 'matching URL %s' , ( _label , url ) => {
1393+ it ( 'correctly deny URL for fetch request' , async ( ) => {
1394+ options . networkDetailDenyUrls = [
1395+ 'https://example.com/foo' ,
1396+ 'com/bar' ,
1397+ / ^ h t t p : \/ \/ e x a m p l e .c o m \/ e x a c t $ / ,
1398+ / ^ h t t p : \/ \/ e x a m p l e .c o m \/ p a r t i a l / ,
1399+ ] ;
1400+
1401+ const breadcrumb : Breadcrumb = {
1402+ category : 'fetch' ,
1403+ data : {
1404+ method : 'GET' ,
1405+ url,
1406+ status_code : 200 ,
1407+ } ,
1408+ } ;
1409+
1410+ const mockResponse = getMockResponse ( '13' , 'test response' ) ;
1411+
1412+ const hint : FetchBreadcrumbHint = {
1413+ input : [ 'GET' , { body : 'test input' } ] ,
1414+ response : mockResponse ,
1415+ startTimestamp : BASE_TIMESTAMP + 1000 ,
1416+ endTimestamp : BASE_TIMESTAMP + 2000 ,
1417+ } ;
1418+ beforeAddNetworkBreadcrumb ( options , breadcrumb , hint ) ;
1419+
1420+ expect ( breadcrumb ) . toEqual ( {
1421+ category : 'fetch' ,
1422+ data : {
1423+ method : 'GET' ,
1424+ request_body_size : 10 ,
1425+ response_body_size : 13 ,
1426+ status_code : 200 ,
1427+ url,
1428+ } ,
1429+ } ) ;
1430+
1431+ await waitForReplayEventBuffer ( ) ;
1432+
1433+ expect ( ( options . replay . eventBuffer as EventBufferArray ) . events ) . toEqual ( [
1434+ {
1435+ data : {
1436+ payload : {
1437+ data : {
1438+ method : 'GET' ,
1439+ request : {
1440+ _meta : {
1441+ warnings : [ 'URL_SKIPPED' ] ,
1442+ } ,
1443+ headers : { } ,
1444+ size : 10 ,
1445+ } ,
1446+ response : {
1447+ _meta : {
1448+ warnings : [ 'URL_SKIPPED' ] ,
1449+ } ,
1450+ headers : { } ,
1451+ size : 13 ,
1452+ } ,
1453+ statusCode : 200 ,
1454+ } ,
1455+ description : url ,
1456+ endTimestamp : ( BASE_TIMESTAMP + 2000 ) / 1000 ,
1457+ op : 'resource.fetch' ,
1458+ startTimestamp : ( BASE_TIMESTAMP + 1000 ) / 1000 ,
1459+ } ,
1460+ tag : 'performanceSpan' ,
1461+ } ,
1462+ timestamp : ( BASE_TIMESTAMP + 1000 ) / 1000 ,
1463+ type : 5 ,
1464+ } ,
1465+ ] ) ;
1466+ } ) ;
1467+
1468+ it ( 'correctly deny URL for xhr request' , async ( ) => {
1469+ options . networkDetailDenyUrls = [
1470+ 'https://example.com/foo' ,
1471+ 'com/bar' ,
1472+ / ^ h t t p : \/ \/ e x a m p l e .c o m \/ e x a c t $ / ,
1473+ / ^ h t t p : \/ \/ e x a m p l e .c o m \/ p a r t i a l / ,
1474+ ] ;
1475+
1476+ const breadcrumb : Breadcrumb = {
1477+ category : 'xhr' ,
1478+ data : {
1479+ method : 'GET' ,
1480+ url,
1481+ status_code : 200 ,
1482+ } ,
1483+ } ;
1484+ const xhr = new XMLHttpRequest ( ) ;
1485+ Object . defineProperty ( xhr , 'response' , {
1486+ value : 'test response' ,
1487+ } ) ;
1488+ Object . defineProperty ( xhr , 'responseText' , {
1489+ value : 'test response' ,
1490+ } ) ;
1491+ const hint : XhrBreadcrumbHint = {
1492+ xhr,
1493+ input : 'test input' ,
1494+ startTimestamp : BASE_TIMESTAMP + 1000 ,
1495+ endTimestamp : BASE_TIMESTAMP + 2000 ,
1496+ } ;
1497+ beforeAddNetworkBreadcrumb ( options , breadcrumb , hint ) ;
1498+
1499+ expect ( breadcrumb ) . toEqual ( {
1500+ category : 'xhr' ,
1501+ data : {
1502+ method : 'GET' ,
1503+ request_body_size : 10 ,
1504+ response_body_size : 13 ,
1505+ status_code : 200 ,
1506+ url,
1507+ } ,
1508+ } ) ;
1509+
1510+ await waitForReplayEventBuffer ( ) ;
1511+
1512+ expect ( ( options . replay . eventBuffer as EventBufferArray ) . events ) . toEqual ( [
1513+ {
1514+ data : {
1515+ payload : {
1516+ data : {
1517+ method : 'GET' ,
1518+ request : {
1519+ _meta : {
1520+ warnings : [ 'URL_SKIPPED' ] ,
1521+ } ,
1522+ headers : { } ,
1523+ size : 10 ,
1524+ } ,
1525+ response : {
1526+ _meta : {
1527+ warnings : [ 'URL_SKIPPED' ] ,
1528+ } ,
1529+ headers : { } ,
1530+ size : 13 ,
1531+ } ,
1532+ statusCode : 200 ,
1533+ } ,
1534+ description : url ,
1535+ endTimestamp : ( BASE_TIMESTAMP + 2000 ) / 1000 ,
1536+ op : 'resource.xhr' ,
1537+ startTimestamp : ( BASE_TIMESTAMP + 1000 ) / 1000 ,
1538+ } ,
1539+ tag : 'performanceSpan' ,
1540+ } ,
1541+ timestamp : ( BASE_TIMESTAMP + 1000 ) / 1000 ,
1542+ type : 5 ,
1543+ } ,
1544+ ] ) ;
1545+ } ) ;
1546+ } ) ;
13851547 } ) ;
13861548} ) ;
0 commit comments