@buoy-gg/sentry 7.0.77 → 7.0.79
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.
- package/lib/commonjs/devtools/SentryAuditView.js +1 -1
- package/lib/commonjs/devtools/SentryBody.js +1 -1
- package/lib/commonjs/devtools/SentryCostView.js +1 -1
- package/lib/commonjs/devtools/SentryDropsView.js +1 -1
- package/lib/module/devtools/SentryAuditView.js +1 -1
- package/lib/module/devtools/SentryBody.js +1 -1
- package/lib/module/devtools/SentryCostView.js +1 -1
- package/lib/module/devtools/SentryDropsView.js +1 -1
- package/lib/web/index.mjs +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryAuditView=SentryAuditView;var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _layout=require("./layout");var _pii=require("../audit/pii");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}const MONO=_sharedUi.monoFont;const SEVERITY_COLOR={critical:"#F87171",warning:"#FBBF24",info:"#60A5FA"};const CATEGORY_LABEL={quota:"Quota",privacy:"Privacy",correctness:"Correctness"};function SentryAuditView({c:t}){const{audit:r,piiFindings:a}=t;if(!r){return(0,_jsxRuntime.jsx)(_sharedUi.ToolEmptyState,{testID:"sentry-audit-unavailable",otto:"scanning",title:"No client to audit",message:"The audit reads the options Sentry.init actually resolved, so it needs a live client. Once the tool attaches, the resolved config is graded here."})}const o=r.findings.length===0&&a.length===0;return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.container,contentContainerStyle:styles.content,testID:"sentry-audit-view",children:[o?(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:"sentry-audit-clean",contentStyle:styles.cardBody,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Nothing to flag"}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{tone:"secondary",style:styles.inCard,children:"The resolved config raised no findings, and nothing sent this session matched a personal-data pattern."})]}):null,r.findings.length>0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"CONFIG"}),r.findings.map(e=>(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-audit-${e.id}`,style:[styles.stripe,{borderLeftColor:SEVERITY_COLOR[e.severity]}],contentStyle:styles.cardBody,accessible:true,accessibilityLabel:`${e.severity} ${e.category} finding. ${e.title}. ${e.detail}`,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.head,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:e.title}),(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:CATEGORY_LABEL[e.category]??e.category,color:SEVERITY_COLOR[e.severity],variant:"tinted"})]}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{tone:"secondary",style:styles.inCard,children:e.detail})]},e.id))]}):null,a.length>0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"PERSONAL DATA IN SENT PAYLOADS"}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{style:styles.piiNote,children:"Values are redacted here \u2014 the path is what you need to fix."}),a.map((e,i)=>(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-pii-${i}`,style:[styles.stripe,{borderLeftColor:SEVERITY_COLOR.critical}],contentStyle:styles.cardBody,accessible:true,accessibilityLabel:`${_pii.PII_KIND_LABEL[e.kind]} at ${e.path}, value redacted as ${e.sample}`,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.head,children:[(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:_pii.PII_KIND_LABEL[e.kind],color:SEVERITY_COLOR.critical,variant:"tinted"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.sample,children:e.sample})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.path,selectable:true,children:e.path})]},`${e.path}-${i}`))]}):null]})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},piiNote:{marginHorizontal:12,marginTop:0,marginBottom:2},cardBody:{gap:6},inCard:{marginTop:2,marginLeft:0},stripe:{borderLeftWidth:3,borderRadius:8},head:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},title:{color:_sharedUi.night.color.text,fontSize:13,fontWeight:"700",flexShrink:1},sample:{color:_sharedUi.night.color.textTertiary,fontSize:10,fontFamily:MONO},path:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontFamily:MONO}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryAuditView=SentryAuditView;var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _layout=require("./layout");var _pii=require("../audit/pii");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}const MONO=_sharedUi.monoFont;const SEVERITY_COLOR={critical:"#F87171",warning:"#FBBF24",info:"#60A5FA"};const CATEGORY_LABEL={quota:"Quota",privacy:"Privacy",correctness:"Correctness"};function SentryAuditView({c:t}){const{audit:r,piiFindings:a}=t;if(!r){return(0,_jsxRuntime.jsx)(_sharedUi.ToolEmptyState,{testID:"sentry-audit-unavailable",otto:"scanning",title:"No client to audit",message:"The audit reads the options Sentry.init actually resolved, so it needs a live client. Once the tool attaches, the resolved config is graded here."})}const o=r.findings.length===0&&a.length===0;return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{keyboardShouldPersistTaps:"handled",style:styles.container,contentContainerStyle:styles.content,testID:"sentry-audit-view",children:[o?(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:"sentry-audit-clean",contentStyle:styles.cardBody,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:"Nothing to flag"}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{tone:"secondary",style:styles.inCard,children:"The resolved config raised no findings, and nothing sent this session matched a personal-data pattern."})]}):null,r.findings.length>0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"CONFIG"}),r.findings.map(e=>(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-audit-${e.id}`,style:[styles.stripe,{borderLeftColor:SEVERITY_COLOR[e.severity]}],contentStyle:styles.cardBody,accessible:true,accessibilityLabel:`${e.severity} ${e.category} finding. ${e.title}. ${e.detail}`,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.head,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.title,children:e.title}),(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:CATEGORY_LABEL[e.category]??e.category,color:SEVERITY_COLOR[e.severity],variant:"tinted"})]}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{tone:"secondary",style:styles.inCard,children:e.detail})]},e.id))]}):null,a.length>0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"PERSONAL DATA IN SENT PAYLOADS"}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{style:styles.piiNote,children:"Values are redacted here \u2014 the path is what you need to fix."}),a.map((e,i)=>(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-pii-${i}`,style:[styles.stripe,{borderLeftColor:SEVERITY_COLOR.critical}],contentStyle:styles.cardBody,accessible:true,accessibilityLabel:`${_pii.PII_KIND_LABEL[e.kind]} at ${e.path}, value redacted as ${e.sample}`,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.head,children:[(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:_pii.PII_KIND_LABEL[e.kind],color:SEVERITY_COLOR.critical,variant:"tinted"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.sample,children:e.sample})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.path,selectable:true,children:e.path})]},`${e.path}-${i}`))]}):null]})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},piiNote:{marginHorizontal:12,marginTop:0,marginBottom:2},cardBody:{gap:6},inCard:{marginTop:2,marginLeft:0},stripe:{borderLeftWidth:3,borderRadius:8},head:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},title:{color:_sharedUi.night.color.text,fontSize:13,fontWeight:"700",flexShrink:1},sample:{color:_sharedUi.night.color.textTertiary,fontSize:10,fontFamily:MONO},path:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontFamily:MONO}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryBody=SentryBody;var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _dataViewer=require("@buoy-gg/shared-ui/dataViewer");var _layout=require("./layout");var _attachStatus=require("./attachStatus");var _SentryCostView=require("./SentryCostView");var _SentryDropsView=require("./SentryDropsView");var _SentryAuditView=require("./SentryAuditView");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,e){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(n,d){if(!d&&n&&n.__esModule)return n;var a,i,l={__proto__:null,default:n};if(null===n||"object"!=typeof n&&"function"!=typeof n)return l;if(a=d?o:r){if(a.has(n))return a.get(n);a.set(n,l)}for(const s in n)"default"!==s&&{}.hasOwnProperty.call(n,s)&&((i=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(n,s))&&(i.get||i.set)?a(l,s,i):l[s]=n[s]);return l})(t,e)}const MONO=_sharedUi.monoFont;const TYPE_COLORS={event:"#F87171",transaction:"#A78BFA",session:"#34D399",sessions:"#34D399",client_report:"#FBBF24",log:"#60A5FA",attachment:"#F472B6",profile:"#FB923C",profile_chunk:"#FB923C",replay_event:"#22D3EE",replay_recording:"#22D3EE",user_report:"#F472B6",feedback:"#F472B6"};const TYPE_SHORT_LABEL={client_report:"report",replay_recording:"replay",replay_event:"replay",profile_chunk:"profile",user_report:"feedback"};function typeColor(t){return TYPE_COLORS[t]??"#9CA3AF"}function typeLabel(t){return TYPE_SHORT_LABEL[t]??t}function formatClock(t){const e=new Date(t);const r=o=>String(o).padStart(2,"0");return`${r(e.getHours())}:${r(e.getMinutes())}:${r(e.getSeconds())}`}function EnvelopeRow({envelope:t,onPress:e}){const r=t.items[0];const o=t.items.reduce((a,i)=>a+(i.spanCount??0),0);const n=t.items.length-1;const d=`${r?.summary??"envelope"}${o>0?` \xB7 ${o} span${o===1?"":"s"}`:""}`;return(0,_jsxRuntime.jsx)(_sharedUi.CompactRow,{statusDotColor:typeColor(r?.type??""),statusLabel:typeLabel(r?.type??"envelope"),statusSublabel:n>0?`+${n} more`:void 0,primaryText:d,secondaryText:n>0?t.items.map(a=>a.type).join(" + "):void 0,badgeText:(0,_sharedUi.formatBytes)(t.totalBytes),badgeColor:_sharedUi.night.color.textSecondary,bottomRightText:(0,_jsxRuntime.jsx)(_sharedUi.RelativeTime,{timestamp:t.timestamp}),showChevron:true,onPress:()=>e(t.id),testID:`sentry-envelope-row-${t.id}`})}function FeedMeta({c:t}){const e=_attachStatus.STATUS_META[t.status];return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.meta,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{testID:"sentry-status-chip",accessible:true,accessibilityLabel:`Sentry capture: ${e.label}`,children:(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:e.label,color:e.color,variant:"quiet",dot:true})}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.metaTotals,testID:"sentry-totals",children:[t.rows.length," \xB7 ",(0,_sharedUi.formatBytes)(t.totalBytes)]})]})}function EmptyList({status:t}){const e=t==="attached"?"Attached to the Sentry client. Envelopes will appear here as the app sends them.":t==="sdk-not-found"?"@sentry/react-native isn't installed in this app (or isn't resolvable). Pass getClient to installSentryCapture / SentryRoot to attach explicitly.":t==="no-client"?"Sentry SDK found, but no client appeared \u2014 is Sentry.init() being called?":"Looking for the app's Sentry client\u2026";return(0,_jsxRuntime.jsx)(_sharedUi.ToolEmptyState,{testID:"sentry-empty",otto:t==="attached"?"guard":"scanning",title:"No envelopes captured",message:e})}function pretty(t){try{return JSON.stringify(t,null,2)??String(t)}catch{return String(t)}}function PayloadBlock({value:t,testID:e}){const r=t!==null&&typeof t==="object";if(!r){const o=pretty(t);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.payloadBlock,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.payloadCopy,children:(0,_jsxRuntime.jsx)(_sharedUi.CopyButton,{value:o,size:12})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.payload,selectable:true,testID:e,children:o})]})}return(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.payloadTree,testID:e,children:(0,_jsxRuntime.jsx)(_dataViewer.DataViewer,{title:"",data:t,rawMode:true,showTypeFilter:true,initialExpanded:false,testIDPrefix:e?`${e}-node`:void 0})})}function ItemCard({item:t,index:e}){return(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-item-${e}`,contentStyle:styles.cardBody,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.itemHead,children:[(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:t.type,color:typeColor(t.type),variant:"outline"}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.itemMeta,children:[(0,_sharedUi.formatBytes)(t.bytes),t.spanCount!=null?` \xB7 ${t.spanCount} span${t.spanCount===1?"":"s"}`:""]})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.itemSummary,testID:`sentry-item-${e}-summary`,children:t.summary}),t.binary?(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.itemBinary,children:["binary payload (",(0,_sharedUi.formatBytes)(t.bytes),")"]}):t.payload!==void 0?(0,_jsxRuntime.jsx)(PayloadBlock,{value:t.payload,testID:`sentry-item-${e}-payload`}):null]})}function EnvelopeDetail({envelope:t}){return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.container,contentContainerStyle:styles.detailContent,testID:"sentry-envelope-detail",children:[(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{contentStyle:styles.cardBody,children:[(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Captured",value:formatClock(t.timestamp)}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Size",value:(0,_sharedUi.formatBytes)(t.totalBytes)}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Items",value:String(t.items.length)}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Origin",value:t.origin}),t.eventId?(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Event ID",value:t.eventId,mono:true,copyable:true}):null]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"ITEMS"}),t.items.map((e,r)=>(0,_jsxRuntime.jsx)(ItemCard,{item:e,index:r},r)),t.header!==void 0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"ENVELOPE HEADER"}),(0,_jsxRuntime.jsx)(_sharedUi.DevToolsCard,{contentStyle:styles.cardBody,children:(0,_jsxRuntime.jsx)(PayloadBlock,{value:t.header,testID:"sentry-envelope-header"})})]}):null]})}function SentryBody({c:t}){const e=(0,_react.useCallback)(({item:r})=>(0,_jsxRuntime.jsx)(EnvelopeRow,{envelope:r,onPress:t.openDetail}),[t.openDetail]);if(t.tab==="cost"){return(0,_jsxRuntime.jsx)(_SentryCostView.SentryCostView,{c:t})}if(t.tab==="drops"){return(0,_jsxRuntime.jsx)(_SentryDropsView.SentryDropsView,{c:t})}if(t.tab==="audit"){return(0,_jsxRuntime.jsx)(_SentryAuditView.SentryAuditView,{c:t})}if(t.view==="detail"&&t.selected){return(0,_jsxRuntime.jsx)(EnvelopeDetail,{envelope:t.selected})}return(0,_jsxRuntime.jsx)(_reactNative.FlatList,{style:styles.container,data:t.rows,keyExtractor:r=>String(r.id),renderItem:e,ListHeaderComponent:(0,_jsxRuntime.jsx)(FeedMeta,{c:t}),ListEmptyComponent:(0,_jsxRuntime.jsx)(EmptyList,{status:t.status}),contentContainerStyle:styles.listContent,..._sharedUi.LOG_LIST_PRESET,testID:"sentry-envelope-list"})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},listContent:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:12},meta:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingBottom:8},metaTotals:{color:_sharedUi.night.color.textTertiary,fontSize:11,fontVariant:["tabular-nums"]},detailContent:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},cardBody:{gap:8},itemHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},itemMeta:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},itemSummary:{color:_sharedUi.night.color.text,fontSize:12,fontWeight:"600"},itemBinary:{color:_sharedUi.night.color.textTertiary,fontSize:11,fontStyle:"italic"},payloadBlock:{backgroundColor:_sharedUi.night.color.fill,borderRadius:6,padding:8,paddingRight:26},payloadTree:{backgroundColor:_sharedUi.night.color.fill,borderRadius:6,marginHorizontal:-4,paddingVertical:4,overflow:"hidden"},payloadCopy:{position:"absolute",top:4,right:4,zIndex:1},payload:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontFamily:MONO,lineHeight:16}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryBody=SentryBody;var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _dataViewer=require("@buoy-gg/shared-ui/dataViewer");var _layout=require("./layout");var _attachStatus=require("./attachStatus");var _SentryCostView=require("./SentryCostView");var _SentryDropsView=require("./SentryDropsView");var _SentryAuditView=require("./SentryAuditView");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,e){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(n,d){if(!d&&n&&n.__esModule)return n;var a,i,l={__proto__:null,default:n};if(null===n||"object"!=typeof n&&"function"!=typeof n)return l;if(a=d?o:r){if(a.has(n))return a.get(n);a.set(n,l)}for(const s in n)"default"!==s&&{}.hasOwnProperty.call(n,s)&&((i=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(n,s))&&(i.get||i.set)?a(l,s,i):l[s]=n[s]);return l})(t,e)}const MONO=_sharedUi.monoFont;const TYPE_COLORS={event:"#F87171",transaction:"#A78BFA",session:"#34D399",sessions:"#34D399",client_report:"#FBBF24",log:"#60A5FA",attachment:"#F472B6",profile:"#FB923C",profile_chunk:"#FB923C",replay_event:"#22D3EE",replay_recording:"#22D3EE",user_report:"#F472B6",feedback:"#F472B6"};const TYPE_SHORT_LABEL={client_report:"report",replay_recording:"replay",replay_event:"replay",profile_chunk:"profile",user_report:"feedback"};function typeColor(t){return TYPE_COLORS[t]??"#9CA3AF"}function typeLabel(t){return TYPE_SHORT_LABEL[t]??t}function formatClock(t){const e=new Date(t);const r=o=>String(o).padStart(2,"0");return`${r(e.getHours())}:${r(e.getMinutes())}:${r(e.getSeconds())}`}function EnvelopeRow({envelope:t,onPress:e}){const r=t.items[0];const o=t.items.reduce((a,i)=>a+(i.spanCount??0),0);const n=t.items.length-1;const d=`${r?.summary??"envelope"}${o>0?` \xB7 ${o} span${o===1?"":"s"}`:""}`;return(0,_jsxRuntime.jsx)(_sharedUi.CompactRow,{statusDotColor:typeColor(r?.type??""),statusLabel:typeLabel(r?.type??"envelope"),statusSublabel:n>0?`+${n} more`:void 0,primaryText:d,secondaryText:n>0?t.items.map(a=>a.type).join(" + "):void 0,badgeText:(0,_sharedUi.formatBytes)(t.totalBytes),badgeColor:_sharedUi.night.color.textSecondary,bottomRightText:(0,_jsxRuntime.jsx)(_sharedUi.RelativeTime,{timestamp:t.timestamp}),showChevron:true,onPress:()=>e(t.id),testID:`sentry-envelope-row-${t.id}`})}function FeedMeta({c:t}){const e=_attachStatus.STATUS_META[t.status];return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.meta,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{testID:"sentry-status-chip",accessible:true,accessibilityLabel:`Sentry capture: ${e.label}`,children:(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:e.label,color:e.color,variant:"quiet",dot:true})}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.metaTotals,testID:"sentry-totals",children:[t.rows.length," \xB7 ",(0,_sharedUi.formatBytes)(t.totalBytes)]})]})}function EmptyList({status:t}){const e=t==="attached"?"Attached to the Sentry client. Envelopes will appear here as the app sends them.":t==="sdk-not-found"?"@sentry/react-native isn't installed in this app (or isn't resolvable). Pass getClient to installSentryCapture / SentryRoot to attach explicitly.":t==="no-client"?"Sentry SDK found, but no client appeared \u2014 is Sentry.init() being called?":"Looking for the app's Sentry client\u2026";return(0,_jsxRuntime.jsx)(_sharedUi.ToolEmptyState,{testID:"sentry-empty",otto:t==="attached"?"guard":"scanning",title:"No envelopes captured",message:e})}function pretty(t){try{return JSON.stringify(t,null,2)??String(t)}catch{return String(t)}}function PayloadBlock({value:t,testID:e}){const r=t!==null&&typeof t==="object";if(!r){const o=pretty(t);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.payloadBlock,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.payloadCopy,children:(0,_jsxRuntime.jsx)(_sharedUi.CopyButton,{value:o,size:12})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.payload,selectable:true,testID:e,children:o})]})}return(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.payloadTree,testID:e,children:(0,_jsxRuntime.jsx)(_dataViewer.DataViewer,{title:"",data:t,rawMode:true,showTypeFilter:true,initialExpanded:false,testIDPrefix:e?`${e}-node`:void 0})})}function ItemCard({item:t,index:e}){return(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-item-${e}`,contentStyle:styles.cardBody,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.itemHead,children:[(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:t.type,color:typeColor(t.type),variant:"outline"}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.itemMeta,children:[(0,_sharedUi.formatBytes)(t.bytes),t.spanCount!=null?` \xB7 ${t.spanCount} span${t.spanCount===1?"":"s"}`:""]})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.itemSummary,testID:`sentry-item-${e}-summary`,children:t.summary}),t.binary?(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.itemBinary,children:["binary payload (",(0,_sharedUi.formatBytes)(t.bytes),")"]}):t.payload!==void 0?(0,_jsxRuntime.jsx)(PayloadBlock,{value:t.payload,testID:`sentry-item-${e}-payload`}):null]})}function EnvelopeDetail({envelope:t}){return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{keyboardShouldPersistTaps:"handled",style:styles.container,contentContainerStyle:styles.detailContent,testID:"sentry-envelope-detail",children:[(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{contentStyle:styles.cardBody,children:[(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Captured",value:formatClock(t.timestamp)}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Size",value:(0,_sharedUi.formatBytes)(t.totalBytes)}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Items",value:String(t.items.length)}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Origin",value:t.origin}),t.eventId?(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Event ID",value:t.eventId,mono:true,copyable:true}):null]}),(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"ITEMS"}),t.items.map((e,r)=>(0,_jsxRuntime.jsx)(ItemCard,{item:e,index:r},r)),t.header!==void 0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"ENVELOPE HEADER"}),(0,_jsxRuntime.jsx)(_sharedUi.DevToolsCard,{contentStyle:styles.cardBody,children:(0,_jsxRuntime.jsx)(PayloadBlock,{value:t.header,testID:"sentry-envelope-header"})})]}):null]})}function SentryBody({c:t}){const e=(0,_react.useCallback)(({item:r})=>(0,_jsxRuntime.jsx)(EnvelopeRow,{envelope:r,onPress:t.openDetail}),[t.openDetail]);if(t.tab==="cost"){return(0,_jsxRuntime.jsx)(_SentryCostView.SentryCostView,{c:t})}if(t.tab==="drops"){return(0,_jsxRuntime.jsx)(_SentryDropsView.SentryDropsView,{c:t})}if(t.tab==="audit"){return(0,_jsxRuntime.jsx)(_SentryAuditView.SentryAuditView,{c:t})}if(t.view==="detail"&&t.selected){return(0,_jsxRuntime.jsx)(EnvelopeDetail,{envelope:t.selected})}return(0,_jsxRuntime.jsx)(_reactNative.FlatList,{keyboardShouldPersistTaps:"handled",style:styles.container,data:t.rows,keyExtractor:r=>String(r.id),renderItem:e,ListHeaderComponent:(0,_jsxRuntime.jsx)(FeedMeta,{c:t}),ListEmptyComponent:(0,_jsxRuntime.jsx)(EmptyList,{status:t.status}),contentContainerStyle:styles.listContent,..._sharedUi.LOG_LIST_PRESET,testID:"sentry-envelope-list"})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},listContent:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:12},meta:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingBottom:8},metaTotals:{color:_sharedUi.night.color.textTertiary,fontSize:11,fontVariant:["tabular-nums"]},detailContent:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},cardBody:{gap:8},itemHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},itemMeta:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},itemSummary:{color:_sharedUi.night.color.text,fontSize:12,fontWeight:"600"},itemBinary:{color:_sharedUi.night.color.textTertiary,fontSize:11,fontStyle:"italic"},payloadBlock:{backgroundColor:_sharedUi.night.color.fill,borderRadius:6,padding:8,paddingRight:26},payloadTree:{backgroundColor:_sharedUi.night.color.fill,borderRadius:6,marginHorizontal:-4,paddingVertical:4,overflow:"hidden"},payloadCopy:{position:"absolute",top:4,right:4,zIndex:1},payload:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontFamily:MONO,lineHeight:16}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryCostView=SentryCostView;var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _layout=require("./layout");var _plans=require("../quota/plans");var _usage=require("../quota/usage");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function fractionColor(e){if(e===null)return _sharedUi.night.color.textTertiary;if(e>=1)return"#F87171";if(e>=.6)return"#FBBF24";return"#34D399"}function formatUnits(e,n){if(n==="bytes")return(0,_sharedUi.formatBytes)(e);if(e>=1e6)return`${(e/1e6).toFixed(1)}M`;if(e>=1e3)return`${(e/1e3).toFixed(1)}k`;return String(e)}function formatFraction(e){if(e===null)return"\u2014";if(!Number.isFinite(e))return"not on plan";if(e>=10)return`${Math.round(e)}\xD7 quota`;return`${Math.round(e*100)}% of quota`}function CategoryCard({category:e,session:n,projected:i,quota:r,usable:s}){const o=s?(0,_usage.quotaFraction)(i,r):null;const l=fractionColor(o);const t=o===null||!Number.isFinite(o)?o===null?0:100:Math.min(100,o*100);const a=s?`, about ${formatUnits(i,e.format)} per month, ${formatFraction(o)}`:", projection needs a longer session";const c=r>0?`, quota ${formatUnits(r,e.format)}`:", not included in this plan";return(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-cost-${e.key}`,contentStyle:styles.cardBody,accessible:true,accessibilityLabel:`${e.label}: ${formatUnits(n,e.format)} this session${a}${c}`,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.head,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.label,children:e.label}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.session,children:[formatUnits(n,e.format)," this session"]})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.barTrack,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.barFill,{width:`${t}%`,backgroundColor:l}]})}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Projected",value:s?`${formatUnits(i,e.format)}/mo \xB7 ${formatFraction(o)}`:"needs a longer session",valueColor:l}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Quota",value:r>0?formatUnits(r,e.format):"not included"}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{style:styles.hint,children:e.hint})]})}function SentryCostView({c:e}){const{usage:n,projection:i,plan:r}=e;const{scrollProps:s,onTouchStart:o,isTap:l}=(0,_sharedUi.useChipTap)();return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.container,contentContainerStyle:styles.content,testID:"sentry-cost-view",children:[(0,_jsxRuntime.jsx)(_sharedUi.ChipStrip,{scrollProps:s,contentStyle:styles.planStrip,sentryLabel:"ignore devtools sentry plan strip scroll",children:_plans.SENTRY_PLANS.map(t=>(0,_jsxRuntime.jsx)(_reactNative.View,{onTouchStart:o,children:(0,_jsxRuntime.jsx)(_sharedUi.NightChip,{label:t.name,selected:t.id===r.id,onPress:()=>{if(l())e.setPlanId(t.id)},testID:`sentry-plan-${t.id}`})},t.id))}),(0,_jsxRuntime.jsxs)(_sharedUi.NightFootnote,{style:styles.windowNote,children:[e.rows.length," envelope",e.rows.length===1?"":"s"," over"," ",(0,_sharedUi.formatDuration)(n.windowMs),i.usable?" \xB7 projection extrapolates this rate to 30 days":""]}),_plans.CATEGORY_META.map(t=>(0,_jsxRuntime.jsx)(CategoryCard,{category:t,session:n.totals[t.key],projected:i.totals[t.key],quota:r.quota[t.key],usable:i.usable},t.key)),n.contributors.length>0?(0,_jsxRuntime.jsxs)(_reactNative.View,{testID:"sentry-cost-contributors",children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"WHAT COSTS THE MOST"}),(0,_jsxRuntime.jsx)(_sharedUi.DevToolsCard,{contentStyle:styles.contribBody,children:n.contributors.slice(0,8).map(t=>{const a=_plans.CATEGORY_META.find(c=>c.key===t.category);return(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:t.label,value:`${formatUnits(t.units,a?.format??"count")} ${a?.label.toLowerCase()??t.category}${t.occurrences>1?` \xD7${t.occurrences}`:""}`},`${t.category}:${t.label}`)})})]}):null,(0,_jsxRuntime.jsxs)(_sharedUi.NightFootnote,{style:styles.footnote,children:["Sentry bills on receipt \u2014 data their server-side sampling later drops is still charged, so the only lossless lever is client config, and on mobile that ships frozen in the binary. Quotas as published ",_plans.SENTRY_PLANS_VERIFIED_ON,"."]})]})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},planStrip:{paddingHorizontal:12,gap:8},windowNote:{marginHorizontal:12,marginTop:6},sectionLabel:{marginHorizontal:12,marginTop:12,marginBottom:2},cardBody:{gap:6},hint:{marginTop:2,marginLeft:0,fontSize:_sharedUi.night.font.micro,lineHeight:_sharedUi.night.font.micro*1.4},contribBody:{gap:0},head:{flexDirection:"row",alignItems:"baseline",justifyContent:"space-between",gap:8},label:{color:_sharedUi.night.color.text,fontSize:13,fontWeight:"700"},session:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},barTrack:{height:10,borderRadius:5,backgroundColor:_sharedUi.night.color.fill,overflow:"hidden"},barFill:{height:10,borderRadius:5},footnote:{marginHorizontal:12,marginTop:10}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryCostView=SentryCostView;var _react=_interopRequireDefault(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _layout=require("./layout");var _plans=require("../quota/plans");var _usage=require("../quota/usage");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function fractionColor(e){if(e===null)return _sharedUi.night.color.textTertiary;if(e>=1)return"#F87171";if(e>=.6)return"#FBBF24";return"#34D399"}function formatUnits(e,n){if(n==="bytes")return(0,_sharedUi.formatBytes)(e);if(e>=1e6)return`${(e/1e6).toFixed(1)}M`;if(e>=1e3)return`${(e/1e3).toFixed(1)}k`;return String(e)}function formatFraction(e){if(e===null)return"\u2014";if(!Number.isFinite(e))return"not on plan";if(e>=10)return`${Math.round(e)}\xD7 quota`;return`${Math.round(e*100)}% of quota`}function CategoryCard({category:e,session:n,projected:i,quota:r,usable:s}){const o=s?(0,_usage.quotaFraction)(i,r):null;const l=fractionColor(o);const t=o===null||!Number.isFinite(o)?o===null?0:100:Math.min(100,o*100);const a=s?`, about ${formatUnits(i,e.format)} per month, ${formatFraction(o)}`:", projection needs a longer session";const c=r>0?`, quota ${formatUnits(r,e.format)}`:", not included in this plan";return(0,_jsxRuntime.jsxs)(_sharedUi.DevToolsCard,{testID:`sentry-cost-${e.key}`,contentStyle:styles.cardBody,accessible:true,accessibilityLabel:`${e.label}: ${formatUnits(n,e.format)} this session${a}${c}`,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.head,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.label,children:e.label}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.session,children:[formatUnits(n,e.format)," this session"]})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.barTrack,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.barFill,{width:`${t}%`,backgroundColor:l}]})}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Projected",value:s?`${formatUnits(i,e.format)}/mo \xB7 ${formatFraction(o)}`:"needs a longer session",valueColor:l}),(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:"Quota",value:r>0?formatUnits(r,e.format):"not included"}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{style:styles.hint,children:e.hint})]})}function SentryCostView({c:e}){const{usage:n,projection:i,plan:r}=e;const{scrollProps:s,onTouchStart:o,isTap:l}=(0,_sharedUi.useChipTap)();return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{keyboardShouldPersistTaps:"handled",style:styles.container,contentContainerStyle:styles.content,testID:"sentry-cost-view",children:[(0,_jsxRuntime.jsx)(_sharedUi.ChipStrip,{scrollProps:s,contentStyle:styles.planStrip,sentryLabel:"ignore devtools sentry plan strip scroll",children:_plans.SENTRY_PLANS.map(t=>(0,_jsxRuntime.jsx)(_reactNative.View,{onTouchStart:o,children:(0,_jsxRuntime.jsx)(_sharedUi.NightChip,{label:t.name,selected:t.id===r.id,onPress:()=>{if(l())e.setPlanId(t.id)},testID:`sentry-plan-${t.id}`})},t.id))}),(0,_jsxRuntime.jsxs)(_sharedUi.NightFootnote,{style:styles.windowNote,children:[e.rows.length," envelope",e.rows.length===1?"":"s"," over"," ",(0,_sharedUi.formatDuration)(n.windowMs),i.usable?" \xB7 projection extrapolates this rate to 30 days":""]}),_plans.CATEGORY_META.map(t=>(0,_jsxRuntime.jsx)(CategoryCard,{category:t,session:n.totals[t.key],projected:i.totals[t.key],quota:r.quota[t.key],usable:i.usable},t.key)),n.contributors.length>0?(0,_jsxRuntime.jsxs)(_reactNative.View,{testID:"sentry-cost-contributors",children:[(0,_jsxRuntime.jsx)(_sharedUi.NightSectionLabel,{style:styles.sectionLabel,children:"WHAT COSTS THE MOST"}),(0,_jsxRuntime.jsx)(_sharedUi.DevToolsCard,{contentStyle:styles.contribBody,children:n.contributors.slice(0,8).map(t=>{const a=_plans.CATEGORY_META.find(c=>c.key===t.category);return(0,_jsxRuntime.jsx)(_sharedUi.InfoRow,{label:t.label,value:`${formatUnits(t.units,a?.format??"count")} ${a?.label.toLowerCase()??t.category}${t.occurrences>1?` \xD7${t.occurrences}`:""}`},`${t.category}:${t.label}`)})})]}):null,(0,_jsxRuntime.jsxs)(_sharedUi.NightFootnote,{style:styles.footnote,children:["Sentry bills on receipt \u2014 data their server-side sampling later drops is still charged, so the only lossless lever is client config, and on mobile that ships frozen in the binary. Quotas as published ",_plans.SENTRY_PLANS_VERIFIED_ON,"."]})]})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},planStrip:{paddingHorizontal:12,gap:8},windowNote:{marginHorizontal:12,marginTop:6},sectionLabel:{marginHorizontal:12,marginTop:12,marginBottom:2},cardBody:{gap:6},hint:{marginTop:2,marginLeft:0,fontSize:_sharedUi.night.font.micro,lineHeight:_sharedUi.night.font.micro*1.4},contribBody:{gap:0},head:{flexDirection:"row",alignItems:"baseline",justifyContent:"space-between",gap:8},label:{color:_sharedUi.night.color.text,fontSize:13,fontWeight:"700"},session:{color:_sharedUi.night.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},barTrack:{height:10,borderRadius:5,backgroundColor:_sharedUi.night.color.fill,overflow:"hidden"},barFill:{height:10,borderRadius:5},footnote:{marginHorizontal:12,marginTop:10}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryDropsView=SentryDropsView;var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _layout=require("./layout");var _types=require("../drops/types");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(n,i){if("function"==typeof WeakMap)var l=new WeakMap,u=new WeakMap;return(_interopRequireWildcard=function(t,e){if(!e&&t&&t.__esModule)return t;var r,o,s={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return s;if(r=e?u:l){if(r.has(t))return r.get(t);r.set(t,s)}for(const a in t)"default"!==a&&{}.hasOwnProperty.call(t,a)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,a))&&(o.get||o.set)?r(s,a,o):s[a]=t[a]);return s})(n,i)}const REASON_COLOR={before_send:"#F87171",sample_rate:"#60A5FA",event_processor:"#FBBF24",rn_discard:"#A78BFA",client_report:"#FB923C",native:"#F472B6",other:"#9CA3AF"};function SentryDropsView({c:n}){const[i,l]=(0,_react.useState)(null);const{scrollProps:u}=(0,_sharedUi.useChipTap)();const t=(0,_react.useCallback)(e=>l(r=>r===e?null:e),[]);if(n.drops.length===0){return(0,_jsxRuntime.jsx)(_sharedUi.ToolEmptyState,{testID:"sentry-drops-empty",otto:"scanning",title:"Nothing dropped yet",message:"Events the SDK discards before sending will be listed here with the reason \u2014 a beforeSend that returned null, a sample-rate roll, dedupe, or a native rate limit."})}return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{style:styles.container,contentContainerStyle:styles.content,testID:"sentry-drops-view",children:[(0,_jsxRuntime.jsx)(_sharedUi.ChipStrip,{scrollProps:u,contentStyle:styles.summaryStrip,sentryLabel:"ignore devtools sentry drop summary scroll",children:n.dropSummary.map(e=>(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:`${e.units} \xD7 ${_types.DROP_REASON_META[e.reason].label}`,color:REASON_COLOR[e.reason],variant:"tinted",size:"sm",uppercase:false,testID:`sentry-drop-summary-${e.reason}`},e.reason))}),n.dropRows.map(e=>(0,_jsxRuntime.jsx)(_sharedUi.CompactRow,{statusDotColor:REASON_COLOR[e.reason],statusLabel:e.category,statusSublabel:e.source,primaryText:e.detail,secondaryAccessory:(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:_types.DROP_REASON_META[e.reason].label,color:REASON_COLOR[e.reason],variant:"outline",uppercase:false}),badgeText:e.quantity>1?`\xD7${e.quantity}`:void 0,badgeColor:REASON_COLOR[e.reason],bottomRightText:(0,_jsxRuntime.jsx)(_sharedUi.RelativeTime,{timestamp:e.timestamp}),isExpanded:i===e.id,expandedGlowColor:REASON_COLOR[e.reason],expandedContent:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expanded,children:[(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:_types.DROP_REASON_META[e.reason].label,color:REASON_COLOR[e.reason],variant:"outline",uppercase:false}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{style:styles.explanation,children:_types.DROP_REASON_META[e.reason].explanation})]}),showChevron:true,onPress:()=>t(e.id),testID:`sentry-drop-row-${e.id}`},e.id))]})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},summaryStrip:{paddingHorizontal:12,gap:8,paddingBottom:4},expanded:{gap:6,alignItems:"flex-start"},explanation:{marginTop:2,marginLeft:0}});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.SentryDropsView=SentryDropsView;var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _layout=require("./layout");var _types=require("../drops/types");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(n,i){if("function"==typeof WeakMap)var l=new WeakMap,u=new WeakMap;return(_interopRequireWildcard=function(t,e){if(!e&&t&&t.__esModule)return t;var r,o,s={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return s;if(r=e?u:l){if(r.has(t))return r.get(t);r.set(t,s)}for(const a in t)"default"!==a&&{}.hasOwnProperty.call(t,a)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,a))&&(o.get||o.set)?r(s,a,o):s[a]=t[a]);return s})(n,i)}const REASON_COLOR={before_send:"#F87171",sample_rate:"#60A5FA",event_processor:"#FBBF24",rn_discard:"#A78BFA",client_report:"#FB923C",native:"#F472B6",other:"#9CA3AF"};function SentryDropsView({c:n}){const[i,l]=(0,_react.useState)(null);const{scrollProps:u}=(0,_sharedUi.useChipTap)();const t=(0,_react.useCallback)(e=>l(r=>r===e?null:e),[]);if(n.drops.length===0){return(0,_jsxRuntime.jsx)(_sharedUi.ToolEmptyState,{testID:"sentry-drops-empty",otto:"scanning",title:"Nothing dropped yet",message:"Events the SDK discards before sending will be listed here with the reason \u2014 a beforeSend that returned null, a sample-rate roll, dedupe, or a native rate limit."})}return(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{keyboardShouldPersistTaps:"handled",style:styles.container,contentContainerStyle:styles.content,testID:"sentry-drops-view",children:[(0,_jsxRuntime.jsx)(_sharedUi.ChipStrip,{scrollProps:u,contentStyle:styles.summaryStrip,sentryLabel:"ignore devtools sentry drop summary scroll",children:n.dropSummary.map(e=>(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:`${e.units} \xD7 ${_types.DROP_REASON_META[e.reason].label}`,color:REASON_COLOR[e.reason],variant:"tinted",size:"sm",uppercase:false,testID:`sentry-drop-summary-${e.reason}`},e.reason))}),n.dropRows.map(e=>(0,_jsxRuntime.jsx)(_sharedUi.CompactRow,{statusDotColor:REASON_COLOR[e.reason],statusLabel:e.category,statusSublabel:e.source,primaryText:e.detail,secondaryAccessory:(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:_types.DROP_REASON_META[e.reason].label,color:REASON_COLOR[e.reason],variant:"outline",uppercase:false}),badgeText:e.quantity>1?`\xD7${e.quantity}`:void 0,badgeColor:REASON_COLOR[e.reason],bottomRightText:(0,_jsxRuntime.jsx)(_sharedUi.RelativeTime,{timestamp:e.timestamp}),isExpanded:i===e.id,expandedGlowColor:REASON_COLOR[e.reason],expandedContent:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.expanded,children:[(0,_jsxRuntime.jsx)(_sharedUi.Pill,{label:_types.DROP_REASON_META[e.reason].label,color:REASON_COLOR[e.reason],variant:"outline",uppercase:false}),(0,_jsxRuntime.jsx)(_sharedUi.NightFootnote,{style:styles.explanation,children:_types.DROP_REASON_META[e.reason].explanation})]}),showChevron:true,onPress:()=>t(e.id),testID:`sentry-drop-row-${e.id}`},e.id))]})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:_layout.SENTRY_BODY_TOP_INSET,paddingBottom:24},summaryStrip:{paddingHorizontal:12,gap:8,paddingBottom:4},expanded:{gap:6,alignItems:"flex-start"},explanation:{marginTop:2,marginLeft:0}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import B from"react";import{View as y,Text as i,ScrollView as
|
|
1
|
+
"use strict";import B from"react";import{View as y,Text as i,ScrollView as L,StyleSheet as f}from"react-native";import{night as s,DevToolsCard as c,NightSectionLabel as p,NightFootnote as d,Pill as m,ToolEmptyState as v}from"@buoy-gg/shared-ui";import{SENTRY_BODY_TOP_INSET as N}from"./layout";import{PII_KIND_LABEL as u}from"../audit/pii";import{monoFont as C}from"@buoy-gg/shared-ui";import{jsx as o,jsxs as r,Fragment as g}from"react/jsx-runtime";const S=C;const l={critical:"#F87171",warning:"#FBBF24",info:"#60A5FA"};const I={quota:"Quota",privacy:"Privacy",correctness:"Correctness"};export function SentryAuditView({c:b}){const{audit:a,piiFindings:n}=b;if(!a){return o(v,{testID:"sentry-audit-unavailable",otto:"scanning",title:"No client to audit",message:"The audit reads the options Sentry.init actually resolved, so it needs a live client. Once the tool attaches, the resolved config is graded here."})}const T=a.findings.length===0&&n.length===0;return r(L,{keyboardShouldPersistTaps:"handled",style:t.container,contentContainerStyle:t.content,testID:"sentry-audit-view",children:[T?r(c,{testID:"sentry-audit-clean",contentStyle:t.cardBody,children:[o(i,{style:t.title,children:"Nothing to flag"}),o(d,{tone:"secondary",style:t.inCard,children:"The resolved config raised no findings, and nothing sent this session matched a personal-data pattern."})]}):null,a.findings.length>0?r(g,{children:[o(p,{style:t.sectionLabel,children:"CONFIG"}),a.findings.map(e=>r(c,{testID:`sentry-audit-${e.id}`,style:[t.stripe,{borderLeftColor:l[e.severity]}],contentStyle:t.cardBody,accessible:true,accessibilityLabel:`${e.severity} ${e.category} finding. ${e.title}. ${e.detail}`,children:[r(y,{style:t.head,children:[o(i,{style:t.title,children:e.title}),o(m,{label:I[e.category]??e.category,color:l[e.severity],variant:"tinted"})]}),o(d,{tone:"secondary",style:t.inCard,children:e.detail})]},e.id))]}):null,n.length>0?r(g,{children:[o(p,{style:t.sectionLabel,children:"PERSONAL DATA IN SENT PAYLOADS"}),o(d,{style:t.piiNote,children:"Values are redacted here \u2014 the path is what you need to fix."}),n.map((e,h)=>r(c,{testID:`sentry-pii-${h}`,style:[t.stripe,{borderLeftColor:l.critical}],contentStyle:t.cardBody,accessible:true,accessibilityLabel:`${u[e.kind]} at ${e.path}, value redacted as ${e.sample}`,children:[r(y,{style:t.head,children:[o(m,{label:u[e.kind],color:l.critical,variant:"tinted"}),o(i,{style:t.sample,children:e.sample})]}),o(i,{style:t.path,selectable:true,children:e.path})]},`${e.path}-${h}`))]}):null]})}const t=f.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:N,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},piiNote:{marginHorizontal:12,marginTop:0,marginBottom:2},cardBody:{gap:6},inCard:{marginTop:2,marginLeft:0},stripe:{borderLeftWidth:3,borderRadius:8},head:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},title:{color:s.color.text,fontSize:13,fontWeight:"700",flexShrink:1},sample:{color:s.color.textTertiary,fontSize:10,fontFamily:S},path:{color:s.color.textSecondary,fontSize:11,fontFamily:S}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import W,{useCallback as B}from"react";import{View as s,Text as d,FlatList as D,ScrollView as E,StyleSheet as x}from"react-native";import{night as l,ToolEmptyState as I,LOG_LIST_PRESET as w,CompactRow as _,DevToolsCard as m,InfoRow as c,Pill as f,CopyButton as F,NightSectionLabel as g,RelativeTime as L,formatBytes as y}from"@buoy-gg/shared-ui";import{DataViewer as
|
|
1
|
+
"use strict";import W,{useCallback as B}from"react";import{View as s,Text as d,FlatList as D,ScrollView as E,StyleSheet as x}from"react-native";import{night as l,ToolEmptyState as I,LOG_LIST_PRESET as w,CompactRow as _,DevToolsCard as m,InfoRow as c,Pill as f,CopyButton as F,NightSectionLabel as g,RelativeTime as L,formatBytes as y}from"@buoy-gg/shared-ui";import{DataViewer as k}from"@buoy-gg/shared-ui/dataViewer";import{SENTRY_BODY_TOP_INSET as h}from"./layout";import{STATUS_META as $}from"./attachStatus";import{SentryCostView as v}from"./SentryCostView";import{SentryDropsView as R}from"./SentryDropsView";import{SentryAuditView as P}from"./SentryAuditView";import{monoFont as A}from"@buoy-gg/shared-ui";import{jsx as e,jsxs as a,Fragment as z}from"react/jsx-runtime";const O=A;const H={event:"#F87171",transaction:"#A78BFA",session:"#34D399",sessions:"#34D399",client_report:"#FBBF24",log:"#60A5FA",attachment:"#F472B6",profile:"#FB923C",profile_chunk:"#FB923C",replay_event:"#22D3EE",replay_recording:"#22D3EE",user_report:"#F472B6",feedback:"#F472B6"};const V={client_report:"report",replay_recording:"replay",replay_event:"replay",profile_chunk:"profile",user_report:"feedback"};function S(t){return H[t]??"#9CA3AF"}function j(t){return V[t]??t}function M(t){const n=new Date(t);const r=i=>String(i).padStart(2,"0");return`${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`}function N({envelope:t,onPress:n}){const r=t.items[0];const i=t.items.reduce((u,T)=>u+(T.spanCount??0),0);const p=t.items.length-1;const C=`${r?.summary??"envelope"}${i>0?` \xB7 ${i} span${i===1?"":"s"}`:""}`;return e(_,{statusDotColor:S(r?.type??""),statusLabel:j(r?.type??"envelope"),statusSublabel:p>0?`+${p} more`:void 0,primaryText:C,secondaryText:p>0?t.items.map(u=>u.type).join(" + "):void 0,badgeText:y(t.totalBytes),badgeColor:l.color.textSecondary,bottomRightText:e(L,{timestamp:t.timestamp}),showChevron:true,onPress:()=>n(t.id),testID:`sentry-envelope-row-${t.id}`})}function Y({c:t}){const n=$[t.status];return a(s,{style:o.meta,children:[e(s,{testID:"sentry-status-chip",accessible:true,accessibilityLabel:`Sentry capture: ${n.label}`,children:e(f,{label:n.label,color:n.color,variant:"quiet",dot:true})}),a(d,{style:o.metaTotals,testID:"sentry-totals",children:[t.rows.length," \xB7 ",y(t.totalBytes)]})]})}function q({status:t}){const n=t==="attached"?"Attached to the Sentry client. Envelopes will appear here as the app sends them.":t==="sdk-not-found"?"@sentry/react-native isn't installed in this app (or isn't resolvable). Pass getClient to installSentryCapture / SentryRoot to attach explicitly.":t==="no-client"?"Sentry SDK found, but no client appeared \u2014 is Sentry.init() being called?":"Looking for the app's Sentry client\u2026";return e(I,{testID:"sentry-empty",otto:t==="attached"?"guard":"scanning",title:"No envelopes captured",message:n})}function G(t){try{return JSON.stringify(t,null,2)??String(t)}catch{return String(t)}}function b({value:t,testID:n}){const r=t!==null&&typeof t==="object";if(!r){const i=G(t);return a(s,{style:o.payloadBlock,children:[e(s,{style:o.payloadCopy,children:e(F,{value:i,size:12})}),e(d,{style:o.payload,selectable:true,testID:n,children:i})]})}return e(s,{style:o.payloadTree,testID:n,children:e(k,{title:"",data:t,rawMode:true,showTypeFilter:true,initialExpanded:false,testIDPrefix:n?`${n}-node`:void 0})})}function J({item:t,index:n}){return a(m,{testID:`sentry-item-${n}`,contentStyle:o.cardBody,children:[a(s,{style:o.itemHead,children:[e(f,{label:t.type,color:S(t.type),variant:"outline"}),a(d,{style:o.itemMeta,children:[y(t.bytes),t.spanCount!=null?` \xB7 ${t.spanCount} span${t.spanCount===1?"":"s"}`:""]})]}),e(d,{style:o.itemSummary,testID:`sentry-item-${n}-summary`,children:t.summary}),t.binary?a(d,{style:o.itemBinary,children:["binary payload (",y(t.bytes),")"]}):t.payload!==void 0?e(b,{value:t.payload,testID:`sentry-item-${n}-payload`}):null]})}function K({envelope:t}){return a(E,{keyboardShouldPersistTaps:"handled",style:o.container,contentContainerStyle:o.detailContent,testID:"sentry-envelope-detail",children:[a(m,{contentStyle:o.cardBody,children:[e(c,{label:"Captured",value:M(t.timestamp)}),e(c,{label:"Size",value:y(t.totalBytes)}),e(c,{label:"Items",value:String(t.items.length)}),e(c,{label:"Origin",value:t.origin}),t.eventId?e(c,{label:"Event ID",value:t.eventId,mono:true,copyable:true}):null]}),e(g,{style:o.sectionLabel,children:"ITEMS"}),t.items.map((n,r)=>e(J,{item:n,index:r},r)),t.header!==void 0?a(z,{children:[e(g,{style:o.sectionLabel,children:"ENVELOPE HEADER"}),e(m,{contentStyle:o.cardBody,children:e(b,{value:t.header,testID:"sentry-envelope-header"})})]}):null]})}export function SentryBody({c:t}){const n=B(({item:r})=>e(N,{envelope:r,onPress:t.openDetail}),[t.openDetail]);if(t.tab==="cost"){return e(v,{c:t})}if(t.tab==="drops"){return e(R,{c:t})}if(t.tab==="audit"){return e(P,{c:t})}if(t.view==="detail"&&t.selected){return e(K,{envelope:t.selected})}return e(D,{keyboardShouldPersistTaps:"handled",style:o.container,data:t.rows,keyExtractor:r=>String(r.id),renderItem:n,ListHeaderComponent:e(Y,{c:t}),ListEmptyComponent:e(q,{status:t.status}),contentContainerStyle:o.listContent,...w,testID:"sentry-envelope-list"})}const o=x.create({container:{flex:1,backgroundColor:"transparent"},listContent:{paddingTop:h,paddingBottom:12},meta:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingBottom:8},metaTotals:{color:l.color.textTertiary,fontSize:11,fontVariant:["tabular-nums"]},detailContent:{paddingTop:h,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},cardBody:{gap:8},itemHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},itemMeta:{color:l.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},itemSummary:{color:l.color.text,fontSize:12,fontWeight:"600"},itemBinary:{color:l.color.textTertiary,fontSize:11,fontStyle:"italic"},payloadBlock:{backgroundColor:l.color.fill,borderRadius:6,padding:8,paddingRight:26},payloadTree:{backgroundColor:l.color.fill,borderRadius:6,marginHorizontal:-4,paddingVertical:4,overflow:"hidden"},payloadCopy:{position:"absolute",top:4,right:4,zIndex:1},payload:{color:l.color.textSecondary,fontSize:11,fontFamily:O,lineHeight:16}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import
|
|
1
|
+
"use strict";import z from"react";import{View as u,Text as g,ScrollView as w,StyleSheet as C}from"react-native";import{night as d,ChipStrip as N,useChipTap as _,NightChip as x,NightSectionLabel as k,NightFootnote as b,DevToolsCard as S,InfoRow as y,formatBytes as F,formatDuration as B}from"@buoy-gg/shared-ui";import{SENTRY_BODY_TOP_INSET as D}from"./layout";import{CATEGORY_META as T,SENTRY_PLANS as I,SENTRY_PLANS_VERIFIED_ON as j}from"../quota/plans";import{quotaFraction as E}from"../quota/usage";import{jsx as n,jsxs as a}from"react/jsx-runtime";function L(t){if(t===null)return d.color.textTertiary;if(t>=1)return"#F87171";if(t>=.6)return"#FBBF24";return"#34D399"}function c(t,r){if(r==="bytes")return F(t);if(t>=1e6)return`${(t/1e6).toFixed(1)}M`;if(t>=1e3)return`${(t/1e3).toFixed(1)}k`;return String(t)}function $(t){if(t===null)return"\u2014";if(!Number.isFinite(t))return"not on plan";if(t>=10)return`${Math.round(t)}\xD7 quota`;return`${Math.round(t*100)}% of quota`}function P({category:t,session:r,projected:s,quota:l,usable:h}){const i=h?E(s,l):null;const m=L(i);const e=i===null||!Number.isFinite(i)?i===null?0:100:Math.min(100,i*100);const p=h?`, about ${c(s,t.format)} per month, ${$(i)}`:", projection needs a longer session";const f=l>0?`, quota ${c(l,t.format)}`:", not included in this plan";return a(S,{testID:`sentry-cost-${t.key}`,contentStyle:o.cardBody,accessible:true,accessibilityLabel:`${t.label}: ${c(r,t.format)} this session${p}${f}`,children:[a(u,{style:o.head,children:[n(g,{style:o.label,children:t.label}),a(g,{style:o.session,children:[c(r,t.format)," this session"]})]}),n(u,{style:o.barTrack,children:n(u,{style:[o.barFill,{width:`${e}%`,backgroundColor:m}]})}),n(y,{label:"Projected",value:h?`${c(s,t.format)}/mo \xB7 ${$(i)}`:"needs a longer session",valueColor:m}),n(y,{label:"Quota",value:l>0?c(l,t.format):"not included"}),n(b,{style:o.hint,children:t.hint})]})}export function SentryCostView({c:t}){const{usage:r,projection:s,plan:l}=t;const{scrollProps:h,onTouchStart:i,isTap:m}=_();return a(w,{keyboardShouldPersistTaps:"handled",style:o.container,contentContainerStyle:o.content,testID:"sentry-cost-view",children:[n(N,{scrollProps:h,contentStyle:o.planStrip,sentryLabel:"ignore devtools sentry plan strip scroll",children:I.map(e=>n(u,{onTouchStart:i,children:n(x,{label:e.name,selected:e.id===l.id,onPress:()=>{if(m())t.setPlanId(e.id)},testID:`sentry-plan-${e.id}`})},e.id))}),a(b,{style:o.windowNote,children:[t.rows.length," envelope",t.rows.length===1?"":"s"," over"," ",B(r.windowMs),s.usable?" \xB7 projection extrapolates this rate to 30 days":""]}),T.map(e=>n(P,{category:e,session:r.totals[e.key],projected:s.totals[e.key],quota:l.quota[e.key],usable:s.usable},e.key)),r.contributors.length>0?a(u,{testID:"sentry-cost-contributors",children:[n(k,{style:o.sectionLabel,children:"WHAT COSTS THE MOST"}),n(S,{contentStyle:o.contribBody,children:r.contributors.slice(0,8).map(e=>{const p=T.find(f=>f.key===e.category);return n(y,{label:e.label,value:`${c(e.units,p?.format??"count")} ${p?.label.toLowerCase()??e.category}${e.occurrences>1?` \xD7${e.occurrences}`:""}`},`${e.category}:${e.label}`)})})]}):null,a(b,{style:o.footnote,children:["Sentry bills on receipt \u2014 data their server-side sampling later drops is still charged, so the only lossless lever is client config, and on mobile that ships frozen in the binary. Quotas as published ",j,"."]})]})}const o=C.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:D,paddingBottom:24},planStrip:{paddingHorizontal:12,gap:8},windowNote:{marginHorizontal:12,marginTop:6},sectionLabel:{marginHorizontal:12,marginTop:12,marginBottom:2},cardBody:{gap:6},hint:{marginTop:2,marginLeft:0,fontSize:d.font.micro,lineHeight:d.font.micro*1.4},contribBody:{gap:0},head:{flexDirection:"row",alignItems:"baseline",justifyContent:"space-between",gap:8},label:{color:d.color.text,fontSize:13,fontWeight:"700"},session:{color:d.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},barTrack:{height:10,borderRadius:5,backgroundColor:d.color.fill,overflow:"hidden"},barFill:{height:10,borderRadius:5},footnote:{marginHorizontal:12,marginTop:10}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";import R,{useCallback as u,useState as y}from"react";import{ScrollView as g,StyleSheet as
|
|
1
|
+
"use strict";import R,{useCallback as u,useState as y}from"react";import{ScrollView as g,StyleSheet as h,View as b}from"react-native";import{ChipStrip as x,useChipTap as S,CompactRow as f,NightFootnote as C,Pill as r,RelativeTime as T,ToolEmptyState as _}from"@buoy-gg/shared-ui";import{SENTRY_BODY_TOP_INSET as v}from"./layout";import{DROP_REASON_META as s}from"../drops/types";import{jsx as t,jsxs as l}from"react/jsx-runtime";const a={before_send:"#F87171",sample_rate:"#60A5FA",event_processor:"#FBBF24",rn_discard:"#A78BFA",client_report:"#FB923C",native:"#F472B6",other:"#9CA3AF"};export function SentryDropsView({c:o}){const[i,d]=y(null);const{scrollProps:p}=S();const m=u(e=>d(c=>c===e?null:e),[]);if(o.drops.length===0){return t(_,{testID:"sentry-drops-empty",otto:"scanning",title:"Nothing dropped yet",message:"Events the SDK discards before sending will be listed here with the reason \u2014 a beforeSend that returned null, a sample-rate roll, dedupe, or a native rate limit."})}return l(g,{keyboardShouldPersistTaps:"handled",style:n.container,contentContainerStyle:n.content,testID:"sentry-drops-view",children:[t(x,{scrollProps:p,contentStyle:n.summaryStrip,sentryLabel:"ignore devtools sentry drop summary scroll",children:o.dropSummary.map(e=>t(r,{label:`${e.units} \xD7 ${s[e.reason].label}`,color:a[e.reason],variant:"tinted",size:"sm",uppercase:false,testID:`sentry-drop-summary-${e.reason}`},e.reason))}),o.dropRows.map(e=>t(f,{statusDotColor:a[e.reason],statusLabel:e.category,statusSublabel:e.source,primaryText:e.detail,secondaryAccessory:t(r,{label:s[e.reason].label,color:a[e.reason],variant:"outline",uppercase:false}),badgeText:e.quantity>1?`\xD7${e.quantity}`:void 0,badgeColor:a[e.reason],bottomRightText:t(T,{timestamp:e.timestamp}),isExpanded:i===e.id,expandedGlowColor:a[e.reason],expandedContent:l(b,{style:n.expanded,children:[t(r,{label:s[e.reason].label,color:a[e.reason],variant:"outline",uppercase:false}),t(C,{style:n.explanation,children:s[e.reason].explanation})]}),showChevron:true,onPress:()=>m(e.id),testID:`sentry-drop-row-${e.id}`},e.id))]})}const n=h.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:v,paddingBottom:24},summaryStrip:{paddingHorizontal:12,gap:8,paddingBottom:4},expanded:{gap:6,alignItems:"flex-start"},explanation:{marginTop:2,marginLeft:0}});
|
package/lib/web/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";var Je=Object.defineProperty;var dn=Object.getOwnPropertyDescriptor;var un=Object.getOwnPropertyNames;var pn=Object.prototype.hasOwnProperty;var yn=(e,t)=>{for(var n in t)Je(e,n,{get:t[n],enumerable:true})},Qe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of un(t))!pn.call(e,a)&&a!==n&&Je(e,a,{get:()=>t[a],enumerable:!(r=dn(t,a))||r.enumerable});return e},fn=(e,t,n)=>(Qe(e,t,"default"),n&&Qe(n,t,"default"));var ee=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{createToolFactory as mn,defineToolPreset as hn}from"@buoy-gg/shared-ui/web";import{SentryIcon as Xe}from"@buoy-gg/shared-ui/web";var et="#9945FF";import{JsModal as bn}from"@buoy-gg/shared-ui/web";import{useCallback as fe,useMemo as k,useState as te,useSyncExternalStore as ne}from"react";import{createToolStore as gn}from"@buoy-gg/shared-ui/web";var vn=500,T=gn({id:"sentry",max:vn,order:"append",coalesce:"frame"}),me="searching",tt=null;function Sn(e,t={}){T.add({...e,id:T.allocId()}),t.urgent&&T.flushSync(true)}function re(e){me!==e&&(me=e,T.notify())}function K(e){return T.subscribe(e)}function ae(){return T.getSnapshot()}function F(){return me}function he(){T.clear()}function wn(e){T.set(e)}function be(){return tt}function xn(e){tt=e??null,T.notify()}function kn(e){re(e)}function Cn(e){return T.onClear(e)}var nt="2026-09";var oe=[{id:"developer",name:"Developer (free)",quota:{errors:5e3,spans:5e6,replays:50,logBytes:5368709120,attachmentBytes:1073741824}},{id:"team",name:"Team",quota:{errors:5e4,spans:5e6,replays:50,logBytes:5368709120,attachmentBytes:1073741824}},{id:"business",name:"Business",quota:{errors:5e4,spans:5e6,replays:50,logBytes:5368709120,attachmentBytes:1073741824}}],rt="developer";function at(e){return oe.find(t=>t.id===e)??oe[0]}var ge=[{key:"errors",label:"Errors",format:"count",hint:"One per captured event, including repeats on issues you've ignored."},{key:"spans",label:"Spans",format:"count",hint:"Billed individually \u2014 one transaction is a bundle of many."},{key:"replays",label:"Replays",format:"count",hint:"One per session, whatever its length."},{key:"logBytes",label:"Logs",format:"bytes",hint:"Billed by volume received."},{key:"attachmentBytes",label:"Attachments",format:"bytes",hint:"Screenshots and view hierarchies attached to events."}];var ve=()=>({errors:0,spans:0,replays:0,logBytes:0,attachmentBytes:0});function Tn(e){return e?.type==="feedback"}function Bn(e){return e.summary||"transaction"}function Se(e){let t=ve(),n=new Map,r=(s,i,l)=>{t[i]+=l;let d=`${i}:${s}`,c=n.get(d);c?(c.units+=l,c.occurrences+=1):n.set(d,{label:s,category:i,units:l,occurrences:1})};for(let s of e)for(let i of s.items)switch(i.type){case"event":Tn(i.payload)||r(i.summary,"errors",1);break;case"transaction":r(Bn(i),"spans",i.spanCount??1);break;case"replay_event":r("session replay","replays",1);break;case"log":r("logs","logBytes",i.bytes);break;case"attachment":r(i.summary||"attachment","attachmentBytes",i.bytes);break;default:break}let a=e[0]?.timestamp??0,o=e[e.length-1]?.timestamp??0;return{totals:t,windowMs:Math.max(0,o-a),contributors:[...n.values()].sort((s,i)=>i.units-s.units)}}var En=3e4,Dn=720*60*60*1e3;function we(e){if(e.windowMs<En)return{usable:false,totals:ve()};let t=Dn/e.windowMs,n=ve();for(let r of Object.keys(n))n[r]=Math.round(e.totals[r]*t);return{usable:true,totals:n}}function ot(e,t){return t<=0?e>0?1/0:null:e/t}import{createToolStore as $n}from"@buoy-gg/shared-ui/web";var An=300,A=$n({id:"sentry-drops",max:An,order:"append",coalesce:"frame"}),xe=new Map,it=(e,t)=>`${e==="rn_discard"?"event_processor":e}|${t}`;function ie(e){e.source==="observed"&&In(xe,e),A.add({...e,id:A.allocId()})}function _n(e,t){let n=[];for(let r of t){let a=it(r.reason,r.category),o=e.get(a)??0,s=Math.min(o,r.quantity);s>0&&e.set(a,o-s);let i=r.quantity-s;i<=0||n.push(i===r.quantity?r:{...r,quantity:i,detail:r.detail.replace(/^\d+/,String(i))})}return n}function In(e,t){let n=it(t.reason,t.category);e.set(n,(e.get(n)??0)+t.quantity)}function Ln(e){for(let t of _n(xe,e))A.add({...t,id:A.allocId()})}function ke(e){return A.subscribe(e)}function se(){return A.getSnapshot()}function Ce(){xe.clear(),A.clear()}function Fn(e){A.set(e)}var Pn={before_send:"before_send",event_processor:"event_processor",sample_rate:"sample_rate",ratelimit_backoff:"native",network_error:"native",queue_overflow:"native",cache_overflow:"native",send_error:"native"};function st(e,t){let n=e?.discarded_events;if(!Array.isArray(n))return[];let r=[];for(let a of n){let o=a,s=typeof o.reason=="string"?o.reason:"",i=typeof o.category=="string"?o.category:"unknown",l=typeof o.quantity=="number"?o.quantity:1,d=Pn[s]??"other";r.push({timestamp:t,reason:d,category:i,quantity:l,detail:d==="other"&&s?`${l} ${i} \u2014 SDK reason "${s}"`:`${l} ${i}`,source:"reported"})}return r}var Nn="sentry.rn.discard_reason",Rn={empty_back_navigation:"back navigation that produced no spans",no_route_info:"no route info was available",no_child_spans:"the transaction had no child spans",discarded_latest_navigation:"a newer navigation superseded it"};function lt(e){let t=e?.contexts?.trace?.data?.[Nn];return typeof t=="string"?t:null}function ct(e,t,n){return{timestamp:n,reason:"rn_discard",category:"transaction",quantity:1,detail:`${t} \u2014 ${Rn[e]??e}`,source:"observed"}}function dt(e,t){let n=e.toLowerCase(),r=n.includes("429")||n.includes("rate limit"),a=n.includes("413")||n.includes("payload too large"),o=n.includes("discard")||n.includes("dropp");return!r&&!a&&!o?null:{timestamp:t,reason:"native",category:r?"rate-limited":a?"oversize":"unknown",quantity:1,detail:e.trim().slice(0,300),source:"reported"}}function Te(e){let t=new Map;for(let n of e){let r=t.get(n.reason);r?(r.units+=n.quantity,r.records+=1):t.set(n.reason,{units:n.quantity,records:1})}return[...t.entries()].map(([n,r])=>({reason:n,...r})).sort((n,r)=>r.units-n.units)}var W=e=>typeof e=="number"&&Number.isFinite(e)?e:null;function ut(e){let{options:t,isDev:n}=e,r=[],a=c=>r.push(c);t.dsn||a({id:"no-dsn",severity:"critical",category:"correctness",title:"No DSN",detail:"The SDK is initialized without a DSN, so nothing is sent anywhere. Usually an env var that didn't reach the bundle."}),(!t.release||!t.dist)&&a({id:"release-dist",severity:"warning",category:"correctness",title:"release or dist not set explicitly",detail:"Stack traces are only symbolicated when release and dist match the source maps you uploaded, exactly. Sentry never reprocesses old events, so a mismatch means minified traces forever \u2014 set both explicitly and use the same values at upload."}),t.debug===true&&!n&&a({id:"debug-in-release",severity:"warning",category:"correctness",title:"debug is on in a release build",detail:"Verbose SDK logging is shipping to users. Gate it: debug: __DEV__."}),t.enableNative===false&&a({id:"native-disabled",severity:"warning",category:"correctness",title:"Native layer disabled",detail:"enableNative: false gives up native crash capture, offline caching, and release-health sessions \u2014 hard crashes will never be reported."});let o=W(t.tracesSampleRate);o!==null&&o>=1&&!n?a({id:"traces-full",severity:"critical",category:"quota",title:"tracesSampleRate is 1.0 in production",detail:"Every transaction is sent, and spans are billed individually \u2014 this is the fastest way to exhaust a span quota. Lower the rate, or use tracesSampler to keep full detail only on the routes you care about."}):o!==null&&o>.2&&!n&&a({id:"traces-high",severity:"warning",category:"quota",title:`tracesSampleRate is ${o}`,detail:"Spans are billed per span, so tracing volume scales with this rate times the spans each transaction carries. Check the Cost tab before shipping it."});let s=W(t.replaysSessionSampleRate);s!==null&&s>.01&&!n&&a({id:"replay-session-rate",severity:"critical",category:"quota",title:`replaysSessionSampleRate is ${s}`,detail:"Replays are billed per session and free plans include only 50 a month, so anything above a fraction of a percent burns the quota on a real user base. Prefer replaysOnErrorSampleRate, which records only sessions that hit an error."}),t.attachScreenshot===true&&t.attachViewHierarchy===true&&a({id:"heavy-attachments",severity:"warning",category:"quota",title:"Screenshots and view hierarchies on every error",detail:"Both attachments ride every error event and are billed by volume. Keep the one you actually open when debugging."}),t.enableLogs===true&&t.enableAutoConsoleLogs!==false&&a({id:"auto-console-logs",severity:"info",category:"quota",title:"Console output is forwarded as logs",detail:"Every console.* call becomes billable log volume. Fine if your app is quiet; expensive if it logs in a render or a loop."});let i=W(t.profilesSampleRate);i!==null&&i>0&&a({id:"profiling-on",severity:"info",category:"quota",title:"Profiling is enabled",detail:"Profiling is billed by the hour and free plans cannot use it at all \u2014 profiles sent from a free-plan app are simply discarded."}),t.sendDefaultPii===true&&a({id:"send-default-pii",severity:"critical",category:"privacy",title:"sendDefaultPii is on",detail:"The SDK attaches identifying data \u2014 IP address, and on some versions request headers including Authorization and Cookie \u2014 to every event. Turn it off unless you have a reason and a data-retention policy that covers it."});let l=W(t.replaysOnErrorSampleRate);(s!==null&&s>0||l!==null&&l>0)&&a({id:"replay-masking",severity:"info",category:"privacy",title:"Session Replay is recording",detail:"Replay captures the screen. Confirm masking covers every field showing personal data \u2014 the defaults mask text and images, and a custom unmasked view opts out of that."});let d=W(t.maxBreadcrumbs);return d!==null&&d>100&&a({id:"many-breadcrumbs",severity:"info",category:"privacy",title:`maxBreadcrumbs is ${d}`,detail:"Breadcrumbs accumulate and ride every event, growing both payload size and the chance that something logged along the way is personal data."}),r}function jn(e){return e.some(t=>t.severity==="critical")?"critical":e.some(t=>t.severity==="warning")?"warning":e.length>0?"info":null}var le=null;function Mn(e){le=e??null}function On(e){try{let t=e._integrations;return t?Object.keys(t):[]}catch{return[]}}function zn(){if(!le)return null;try{let e=le.getOptions?.();return e?{options:{...e},integrations:On(le),isDev:typeof ee<"u"&&ee}:null}catch{return null}}var qn=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i,Vn=/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]+/,Hn=/\bBearer\s+[A-Za-z0-9._\-+/=]{12,}/i,Kn=/\b(?:\d[ -]?){13,16}\b/;function Wn(e){let t=0,n=false;for(let r=e.length-1;r>=0;r--){let a=e.charCodeAt(r)-48;if(a<0||a>9)return false;n&&(a*=2,a>9&&(a-=9)),t+=a,n=!n}return t%10===0}var Un=/^(?:4|5[1-5]|2[2-7]|3[47]|3(?:0[0-5]|[68])|6(?:011|5|4[4-9]))/,Yn=/\+\d{1,3}[\s-]?\(?\d{2,4}\)?[\s-]?\d{3,4}[\s-]?\d{3,4}\b/,Gn=/^(authorization|cookie|set-cookie|x-api-key|api[-_]?key|password|passwd|secret|token|access[-_]?token|refresh[-_]?token|session[-_]?id|ssn)$/i,Zn=/^(lat|latitude|lng|lon|longitude)$/i,Jn=/(^|\.)(event_id|trace_id|span_id|parent_span_id|dsn|sdk\.|debug_meta|modules)/,Qn=8;function pt(e){let t=e.trim();return t.length<=8?`${t.slice(0,2)}\u2026`:`${t.slice(0,4)}\u2026${t.slice(-2)}`}function Xn(e,t){if(Vn.test(t)||Hn.test(t))return"auth-token";if(Gn.test(e))return"sensitive-key";if(qn.test(t))return"email";let n=Kn.exec(t);if(n){let r=n[0].replace(/[ -]/g,"");if(r.length>=13&&Un.test(r)&&Wn(r))return"credit-card"}return Yn.test(t)?"phone":null}function yt(e,t=25){let n=[],r=new WeakSet,a=(o,s,i)=>{if(n.length>=t||i>Qn||o==null)return;if(typeof o=="number"){let d=s.split(".").pop()??"";Zn.test(d)&&n.push({kind:"coordinates",path:s,sample:pt(String(o))});return}if(typeof o=="string"){if(Jn.test(s))return;let d=s.split(".").pop()??"",c=Xn(d,o);c&&n.push({kind:c,path:s,sample:pt(o)});return}if(typeof o!="object")return;let l=o;if(!r.has(l)){if(r.add(l),Array.isArray(o)){for(let d=0;d<o.length&&n.length<t;d++)a(o[d],`${s}[${d}]`,i+1);return}for(let[d,c]of Object.entries(l)){if(n.length>=t)return;a(c,s?`${s}.${d}`:d,i+1)}}};return a(e,"",0),n}var Be={email:"Email address","auth-token":"Auth token","credit-card":"Card number",phone:"Phone number",coordinates:"Location","sensitive-key":"Sensitive field"};import{formatBytes as er}from"@buoy-gg/shared-ui/web";var tr=20;function Ee(){let e=ne(K,ae,ae),t=ne(K,F,F),[n,r]=te("feed"),[a,o]=te("list"),[s,i]=te(null),[l,d]=te(rt),c=k(()=>[...e].reverse(),[e]),p=ne(K,be,be),D=k(()=>Se(e),[e]),$=k(()=>p?.session?{totals:p.session,windowMs:p.windowMs??D.windowMs,contributors:p.topContributors??D.contributors}:D,[p,D]),Jt=k(()=>we($),[$]),Qt=k(()=>at(l),[l]),H=ne(ke,se,se),Xt=k(()=>[...H].reverse(),[H]),en=k(()=>Te(H),[H]),tn=k(()=>{if(n!=="audit")return null;let C=zn();return C?{findings:ut(C)}:null},[n]),nn=k(()=>{if(n!=="audit")return[];let C=e.slice(-tr),X=[],Ye=new Set;for(let cn of C)for(let Ge of cn.items)if(Ge.payload!==void 0)for(let ye of yt(Ge.payload)){let Ze=`${ye.kind}:${ye.path}`;Ye.has(Ze)||(Ye.add(Ze),X.push(ye))}return X},[n,e]),rn=k(()=>s==null?void 0:e.find(C=>C.id===s),[e,s]),an=k(()=>e.reduce((C,X)=>C+X.totalBytes,0),[e]),on=fe(C=>{i(C),o("detail")},[]),sn=fe(()=>{o("list"),i(null)},[]),ln=fe(()=>{he(),Ce(),o("list"),i(null)},[]);return{tab:n,setTab:r,view:a,envelopes:e,rows:c,selected:rn,status:t,totalBytes:an,usage:$,projection:Jt,plan:Qt,setPlanId:d,drops:H,dropRows:Xt,dropSummary:en,audit:tn,piiFindings:nn,openDetail:on,closeDetail:sn,clear:ln}}var ft={};yn(ft,{AccessibilityInfo:()=>or,ActivityIndicator:()=>sa,Alert:()=>da,Animated:()=>ea,AppRegistry:()=>sr,AppState:()=>lr,Appearance:()=>ir,BackHandler:()=>cr,Button:()=>la,CheckBox:()=>Tr,Clipboard:()=>dr,DeviceEventEmitter:()=>Or,Dimensions:()=>ur,Easing:()=>pr,FlatList:()=>mt,I18nManager:()=>yr,Image:()=>Br,ImageBackground:()=>Er,InteractionManager:()=>mr,Keyboard:()=>fr,KeyboardAvoidingView:()=>Dr,LayoutAnimation:()=>hr,Linking:()=>br,LogBox:()=>Mr,Modal:()=>oa,NativeEventEmitter:()=>gr,NativeModules:()=>ar,PanResponder:()=>vr,Picker:()=>$r,PixelRatio:()=>Sr,Platform:()=>wr,Pressable:()=>aa,ProgressBar:()=>Ar,RefreshControl:()=>_r,SafeAreaView:()=>Ir,ScrollView:()=>Y,SectionList:()=>Lr,Share:()=>xr,StatusBar:()=>Fr,StyleSheet:()=>P,Switch:()=>ia,Text:()=>g,TextInput:()=>ta,Touchable:()=>Pr,TouchableHighlight:()=>na,TouchableNativeFeedback:()=>Nr,TouchableOpacity:()=>St,TouchableWithoutFeedback:()=>ra,UIManager:()=>kr,Vibration:()=>Cr,View:()=>y,VirtualizedList:()=>Rr,YellowBox:()=>jr,findNodeHandle:()=>ca,unstable_createElement:()=>rr,useColorScheme:()=>zr,useLocaleContext:()=>qr,useWindowDimensions:()=>Vr});fn(ft,nr);import*as nr from"react-native-web";import{unstable_createElement as rr,NativeModules as ar,AccessibilityInfo as or,Appearance as ir,AppRegistry as sr,AppState as lr,BackHandler as cr,Clipboard as dr,Dimensions as ur,Easing as pr,I18nManager as yr,Keyboard as fr,InteractionManager as mr,LayoutAnimation as hr,Linking as br,NativeEventEmitter as gr,PanResponder as vr,PixelRatio as Sr,Platform as wr,Share as xr,UIManager as kr,Vibration as Cr,CheckBox as Tr,FlatList as mt,Image as Br,ImageBackground as Er,KeyboardAvoidingView as Dr,Picker as $r,ProgressBar as Ar,RefreshControl as _r,SafeAreaView as Ir,SectionList as Lr,StatusBar as Fr,Touchable as Pr,TouchableNativeFeedback as Nr,VirtualizedList as Rr,YellowBox as jr,LogBox as Mr,DeviceEventEmitter as Or,useColorScheme as zr,useLocaleContext as qr,useWindowDimensions as Vr}from"react-native-web";import*as h from"react-native-web";import{createElement as De,forwardRef as ht,useCallback as Hr,useRef as Kr}from"react";import{useEffect as Wr,useState as Ur}from"react";import{createPortal as Yr}from"react-dom";var Gr='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as Zr}from"react/jsx-runtime";var U=Symbol.for("@buoy-gg/portal-host"),bt=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function gt(){let e=document;if(e[U])return e[U].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:Gr});let n=()=>{let c=document.fullscreenElement,p=c&&c.tagName!=="CANVAS"?c:document.body;t.parentElement!==p&&p.appendChild(t)},r=new Map,a=c=>{(!t.contains(c.target)||!bt(c.target))&&r.set(c.code||c.key,{key:c.key,code:c.code,location:c.location,keyCode:c.keyCode,which:c.which,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey})},o=c=>{r.delete(c.code||c.key)},s=()=>r.clear(),i=()=>{let c=[...r.values()];r.clear();for(let p of c)document.dispatchEvent(new KeyboardEvent("keyup",{...p,bubbles:true}))},l=c=>{bt(c.target)&&c.stopPropagation()},d=c=>c.stopPropagation();return n(),document.addEventListener("fullscreenchange",n),document.addEventListener("keydown",a,true),document.addEventListener("keyup",o,true),window.addEventListener("blur",s),t.addEventListener("focusin",i),t.addEventListener("keydown",l),t.addEventListener("keyup",l),t.addEventListener("keypress",l),t.addEventListener("wheel",d,{passive:true}),e[U]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",n),document.removeEventListener("keydown",a,true),document.removeEventListener("keyup",o,true),window.removeEventListener("blur",s),t.remove(),delete e[U]}},t}function Jr({children:e}){let[t,n]=Ur(null);return Wr(()=>{let r=gt(),a=document[U];return a.users++,n(r),()=>{--a.users===0&&a.dispose()}},[]),t?Yr(Zr("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}var O=h,Qr=["shadowColor","shadowOffset","shadowOpacity","shadowRadius","textShadowColor","textShadowOffset","textShadowRadius"],z=e=>typeof e=="number"?`${e}px`:e;function $e(e){if(Array.isArray(e)){let p=e.map($e);return p.some((D,$)=>D!==e[$])?p:e}if(!e||typeof e!="object"||!Qr.some(p=>e[p]!=null))return e;let{shadowColor:t,shadowOffset:n,shadowOpacity:r,shadowRadius:a,textShadowColor:o,textShadowOffset:s,textShadowRadius:i,...l}=e;if(t!=null||n!=null||r!=null||a!=null){let p=t??"black",D=r==null?p:`color-mix(in srgb, ${p} ${Math.min(r,1)*100}%, transparent)`,$=`${z(n?.width??0)} ${z(n?.height??0)} ${z(a??0)} ${D}`;l.boxShadow=typeof l.boxShadow=="string"?`${l.boxShadow}, ${$}`:l.boxShadow??$}let{width:d=0,height:c=0}=s??{};if(o&&(d||c||i)){let p=`${z(d)} ${z(c)} ${z(i??0)} ${o}`;l.textShadow=l.textShadow?`${l.textShadow}, ${p}`:p}return l}var Xr=O.StyleSheet.create({auto:{pointerEvents:"auto"},none:{pointerEvents:"none"},"box-none":{pointerEvents:"box-none"},"box-only":{pointerEvents:"box-only"}});function vt(e,t){if(typeof e=="function")return r=>vt(e(r),t);let n=$e(e);return t?[n,Xr[t]]:n}var P={...O.StyleSheet,create:e=>O.StyleSheet.create(Object.fromEntries(Object.entries(e).map(([t,n])=>[t,$e(n)])))};function S(e){let t=ht((r,a)=>{let{accessibilityState:o,accessibilityValue:s,pointerEvents:i,...l}=r;for(let c of["busy","checked","disabled","expanded","selected"])o?.[c]!==void 0&&l[`aria-${c}`]===void 0&&(l[`aria-${c}`]=o[c]);for(let[c,p]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))s?.[c]!==void 0&&l[`aria-${p}`]===void 0&&(l[`aria-${p}`]=s[c]);let d=vt(l.style,i);return d!==l.style&&(l.style=d),De(e,{...l,ref:a})}),n=e.State;return n&&Object.assign(t,{State:n}),t.displayName=e.displayName??e.name??"NativeWebView",t}var y=S(h.View),g=S(h.Text),ea={...O.Animated,View:O.Animated.createAnimatedComponent(y),Text:O.Animated.createAnimatedComponent(g)},ta=S(h.TextInput),St=S(h.TouchableOpacity),na=S(h.TouchableHighlight),ra=S(h.TouchableWithoutFeedback),aa=S(h.Pressable),Y=S(h.ScrollView),wt=ht((e,t)=>{let n=Kr(null),r=Hr(a=>{if(a){let o=a;for(;o.parentElement&&o.parentElement!==document.body;)o=o.parentElement;o.parentElement===document.body&&(n.current=o,Object.assign(o.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),gt().appendChild(o))}else n.current&&(document.body.appendChild(n.current),n.current=null);typeof t=="function"?t(a):t&&(t.current=a)},[t]);return De(Jr,null,De(h.Modal,{...e,ref:r}))});wt.displayName="Modal";var oa=S(wt),ia=S(h.Switch),sa=S(h.ActivityIndicator),la=S(h.Button),ca=h.findNodeHandle,da={alert(e,t,n,r){if(typeof document>"u")return;let a=document.createElement("dialog");a.dataset.buoyRoot="",a.setAttribute("aria-label",e),a.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let o=document.createElement("h2");if(o.textContent=e,o.style.cssText="font-size:18px;margin:0 0 12px",a.appendChild(o),t){let d=document.createElement("p");d.textContent=t,d.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",a.appendChild(d)}let s=document.createElement("div");s.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let i=n?.length?n:[{text:"OK"}],l=()=>{a.close?.(),a.remove()};for(let d of i){let c=document.createElement("button");c.type="button",c.textContent=d.text??"OK",c.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${d.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,c.onclick=()=>{l(),d.onPress?.()},s.appendChild(c)}a.addEventListener("cancel",d=>{d.preventDefault(),r?.cancelable!==false&&(l(),r?.onDismiss?.())}),a.appendChild(s),document.body.appendChild(a),a.showModal?a.showModal():a.setAttribute("open","")}};import{ModalHeader as N,TabSelector as ua,night as ce,Trash2 as pa}from"@buoy-gg/shared-ui/web";import{jsx as E,jsxs as xt}from"react/jsx-runtime";var ya=[{key:"feed",label:"Feed"},{key:"cost",label:"Cost"},{key:"drops",label:"Drops"},{key:"audit",label:"Audit"}];function Ae({c:e,onBack:t}){if(e.view==="detail"){let r=e.selected&&e.selected.items.map(a=>a.type).join(" + ")||"Envelope";return xt(N,{children:[E(N.Navigation,{onBack:e.closeDetail}),E(N.Content,{title:r})]})}let n=e.rows.length>0;return xt(N,{children:[t?E(N.Navigation,{onBack:t}):null,E(N.Content,{title:"",noMargin:true,children:E(y,{style:_e.tabs,children:E(ua,{tabs:ya,activeTab:e.tab,onTabChange:r=>e.setTab(r),testIDPrefix:"sentry-tab"})})}),E(N.Actions,{children:E(St,{onPress:e.clear,disabled:!n,style:[_e.actionBtn,!n&&_e.actionBtnDisabled],accessibilityLabel:"Clear captured envelopes",testID:"sentry-clear",children:E(pa,{size:14,color:n?ce.color.textSecondary:ce.color.textTertiary})})})]})}var _e=P.create({tabs:{maxWidth:360},actionBtn:{width:32,height:32,borderRadius:8,backgroundColor:ce.color.buttonSurface,borderWidth:1,borderColor:ce.color.border,alignItems:"center",justifyContent:"center"},actionBtnDisabled:{opacity:.55}});import{useCallback as fa}from"react";import{night as _,ToolEmptyState as ma,LOG_LIST_PRESET as ha,CompactRow as ba,DevToolsCard as Ie,InfoRow as G,Pill as kt,CopyButton as ga,NightSectionLabel as Ct,RelativeTime as va,formatBytes as Z}from"@buoy-gg/shared-ui/web";import{DataViewer as Sa}from"@buoy-gg/shared-ui/web/dataViewer";var wa={attached:{label:"Attached",color:"#34D399"},searching:{label:"Searching\u2026",color:"#FBBF24"},"sdk-not-found":{label:"SDK not found",color:"#F87171"},"no-client":{label:"No client",color:"#F87171"}};import{night as q,ChipStrip as xa,useChipTap as ka,NightChip as Ca,NightSectionLabel as Ta,NightFootnote as Le,DevToolsCard as Tt,InfoRow as Fe,formatBytes as Ba,formatDuration as Ea}from"@buoy-gg/shared-ui/web";import{jsx as v,jsxs as R}from"react/jsx-runtime";function Da(e){return e===null?q.color.textTertiary:e>=1?"#F87171":e>=.6?"#FBBF24":"#34D399"}function j(e,t){return t==="bytes"?Ba(e):e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function Bt(e){return e===null?"\u2014":Number.isFinite(e)?e>=10?`${Math.round(e)}\xD7 quota`:`${Math.round(e*100)}% of quota`:"not on plan"}function $a({category:e,session:t,projected:n,quota:r,usable:a}){let o=a?ot(n,r):null,s=Da(o),i=o===null||!Number.isFinite(o)?o===null?0:100:Math.min(100,o*100),l=a?`, about ${j(n,e.format)} per month, ${Bt(o)}`:", projection needs a longer session",d=r>0?`, quota ${j(r,e.format)}`:", not included in this plan";return R(Tt,{testID:`sentry-cost-${e.key}`,contentStyle:b.cardBody,accessible:true,accessibilityLabel:`${e.label}: ${j(t,e.format)} this session${l}${d}`,children:[R(y,{style:b.head,children:[v(g,{style:b.label,children:e.label}),R(g,{style:b.session,children:[j(t,e.format)," this session"]})]}),v(y,{style:b.barTrack,children:v(y,{style:[b.barFill,{width:`${i}%`,backgroundColor:s}]})}),v(Fe,{label:"Projected",value:a?`${j(n,e.format)}/mo \xB7 ${Bt(o)}`:"needs a longer session",valueColor:s}),v(Fe,{label:"Quota",value:r>0?j(r,e.format):"not included"}),v(Le,{style:b.hint,children:e.hint})]})}function Et({c:e}){let{usage:t,projection:n,plan:r}=e,{scrollProps:a,onTouchStart:o,isTap:s}=ka();return R(Y,{style:b.container,contentContainerStyle:b.content,testID:"sentry-cost-view",children:[v(xa,{scrollProps:a,contentStyle:b.planStrip,sentryLabel:"ignore devtools sentry plan strip scroll",children:oe.map(i=>v(y,{onTouchStart:o,children:v(Ca,{label:i.name,selected:i.id===r.id,onPress:()=>{s()&&e.setPlanId(i.id)},testID:`sentry-plan-${i.id}`})},i.id))}),R(Le,{style:b.windowNote,children:[e.rows.length," envelope",e.rows.length===1?"":"s"," over"," ",Ea(t.windowMs),n.usable?" \xB7 projection extrapolates this rate to 30 days":""]}),ge.map(i=>v($a,{category:i,session:t.totals[i.key],projected:n.totals[i.key],quota:r.quota[i.key],usable:n.usable},i.key)),t.contributors.length>0?R(y,{testID:"sentry-cost-contributors",children:[v(Ta,{style:b.sectionLabel,children:"WHAT COSTS THE MOST"}),v(Tt,{contentStyle:b.contribBody,children:t.contributors.slice(0,8).map(i=>{let l=ge.find(d=>d.key===i.category);return v(Fe,{label:i.label,value:`${j(i.units,l?.format??"count")} ${l?.label.toLowerCase()??i.category}${i.occurrences>1?` \xD7${i.occurrences}`:""}`},`${i.category}:${i.label}`)})})]}):null,R(Le,{style:b.footnote,children:["Sentry bills on receipt \u2014 data their server-side sampling later drops is still charged, so the only lossless lever is client config, and on mobile that ships frozen in the binary. Quotas as published ",nt,"."]})]})}var b=P.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:16,paddingBottom:24},planStrip:{paddingHorizontal:12,gap:8},windowNote:{marginHorizontal:12,marginTop:6},sectionLabel:{marginHorizontal:12,marginTop:12,marginBottom:2},cardBody:{gap:6},hint:{marginTop:2,marginLeft:0,fontSize:q.font.micro,lineHeight:q.font.micro*1.4},contribBody:{gap:0},head:{flexDirection:"row",alignItems:"baseline",justifyContent:"space-between",gap:8},label:{color:q.color.text,fontSize:13,fontWeight:"700"},session:{color:q.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},barTrack:{height:10,borderRadius:5,backgroundColor:q.color.fill,overflow:"hidden"},barFill:{height:10,borderRadius:5},footnote:{marginHorizontal:12,marginTop:10}});import{useCallback as Aa,useState as _a}from"react";import{ChipStrip as Ia,useChipTap as La,CompactRow as Fa,NightFootnote as Pa,Pill as Pe,RelativeTime as Na,ToolEmptyState as Ra}from"@buoy-gg/shared-ui/web";var J={before_send:{label:"beforeSend returned null",explanation:"Your own callback discarded it. This is the most common cause of a missing event, and it leaves no trace anywhere else."},sample_rate:{label:"sampled out",explanation:"A sample-rate roll went against it. Expected \u2014 unless the rate is lower than you meant it to be."},event_processor:{label:"dropped by a processor",explanation:"An integration returned null \u2014 usually dedupe (a repeat of an event already sent) or an inbound filter such as ignoreErrors."},rn_discard:{label:"discarded by RN tracing",explanation:"React Native tracing judged the transaction empty \u2014 no child spans, no route info, or a back navigation that went nowhere."},client_report:{label:"reported dropped by the SDK",explanation:"The SDK's own client report counted this as discarded. It arrives one envelope late, so it names a count rather than the event."},native:{label:"rejected natively",explanation:"The native transport refused it \u2014 a 429 rate limit, a payload over the size cap, or an offline cache eviction. Only visible with debug enabled."},other:{label:"dropped",explanation:"The SDK recorded a discard under a reason this tool doesn't model."}};import{jsx as I,jsxs as Dt}from"react/jsx-runtime";var V={before_send:"#F87171",sample_rate:"#60A5FA",event_processor:"#FBBF24",rn_discard:"#A78BFA",client_report:"#FB923C",native:"#F472B6",other:"#9CA3AF"};function $t({c:e}){let[t,n]=_a(null),{scrollProps:r}=La(),a=Aa(o=>n(s=>s===o?null:o),[]);return e.drops.length===0?I(Ra,{testID:"sentry-drops-empty",otto:"scanning",title:"Nothing dropped yet",message:"Events the SDK discards before sending will be listed here with the reason \u2014 a beforeSend that returned null, a sample-rate roll, dedupe, or a native rate limit."}):Dt(Y,{style:Q.container,contentContainerStyle:Q.content,testID:"sentry-drops-view",children:[I(Ia,{scrollProps:r,contentStyle:Q.summaryStrip,sentryLabel:"ignore devtools sentry drop summary scroll",children:e.dropSummary.map(o=>I(Pe,{label:`${o.units} \xD7 ${J[o.reason].label}`,color:V[o.reason],variant:"tinted",size:"sm",uppercase:false,testID:`sentry-drop-summary-${o.reason}`},o.reason))}),e.dropRows.map(o=>I(Fa,{statusDotColor:V[o.reason],statusLabel:o.category,statusSublabel:o.source,primaryText:o.detail,secondaryAccessory:I(Pe,{label:J[o.reason].label,color:V[o.reason],variant:"outline",uppercase:false}),badgeText:o.quantity>1?`\xD7${o.quantity}`:void 0,badgeColor:V[o.reason],bottomRightText:I(Na,{timestamp:o.timestamp}),isExpanded:t===o.id,expandedGlowColor:V[o.reason],expandedContent:Dt(y,{style:Q.expanded,children:[I(Pe,{label:J[o.reason].label,color:V[o.reason],variant:"outline",uppercase:false}),I(Pa,{style:Q.explanation,children:J[o.reason].explanation})]}),showChevron:true,onPress:()=>a(o.id),testID:`sentry-drop-row-${o.id}`},o.id))]})}var Q=P.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:16,paddingBottom:24},summaryStrip:{paddingHorizontal:12,gap:8,paddingBottom:4},expanded:{gap:6,alignItems:"flex-start"},explanation:{marginTop:2,marginLeft:0}});import{night as Ne,DevToolsCard as Re,NightSectionLabel as At,NightFootnote as je,Pill as _t,ToolEmptyState as ja}from"@buoy-gg/shared-ui/web";import{monoFont as Ma}from"@buoy-gg/shared-ui/web";import{Fragment as It,jsx as w,jsxs as L}from"react/jsx-runtime";var Lt=Ma,de={critical:"#F87171",warning:"#FBBF24",info:"#60A5FA"},Oa={quota:"Quota",privacy:"Privacy",correctness:"Correctness"};function Ft({c:e}){let{audit:t,piiFindings:n}=e;if(!t)return w(ja,{testID:"sentry-audit-unavailable",otto:"scanning",title:"No client to audit",message:"The audit reads the options Sentry.init actually resolved, so it needs a live client. Once the tool attaches, the resolved config is graded here."});let r=t.findings.length===0&&n.length===0;return L(Y,{style:m.container,contentContainerStyle:m.content,testID:"sentry-audit-view",children:[r?L(Re,{testID:"sentry-audit-clean",contentStyle:m.cardBody,children:[w(g,{style:m.title,children:"Nothing to flag"}),w(je,{tone:"secondary",style:m.inCard,children:"The resolved config raised no findings, and nothing sent this session matched a personal-data pattern."})]}):null,t.findings.length>0?L(It,{children:[w(At,{style:m.sectionLabel,children:"CONFIG"}),t.findings.map(a=>L(Re,{testID:`sentry-audit-${a.id}`,style:[m.stripe,{borderLeftColor:de[a.severity]}],contentStyle:m.cardBody,accessible:true,accessibilityLabel:`${a.severity} ${a.category} finding. ${a.title}. ${a.detail}`,children:[L(y,{style:m.head,children:[w(g,{style:m.title,children:a.title}),w(_t,{label:Oa[a.category]??a.category,color:de[a.severity],variant:"tinted"})]}),w(je,{tone:"secondary",style:m.inCard,children:a.detail})]},a.id))]}):null,n.length>0?L(It,{children:[w(At,{style:m.sectionLabel,children:"PERSONAL DATA IN SENT PAYLOADS"}),w(je,{style:m.piiNote,children:"Values are redacted here \u2014 the path is what you need to fix."}),n.map((a,o)=>L(Re,{testID:`sentry-pii-${o}`,style:[m.stripe,{borderLeftColor:de.critical}],contentStyle:m.cardBody,accessible:true,accessibilityLabel:`${Be[a.kind]} at ${a.path}, value redacted as ${a.sample}`,children:[L(y,{style:m.head,children:[w(_t,{label:Be[a.kind],color:de.critical,variant:"tinted"}),w(g,{style:m.sample,children:a.sample})]}),w(g,{style:m.path,selectable:true,children:a.path})]},`${a.path}-${o}`))]}):null]})}var m=P.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:16,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},piiNote:{marginHorizontal:12,marginTop:0,marginBottom:2},cardBody:{gap:6},inCard:{marginTop:2,marginLeft:0},stripe:{borderLeftWidth:3,borderRadius:8},head:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},title:{color:Ne.color.text,fontSize:13,fontWeight:"700",flexShrink:1},sample:{color:Ne.color.textTertiary,fontSize:10,fontFamily:Lt},path:{color:Ne.color.textSecondary,fontSize:11,fontFamily:Lt}});import{monoFont as za}from"@buoy-gg/shared-ui/web";import{Fragment as qa,jsx as u,jsxs as B}from"react/jsx-runtime";var Va=za,Ha={event:"#F87171",transaction:"#A78BFA",session:"#34D399",sessions:"#34D399",client_report:"#FBBF24",log:"#60A5FA",attachment:"#F472B6",profile:"#FB923C",profile_chunk:"#FB923C",replay_event:"#22D3EE",replay_recording:"#22D3EE",user_report:"#F472B6",feedback:"#F472B6"},Ka={client_report:"report",replay_recording:"replay",replay_event:"replay",profile_chunk:"profile",user_report:"feedback"};function Pt(e){return Ha[e]??"#9CA3AF"}function Wa(e){return Ka[e]??e}function Ua(e){let t=new Date(e),n=r=>String(r).padStart(2,"0");return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function Ya({envelope:e,onPress:t}){let n=e.items[0],r=e.items.reduce((s,i)=>s+(i.spanCount??0),0),a=e.items.length-1,o=`${n?.summary??"envelope"}${r>0?` \xB7 ${r} span${r===1?"":"s"}`:""}`;return u(ba,{statusDotColor:Pt(n?.type??""),statusLabel:Wa(n?.type??"envelope"),statusSublabel:a>0?`+${a} more`:void 0,primaryText:o,secondaryText:a>0?e.items.map(s=>s.type).join(" + "):void 0,badgeText:Z(e.totalBytes),badgeColor:_.color.textSecondary,bottomRightText:u(va,{timestamp:e.timestamp}),showChevron:true,onPress:()=>t(e.id),testID:`sentry-envelope-row-${e.id}`})}function Ga({c:e}){let t=wa[e.status];return B(y,{style:f.meta,children:[u(y,{testID:"sentry-status-chip",accessible:true,accessibilityLabel:`Sentry capture: ${t.label}`,children:u(kt,{label:t.label,color:t.color,variant:"quiet",dot:true})}),B(g,{style:f.metaTotals,testID:"sentry-totals",children:[e.rows.length," \xB7 ",Z(e.totalBytes)]})]})}function Za({status:e}){return u(ma,{testID:"sentry-empty",otto:e==="attached"?"guard":"scanning",title:"No envelopes captured",message:e==="attached"?"Attached to the Sentry client. Envelopes will appear here as the app sends them.":e==="sdk-not-found"?"@sentry/react-native isn't installed in this app (or isn't resolvable). Pass getClient to installSentryCapture / SentryRoot to attach explicitly.":e==="no-client"?"Sentry SDK found, but no client appeared \u2014 is Sentry.init() being called?":"Looking for the app's Sentry client\u2026"})}function Ja(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}function Nt({value:e,testID:t}){if(!(e!==null&&typeof e=="object")){let n=Ja(e);return B(y,{style:f.payloadBlock,children:[u(y,{style:f.payloadCopy,children:u(ga,{value:n,size:12})}),u(g,{style:f.payload,selectable:true,testID:t,children:n})]})}return u(y,{style:f.payloadTree,testID:t,children:u(Sa,{title:"",data:e,rawMode:true,showTypeFilter:true,initialExpanded:false,testIDPrefix:t?`${t}-node`:void 0})})}function Qa({item:e,index:t}){return B(Ie,{testID:`sentry-item-${t}`,contentStyle:f.cardBody,children:[B(y,{style:f.itemHead,children:[u(kt,{label:e.type,color:Pt(e.type),variant:"outline"}),B(g,{style:f.itemMeta,children:[Z(e.bytes),e.spanCount!=null?` \xB7 ${e.spanCount} span${e.spanCount===1?"":"s"}`:""]})]}),u(g,{style:f.itemSummary,testID:`sentry-item-${t}-summary`,children:e.summary}),e.binary?B(g,{style:f.itemBinary,children:["binary payload (",Z(e.bytes),")"]}):e.payload!==void 0?u(Nt,{value:e.payload,testID:`sentry-item-${t}-payload`}):null]})}function Xa({envelope:e}){return B(Y,{style:f.container,contentContainerStyle:f.detailContent,testID:"sentry-envelope-detail",children:[B(Ie,{contentStyle:f.cardBody,children:[u(G,{label:"Captured",value:Ua(e.timestamp)}),u(G,{label:"Size",value:Z(e.totalBytes)}),u(G,{label:"Items",value:String(e.items.length)}),u(G,{label:"Origin",value:e.origin}),e.eventId?u(G,{label:"Event ID",value:e.eventId,mono:true,copyable:true}):null]}),u(Ct,{style:f.sectionLabel,children:"ITEMS"}),e.items.map((t,n)=>u(Qa,{item:t,index:n},n)),e.header!==void 0?B(qa,{children:[u(Ct,{style:f.sectionLabel,children:"ENVELOPE HEADER"}),u(Ie,{contentStyle:f.cardBody,children:u(Nt,{value:e.header,testID:"sentry-envelope-header"})})]}):null]})}function Me({c:e}){let t=fa(({item:n})=>u(Ya,{envelope:n,onPress:e.openDetail}),[e.openDetail]);return e.tab==="cost"?u(Et,{c:e}):e.tab==="drops"?u($t,{c:e}):e.tab==="audit"?u(Ft,{c:e}):e.view==="detail"&&e.selected?u(Xa,{envelope:e.selected}):u(mt,{style:f.container,data:e.rows,keyExtractor:n=>String(n.id),renderItem:t,ListHeaderComponent:u(Ga,{c:e}),ListEmptyComponent:u(Za,{status:e.status}),contentContainerStyle:f.listContent,...ha,testID:"sentry-envelope-list"})}var f=P.create({container:{flex:1,backgroundColor:"transparent"},listContent:{paddingTop:16,paddingBottom:12},meta:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingBottom:8},metaTotals:{color:_.color.textTertiary,fontSize:11,fontVariant:["tabular-nums"]},detailContent:{paddingTop:16,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},cardBody:{gap:8},itemHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},itemMeta:{color:_.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},itemSummary:{color:_.color.text,fontSize:12,fontWeight:"600"},itemBinary:{color:_.color.textTertiary,fontSize:11,fontStyle:"italic"},payloadBlock:{backgroundColor:_.color.fill,borderRadius:6,padding:8,paddingRight:26},payloadTree:{backgroundColor:_.color.fill,borderRadius:6,marginHorizontal:-4,paddingVertical:4,overflow:"hidden"},payloadCopy:{position:"absolute",top:4,right:4,zIndex:1},payload:{color:_.color.textSecondary,fontSize:11,fontFamily:Va,lineHeight:16}});import{jsx as Oe}from"react/jsx-runtime";function Rt({visible:e,onClose:t,onBack:n,onMinimize:r,persistenceKey:a}){let o=Ee();return Oe(bn,{visible:e,onClose:t,onMinimize:r,persistenceKey:a??"buoy-sentry",header:{showToggleButton:true,customContent:Oe(Ae,{c:o,onBack:n})},enablePersistence:true,initialMode:"bottomSheet",disableScrollWrapper:true,children:Oe(Me,{c:o})})}function eo(){return null}import{approxJsonSize as to}from"@buoy-gg/shared-ui/web";function ze(e,t=2048){return e.length<=t?e:`${e.slice(0,t)}\u2026 [${e.length-t} more]`}function qe(e,t,n){if(e===null)return null;if(typeof e=="string")return ze(e);if(typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:String(e);if(typeof e>"u")return"undefined";if(typeof e=="bigint")return`${String(e)}n`;if(typeof e=="function")return`\u0192 ${e.name||"(anonymous)"}`;if(typeof e=="symbol")return e.toString();if(e instanceof Error)return{name:e.name,message:ze(e.message),stack:e.stack?ze(e.stack,4*1024):e.stack};if(t>=8)return Array.isArray(e)?"[Array]":"{\u2026}";let r=e;if(n.has(r))return"[Circular]";n.add(r);try{if(Array.isArray(e)){let o=e.slice(0,200).map(s=>qe(s,t+1,n));return e.length>200&&o.push(`\u2026 ${e.length-200} more`),o}let a={};for(let o of Object.keys(r).slice(0,200))try{a[o]=qe(r[o],t+1,n)}catch{a[o]="[Unserializable]"}return a}finally{n.delete(r)}}function jt(e){return qe(e,0,new WeakSet)}var Ve="__buoySentryDropWatch";function Mt(e,t){let n=e;if(t==="transaction")return n?.transaction??"transaction";let r=n?.exception?.values?.[0];if(r?.value)return String(r.value);if(r?.type)return String(r.type);let a=n?.message?.formatted??n?.message;return typeof a=="string"?a:"event"}function Ot(e,t){if(typeof e!="function"||e[Ve])return e;let n=(r,a)=>{let o=Mt(r,t),s;try{s=e(r,a)}catch(l){try{ie({timestamp:Date.now(),reason:"before_send",category:t==="transaction"?"transaction":"error",quantity:1,detail:`${o} \u2014 the callback threw`,source:"observed"})}catch{}throw l}let i=l=>{if(l===null)try{ie({timestamp:Date.now(),reason:"before_send",category:t==="transaction"?"transaction":"error",quantity:1,detail:o,source:"observed"})}catch{}};return s&&typeof s.then=="function"?s.then(l=>(i(l),l)):(i(s),s)};return n[Ve]=true,n}function zt(e){let t=e;if(!t)return false;let n=false;try{let r=t.getOptions?.();r&&(r.beforeSend=Ot(r.beforeSend,"error"),r.beforeSendTransaction=Ot(r.beforeSendTransaction,"transaction"),n=true)}catch{}try{t.on?.("beforeEnvelope",r=>{try{let a=r?.[1];if(!Array.isArray(a))return;let o=Date.now();for(let s of a){if(!Array.isArray(s))continue;let[i,l]=s;i?.type==="client_report"&&Ln(st(l,o))}}catch{}}),n=true}catch{}try{let r=t.getOptions?.();if(r){let a=r.beforeSendTransaction,o=(s,i)=>{try{let l=lt(s);l&&ie(ct(l,Mt(s,"transaction"),Date.now()))}catch{}return typeof a=="function"?a(s,i):s};o[Ve]=true,r.beforeSendTransaction=o}}catch{}return n}function no(e){try{let t=dt(e,Date.now());t&&ie(t)}catch{}}var ro=8*1024*1024,ao=500,oo=60;function qt(e){return typeof e=="object"&&e!==null&&typeof e.byteLength=="number"&&ArrayBuffer.isView(e)}function io(e){return typeof e=="string"?e.length:qt(e)?e.byteLength:to(e,ro).bytes}function M(...e){for(let t of e)if(typeof t=="string"&&t.length>0)return t}function Vt(e,t){let n=t;try{switch(e){case"event":{let r=n?.exception?.values?.[0];if(r){let o=M(r.value,r.type)??"exception";return r.type&&r.value?`${r.type}: ${r.value}`:o}let a=M(n?.message?.formatted,n?.message,n?.logentry?.message);return a||(n?.type==="feedback"?"user feedback":M(n?.transaction)??"event")}case"transaction":return M(n?.transaction)??"transaction";case"session":return M(n?.status)??"session";case"sessions":return"session aggregates";case"client_report":{let r=Array.isArray(n?.discarded_events)?n.discarded_events.reduce((a,o)=>a+(o?.quantity??1),0):0;return`${r} discarded event${r===1?"":"s"}`}case"log":{let r=Array.isArray(n?.items)?n.items.length:void 0;return r!=null?`${r} log${r===1?"":"s"}`:"logs"}case"attachment":return M(n?.filename)??"attachment";case"profile":case"profile_chunk":return"profile";case"user_report":case"feedback":return"user feedback";case"replay_event":case"replay_recording":return"replay";case"check_in":return M(n?.monitor_slug)??"check-in";default:return e}}catch{return e}}function so(e,t){if(e!=="transaction")return;let n=t?.spans;return Array.isArray(n)?n.length+1:1}function Ht(e){let t=Date.now();try{if(!Array.isArray(e)||!Array.isArray(e[1]))throw new Error("not an envelope");let[n,r]=e,a=[],o=0;for(let s of r){if(!Array.isArray(s))continue;let[i,l]=s,d=typeof i?.type=="string"?i.type:"unknown",c=io(l);o+=c;let p=qt(l);a.push({type:d,bytes:c,summary:p?Vt(d,i):Vt(d,l),spanCount:so(d,l),binary:p||void 0,payload:p?void 0:jt(l)})}return{timestamp:t,origin:"js",eventId:typeof n?.event_id=="string"?n.event_id:void 0,header:jt(n),items:a,totalBytes:o}}catch{return{timestamp:t,origin:"js",items:[{type:"unknown",bytes:0,summary:"unparseable envelope"}],totalBytes:0}}}var Kt=new WeakSet,He=false,x=null,ue;function Wt(e){let t=e;if(!t||typeof t.on!="function")return false;if(Kt.has(t))return true;Kt.add(t);try{t.on("beforeEnvelope",n=>{try{let r=Ht(n),a=r.items.some(o=>o.type==="event");Sn(r,{urgent:a})}catch{}})}catch{return false}try{zt(t)}catch{}try{Mn(t)}catch{}return re("attached"),true}function lo(){if(ue)try{return{client:ue(),sdkPresent:true}}catch{return{client:void 0,sdkPresent:true}}let e=eo();if(!e||typeof e.getClient!="function")return{client:void 0,sdkPresent:false};try{return{client:e.getClient(),sdkPresent:true}}catch{return{client:void 0,sdkPresent:true}}}function Ke(e={}){if(e.getClient&&(ue=e.getClient),He&&F()==="attached"||He&&x!==null)return;He=true;let t=0,n=()=>{t+=1;let{client:r,sdkPresent:a}=lo();if(r&&Wt(r)){x!==null&&(clearInterval(x),x=null);return}if(!a&&!ue){re("sdk-not-found"),x!==null&&(clearInterval(x),x=null);return}t>=oo&&(re("no-client"),x!==null&&(clearInterval(x),x=null))};n(),!(F()==="attached"||x!==null)&&F()!=="sdk-not-found"&&(x=setInterval(n,ao))}import{jsx as co}from"react/jsx-runtime";var Ut=globalThis,uo=typeof Ut.ErrorUtils?.setGlobalHandler=="function"||typeof Ut.RN$registerExceptionListener=="function";uo&&typeof ee<"u"&&ee&&Ke();var Yt=hn({id:"sentry",name:"SENTRY",description:"Envelopes the app sends to Sentry",slot:"both",icon:({size:e,color:t})=>co(Xe,{size:e,color:t??et}),component:Rt}),po=mn(Yt);import{useEffect as yo}from"react";function fo({getClient:e}={}){return yo(()=>{Ke(e?{getClient:e}:{})},[e]),null}import{jsx as pe,jsxs as mo}from"react/jsx-runtime";function ho(){let e=Ee();return mo(y,{style:We.root,children:[pe(y,{style:We.headerSlot,children:pe(Ae,{c:e})}),pe(y,{style:We.body,children:pe(Me,{c:e})})]})}var We=P.create({root:{flex:1,flexDirection:"column",backgroundColor:"transparent"},headerSlot:{flexGrow:0,flexShrink:0},body:{flex:1}});import{approxJsonSize as Gt}from"@buoy-gg/shared-ui/web";var bo=50;function go(e){let t=a=>a.category==="span"||a.category==="transaction",n=e.filter(a=>!t(a)).slice(-20),r=e.filter(t).slice(-(bo-n.length));return[...n,...r].sort((a,o)=>a.timestamp-o.timestamp||a.id-o.id)}var vo=1.5*1024*1024,Ue=32*1024,So=Object.freeze({__buoyTruncated:true,note:"Payload omitted \u2014 inspect it on-device."}),Zt=new WeakMap;function wo(e){let t=Zt.get(e);if(t)return t;let n=Gt(e,Ue),r=n.bytes<=Ue?{envelope:e,bytes:n.bytes}:(()=>{let a={...e,items:e.items.map(o=>({...o,payload:o.payload===void 0?void 0:So}))};return{envelope:a,bytes:Gt(a,Ue).bytes}})();return Zt.set(e,r),r}function xo(e){let t=[],n=48;for(let r=e.length-1;r>=0;r--){let a=wo(e[r]);if(n+a.bytes>vo&&t.length>0)break;t.push(a.envelope),n+=a.bytes}return t.reverse(),t}var ko={version:1,getSnapshot(){let e=ae(),t=se(),n=Se(e),r=we(n);return{status:F(),envelopes:xo(e),usage:{session:n.totals,projectedMonthly:r.usable?r.totals:null,windowMs:n.windowMs,topContributors:n.contributors.slice(0,8).map(a=>({label:a.label,category:a.category,units:a.units}))},drops:{summary:Te(t),recent:go(t)}}},subscribe(e){let t=K(e),n=ke(e);return()=>{t(),n()}},actions:{clearEnvelopes(){return he(),Ce(),{cleared:true}}}};export{ge as CATEGORY_META,rt as DEFAULT_PLAN_ID,J as DROP_REASON_META,Be as PII_KIND_LABEL,et as SENTRY_ICON_COLOR,oe as SENTRY_PLANS,nt as SENTRY_PLANS_VERIFIED_ON,Ft as SentryAuditView,Me as SentryBody,Et as SentryCostView,$t as SentryDropsView,Ae as SentryHeader,Xe as SentryIcon,Rt as SentryModal,fo as SentryRoot,ho as SentryToolView,Wt as attachToClient,ut as auditConfig,Ce as clearDrops,he as clearEnvelopes,Se as computeUsage,po as createSentryTool,dt as dropFromNativeLog,ct as dropFromRnDiscard,st as dropsFromClientReport,er as formatBytes,F as getAttachStatus,se as getDrops,ae as getEnvelopes,be as getMirroredUsage,at as getPlan,Ke as installSentryCapture,no as noteNativeLog,zt as observeDrops,Cn as onClear,Ht as parseEnvelope,we as projectMonthly,ot as quotaFraction,kn as replaceAttachStatus,Fn as replaceDrops,wn as replaceEnvelopes,xn as replaceUsage,lt as rnDiscardReason,yt as scanForPii,ko as sentrySyncAdapter,Yt as sentryToolPreset,K as subscribe,ke as subscribeDrops,Te as summarizeDrops,Ee as useSentryController,jn as worstSeverity};
|
|
1
|
+
"use client";var Je=Object.defineProperty;var dn=Object.getOwnPropertyDescriptor;var un=Object.getOwnPropertyNames;var pn=Object.prototype.hasOwnProperty;var yn=(e,t)=>{for(var n in t)Je(e,n,{get:t[n],enumerable:true})},Qe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of un(t))!pn.call(e,a)&&a!==n&&Je(e,a,{get:()=>t[a],enumerable:!(r=dn(t,a))||r.enumerable});return e},fn=(e,t,n)=>(Qe(e,t,"default"),n&&Qe(n,t,"default"));var ee=(()=>{try{let e=globalThis.Capacitor;if(e&&typeof e.isNativePlatform=="function"&&e.isNativePlatform())return e.DEBUG===true}catch{}return process.env.NODE_ENV!=="production"})();typeof window<"u"&&typeof globalThis.global>"u"&&(globalThis.global=globalThis);import{createToolFactory as mn,defineToolPreset as hn}from"@buoy-gg/shared-ui/web";import{SentryIcon as Xe}from"@buoy-gg/shared-ui/web";var et="#9945FF";import{JsModal as bn}from"@buoy-gg/shared-ui/web";import{useCallback as fe,useMemo as k,useState as te,useSyncExternalStore as ne}from"react";import{createToolStore as gn}from"@buoy-gg/shared-ui/web";var vn=500,T=gn({id:"sentry",max:vn,order:"append",coalesce:"frame"}),me="searching",tt=null;function Sn(e,t={}){T.add({...e,id:T.allocId()}),t.urgent&&T.flushSync(true)}function re(e){me!==e&&(me=e,T.notify())}function K(e){return T.subscribe(e)}function ae(){return T.getSnapshot()}function P(){return me}function he(){T.clear()}function wn(e){T.set(e)}function be(){return tt}function xn(e){tt=e??null,T.notify()}function kn(e){re(e)}function Cn(e){return T.onClear(e)}var nt="2026-09";var oe=[{id:"developer",name:"Developer (free)",quota:{errors:5e3,spans:5e6,replays:50,logBytes:5368709120,attachmentBytes:1073741824}},{id:"team",name:"Team",quota:{errors:5e4,spans:5e6,replays:50,logBytes:5368709120,attachmentBytes:1073741824}},{id:"business",name:"Business",quota:{errors:5e4,spans:5e6,replays:50,logBytes:5368709120,attachmentBytes:1073741824}}],rt="developer";function at(e){return oe.find(t=>t.id===e)??oe[0]}var ge=[{key:"errors",label:"Errors",format:"count",hint:"One per captured event, including repeats on issues you've ignored."},{key:"spans",label:"Spans",format:"count",hint:"Billed individually \u2014 one transaction is a bundle of many."},{key:"replays",label:"Replays",format:"count",hint:"One per session, whatever its length."},{key:"logBytes",label:"Logs",format:"bytes",hint:"Billed by volume received."},{key:"attachmentBytes",label:"Attachments",format:"bytes",hint:"Screenshots and view hierarchies attached to events."}];var ve=()=>({errors:0,spans:0,replays:0,logBytes:0,attachmentBytes:0});function Tn(e){return e?.type==="feedback"}function En(e){return e.summary||"transaction"}function Se(e){let t=ve(),n=new Map,r=(s,i,l)=>{t[i]+=l;let d=`${i}:${s}`,c=n.get(d);c?(c.units+=l,c.occurrences+=1):n.set(d,{label:s,category:i,units:l,occurrences:1})};for(let s of e)for(let i of s.items)switch(i.type){case"event":Tn(i.payload)||r(i.summary,"errors",1);break;case"transaction":r(En(i),"spans",i.spanCount??1);break;case"replay_event":r("session replay","replays",1);break;case"log":r("logs","logBytes",i.bytes);break;case"attachment":r(i.summary||"attachment","attachmentBytes",i.bytes);break;default:break}let a=e[0]?.timestamp??0,o=e[e.length-1]?.timestamp??0;return{totals:t,windowMs:Math.max(0,o-a),contributors:[...n.values()].sort((s,i)=>i.units-s.units)}}var Bn=3e4,Dn=720*60*60*1e3;function we(e){if(e.windowMs<Bn)return{usable:false,totals:ve()};let t=Dn/e.windowMs,n=ve();for(let r of Object.keys(n))n[r]=Math.round(e.totals[r]*t);return{usable:true,totals:n}}function ot(e,t){return t<=0?e>0?1/0:null:e/t}import{createToolStore as $n}from"@buoy-gg/shared-ui/web";var An=300,A=$n({id:"sentry-drops",max:An,order:"append",coalesce:"frame"}),xe=new Map,it=(e,t)=>`${e==="rn_discard"?"event_processor":e}|${t}`;function ie(e){e.source==="observed"&&In(xe,e),A.add({...e,id:A.allocId()})}function _n(e,t){let n=[];for(let r of t){let a=it(r.reason,r.category),o=e.get(a)??0,s=Math.min(o,r.quantity);s>0&&e.set(a,o-s);let i=r.quantity-s;i<=0||n.push(i===r.quantity?r:{...r,quantity:i,detail:r.detail.replace(/^\d+/,String(i))})}return n}function In(e,t){let n=it(t.reason,t.category);e.set(n,(e.get(n)??0)+t.quantity)}function Ln(e){for(let t of _n(xe,e))A.add({...t,id:A.allocId()})}function ke(e){return A.subscribe(e)}function se(){return A.getSnapshot()}function Ce(){xe.clear(),A.clear()}function Pn(e){A.set(e)}var Fn={before_send:"before_send",event_processor:"event_processor",sample_rate:"sample_rate",ratelimit_backoff:"native",network_error:"native",queue_overflow:"native",cache_overflow:"native",send_error:"native"};function st(e,t){let n=e?.discarded_events;if(!Array.isArray(n))return[];let r=[];for(let a of n){let o=a,s=typeof o.reason=="string"?o.reason:"",i=typeof o.category=="string"?o.category:"unknown",l=typeof o.quantity=="number"?o.quantity:1,d=Fn[s]??"other";r.push({timestamp:t,reason:d,category:i,quantity:l,detail:d==="other"&&s?`${l} ${i} \u2014 SDK reason "${s}"`:`${l} ${i}`,source:"reported"})}return r}var Nn="sentry.rn.discard_reason",Rn={empty_back_navigation:"back navigation that produced no spans",no_route_info:"no route info was available",no_child_spans:"the transaction had no child spans",discarded_latest_navigation:"a newer navigation superseded it"};function lt(e){let t=e?.contexts?.trace?.data?.[Nn];return typeof t=="string"?t:null}function ct(e,t,n){return{timestamp:n,reason:"rn_discard",category:"transaction",quantity:1,detail:`${t} \u2014 ${Rn[e]??e}`,source:"observed"}}function dt(e,t){let n=e.toLowerCase(),r=n.includes("429")||n.includes("rate limit"),a=n.includes("413")||n.includes("payload too large"),o=n.includes("discard")||n.includes("dropp");return!r&&!a&&!o?null:{timestamp:t,reason:"native",category:r?"rate-limited":a?"oversize":"unknown",quantity:1,detail:e.trim().slice(0,300),source:"reported"}}function Te(e){let t=new Map;for(let n of e){let r=t.get(n.reason);r?(r.units+=n.quantity,r.records+=1):t.set(n.reason,{units:n.quantity,records:1})}return[...t.entries()].map(([n,r])=>({reason:n,...r})).sort((n,r)=>r.units-n.units)}var W=e=>typeof e=="number"&&Number.isFinite(e)?e:null;function ut(e){let{options:t,isDev:n}=e,r=[],a=c=>r.push(c);t.dsn||a({id:"no-dsn",severity:"critical",category:"correctness",title:"No DSN",detail:"The SDK is initialized without a DSN, so nothing is sent anywhere. Usually an env var that didn't reach the bundle."}),(!t.release||!t.dist)&&a({id:"release-dist",severity:"warning",category:"correctness",title:"release or dist not set explicitly",detail:"Stack traces are only symbolicated when release and dist match the source maps you uploaded, exactly. Sentry never reprocesses old events, so a mismatch means minified traces forever \u2014 set both explicitly and use the same values at upload."}),t.debug===true&&!n&&a({id:"debug-in-release",severity:"warning",category:"correctness",title:"debug is on in a release build",detail:"Verbose SDK logging is shipping to users. Gate it: debug: __DEV__."}),t.enableNative===false&&a({id:"native-disabled",severity:"warning",category:"correctness",title:"Native layer disabled",detail:"enableNative: false gives up native crash capture, offline caching, and release-health sessions \u2014 hard crashes will never be reported."});let o=W(t.tracesSampleRate);o!==null&&o>=1&&!n?a({id:"traces-full",severity:"critical",category:"quota",title:"tracesSampleRate is 1.0 in production",detail:"Every transaction is sent, and spans are billed individually \u2014 this is the fastest way to exhaust a span quota. Lower the rate, or use tracesSampler to keep full detail only on the routes you care about."}):o!==null&&o>.2&&!n&&a({id:"traces-high",severity:"warning",category:"quota",title:`tracesSampleRate is ${o}`,detail:"Spans are billed per span, so tracing volume scales with this rate times the spans each transaction carries. Check the Cost tab before shipping it."});let s=W(t.replaysSessionSampleRate);s!==null&&s>.01&&!n&&a({id:"replay-session-rate",severity:"critical",category:"quota",title:`replaysSessionSampleRate is ${s}`,detail:"Replays are billed per session and free plans include only 50 a month, so anything above a fraction of a percent burns the quota on a real user base. Prefer replaysOnErrorSampleRate, which records only sessions that hit an error."}),t.attachScreenshot===true&&t.attachViewHierarchy===true&&a({id:"heavy-attachments",severity:"warning",category:"quota",title:"Screenshots and view hierarchies on every error",detail:"Both attachments ride every error event and are billed by volume. Keep the one you actually open when debugging."}),t.enableLogs===true&&t.enableAutoConsoleLogs!==false&&a({id:"auto-console-logs",severity:"info",category:"quota",title:"Console output is forwarded as logs",detail:"Every console.* call becomes billable log volume. Fine if your app is quiet; expensive if it logs in a render or a loop."});let i=W(t.profilesSampleRate);i!==null&&i>0&&a({id:"profiling-on",severity:"info",category:"quota",title:"Profiling is enabled",detail:"Profiling is billed by the hour and free plans cannot use it at all \u2014 profiles sent from a free-plan app are simply discarded."}),t.sendDefaultPii===true&&a({id:"send-default-pii",severity:"critical",category:"privacy",title:"sendDefaultPii is on",detail:"The SDK attaches identifying data \u2014 IP address, and on some versions request headers including Authorization and Cookie \u2014 to every event. Turn it off unless you have a reason and a data-retention policy that covers it."});let l=W(t.replaysOnErrorSampleRate);(s!==null&&s>0||l!==null&&l>0)&&a({id:"replay-masking",severity:"info",category:"privacy",title:"Session Replay is recording",detail:"Replay captures the screen. Confirm masking covers every field showing personal data \u2014 the defaults mask text and images, and a custom unmasked view opts out of that."});let d=W(t.maxBreadcrumbs);return d!==null&&d>100&&a({id:"many-breadcrumbs",severity:"info",category:"privacy",title:`maxBreadcrumbs is ${d}`,detail:"Breadcrumbs accumulate and ride every event, growing both payload size and the chance that something logged along the way is personal data."}),r}function jn(e){return e.some(t=>t.severity==="critical")?"critical":e.some(t=>t.severity==="warning")?"warning":e.length>0?"info":null}var le=null;function Mn(e){le=e??null}function On(e){try{let t=e._integrations;return t?Object.keys(t):[]}catch{return[]}}function zn(){if(!le)return null;try{let e=le.getOptions?.();return e?{options:{...e},integrations:On(le),isDev:typeof ee<"u"&&ee}:null}catch{return null}}var qn=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i,Vn=/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]+/,Hn=/\bBearer\s+[A-Za-z0-9._\-+/=]{12,}/i,Kn=/\b(?:\d[ -]?){13,16}\b/;function Wn(e){let t=0,n=false;for(let r=e.length-1;r>=0;r--){let a=e.charCodeAt(r)-48;if(a<0||a>9)return false;n&&(a*=2,a>9&&(a-=9)),t+=a,n=!n}return t%10===0}var Un=/^(?:4|5[1-5]|2[2-7]|3[47]|3(?:0[0-5]|[68])|6(?:011|5|4[4-9]))/,Yn=/\+\d{1,3}[\s-]?\(?\d{2,4}\)?[\s-]?\d{3,4}[\s-]?\d{3,4}\b/,Gn=/^(authorization|cookie|set-cookie|x-api-key|api[-_]?key|password|passwd|secret|token|access[-_]?token|refresh[-_]?token|session[-_]?id|ssn)$/i,Zn=/^(lat|latitude|lng|lon|longitude)$/i,Jn=/(^|\.)(event_id|trace_id|span_id|parent_span_id|dsn|sdk\.|debug_meta|modules)/,Qn=8;function pt(e){let t=e.trim();return t.length<=8?`${t.slice(0,2)}\u2026`:`${t.slice(0,4)}\u2026${t.slice(-2)}`}function Xn(e,t){if(Vn.test(t)||Hn.test(t))return"auth-token";if(Gn.test(e))return"sensitive-key";if(qn.test(t))return"email";let n=Kn.exec(t);if(n){let r=n[0].replace(/[ -]/g,"");if(r.length>=13&&Un.test(r)&&Wn(r))return"credit-card"}return Yn.test(t)?"phone":null}function yt(e,t=25){let n=[],r=new WeakSet,a=(o,s,i)=>{if(n.length>=t||i>Qn||o==null)return;if(typeof o=="number"){let d=s.split(".").pop()??"";Zn.test(d)&&n.push({kind:"coordinates",path:s,sample:pt(String(o))});return}if(typeof o=="string"){if(Jn.test(s))return;let d=s.split(".").pop()??"",c=Xn(d,o);c&&n.push({kind:c,path:s,sample:pt(o)});return}if(typeof o!="object")return;let l=o;if(!r.has(l)){if(r.add(l),Array.isArray(o)){for(let d=0;d<o.length&&n.length<t;d++)a(o[d],`${s}[${d}]`,i+1);return}for(let[d,c]of Object.entries(l)){if(n.length>=t)return;a(c,s?`${s}.${d}`:d,i+1)}}};return a(e,"",0),n}var Ee={email:"Email address","auth-token":"Auth token","credit-card":"Card number",phone:"Phone number",coordinates:"Location","sensitive-key":"Sensitive field"};import{formatBytes as er}from"@buoy-gg/shared-ui/web";var tr=20;function Be(){let e=ne(K,ae,ae),t=ne(K,P,P),[n,r]=te("feed"),[a,o]=te("list"),[s,i]=te(null),[l,d]=te(rt),c=k(()=>[...e].reverse(),[e]),p=ne(K,be,be),D=k(()=>Se(e),[e]),$=k(()=>p?.session?{totals:p.session,windowMs:p.windowMs??D.windowMs,contributors:p.topContributors??D.contributors}:D,[p,D]),Jt=k(()=>we($),[$]),Qt=k(()=>at(l),[l]),H=ne(ke,se,se),Xt=k(()=>[...H].reverse(),[H]),en=k(()=>Te(H),[H]),tn=k(()=>{if(n!=="audit")return null;let C=zn();return C?{findings:ut(C)}:null},[n]),nn=k(()=>{if(n!=="audit")return[];let C=e.slice(-tr),X=[],Ye=new Set;for(let cn of C)for(let Ge of cn.items)if(Ge.payload!==void 0)for(let ye of yt(Ge.payload)){let Ze=`${ye.kind}:${ye.path}`;Ye.has(Ze)||(Ye.add(Ze),X.push(ye))}return X},[n,e]),rn=k(()=>s==null?void 0:e.find(C=>C.id===s),[e,s]),an=k(()=>e.reduce((C,X)=>C+X.totalBytes,0),[e]),on=fe(C=>{i(C),o("detail")},[]),sn=fe(()=>{o("list"),i(null)},[]),ln=fe(()=>{he(),Ce(),o("list"),i(null)},[]);return{tab:n,setTab:r,view:a,envelopes:e,rows:c,selected:rn,status:t,totalBytes:an,usage:$,projection:Jt,plan:Qt,setPlanId:d,drops:H,dropRows:Xt,dropSummary:en,audit:tn,piiFindings:nn,openDetail:on,closeDetail:sn,clear:ln}}var ft={};yn(ft,{AccessibilityInfo:()=>or,ActivityIndicator:()=>sa,Alert:()=>da,Animated:()=>ea,AppRegistry:()=>sr,AppState:()=>lr,Appearance:()=>ir,BackHandler:()=>cr,Button:()=>la,CheckBox:()=>Tr,Clipboard:()=>dr,DeviceEventEmitter:()=>Or,Dimensions:()=>ur,Easing:()=>pr,FlatList:()=>mt,I18nManager:()=>yr,Image:()=>Er,ImageBackground:()=>Br,InteractionManager:()=>mr,Keyboard:()=>fr,KeyboardAvoidingView:()=>Dr,LayoutAnimation:()=>hr,Linking:()=>br,LogBox:()=>Mr,Modal:()=>oa,NativeEventEmitter:()=>gr,NativeModules:()=>ar,PanResponder:()=>vr,Picker:()=>$r,PixelRatio:()=>Sr,Platform:()=>wr,Pressable:()=>aa,ProgressBar:()=>Ar,RefreshControl:()=>_r,SafeAreaView:()=>Ir,ScrollView:()=>Y,SectionList:()=>Lr,Share:()=>xr,StatusBar:()=>Pr,StyleSheet:()=>F,Switch:()=>ia,Text:()=>g,TextInput:()=>ta,Touchable:()=>Fr,TouchableHighlight:()=>na,TouchableNativeFeedback:()=>Nr,TouchableOpacity:()=>St,TouchableWithoutFeedback:()=>ra,UIManager:()=>kr,Vibration:()=>Cr,View:()=>y,VirtualizedList:()=>Rr,YellowBox:()=>jr,findNodeHandle:()=>ca,unstable_createElement:()=>rr,useColorScheme:()=>zr,useLocaleContext:()=>qr,useWindowDimensions:()=>Vr});fn(ft,nr);import*as nr from"react-native-web";import{unstable_createElement as rr,NativeModules as ar,AccessibilityInfo as or,Appearance as ir,AppRegistry as sr,AppState as lr,BackHandler as cr,Clipboard as dr,Dimensions as ur,Easing as pr,I18nManager as yr,Keyboard as fr,InteractionManager as mr,LayoutAnimation as hr,Linking as br,NativeEventEmitter as gr,PanResponder as vr,PixelRatio as Sr,Platform as wr,Share as xr,UIManager as kr,Vibration as Cr,CheckBox as Tr,FlatList as mt,Image as Er,ImageBackground as Br,KeyboardAvoidingView as Dr,Picker as $r,ProgressBar as Ar,RefreshControl as _r,SafeAreaView as Ir,SectionList as Lr,StatusBar as Pr,Touchable as Fr,TouchableNativeFeedback as Nr,VirtualizedList as Rr,YellowBox as jr,LogBox as Mr,DeviceEventEmitter as Or,useColorScheme as zr,useLocaleContext as qr,useWindowDimensions as Vr}from"react-native-web";import*as h from"react-native-web";import{createElement as De,forwardRef as ht,useCallback as Hr,useRef as Kr}from"react";import{useEffect as Wr,useState as Ur}from"react";import{createPortal as Yr}from"react-dom";var Gr='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';import{jsx as Zr}from"react/jsx-runtime";var U=Symbol.for("@buoy-gg/portal-host"),bt=e=>{if(!(e instanceof Element))return false;if(e.closest("input, textarea, select"))return true;let t=e.closest("[contenteditable]")?.getAttribute("contenteditable")?.toLowerCase();return t===""||t==="true"||t==="plaintext-only"};function gt(){let e=document;if(e[U])return e[U].host;let t=document.createElement("div");t.dataset.buoyPortalHost="",Object.assign(t.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",fontFamily:Gr});let n=()=>{let c=document.fullscreenElement,p=c&&c.tagName!=="CANVAS"?c:document.body;t.parentElement!==p&&p.appendChild(t)},r=new Map,a=c=>{(!t.contains(c.target)||!bt(c.target))&&r.set(c.code||c.key,{key:c.key,code:c.code,location:c.location,keyCode:c.keyCode,which:c.which,altKey:c.altKey,ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey})},o=c=>{r.delete(c.code||c.key)},s=()=>r.clear(),i=()=>{let c=[...r.values()];r.clear();for(let p of c)document.dispatchEvent(new KeyboardEvent("keyup",{...p,bubbles:true}))},l=c=>{bt(c.target)&&c.stopPropagation()},d=c=>c.stopPropagation();return n(),document.addEventListener("fullscreenchange",n),document.addEventListener("keydown",a,true),document.addEventListener("keyup",o,true),window.addEventListener("blur",s),t.addEventListener("focusin",i),t.addEventListener("keydown",l),t.addEventListener("keyup",l),t.addEventListener("keypress",l),t.addEventListener("wheel",d,{passive:true}),e[U]={host:t,users:0,dispose:()=>{document.removeEventListener("fullscreenchange",n),document.removeEventListener("keydown",a,true),document.removeEventListener("keyup",o,true),window.removeEventListener("blur",s),t.remove(),delete e[U]}},t}function Jr({children:e}){let[t,n]=Ur(null);return Wr(()=>{let r=gt(),a=document[U];return a.users++,n(r),()=>{--a.users===0&&a.dispose()}},[]),t?Yr(Zr("div",{"data-buoy-root":"",style:{display:"contents",pointerEvents:"auto"},children:e}),t):null}var O=h,Qr=["shadowColor","shadowOffset","shadowOpacity","shadowRadius","textShadowColor","textShadowOffset","textShadowRadius"],z=e=>typeof e=="number"?`${e}px`:e;function $e(e){if(Array.isArray(e)){let p=e.map($e);return p.some((D,$)=>D!==e[$])?p:e}if(!e||typeof e!="object"||!Qr.some(p=>e[p]!=null))return e;let{shadowColor:t,shadowOffset:n,shadowOpacity:r,shadowRadius:a,textShadowColor:o,textShadowOffset:s,textShadowRadius:i,...l}=e;if(t!=null||n!=null||r!=null||a!=null){let p=t??"black",D=r==null?p:`color-mix(in srgb, ${p} ${Math.min(r,1)*100}%, transparent)`,$=`${z(n?.width??0)} ${z(n?.height??0)} ${z(a??0)} ${D}`;l.boxShadow=typeof l.boxShadow=="string"?`${l.boxShadow}, ${$}`:l.boxShadow??$}let{width:d=0,height:c=0}=s??{};if(o&&(d||c||i)){let p=`${z(d)} ${z(c)} ${z(i??0)} ${o}`;l.textShadow=l.textShadow?`${l.textShadow}, ${p}`:p}return l}var Xr=O.StyleSheet.create({auto:{pointerEvents:"auto"},none:{pointerEvents:"none"},"box-none":{pointerEvents:"box-none"},"box-only":{pointerEvents:"box-only"}});function vt(e,t){if(typeof e=="function")return r=>vt(e(r),t);let n=$e(e);return t?[n,Xr[t]]:n}var F={...O.StyleSheet,create:e=>O.StyleSheet.create(Object.fromEntries(Object.entries(e).map(([t,n])=>[t,$e(n)])))};function S(e){let t=ht((r,a)=>{let{accessibilityState:o,accessibilityValue:s,pointerEvents:i,...l}=r;for(let c of["busy","checked","disabled","expanded","selected"])o?.[c]!==void 0&&l[`aria-${c}`]===void 0&&(l[`aria-${c}`]=o[c]);for(let[c,p]of Object.entries({min:"valuemin",max:"valuemax",now:"valuenow",text:"valuetext"}))s?.[c]!==void 0&&l[`aria-${p}`]===void 0&&(l[`aria-${p}`]=s[c]);let d=vt(l.style,i);return d!==l.style&&(l.style=d),De(e,{...l,ref:a})}),n=e.State;return n&&Object.assign(t,{State:n}),t.displayName=e.displayName??e.name??"NativeWebView",t}var y=S(h.View),g=S(h.Text),ea={...O.Animated,View:O.Animated.createAnimatedComponent(y),Text:O.Animated.createAnimatedComponent(g)},ta=S(h.TextInput),St=S(h.TouchableOpacity),na=S(h.TouchableHighlight),ra=S(h.TouchableWithoutFeedback),aa=S(h.Pressable),Y=S(h.ScrollView),wt=ht((e,t)=>{let n=Kr(null),r=Hr(a=>{if(a){let o=a;for(;o.parentElement&&o.parentElement!==document.body;)o=o.parentElement;o.parentElement===document.body&&(n.current=o,Object.assign(o.style,{position:"relative",zIndex:"2147483647",pointerEvents:"auto"}),gt().appendChild(o))}else n.current&&(document.body.appendChild(n.current),n.current=null);typeof t=="function"?t(a):t&&(t.current=a)},[t]);return De(Jr,null,De(h.Modal,{...e,ref:r}))});wt.displayName="Modal";var oa=S(wt),ia=S(h.Switch),sa=S(h.ActivityIndicator),la=S(h.Button),ca=h.findNodeHandle,da={alert(e,t,n,r){if(typeof document>"u")return;let a=document.createElement("dialog");a.dataset.buoyRoot="",a.setAttribute("aria-label",e),a.style.cssText="position:fixed;inset:0;margin:auto;width:min(440px,90vw);padding:24px;border:1px solid #475569;border-radius:14px;background:#17212e;color:#f1f5f9;font:14px system-ui;box-shadow:0 20px 80px #0008;z-index:2147483647";let o=document.createElement("h2");if(o.textContent=e,o.style.cssText="font-size:18px;margin:0 0 12px",a.appendChild(o),t){let d=document.createElement("p");d.textContent=t,d.style.cssText="line-height:1.5;white-space:pre-wrap;margin:0 0 20px",a.appendChild(d)}let s=document.createElement("div");s.style.cssText="display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px";let i=n?.length?n:[{text:"OK"}],l=()=>{a.close?.(),a.remove()};for(let d of i){let c=document.createElement("button");c.type="button",c.textContent=d.text??"OK",c.style.cssText=`padding:9px 14px;border:1px solid #64748b;border-radius:7px;color:white;background:${d.style==="destructive"?"#a52b38":"#283a4d"};cursor:pointer;font:inherit`,c.onclick=()=>{l(),d.onPress?.()},s.appendChild(c)}a.addEventListener("cancel",d=>{d.preventDefault(),r?.cancelable!==false&&(l(),r?.onDismiss?.())}),a.appendChild(s),document.body.appendChild(a),a.showModal?a.showModal():a.setAttribute("open","")}};import{ModalHeader as N,TabSelector as ua,night as ce,Trash2 as pa}from"@buoy-gg/shared-ui/web";import{jsx as B,jsxs as xt}from"react/jsx-runtime";var ya=[{key:"feed",label:"Feed"},{key:"cost",label:"Cost"},{key:"drops",label:"Drops"},{key:"audit",label:"Audit"}];function Ae({c:e,onBack:t}){if(e.view==="detail"){let r=e.selected&&e.selected.items.map(a=>a.type).join(" + ")||"Envelope";return xt(N,{children:[B(N.Navigation,{onBack:e.closeDetail}),B(N.Content,{title:r})]})}let n=e.rows.length>0;return xt(N,{children:[t?B(N.Navigation,{onBack:t}):null,B(N.Content,{title:"",noMargin:true,children:B(y,{style:_e.tabs,children:B(ua,{tabs:ya,activeTab:e.tab,onTabChange:r=>e.setTab(r),testIDPrefix:"sentry-tab"})})}),B(N.Actions,{children:B(St,{onPress:e.clear,disabled:!n,style:[_e.actionBtn,!n&&_e.actionBtnDisabled],accessibilityLabel:"Clear captured envelopes",testID:"sentry-clear",children:B(pa,{size:14,color:n?ce.color.textSecondary:ce.color.textTertiary})})})]})}var _e=F.create({tabs:{maxWidth:360},actionBtn:{width:32,height:32,borderRadius:8,backgroundColor:ce.color.buttonSurface,borderWidth:1,borderColor:ce.color.border,alignItems:"center",justifyContent:"center"},actionBtnDisabled:{opacity:.55}});import{useCallback as fa}from"react";import{night as _,ToolEmptyState as ma,LOG_LIST_PRESET as ha,CompactRow as ba,DevToolsCard as Ie,InfoRow as G,Pill as kt,CopyButton as ga,NightSectionLabel as Ct,RelativeTime as va,formatBytes as Z}from"@buoy-gg/shared-ui/web";import{DataViewer as Sa}from"@buoy-gg/shared-ui/web/dataViewer";var wa={attached:{label:"Attached",color:"#34D399"},searching:{label:"Searching\u2026",color:"#FBBF24"},"sdk-not-found":{label:"SDK not found",color:"#F87171"},"no-client":{label:"No client",color:"#F87171"}};import{night as q,ChipStrip as xa,useChipTap as ka,NightChip as Ca,NightSectionLabel as Ta,NightFootnote as Le,DevToolsCard as Tt,InfoRow as Pe,formatBytes as Ea,formatDuration as Ba}from"@buoy-gg/shared-ui/web";import{jsx as v,jsxs as R}from"react/jsx-runtime";function Da(e){return e===null?q.color.textTertiary:e>=1?"#F87171":e>=.6?"#FBBF24":"#34D399"}function j(e,t){return t==="bytes"?Ea(e):e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function Et(e){return e===null?"\u2014":Number.isFinite(e)?e>=10?`${Math.round(e)}\xD7 quota`:`${Math.round(e*100)}% of quota`:"not on plan"}function $a({category:e,session:t,projected:n,quota:r,usable:a}){let o=a?ot(n,r):null,s=Da(o),i=o===null||!Number.isFinite(o)?o===null?0:100:Math.min(100,o*100),l=a?`, about ${j(n,e.format)} per month, ${Et(o)}`:", projection needs a longer session",d=r>0?`, quota ${j(r,e.format)}`:", not included in this plan";return R(Tt,{testID:`sentry-cost-${e.key}`,contentStyle:b.cardBody,accessible:true,accessibilityLabel:`${e.label}: ${j(t,e.format)} this session${l}${d}`,children:[R(y,{style:b.head,children:[v(g,{style:b.label,children:e.label}),R(g,{style:b.session,children:[j(t,e.format)," this session"]})]}),v(y,{style:b.barTrack,children:v(y,{style:[b.barFill,{width:`${i}%`,backgroundColor:s}]})}),v(Pe,{label:"Projected",value:a?`${j(n,e.format)}/mo \xB7 ${Et(o)}`:"needs a longer session",valueColor:s}),v(Pe,{label:"Quota",value:r>0?j(r,e.format):"not included"}),v(Le,{style:b.hint,children:e.hint})]})}function Bt({c:e}){let{usage:t,projection:n,plan:r}=e,{scrollProps:a,onTouchStart:o,isTap:s}=ka();return R(Y,{keyboardShouldPersistTaps:"handled",style:b.container,contentContainerStyle:b.content,testID:"sentry-cost-view",children:[v(xa,{scrollProps:a,contentStyle:b.planStrip,sentryLabel:"ignore devtools sentry plan strip scroll",children:oe.map(i=>v(y,{onTouchStart:o,children:v(Ca,{label:i.name,selected:i.id===r.id,onPress:()=>{s()&&e.setPlanId(i.id)},testID:`sentry-plan-${i.id}`})},i.id))}),R(Le,{style:b.windowNote,children:[e.rows.length," envelope",e.rows.length===1?"":"s"," over"," ",Ba(t.windowMs),n.usable?" \xB7 projection extrapolates this rate to 30 days":""]}),ge.map(i=>v($a,{category:i,session:t.totals[i.key],projected:n.totals[i.key],quota:r.quota[i.key],usable:n.usable},i.key)),t.contributors.length>0?R(y,{testID:"sentry-cost-contributors",children:[v(Ta,{style:b.sectionLabel,children:"WHAT COSTS THE MOST"}),v(Tt,{contentStyle:b.contribBody,children:t.contributors.slice(0,8).map(i=>{let l=ge.find(d=>d.key===i.category);return v(Pe,{label:i.label,value:`${j(i.units,l?.format??"count")} ${l?.label.toLowerCase()??i.category}${i.occurrences>1?` \xD7${i.occurrences}`:""}`},`${i.category}:${i.label}`)})})]}):null,R(Le,{style:b.footnote,children:["Sentry bills on receipt \u2014 data their server-side sampling later drops is still charged, so the only lossless lever is client config, and on mobile that ships frozen in the binary. Quotas as published ",nt,"."]})]})}var b=F.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:16,paddingBottom:24},planStrip:{paddingHorizontal:12,gap:8},windowNote:{marginHorizontal:12,marginTop:6},sectionLabel:{marginHorizontal:12,marginTop:12,marginBottom:2},cardBody:{gap:6},hint:{marginTop:2,marginLeft:0,fontSize:q.font.micro,lineHeight:q.font.micro*1.4},contribBody:{gap:0},head:{flexDirection:"row",alignItems:"baseline",justifyContent:"space-between",gap:8},label:{color:q.color.text,fontSize:13,fontWeight:"700"},session:{color:q.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},barTrack:{height:10,borderRadius:5,backgroundColor:q.color.fill,overflow:"hidden"},barFill:{height:10,borderRadius:5},footnote:{marginHorizontal:12,marginTop:10}});import{useCallback as Aa,useState as _a}from"react";import{ChipStrip as Ia,useChipTap as La,CompactRow as Pa,NightFootnote as Fa,Pill as Fe,RelativeTime as Na,ToolEmptyState as Ra}from"@buoy-gg/shared-ui/web";var J={before_send:{label:"beforeSend returned null",explanation:"Your own callback discarded it. This is the most common cause of a missing event, and it leaves no trace anywhere else."},sample_rate:{label:"sampled out",explanation:"A sample-rate roll went against it. Expected \u2014 unless the rate is lower than you meant it to be."},event_processor:{label:"dropped by a processor",explanation:"An integration returned null \u2014 usually dedupe (a repeat of an event already sent) or an inbound filter such as ignoreErrors."},rn_discard:{label:"discarded by RN tracing",explanation:"React Native tracing judged the transaction empty \u2014 no child spans, no route info, or a back navigation that went nowhere."},client_report:{label:"reported dropped by the SDK",explanation:"The SDK's own client report counted this as discarded. It arrives one envelope late, so it names a count rather than the event."},native:{label:"rejected natively",explanation:"The native transport refused it \u2014 a 429 rate limit, a payload over the size cap, or an offline cache eviction. Only visible with debug enabled."},other:{label:"dropped",explanation:"The SDK recorded a discard under a reason this tool doesn't model."}};import{jsx as I,jsxs as Dt}from"react/jsx-runtime";var V={before_send:"#F87171",sample_rate:"#60A5FA",event_processor:"#FBBF24",rn_discard:"#A78BFA",client_report:"#FB923C",native:"#F472B6",other:"#9CA3AF"};function $t({c:e}){let[t,n]=_a(null),{scrollProps:r}=La(),a=Aa(o=>n(s=>s===o?null:o),[]);return e.drops.length===0?I(Ra,{testID:"sentry-drops-empty",otto:"scanning",title:"Nothing dropped yet",message:"Events the SDK discards before sending will be listed here with the reason \u2014 a beforeSend that returned null, a sample-rate roll, dedupe, or a native rate limit."}):Dt(Y,{keyboardShouldPersistTaps:"handled",style:Q.container,contentContainerStyle:Q.content,testID:"sentry-drops-view",children:[I(Ia,{scrollProps:r,contentStyle:Q.summaryStrip,sentryLabel:"ignore devtools sentry drop summary scroll",children:e.dropSummary.map(o=>I(Fe,{label:`${o.units} \xD7 ${J[o.reason].label}`,color:V[o.reason],variant:"tinted",size:"sm",uppercase:false,testID:`sentry-drop-summary-${o.reason}`},o.reason))}),e.dropRows.map(o=>I(Pa,{statusDotColor:V[o.reason],statusLabel:o.category,statusSublabel:o.source,primaryText:o.detail,secondaryAccessory:I(Fe,{label:J[o.reason].label,color:V[o.reason],variant:"outline",uppercase:false}),badgeText:o.quantity>1?`\xD7${o.quantity}`:void 0,badgeColor:V[o.reason],bottomRightText:I(Na,{timestamp:o.timestamp}),isExpanded:t===o.id,expandedGlowColor:V[o.reason],expandedContent:Dt(y,{style:Q.expanded,children:[I(Fe,{label:J[o.reason].label,color:V[o.reason],variant:"outline",uppercase:false}),I(Fa,{style:Q.explanation,children:J[o.reason].explanation})]}),showChevron:true,onPress:()=>a(o.id),testID:`sentry-drop-row-${o.id}`},o.id))]})}var Q=F.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:16,paddingBottom:24},summaryStrip:{paddingHorizontal:12,gap:8,paddingBottom:4},expanded:{gap:6,alignItems:"flex-start"},explanation:{marginTop:2,marginLeft:0}});import{night as Ne,DevToolsCard as Re,NightSectionLabel as At,NightFootnote as je,Pill as _t,ToolEmptyState as ja}from"@buoy-gg/shared-ui/web";import{monoFont as Ma}from"@buoy-gg/shared-ui/web";import{Fragment as It,jsx as w,jsxs as L}from"react/jsx-runtime";var Lt=Ma,de={critical:"#F87171",warning:"#FBBF24",info:"#60A5FA"},Oa={quota:"Quota",privacy:"Privacy",correctness:"Correctness"};function Pt({c:e}){let{audit:t,piiFindings:n}=e;if(!t)return w(ja,{testID:"sentry-audit-unavailable",otto:"scanning",title:"No client to audit",message:"The audit reads the options Sentry.init actually resolved, so it needs a live client. Once the tool attaches, the resolved config is graded here."});let r=t.findings.length===0&&n.length===0;return L(Y,{keyboardShouldPersistTaps:"handled",style:m.container,contentContainerStyle:m.content,testID:"sentry-audit-view",children:[r?L(Re,{testID:"sentry-audit-clean",contentStyle:m.cardBody,children:[w(g,{style:m.title,children:"Nothing to flag"}),w(je,{tone:"secondary",style:m.inCard,children:"The resolved config raised no findings, and nothing sent this session matched a personal-data pattern."})]}):null,t.findings.length>0?L(It,{children:[w(At,{style:m.sectionLabel,children:"CONFIG"}),t.findings.map(a=>L(Re,{testID:`sentry-audit-${a.id}`,style:[m.stripe,{borderLeftColor:de[a.severity]}],contentStyle:m.cardBody,accessible:true,accessibilityLabel:`${a.severity} ${a.category} finding. ${a.title}. ${a.detail}`,children:[L(y,{style:m.head,children:[w(g,{style:m.title,children:a.title}),w(_t,{label:Oa[a.category]??a.category,color:de[a.severity],variant:"tinted"})]}),w(je,{tone:"secondary",style:m.inCard,children:a.detail})]},a.id))]}):null,n.length>0?L(It,{children:[w(At,{style:m.sectionLabel,children:"PERSONAL DATA IN SENT PAYLOADS"}),w(je,{style:m.piiNote,children:"Values are redacted here \u2014 the path is what you need to fix."}),n.map((a,o)=>L(Re,{testID:`sentry-pii-${o}`,style:[m.stripe,{borderLeftColor:de.critical}],contentStyle:m.cardBody,accessible:true,accessibilityLabel:`${Ee[a.kind]} at ${a.path}, value redacted as ${a.sample}`,children:[L(y,{style:m.head,children:[w(_t,{label:Ee[a.kind],color:de.critical,variant:"tinted"}),w(g,{style:m.sample,children:a.sample})]}),w(g,{style:m.path,selectable:true,children:a.path})]},`${a.path}-${o}`))]}):null]})}var m=F.create({container:{flex:1,backgroundColor:"transparent"},content:{paddingTop:16,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},piiNote:{marginHorizontal:12,marginTop:0,marginBottom:2},cardBody:{gap:6},inCard:{marginTop:2,marginLeft:0},stripe:{borderLeftWidth:3,borderRadius:8},head:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},title:{color:Ne.color.text,fontSize:13,fontWeight:"700",flexShrink:1},sample:{color:Ne.color.textTertiary,fontSize:10,fontFamily:Lt},path:{color:Ne.color.textSecondary,fontSize:11,fontFamily:Lt}});import{monoFont as za}from"@buoy-gg/shared-ui/web";import{Fragment as qa,jsx as u,jsxs as E}from"react/jsx-runtime";var Va=za,Ha={event:"#F87171",transaction:"#A78BFA",session:"#34D399",sessions:"#34D399",client_report:"#FBBF24",log:"#60A5FA",attachment:"#F472B6",profile:"#FB923C",profile_chunk:"#FB923C",replay_event:"#22D3EE",replay_recording:"#22D3EE",user_report:"#F472B6",feedback:"#F472B6"},Ka={client_report:"report",replay_recording:"replay",replay_event:"replay",profile_chunk:"profile",user_report:"feedback"};function Ft(e){return Ha[e]??"#9CA3AF"}function Wa(e){return Ka[e]??e}function Ua(e){let t=new Date(e),n=r=>String(r).padStart(2,"0");return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function Ya({envelope:e,onPress:t}){let n=e.items[0],r=e.items.reduce((s,i)=>s+(i.spanCount??0),0),a=e.items.length-1,o=`${n?.summary??"envelope"}${r>0?` \xB7 ${r} span${r===1?"":"s"}`:""}`;return u(ba,{statusDotColor:Ft(n?.type??""),statusLabel:Wa(n?.type??"envelope"),statusSublabel:a>0?`+${a} more`:void 0,primaryText:o,secondaryText:a>0?e.items.map(s=>s.type).join(" + "):void 0,badgeText:Z(e.totalBytes),badgeColor:_.color.textSecondary,bottomRightText:u(va,{timestamp:e.timestamp}),showChevron:true,onPress:()=>t(e.id),testID:`sentry-envelope-row-${e.id}`})}function Ga({c:e}){let t=wa[e.status];return E(y,{style:f.meta,children:[u(y,{testID:"sentry-status-chip",accessible:true,accessibilityLabel:`Sentry capture: ${t.label}`,children:u(kt,{label:t.label,color:t.color,variant:"quiet",dot:true})}),E(g,{style:f.metaTotals,testID:"sentry-totals",children:[e.rows.length," \xB7 ",Z(e.totalBytes)]})]})}function Za({status:e}){return u(ma,{testID:"sentry-empty",otto:e==="attached"?"guard":"scanning",title:"No envelopes captured",message:e==="attached"?"Attached to the Sentry client. Envelopes will appear here as the app sends them.":e==="sdk-not-found"?"@sentry/react-native isn't installed in this app (or isn't resolvable). Pass getClient to installSentryCapture / SentryRoot to attach explicitly.":e==="no-client"?"Sentry SDK found, but no client appeared \u2014 is Sentry.init() being called?":"Looking for the app's Sentry client\u2026"})}function Ja(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}function Nt({value:e,testID:t}){if(!(e!==null&&typeof e=="object")){let n=Ja(e);return E(y,{style:f.payloadBlock,children:[u(y,{style:f.payloadCopy,children:u(ga,{value:n,size:12})}),u(g,{style:f.payload,selectable:true,testID:t,children:n})]})}return u(y,{style:f.payloadTree,testID:t,children:u(Sa,{title:"",data:e,rawMode:true,showTypeFilter:true,initialExpanded:false,testIDPrefix:t?`${t}-node`:void 0})})}function Qa({item:e,index:t}){return E(Ie,{testID:`sentry-item-${t}`,contentStyle:f.cardBody,children:[E(y,{style:f.itemHead,children:[u(kt,{label:e.type,color:Ft(e.type),variant:"outline"}),E(g,{style:f.itemMeta,children:[Z(e.bytes),e.spanCount!=null?` \xB7 ${e.spanCount} span${e.spanCount===1?"":"s"}`:""]})]}),u(g,{style:f.itemSummary,testID:`sentry-item-${t}-summary`,children:e.summary}),e.binary?E(g,{style:f.itemBinary,children:["binary payload (",Z(e.bytes),")"]}):e.payload!==void 0?u(Nt,{value:e.payload,testID:`sentry-item-${t}-payload`}):null]})}function Xa({envelope:e}){return E(Y,{keyboardShouldPersistTaps:"handled",style:f.container,contentContainerStyle:f.detailContent,testID:"sentry-envelope-detail",children:[E(Ie,{contentStyle:f.cardBody,children:[u(G,{label:"Captured",value:Ua(e.timestamp)}),u(G,{label:"Size",value:Z(e.totalBytes)}),u(G,{label:"Items",value:String(e.items.length)}),u(G,{label:"Origin",value:e.origin}),e.eventId?u(G,{label:"Event ID",value:e.eventId,mono:true,copyable:true}):null]}),u(Ct,{style:f.sectionLabel,children:"ITEMS"}),e.items.map((t,n)=>u(Qa,{item:t,index:n},n)),e.header!==void 0?E(qa,{children:[u(Ct,{style:f.sectionLabel,children:"ENVELOPE HEADER"}),u(Ie,{contentStyle:f.cardBody,children:u(Nt,{value:e.header,testID:"sentry-envelope-header"})})]}):null]})}function Me({c:e}){let t=fa(({item:n})=>u(Ya,{envelope:n,onPress:e.openDetail}),[e.openDetail]);return e.tab==="cost"?u(Bt,{c:e}):e.tab==="drops"?u($t,{c:e}):e.tab==="audit"?u(Pt,{c:e}):e.view==="detail"&&e.selected?u(Xa,{envelope:e.selected}):u(mt,{keyboardShouldPersistTaps:"handled",style:f.container,data:e.rows,keyExtractor:n=>String(n.id),renderItem:t,ListHeaderComponent:u(Ga,{c:e}),ListEmptyComponent:u(Za,{status:e.status}),contentContainerStyle:f.listContent,...ha,testID:"sentry-envelope-list"})}var f=F.create({container:{flex:1,backgroundColor:"transparent"},listContent:{paddingTop:16,paddingBottom:12},meta:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8,paddingHorizontal:12,paddingBottom:8},metaTotals:{color:_.color.textTertiary,fontSize:11,fontVariant:["tabular-nums"]},detailContent:{paddingTop:16,paddingBottom:24},sectionLabel:{marginHorizontal:12,marginTop:10,marginBottom:2},cardBody:{gap:8},itemHead:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8},itemMeta:{color:_.color.textSecondary,fontSize:11,fontVariant:["tabular-nums"]},itemSummary:{color:_.color.text,fontSize:12,fontWeight:"600"},itemBinary:{color:_.color.textTertiary,fontSize:11,fontStyle:"italic"},payloadBlock:{backgroundColor:_.color.fill,borderRadius:6,padding:8,paddingRight:26},payloadTree:{backgroundColor:_.color.fill,borderRadius:6,marginHorizontal:-4,paddingVertical:4,overflow:"hidden"},payloadCopy:{position:"absolute",top:4,right:4,zIndex:1},payload:{color:_.color.textSecondary,fontSize:11,fontFamily:Va,lineHeight:16}});import{jsx as Oe}from"react/jsx-runtime";function Rt({visible:e,onClose:t,onBack:n,onMinimize:r,persistenceKey:a}){let o=Be();return Oe(bn,{visible:e,onClose:t,onMinimize:r,persistenceKey:a??"buoy-sentry",header:{showToggleButton:true,customContent:Oe(Ae,{c:o,onBack:n})},enablePersistence:true,initialMode:"bottomSheet",disableScrollWrapper:true,children:Oe(Me,{c:o})})}function eo(){return null}import{approxJsonSize as to}from"@buoy-gg/shared-ui/web";function ze(e,t=2048){return e.length<=t?e:`${e.slice(0,t)}\u2026 [${e.length-t} more]`}function qe(e,t,n){if(e===null)return null;if(typeof e=="string")return ze(e);if(typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:String(e);if(typeof e>"u")return"undefined";if(typeof e=="bigint")return`${String(e)}n`;if(typeof e=="function")return`\u0192 ${e.name||"(anonymous)"}`;if(typeof e=="symbol")return e.toString();if(e instanceof Error)return{name:e.name,message:ze(e.message),stack:e.stack?ze(e.stack,4*1024):e.stack};if(t>=8)return Array.isArray(e)?"[Array]":"{\u2026}";let r=e;if(n.has(r))return"[Circular]";n.add(r);try{if(Array.isArray(e)){let o=e.slice(0,200).map(s=>qe(s,t+1,n));return e.length>200&&o.push(`\u2026 ${e.length-200} more`),o}let a={};for(let o of Object.keys(r).slice(0,200))try{a[o]=qe(r[o],t+1,n)}catch{a[o]="[Unserializable]"}return a}finally{n.delete(r)}}function jt(e){return qe(e,0,new WeakSet)}var Ve="__buoySentryDropWatch";function Mt(e,t){let n=e;if(t==="transaction")return n?.transaction??"transaction";let r=n?.exception?.values?.[0];if(r?.value)return String(r.value);if(r?.type)return String(r.type);let a=n?.message?.formatted??n?.message;return typeof a=="string"?a:"event"}function Ot(e,t){if(typeof e!="function"||e[Ve])return e;let n=(r,a)=>{let o=Mt(r,t),s;try{s=e(r,a)}catch(l){try{ie({timestamp:Date.now(),reason:"before_send",category:t==="transaction"?"transaction":"error",quantity:1,detail:`${o} \u2014 the callback threw`,source:"observed"})}catch{}throw l}let i=l=>{if(l===null)try{ie({timestamp:Date.now(),reason:"before_send",category:t==="transaction"?"transaction":"error",quantity:1,detail:o,source:"observed"})}catch{}};return s&&typeof s.then=="function"?s.then(l=>(i(l),l)):(i(s),s)};return n[Ve]=true,n}function zt(e){let t=e;if(!t)return false;let n=false;try{let r=t.getOptions?.();r&&(r.beforeSend=Ot(r.beforeSend,"error"),r.beforeSendTransaction=Ot(r.beforeSendTransaction,"transaction"),n=true)}catch{}try{t.on?.("beforeEnvelope",r=>{try{let a=r?.[1];if(!Array.isArray(a))return;let o=Date.now();for(let s of a){if(!Array.isArray(s))continue;let[i,l]=s;i?.type==="client_report"&&Ln(st(l,o))}}catch{}}),n=true}catch{}try{let r=t.getOptions?.();if(r){let a=r.beforeSendTransaction,o=(s,i)=>{try{let l=lt(s);l&&ie(ct(l,Mt(s,"transaction"),Date.now()))}catch{}return typeof a=="function"?a(s,i):s};o[Ve]=true,r.beforeSendTransaction=o}}catch{}return n}function no(e){try{let t=dt(e,Date.now());t&&ie(t)}catch{}}var ro=8*1024*1024,ao=500,oo=60;function qt(e){return typeof e=="object"&&e!==null&&typeof e.byteLength=="number"&&ArrayBuffer.isView(e)}function io(e){return typeof e=="string"?e.length:qt(e)?e.byteLength:to(e,ro).bytes}function M(...e){for(let t of e)if(typeof t=="string"&&t.length>0)return t}function Vt(e,t){let n=t;try{switch(e){case"event":{let r=n?.exception?.values?.[0];if(r){let o=M(r.value,r.type)??"exception";return r.type&&r.value?`${r.type}: ${r.value}`:o}let a=M(n?.message?.formatted,n?.message,n?.logentry?.message);return a||(n?.type==="feedback"?"user feedback":M(n?.transaction)??"event")}case"transaction":return M(n?.transaction)??"transaction";case"session":return M(n?.status)??"session";case"sessions":return"session aggregates";case"client_report":{let r=Array.isArray(n?.discarded_events)?n.discarded_events.reduce((a,o)=>a+(o?.quantity??1),0):0;return`${r} discarded event${r===1?"":"s"}`}case"log":{let r=Array.isArray(n?.items)?n.items.length:void 0;return r!=null?`${r} log${r===1?"":"s"}`:"logs"}case"attachment":return M(n?.filename)??"attachment";case"profile":case"profile_chunk":return"profile";case"user_report":case"feedback":return"user feedback";case"replay_event":case"replay_recording":return"replay";case"check_in":return M(n?.monitor_slug)??"check-in";default:return e}}catch{return e}}function so(e,t){if(e!=="transaction")return;let n=t?.spans;return Array.isArray(n)?n.length+1:1}function Ht(e){let t=Date.now();try{if(!Array.isArray(e)||!Array.isArray(e[1]))throw new Error("not an envelope");let[n,r]=e,a=[],o=0;for(let s of r){if(!Array.isArray(s))continue;let[i,l]=s,d=typeof i?.type=="string"?i.type:"unknown",c=io(l);o+=c;let p=qt(l);a.push({type:d,bytes:c,summary:p?Vt(d,i):Vt(d,l),spanCount:so(d,l),binary:p||void 0,payload:p?void 0:jt(l)})}return{timestamp:t,origin:"js",eventId:typeof n?.event_id=="string"?n.event_id:void 0,header:jt(n),items:a,totalBytes:o}}catch{return{timestamp:t,origin:"js",items:[{type:"unknown",bytes:0,summary:"unparseable envelope"}],totalBytes:0}}}var Kt=new WeakSet,He=false,x=null,ue;function Wt(e){let t=e;if(!t||typeof t.on!="function")return false;if(Kt.has(t))return true;Kt.add(t);try{t.on("beforeEnvelope",n=>{try{let r=Ht(n),a=r.items.some(o=>o.type==="event");Sn(r,{urgent:a})}catch{}})}catch{return false}try{zt(t)}catch{}try{Mn(t)}catch{}return re("attached"),true}function lo(){if(ue)try{return{client:ue(),sdkPresent:true}}catch{return{client:void 0,sdkPresent:true}}let e=eo();if(!e||typeof e.getClient!="function")return{client:void 0,sdkPresent:false};try{return{client:e.getClient(),sdkPresent:true}}catch{return{client:void 0,sdkPresent:true}}}function Ke(e={}){if(e.getClient&&(ue=e.getClient),He&&P()==="attached"||He&&x!==null)return;He=true;let t=0,n=()=>{t+=1;let{client:r,sdkPresent:a}=lo();if(r&&Wt(r)){x!==null&&(clearInterval(x),x=null);return}if(!a&&!ue){re("sdk-not-found"),x!==null&&(clearInterval(x),x=null);return}t>=oo&&(re("no-client"),x!==null&&(clearInterval(x),x=null))};n(),!(P()==="attached"||x!==null)&&P()!=="sdk-not-found"&&(x=setInterval(n,ao))}import{jsx as co}from"react/jsx-runtime";var Ut=globalThis,uo=typeof Ut.ErrorUtils?.setGlobalHandler=="function"||typeof Ut.RN$registerExceptionListener=="function";uo&&typeof ee<"u"&&ee&&Ke();var Yt=hn({id:"sentry",name:"SENTRY",description:"Envelopes the app sends to Sentry",slot:"both",icon:({size:e,color:t})=>co(Xe,{size:e,color:t??et}),component:Rt}),po=mn(Yt);import{useEffect as yo}from"react";function fo({getClient:e}={}){return yo(()=>{Ke(e?{getClient:e}:{})},[e]),null}import{jsx as pe,jsxs as mo}from"react/jsx-runtime";function ho(){let e=Be();return mo(y,{style:We.root,children:[pe(y,{style:We.headerSlot,children:pe(Ae,{c:e})}),pe(y,{style:We.body,children:pe(Me,{c:e})})]})}var We=F.create({root:{flex:1,flexDirection:"column",backgroundColor:"transparent"},headerSlot:{flexGrow:0,flexShrink:0},body:{flex:1}});import{approxJsonSize as Gt}from"@buoy-gg/shared-ui/web";var bo=50;function go(e){let t=a=>a.category==="span"||a.category==="transaction",n=e.filter(a=>!t(a)).slice(-20),r=e.filter(t).slice(-(bo-n.length));return[...n,...r].sort((a,o)=>a.timestamp-o.timestamp||a.id-o.id)}var vo=1.5*1024*1024,Ue=32*1024,So=Object.freeze({__buoyTruncated:true,note:"Payload omitted \u2014 inspect it on-device."}),Zt=new WeakMap;function wo(e){let t=Zt.get(e);if(t)return t;let n=Gt(e,Ue),r=n.bytes<=Ue?{envelope:e,bytes:n.bytes}:(()=>{let a={...e,items:e.items.map(o=>({...o,payload:o.payload===void 0?void 0:So}))};return{envelope:a,bytes:Gt(a,Ue).bytes}})();return Zt.set(e,r),r}function xo(e){let t=[],n=48;for(let r=e.length-1;r>=0;r--){let a=wo(e[r]);if(n+a.bytes>vo&&t.length>0)break;t.push(a.envelope),n+=a.bytes}return t.reverse(),t}var ko={version:1,getSnapshot(){let e=ae(),t=se(),n=Se(e),r=we(n);return{status:P(),envelopes:xo(e),usage:{session:n.totals,projectedMonthly:r.usable?r.totals:null,windowMs:n.windowMs,topContributors:n.contributors.slice(0,8).map(a=>({label:a.label,category:a.category,units:a.units}))},drops:{summary:Te(t),recent:go(t)}}},subscribe(e){let t=K(e),n=ke(e);return()=>{t(),n()}},actions:{clearEnvelopes(){return he(),Ce(),{cleared:true}}}};export{ge as CATEGORY_META,rt as DEFAULT_PLAN_ID,J as DROP_REASON_META,Ee as PII_KIND_LABEL,et as SENTRY_ICON_COLOR,oe as SENTRY_PLANS,nt as SENTRY_PLANS_VERIFIED_ON,Pt as SentryAuditView,Me as SentryBody,Bt as SentryCostView,$t as SentryDropsView,Ae as SentryHeader,Xe as SentryIcon,Rt as SentryModal,fo as SentryRoot,ho as SentryToolView,Wt as attachToClient,ut as auditConfig,Ce as clearDrops,he as clearEnvelopes,Se as computeUsage,po as createSentryTool,dt as dropFromNativeLog,ct as dropFromRnDiscard,st as dropsFromClientReport,er as formatBytes,P as getAttachStatus,se as getDrops,ae as getEnvelopes,be as getMirroredUsage,at as getPlan,Ke as installSentryCapture,no as noteNativeLog,zt as observeDrops,Cn as onClear,Ht as parseEnvelope,we as projectMonthly,ot as quotaFraction,kn as replaceAttachStatus,Pn as replaceDrops,wn as replaceEnvelopes,xn as replaceUsage,lt as rnDiscardReason,yt as scanForPii,ko as sentrySyncAdapter,Yt as sentryToolPreset,K as subscribe,ke as subscribeDrops,Te as summarizeDrops,Be as useSentryController,jn as worstSeverity};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/sentry",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.79",
|
|
4
4
|
"description": "Inspect captured JavaScript Sentry envelopes, available drop reasons and estimated usage in a React Native app.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
],
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
15
|
+
"@buoy-gg/shared-ui": "^7.0.79"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"react": "*"
|