@ryuzaki13/react-foundation-lib 2.31.1 → 2.31.3
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/README.md +17 -5
- package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts +17 -0
- package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts.map +1 -0
- package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts.map +1 -1
- package/dist/analytical-table/definition/types.d.ts +6 -5
- package/dist/analytical-table/definition/types.d.ts.map +1 -1
- package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts +7 -0
- package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts.map +1 -0
- package/dist/analytical-table/dynamic-columns/dateColumns.d.ts.map +1 -1
- package/dist/analytical-table/dynamic-columns/types.d.ts +2 -1
- package/dist/analytical-table/dynamic-columns/types.d.ts.map +1 -1
- package/dist/analytical-table/index.js +124 -114
- package/dist/analytical-table/index.js.map +1 -1
- package/dist/analytical-table/projections/analyticalExportConstants.d.ts +7 -0
- package/dist/analytical-table/projections/analyticalExportConstants.d.ts.map +1 -0
- package/dist/analytical-table/projections/expansion.d.ts +2 -1
- package/dist/analytical-table/projections/expansion.d.ts.map +1 -1
- package/dist/analytical-table/projections/exportProjection.d.ts.map +1 -1
- package/dist/analytical-table/projections/types.d.ts +3 -2
- package/dist/analytical-table/projections/types.d.ts.map +1 -1
- package/dist/analytical-table/runtime/aggregation.d.ts.map +1 -1
- package/dist/analytical-table/runtime/analyticalRowConstants.d.ts +4 -0
- package/dist/analytical-table/runtime/analyticalRowConstants.d.ts.map +1 -0
- package/dist/analytical-table/runtime/analyticalViewConstants.d.ts +16 -0
- package/dist/analytical-table/runtime/analyticalViewConstants.d.ts.map +1 -0
- package/dist/analytical-table/runtime/buildGroupedModel.d.ts.map +1 -1
- package/dist/analytical-table/runtime/filtering.d.ts.map +1 -1
- package/dist/analytical-table/runtime/grouping.d.ts.map +1 -1
- package/dist/analytical-table/runtime/hierarchy.d.ts +2 -1
- package/dist/analytical-table/runtime/hierarchy.d.ts.map +1 -1
- package/dist/analytical-table/runtime/totals.d.ts +2 -2
- package/dist/analytical-table/runtime/totals.d.ts.map +1 -1
- package/dist/analytical-table/runtime/types.d.ts +5 -3
- package/dist/analytical-table/runtime/types.d.ts.map +1 -1
- package/dist/analytical-table/runtime/valueComparison.d.ts.map +1 -1
- package/dist/array/index.js +1 -1
- package/dist/array/reorder.d.ts +6 -1
- package/dist/array/reorder.d.ts.map +1 -1
- package/dist/async-task-runner/createCoalescingTaskRunner.d.ts.map +1 -1
- package/dist/async-task-runner/createDeadlineTimer.d.ts.map +1 -1
- package/dist/async-task-runner/index.js +39 -36
- package/dist/async-task-runner/index.js.map +1 -1
- package/dist/async-task-runner/nativeTimerConstants.d.ts +3 -0
- package/dist/async-task-runner/nativeTimerConstants.d.ts.map +1 -0
- package/dist/binary/base64Constants.d.ts +6 -0
- package/dist/binary/base64Constants.d.ts.map +1 -0
- package/dist/binary/binaryToBlob.d.ts.map +1 -1
- package/dist/binary/getBase64DecodedSize.d.ts.map +1 -1
- package/dist/binary/index.js +95 -70
- package/dist/binary/index.js.map +1 -1
- package/dist/browser-notifications/browserNotificationConstants.d.ts +3 -0
- package/dist/browser-notifications/browserNotificationConstants.d.ts.map +1 -0
- package/dist/browser-notifications/browserNotificationTypes.d.ts +2 -1
- package/dist/browser-notifications/browserNotificationTypes.d.ts.map +1 -1
- package/dist/browser-notifications/createBrowserNotificationPresenter.d.ts.map +1 -1
- package/dist/browser-notifications/index.js +38 -37
- package/dist/browser-notifications/index.js.map +1 -1
- package/dist/chunks/{array-D-_yMMUK.js → array-bd7LYFto.js} +1 -3
- package/dist/chunks/{array-D-_yMMUK.js.map → array-bd7LYFto.js.map} +1 -1
- package/dist/chunks/{dom-BK22UmgF.js → dom-ZSeWZ0Gg.js} +103 -98
- package/dist/chunks/dom-ZSeWZ0Gg.js.map +1 -0
- package/dist/chunks/formatDate-CNPcfNte.js +133 -0
- package/dist/chunks/formatDate-CNPcfNte.js.map +1 -0
- package/dist/chunks/{formatters-rxriDRPk.js → formatters-CO40zvVB.js} +496 -497
- package/dist/chunks/formatters-CO40zvVB.js.map +1 -0
- package/dist/chunks/{formulas-BXT_XBWI.js → formulas-Y0HOcFhe.js} +90 -86
- package/dist/chunks/formulas-Y0HOcFhe.js.map +1 -0
- package/dist/chunks/hasSignatureBytes-D2wO_Myl.js +11 -0
- package/dist/chunks/hasSignatureBytes-D2wO_Myl.js.map +1 -0
- package/dist/chunks/keyboardConstants-BZKskWsm.js +6 -0
- package/dist/chunks/keyboardConstants-BZKskWsm.js.map +1 -0
- package/dist/chunks/media-imBOXWwa.js +192 -0
- package/dist/chunks/media-imBOXWwa.js.map +1 -0
- package/dist/chunks/mimeTypeConstants-BzONV-b1.js +6 -0
- package/dist/chunks/mimeTypeConstants-BzONV-b1.js.map +1 -0
- package/dist/chunks/{query-client-CVRfrYZM.js → query-client-D0HQZ84w.js} +142 -142
- package/dist/chunks/query-client-D0HQZ84w.js.map +1 -0
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js +766 -0
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js.map +1 -0
- package/dist/chunks/scalarTypeConstants-CnSsjpGO.js +6 -0
- package/dist/chunks/scalarTypeConstants-CnSsjpGO.js.map +1 -0
- package/dist/chunks/utils-DW0Yso1Q.js +210 -0
- package/dist/chunks/utils-DW0Yso1Q.js.map +1 -0
- package/dist/chunks/{uuid-CUJPAbRY.js → uuid-izDzLv18.js} +1 -2
- package/dist/chunks/uuid-izDzLv18.js.map +1 -0
- package/dist/chunks/validate-8URYKKly.js +613 -0
- package/dist/chunks/validate-8URYKKly.js.map +1 -0
- package/dist/copy/index.js +5 -5
- package/dist/copy/index.js.map +1 -1
- package/dist/copy/useCopyFeedback.d.ts.map +1 -1
- package/dist/crypto/hashString.d.ts.map +1 -1
- package/dist/crypto/hexadecimalConstants.d.ts +3 -0
- package/dist/crypto/hexadecimalConstants.d.ts.map +1 -0
- package/dist/crypto/index.js +25 -24
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/uuid.d.ts.map +1 -1
- package/dist/date-segments/index.js +81 -81
- package/dist/date-segments/index.js.map +1 -1
- package/dist/date-segments/mask.d.ts +13 -3
- package/dist/date-segments/mask.d.ts.map +1 -1
- package/dist/decimal/decimalConstants.d.ts +3 -0
- package/dist/decimal/decimalConstants.d.ts.map +1 -0
- package/dist/decimal/index.js +0 -2
- package/dist/decimal/index.js.map +1 -1
- package/dist/decimal/normalizeDecimal.d.ts.map +1 -1
- package/dist/decimal/normalizeDecimalLiteral.d.ts.map +1 -1
- package/dist/decimal/resolveDecimalMaxLength.d.ts.map +1 -1
- package/dist/decimal/sumDecimals.d.ts.map +1 -1
- package/dist/decimal/writeDecimalParts.d.ts.map +1 -1
- package/dist/dom/document-scroll/acquireDocumentScrollLock.d.ts.map +1 -1
- package/dist/dom/document-scroll/attachDocumentTouchScrollGuard.d.ts.map +1 -1
- package/dist/dom/document-scroll/canConsumeVerticalTouchScroll.d.ts.map +1 -1
- package/dist/dom/domEventConstants.d.ts +4 -0
- package/dist/dom/domEventConstants.d.ts.map +1 -0
- package/dist/dom/domScrollConstants.d.ts +3 -0
- package/dist/dom/domScrollConstants.d.ts.map +1 -0
- package/dist/dom/index.js +1 -1
- package/dist/dom/installFaviconOverride.d.ts.map +1 -1
- package/dist/dom/overlayFocusConstants.d.ts +4 -0
- package/dist/dom/overlayFocusConstants.d.ts.map +1 -0
- package/dist/dom/scroll-anchor/captureScrollAnchor.d.ts.map +1 -1
- package/dist/dom/useClickOutside.d.ts +1 -1
- package/dist/dom/useClickOutside.d.ts.map +1 -1
- package/dist/dom/useEscapeDismiss.d.ts +1 -1
- package/dist/dom/useEscapeDismiss.d.ts.map +1 -1
- package/dist/dom/useFocusTrap.d.ts.map +1 -1
- package/dist/dom/useIsTouchDevice.d.ts.map +1 -1
- package/dist/dom/useOverlayFocus.d.ts +3 -2
- package/dist/dom/useOverlayFocus.d.ts.map +1 -1
- package/dist/dom/visual-viewport/attachVisualViewportFrame.d.ts.map +1 -1
- package/dist/error-report/breadcrumbs.d.ts.map +1 -1
- package/dist/error-report/capture.d.ts.map +1 -1
- package/dist/error-report/captureOptions.d.ts +3 -2
- package/dist/error-report/captureOptions.d.ts.map +1 -1
- package/dist/error-report/capturePolicyConstants.d.ts +4 -0
- package/dist/error-report/capturePolicyConstants.d.ts.map +1 -0
- package/dist/error-report/dataPreview.d.ts.map +1 -1
- package/dist/error-report/diagnostics.d.ts.map +1 -1
- package/dist/error-report/drafts.d.ts.map +1 -1
- package/dist/error-report/environment.d.ts.map +1 -1
- package/dist/error-report/errorInfo.d.ts.map +1 -1
- package/dist/error-report/errorReportCaptureLimits.d.ts +26 -0
- package/dist/error-report/errorReportCaptureLimits.d.ts.map +1 -0
- package/dist/error-report/errorReportContractConstants.d.ts +32 -0
- package/dist/error-report/errorReportContractConstants.d.ts.map +1 -0
- package/dist/error-report/index.js +586 -587
- package/dist/error-report/index.js.map +1 -1
- package/dist/error-report/payload.d.ts.map +1 -1
- package/dist/error-report/queue.d.ts.map +1 -1
- package/dist/error-report/queueContract.d.ts +7 -6
- package/dist/error-report/queueContract.d.ts.map +1 -1
- package/dist/error-report/queueRecord.d.ts.map +1 -1
- package/dist/error-report/queueResultConstants.d.ts +14 -0
- package/dist/error-report/queueResultConstants.d.ts.map +1 -0
- package/dist/error-report/runtimeDeduplication.d.ts +2 -1
- package/dist/error-report/runtimeDeduplication.d.ts.map +1 -1
- package/dist/error-report/safeValue.d.ts.map +1 -1
- package/dist/error-report/safeValueMarkerConstants.d.ts +16 -0
- package/dist/error-report/safeValueMarkerConstants.d.ts.map +1 -0
- package/dist/error-report/schema.d.ts.map +1 -1
- package/dist/error-report/types.d.ts +10 -8
- package/dist/error-report/types.d.ts.map +1 -1
- package/dist/error-report-source-maps/archive.d.ts.map +1 -1
- package/dist/error-report-source-maps/artifact.d.ts.map +1 -1
- package/dist/error-report-source-maps/index.js +238 -238
- package/dist/error-report-source-maps/index.js.map +1 -1
- package/dist/error-report-source-maps/manifest.d.ts.map +1 -1
- package/dist/error-report-source-maps/package.d.ts.map +1 -1
- package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts +11 -0
- package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts.map +1 -0
- package/dist/error-report-source-maps/symbolicate.d.ts.map +1 -1
- package/dist/error-report-source-maps/symbolicationResultConstants.d.ts +6 -0
- package/dist/error-report-source-maps/symbolicationResultConstants.d.ts.map +1 -0
- package/dist/error-report-source-maps/types.d.ts +4 -2
- package/dist/error-report-source-maps/types.d.ts.map +1 -1
- package/dist/excel/excel.d.ts.map +1 -1
- package/dist/excel/excelWorkbookConstants.d.ts +6 -0
- package/dist/excel/excelWorkbookConstants.d.ts.map +1 -0
- package/dist/excel/index.js +117 -116
- package/dist/excel/index.js.map +1 -1
- package/dist/excel/matrixWorkbook.d.ts +6 -1
- package/dist/excel/matrixWorkbook.d.ts.map +1 -1
- package/dist/excel/tableExport.d.ts.map +1 -1
- package/dist/file/checkFileSignature.d.ts.map +1 -1
- package/dist/file/contentDisposition.d.ts.map +1 -1
- package/dist/file/fileSignatureConstants.d.ts +14 -18
- package/dist/file/fileSignatureConstants.d.ts.map +1 -1
- package/dist/file/fileSignatureTypes.d.ts +3 -3
- package/dist/file/fileSignatureTypes.d.ts.map +1 -1
- package/dist/file/image/imageReadConstants.d.ts +3 -0
- package/dist/file/image/imageReadConstants.d.ts.map +1 -0
- package/dist/file/image/readImageFile.d.ts +3 -2
- package/dist/file/image/readImageFile.d.ts.map +1 -1
- package/dist/file/image/types.d.ts +5 -3
- package/dist/file/image/types.d.ts.map +1 -1
- package/dist/file/index.js +139 -165
- package/dist/file/index.js.map +1 -1
- package/dist/file/mimeType.d.ts.map +1 -1
- package/dist/file/mimeTypeConstants.d.ts +18 -0
- package/dist/file/mimeTypeConstants.d.ts.map +1 -0
- package/dist/file/read-file/assert.d.ts.map +1 -1
- package/dist/file/read-file/readFile.d.ts +3 -11
- package/dist/file/read-file/readFile.d.ts.map +1 -1
- package/dist/file/read-file/readFileConstants.d.ts +13 -0
- package/dist/file/read-file/readFileConstants.d.ts.map +1 -0
- package/dist/file/read-file/types.d.ts +7 -6
- package/dist/file/read-file/types.d.ts.map +1 -1
- package/dist/file/signature/checkArchiveSignature.d.ts.map +1 -1
- package/dist/file-system/fileSystemConstants.d.ts +5 -0
- package/dist/file-system/fileSystemConstants.d.ts.map +1 -0
- package/dist/file-system/fileSystemTypes.d.ts +2 -1
- package/dist/file-system/fileSystemTypes.d.ts.map +1 -1
- package/dist/file-system/index.js +11 -10
- package/dist/file-system/index.js.map +1 -1
- package/dist/file-system/resolvePathInsideRoot.d.ts.map +1 -1
- package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -1
- package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -1
- package/dist/formatters/date/calendarDate.d.ts.map +1 -1
- package/dist/formatters/date/calendarDateConstants.d.ts +13 -0
- package/dist/formatters/date/calendarDateConstants.d.ts.map +1 -0
- package/dist/formatters/date/calendarPeriod.d.ts +11 -2
- package/dist/formatters/date/calendarPeriod.d.ts.map +1 -1
- package/dist/formatters/date/dateFormatConstants.d.ts +17 -0
- package/dist/formatters/date/dateFormatConstants.d.ts.map +1 -0
- package/dist/formatters/date/datePatternConstants.d.ts +16 -0
- package/dist/formatters/date/datePatternConstants.d.ts.map +1 -0
- package/dist/formatters/date/datePresetNameConstants.d.ts +27 -0
- package/dist/formatters/date/datePresetNameConstants.d.ts.map +1 -0
- package/dist/formatters/date/dateRange.d.ts +3 -1
- package/dist/formatters/date/dateRange.d.ts.map +1 -1
- package/dist/formatters/date/dateValueConstants.d.ts +15 -0
- package/dist/formatters/date/dateValueConstants.d.ts.map +1 -0
- package/dist/formatters/date/educationDate.d.ts.map +1 -1
- package/dist/formatters/date/formatDate.d.ts.map +1 -1
- package/dist/formatters/date/formatInstantDateTime.d.ts.map +1 -1
- package/dist/formatters/date/parseDate.d.ts.map +1 -1
- package/dist/formatters/date/pattern.d.ts.map +1 -1
- package/dist/formatters/date/presets.d.ts.map +1 -1
- package/dist/formatters/date/types.d.ts +8 -6
- package/dist/formatters/date/types.d.ts.map +1 -1
- package/dist/formatters/formatDurationMinutes.d.ts.map +1 -1
- package/dist/formatters/formatFileSize.d.ts.map +1 -1
- package/dist/formatters/formatPhone.d.ts.map +1 -1
- package/dist/formatters/index.js +6 -6
- package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -1
- package/dist/formatters/number/compact.d.ts.map +1 -1
- package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -1
- package/dist/formatters/number/formatNumber.d.ts.map +1 -1
- package/dist/formatters/number/numberFormatConstants.d.ts +11 -0
- package/dist/formatters/number/numberFormatConstants.d.ts.map +1 -0
- package/dist/formatters/number/numberPresetNameConstants.d.ts +16 -0
- package/dist/formatters/number/numberPresetNameConstants.d.ts.map +1 -0
- package/dist/formatters/number/parseNumber.d.ts.map +1 -1
- package/dist/formatters/number/presets.d.ts.map +1 -1
- package/dist/formatters/number/types.d.ts +2 -1
- package/dist/formatters/number/types.d.ts.map +1 -1
- package/dist/formatters/pipeline/clone.d.ts.map +1 -1
- package/dist/formatters/pipeline/definitions.d.ts.map +1 -1
- package/dist/formatters/pipeline/dependencies.d.ts.map +1 -1
- package/dist/formatters/pipeline/execute.d.ts +4 -1
- package/dist/formatters/pipeline/execute.d.ts.map +1 -1
- package/dist/formatters/pipeline/formattersPipelineConstants.d.ts +19 -0
- package/dist/formatters/pipeline/formattersPipelineConstants.d.ts.map +1 -0
- package/dist/formatters/pipeline/normalize.d.ts.map +1 -1
- package/dist/formatters/pipeline/pipelineValidationConstants.d.ts +40 -0
- package/dist/formatters/pipeline/pipelineValidationConstants.d.ts.map +1 -0
- package/dist/formatters/pipeline/registry.d.ts +1 -1
- package/dist/formatters/pipeline/registry.d.ts.map +1 -1
- package/dist/formatters/pipeline/rekey.d.ts.map +1 -1
- package/dist/formatters/pipeline/runtime.d.ts.map +1 -1
- package/dist/formatters/pipeline/types.d.ts +24 -21
- package/dist/formatters/pipeline/types.d.ts.map +1 -1
- package/dist/formatters/pipeline/validate.d.ts +2 -1
- package/dist/formatters/pipeline/validate.d.ts.map +1 -1
- package/dist/formatters/strings/spaceCharacterConstants.d.ts +5 -0
- package/dist/formatters/strings/spaceCharacterConstants.d.ts.map +1 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -1
- package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -1
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -1
- package/dist/formatters/valueState/presentation.d.ts.map +1 -1
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -1
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -1
- package/dist/formatters/valueState/types.d.ts +2 -1
- package/dist/formatters/valueState/types.d.ts.map +1 -1
- package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -1
- package/dist/formatters/valueState/valueStateResolverConstants.d.ts +6 -0
- package/dist/formatters/valueState/valueStateResolverConstants.d.ts.map +1 -0
- package/dist/formulas/execute.d.ts +3 -2
- package/dist/formulas/execute.d.ts.map +1 -1
- package/dist/formulas/index.js +1 -1
- package/dist/formulas/isTableFormulaDependency.d.ts.map +1 -1
- package/dist/formulas/tableFormulaConstants.d.ts +12 -0
- package/dist/formulas/tableFormulaConstants.d.ts.map +1 -0
- package/dist/formulas/types.d.ts +2 -1
- package/dist/formulas/types.d.ts.map +1 -1
- package/dist/formulas/validate.d.ts +2 -1
- package/dist/formulas/validate.d.ts.map +1 -1
- package/dist/hooks/index.js +110 -107
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -1
- package/dist/hooks/useDndSortableSensors.d.ts.map +1 -1
- package/dist/hooks/useFloatingListbox.d.ts +15 -33
- package/dist/hooks/useFloatingListbox.d.ts.map +1 -1
- package/dist/http/index.js +8 -7
- package/dist/http/index.js.map +1 -1
- package/dist/http/textResponse.d.ts.map +1 -1
- package/dist/indexed-records/createIndexedRecordsSchema.d.ts.map +1 -1
- package/dist/indexed-records/schema.js +24 -23
- package/dist/indexed-records/schema.js.map +1 -1
- package/dist/media/breakpointConstants.d.ts +5 -0
- package/dist/media/breakpointConstants.d.ts.map +1 -0
- package/dist/media/breakpoints.d.ts +2 -1
- package/dist/media/breakpoints.d.ts.map +1 -1
- package/dist/media/createNotificationTonePlayer.d.ts.map +1 -1
- package/dist/media/getCurrentFontSize.d.ts.map +1 -1
- package/dist/media/index.js +1 -1
- package/dist/media/mediaQueryConstants.d.ts +3 -0
- package/dist/media/mediaQueryConstants.d.ts.map +1 -0
- package/dist/media/responsive.d.ts +1 -1
- package/dist/media/responsive.d.ts.map +1 -1
- package/dist/media/useMatchMedia.d.ts.map +1 -1
- package/dist/media/useMediaQuery.d.ts.map +1 -1
- package/dist/metadata/baseMetaTypes.d.ts.map +1 -1
- package/dist/metadata/metadataTypes.d.ts +8 -7
- package/dist/metadata/metadataTypes.d.ts.map +1 -1
- package/dist/metadata/scalarTypeClassification.d.ts.map +1 -1
- package/dist/metadata/scalarTypeConstants.d.ts +21 -0
- package/dist/metadata/scalarTypeConstants.d.ts.map +1 -0
- package/dist/notifications/index.js +62 -62
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notificationTypeConstants.d.ts +6 -0
- package/dist/notifications/notificationTypeConstants.d.ts.map +1 -0
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/notifications/types.d.ts +2 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/number-scale/index.js +47 -46
- package/dist/number-scale/index.js.map +1 -1
- package/dist/number-scale/marksPositionConstants.d.ts +4 -0
- package/dist/number-scale/marksPositionConstants.d.ts.map +1 -0
- package/dist/number-scale/numberScale.d.ts +1 -1
- package/dist/number-scale/numberScale.d.ts.map +1 -1
- package/dist/number-scale/types.d.ts +2 -1
- package/dist/number-scale/types.d.ts.map +1 -1
- package/dist/odata-service/builder.d.ts.map +1 -1
- package/dist/odata-service/columns.d.ts.map +1 -1
- package/dist/odata-service/entityOperationConstants.d.ts +4 -0
- package/dist/odata-service/entityOperationConstants.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitionConstants.d.ts +24 -0
- package/dist/odata-service/filterDefinitionConstants.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitions.d.ts +19 -17
- package/dist/odata-service/filterDefinitions.d.ts.map +1 -1
- package/dist/odata-service/filterOperationConstants.d.ts +14 -0
- package/dist/odata-service/filterOperationConstants.d.ts.map +1 -0
- package/dist/odata-service/filters.d.ts.map +1 -1
- package/dist/odata-service/formatters.d.ts.map +1 -1
- package/dist/odata-service/index.js +439 -433
- package/dist/odata-service/index.js.map +1 -1
- package/dist/odata-service/odataMetadataConstants.d.ts +8 -0
- package/dist/odata-service/odataMetadataConstants.d.ts.map +1 -0
- package/dist/odata-service/parser.d.ts +1 -3
- package/dist/odata-service/parser.d.ts.map +1 -1
- package/dist/odata-service/schema.d.ts.map +1 -1
- package/dist/odata-service/sorts.d.ts.map +1 -1
- package/dist/odata-service/sqlFilters.d.ts +10 -5
- package/dist/odata-service/sqlFilters.d.ts.map +1 -1
- package/dist/odata-service/types.d.ts +5 -3
- package/dist/odata-service/types.d.ts.map +1 -1
- package/dist/pwa/index.js +72 -71
- package/dist/pwa/index.js.map +1 -1
- package/dist/pwa/sw-cache-policy.js +47 -47
- package/dist/pwa/sw-cache-policy.js.map +1 -1
- package/dist/pwa/swCachePolicy.d.ts +5 -1
- package/dist/pwa/swCachePolicy.d.ts.map +1 -1
- package/dist/pwa/useBrowserOnlineStatus.d.ts.map +1 -1
- package/dist/query-client/broadcast.d.ts +4 -3
- package/dist/query-client/broadcast.d.ts.map +1 -1
- package/dist/query-client/createQueryRestoreSchedulerGuard.d.ts.map +1 -1
- package/dist/query-client/createQueryRestoreStorage.d.ts.map +1 -1
- package/dist/query-client/index.js +1 -1
- package/dist/query-client/invalidationBroadcast.d.ts +2 -1
- package/dist/query-client/invalidationBroadcast.d.ts.map +1 -1
- package/dist/query-client/persistence.d.ts +9 -6
- package/dist/query-client/persistence.d.ts.map +1 -1
- package/dist/query-client/queryCacheEventConstants.d.ts +11 -0
- package/dist/query-client/queryCacheEventConstants.d.ts.map +1 -0
- package/dist/query-client/queryClient.d.ts +2 -1
- package/dist/query-client/queryClient.d.ts.map +1 -1
- package/dist/query-client/queryMeta.d.ts.map +1 -1
- package/dist/query-client/sessionPersistenceConstants.d.ts +5 -0
- package/dist/query-client/sessionPersistenceConstants.d.ts.map +1 -0
- package/dist/query-client/sessionScoped.d.ts.map +1 -1
- package/dist/query-client/sessionScopedResetConstants.d.ts +4 -0
- package/dist/query-client/sessionScopedResetConstants.d.ts.map +1 -0
- package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts +2 -1
- package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts.map +1 -1
- package/dist/seo/index.js +0 -1
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/seo.d.ts +3 -2
- package/dist/seo/seo.d.ts.map +1 -1
- package/dist/seo/seoContentTypeConstants.d.ts +6 -0
- package/dist/seo/seoContentTypeConstants.d.ts.map +1 -0
- package/dist/seo/types.d.ts +2 -1
- package/dist/seo/types.d.ts.map +1 -1
- package/dist/session-storage/index.js +1 -1
- package/dist/table/cellSelection.d.ts.map +1 -1
- package/dist/table/index.js +83 -79
- package/dist/table/index.js.map +1 -1
- package/dist/table/odataAdapter.d.ts +3 -3
- package/dist/table/odataAdapter.d.ts.map +1 -1
- package/dist/table/selection.d.ts +2 -2
- package/dist/table/selection.d.ts.map +1 -1
- package/dist/table/tableColumnConstants.d.ts +5 -0
- package/dist/table/tableColumnConstants.d.ts.map +1 -0
- package/dist/table/tableSelectionConstants.d.ts +8 -0
- package/dist/table/tableSelectionConstants.d.ts.map +1 -0
- package/dist/table/tanStackFeatures.d.ts +8 -8
- package/dist/table/types.d.ts +5 -3
- package/dist/table/types.d.ts.map +1 -1
- package/dist/table/useTableRowSelection.d.ts +2 -2
- package/dist/table/useTableRowSelection.d.ts.map +1 -1
- package/dist/table-document/index.js +88 -87
- package/dist/table-document/index.js.map +1 -1
- package/dist/table-document/insertTableDocumentAxis.d.ts +2 -1
- package/dist/table-document/insertTableDocumentAxis.d.ts.map +1 -1
- package/dist/table-document/tableDocument.d.ts +2 -1
- package/dist/table-document/tableDocument.d.ts.map +1 -1
- package/dist/table-document/tableDocumentAxisGroups.d.ts +4 -3
- package/dist/table-document/tableDocumentAxisGroups.d.ts.map +1 -1
- package/dist/table-document/tableDocumentConstants.d.ts +8 -0
- package/dist/table-document/tableDocumentConstants.d.ts.map +1 -0
- package/dist/table-document/tableDocumentGeometry.d.ts.map +1 -1
- package/dist/three-scene/index.js +32 -32
- package/dist/three-scene/index.js.map +1 -1
- package/dist/three-scene/threeSceneAvailability.d.ts +4 -3
- package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -1
- package/dist/three-scene/threeSceneConstants.d.ts +14 -0
- package/dist/three-scene/threeSceneConstants.d.ts.map +1 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -1
- package/dist/tree-table/index.js +1 -1
- package/dist/types/abapBooleanConstants.d.ts +4 -0
- package/dist/types/abapBooleanConstants.d.ts.map +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/types.d.ts +4 -2
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/valueStateConstants.d.ts +8 -0
- package/dist/types/valueStateConstants.d.ts.map +1 -0
- package/dist/utils/cloneFunctionStrategyConstants.d.ts +4 -0
- package/dist/utils/cloneFunctionStrategyConstants.d.ts.map +1 -0
- package/dist/utils/createLazyComponent.d.ts.map +1 -1
- package/dist/utils/deepCloneWithoutFunctions.d.ts +2 -1
- package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -1
- package/dist/utils/deepCopyWithoutFunctions.d.ts +2 -1
- package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -1
- package/dist/utils/index.js +2 -209
- package/dist/utils/keyboard.d.ts +2 -1
- package/dist/utils/keyboard.d.ts.map +1 -1
- package/dist/utils/keyboardConstants.d.ts +16 -0
- package/dist/utils/keyboardConstants.d.ts.map +1 -0
- package/dist/validators/index.js +3 -3
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/validateUrl.d.ts.map +1 -1
- package/dist/value-transformers/execute.d.ts.map +1 -1
- package/dist/value-transformers/index.js +9 -6
- package/dist/value-transformers/index.js.map +1 -1
- package/dist/value-transformers/types.d.ts +3 -2
- package/dist/value-transformers/types.d.ts.map +1 -1
- package/dist/value-transformers/valueTransformerConstants.d.ts +4 -0
- package/dist/value-transformers/valueTransformerConstants.d.ts.map +1 -0
- package/package.json +6 -5
- package/src/binary/README.mdx +1 -1
- package/src/dom/README.mdx +1 -1
- package/src/query-client/README.mdx +4 -4
- package/dist/chunks/dom-BK22UmgF.js.map +0 -1
- package/dist/chunks/formatDate-BUvpRI7H.js +0 -133
- package/dist/chunks/formatDate-BUvpRI7H.js.map +0 -1
- package/dist/chunks/formatters-rxriDRPk.js.map +0 -1
- package/dist/chunks/formulas-BXT_XBWI.js.map +0 -1
- package/dist/chunks/media-WK38KtMl.js +0 -191
- package/dist/chunks/media-WK38KtMl.js.map +0 -1
- package/dist/chunks/query-client-CVRfrYZM.js.map +0 -1
- package/dist/chunks/scalarTypeClassification-BZcFmIyR.js +0 -764
- package/dist/chunks/scalarTypeClassification-BZcFmIyR.js.map +0 -1
- package/dist/chunks/uuid-CUJPAbRY.js.map +0 -1
- package/dist/chunks/validate-DsUR-bFF.js +0 -608
- package/dist/chunks/validate-DsUR-bFF.js.map +0 -1
- package/dist/utils/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/error-report/captureOptions.ts","../../src/error-report/safeValue.ts","../../src/error-report/breadcrumbs.ts","../../src/error-report/dataPreview.ts","../../src/error-report/payload.ts","../../src/error-report/errorInfo.ts","../../src/error-report/runtimeDeduplication.ts","../../src/error-report/schema.ts","../../src/error-report/errorReportStorage.ts","../../src/error-report/diagnostics.ts","../../src/error-report/environment.ts","../../src/error-report/drafts.ts","../../src/error-report/transport.ts","../../src/error-report/capture.ts","../../src/error-report/queueContract.ts","../../src/error-report/queueRecord.ts","../../src/error-report/queue.ts","../../src/error-report/runtime.ts"],"sourcesContent":["/**\n * Политика сбора задаётся приложением на время жизни его error-report lifecycle.\n * По умолчанию прежняя очистка остаётся активной для существующих потребителей.\n */\nexport type ErrorReportCaptureOptions = {\n\tvaluePolicy?: \"redacted\" | \"verbatim\";\n\tdataPreviewBytes?: {\n\t\tquery?: number;\n\t\tpersistedQuery?: number;\n\t\tmutation?: number;\n\t};\n};\n\ntype ResolvedErrorReportCaptureOptions = {\n\tvaluePolicy: \"redacted\" | \"verbatim\";\n\tdataPreviewBytes: {\n\t\tquery: number;\n\t\tpersistedQuery: number;\n\t\tmutation: number;\n\t};\n};\n\nconst MAX_DATA_PREVIEW_BYTES = 16 * 1_024;\nconst DEFAULT_OPTIONS: ResolvedErrorReportCaptureOptions = {\n\tvaluePolicy: \"redacted\",\n\tdataPreviewBytes: { query: 0, persistedQuery: 0, mutation: 0 }\n};\n\nlet captureOptions = DEFAULT_OPTIONS;\n\nfunction boundedPreviewBytes(value: number | undefined) {\n\tif (value === undefined || !Number.isFinite(value)) return 0;\n\treturn Math.max(0, Math.min(MAX_DATA_PREVIEW_BYTES, Math.trunc(value)));\n}\n\n/** `undefined` возвращает policy пакета и отключает сбор данных кэша. */\nexport function setErrorReportCaptureOptions(options: ErrorReportCaptureOptions | undefined) {\n\tcaptureOptions = options\n\t\t? {\n\t\t\t\tvaluePolicy: options.valuePolicy ?? DEFAULT_OPTIONS.valuePolicy,\n\t\t\t\tdataPreviewBytes: {\n\t\t\t\t\tquery: boundedPreviewBytes(options.dataPreviewBytes?.query),\n\t\t\t\t\tpersistedQuery: boundedPreviewBytes(options.dataPreviewBytes?.persistedQuery),\n\t\t\t\t\tmutation: boundedPreviewBytes(options.dataPreviewBytes?.mutation)\n\t\t\t\t}\n\t\t\t}\n\t\t: DEFAULT_OPTIONS;\n}\n\n/** Внутренний снимок настроек на момент сбора отдельной секции. */\nexport function getErrorReportCaptureOptions(): Readonly<ResolvedErrorReportCaptureOptions> {\n\treturn captureOptions;\n}\n","import { getErrorReportCaptureOptions } from \"./captureOptions\";\n\nimport type { ErrorReportSafeValue, ErrorReportSanitizationContext, ErrorReportSanitizer } from \"./types\";\n\nconst MAX_DEPTH = 4;\nconst MAX_ARRAY_ITEMS = 20;\nconst MAX_OBJECT_KEYS = 40;\nconst MAX_DIAGNOSTIC_STRING_LENGTH = 4_096;\nconst MAX_VERBATIM_KEY_STRING_LENGTH = 8_192;\nconst REDACTED_VALUE = \"[REDACTED]\";\nconst SENSITIVE_KEY_PARTS = [\n\t\"apikey\",\n\t\"authorization\",\n\t\"cookie\",\n\t\"csrf\",\n\t\"password\",\n\t\"passwd\",\n\t\"refreshtoken\",\n\t\"secret\",\n\t\"sessiontoken\",\n\t\"token\"\n];\nconst URL_KEY_SUFFIX = \"url\";\n\nlet errorReportSanitizer: ErrorReportSanitizer | undefined;\n\nfunction normalizeKey(key: string) {\n\treturn key.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction isSensitiveKey(key: string) {\n\tconst normalizedKey = normalizeKey(key);\n\treturn SENSITIVE_KEY_PARTS.some((part) => normalizedKey.includes(part));\n}\n\nfunction isUrlKey(key: string) {\n\treturn normalizeKey(key).endsWith(URL_KEY_SUFFIX);\n}\n\nfunction looksLikeUrlWithPrivateParts(value: string) {\n\treturn /^(?:https?:\\/\\/|\\/)[^\\s]*[?#]/i.test(value);\n}\n\nfunction stripUrlSearchAndHash(value: string) {\n\ttry {\n\t\tconst parsed = new URL(value, \"https://error-report.invalid\");\n\t\tconst pathname = parsed.pathname;\n\t\treturn parsed.origin === \"https://error-report.invalid\" ? pathname : `${parsed.origin}${pathname}`;\n\t} catch {\n\t\treturn value.split(/[?#]/, 1)[0] ?? value;\n\t}\n}\n\n/**\n * Удаляет наиболее узнаваемые секреты и email из свободного диагностического\n * текста. Это страховочная сетка; предметные персональные данные приложение\n * обязано исключить своим allow-list sanitizer.\n */\nexport function sanitizeDiagnosticText(value: string, maxLength = MAX_DIAGNOSTIC_STRING_LENGTH) {\n\tif (getErrorReportCaptureOptions().valuePolicy === \"verbatim\") {\n\t\tif (value.length <= maxLength) return value;\n\t\tconst marker = `… [TRUNCATED: ${value.length} characters total]`;\n\t\tif (marker.length > maxLength) return \"[TRUNCATED]\".slice(0, Math.max(0, maxLength));\n\t\tconst prefix = value.slice(0, Math.max(0, maxLength - marker.length));\n\t\tconst lastCodeUnit = prefix.charCodeAt(prefix.length - 1);\n\t\tconst safePrefix = lastCodeUnit >= 0xd800 && lastCodeUnit <= 0xdbff ? prefix.slice(0, -1) : prefix;\n\t\treturn `${safePrefix}${marker}`;\n\t}\n\tlet sanitizedValue = value.slice(0, maxLength);\n\tif (/\\bbearer\\s/i.test(sanitizedValue)) {\n\t\tsanitizedValue = sanitizedValue.replace(/\\bBearer\\s+[A-Za-z0-9._~+/=-]{8,}/gi, \"Bearer [REDACTED]\");\n\t}\n\tif (sanitizedValue.includes(\"@\")) {\n\t\tsanitizedValue = sanitizedValue.replace(/[A-Z0-9._%+-]{1,254}@[A-Z0-9.-]{1,253}\\.[A-Z]{2,63}/gi, \"[REDACTED_EMAIL]\");\n\t}\n\n\treturn sanitizedValue;\n}\n\n/** Возвращает размер строки в UTF-8, совпадающий с размером JSON transport. */\nexport function getUtf8TextSize(value: string) {\n\treturn new TextEncoder().encode(value).byteLength;\n}\n\n/**\n * Обрезает уже очищенный текст по UTF-8 bytes без разрыва surrogate pair.\n * Binary search нужен для Unicode stack traces, где число code units не равно\n * размеру transport payload.\n */\nexport function sanitizeDiagnosticTextBytes(value: string, maxBytes: number) {\n\tif (getErrorReportCaptureOptions().valuePolicy === \"verbatim\") {\n\t\tconst originalBytes = getUtf8TextSize(value);\n\t\tif (originalBytes <= maxBytes) return value;\n\t\tconst marker = `… [TRUNCATED: ${originalBytes} UTF-8 bytes total]`;\n\t\tif (getUtf8TextSize(marker) > maxBytes) return \"[TRUNCATED]\".slice(0, Math.max(0, maxBytes));\n\t\tconst prefixLimit = Math.max(0, maxBytes - getUtf8TextSize(marker));\n\t\tlet left = 0;\n\t\tlet right = value.length;\n\t\twhile (left < right) {\n\t\t\tconst middle = Math.ceil((left + right) / 2);\n\t\t\tif (getUtf8TextSize(value.slice(0, middle)) <= prefixLimit) left = middle;\n\t\t\telse right = middle - 1;\n\t\t}\n\t\tconst lastCodeUnit = value.charCodeAt(left - 1);\n\t\tconst safeEnd = lastCodeUnit >= 0xd800 && lastCodeUnit <= 0xdbff ? left - 1 : left;\n\t\treturn `${value.slice(0, safeEnd)}${marker}`;\n\t}\n\tconst sanitizedValue = sanitizeDiagnosticText(value, maxBytes);\n\tif (getUtf8TextSize(sanitizedValue) <= maxBytes) return sanitizedValue;\n\n\tlet left = 0;\n\tlet right = sanitizedValue.length;\n\twhile (left < right) {\n\t\tconst middle = Math.ceil((left + right) / 2);\n\t\tif (getUtf8TextSize(sanitizedValue.slice(0, middle)) <= maxBytes) left = middle;\n\t\telse right = middle - 1;\n\t}\n\n\tconst lastCodeUnit = sanitizedValue.charCodeAt(left - 1);\n\tconst safeEnd = lastCodeUnit >= 0xd800 && lastCodeUnit <= 0xdbff ? left - 1 : left;\n\treturn sanitizedValue.slice(0, safeEnd);\n}\n\ntype DiagnosticValueState = {\n\tseen: WeakSet<object>;\n\tmaxStringLength: number;\n};\n\nfunction createDiagnosticValueInternal(value: unknown, depth: number, state: DiagnosticValueState, key?: string): ErrorReportSafeValue {\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === \"verbatim\";\n\tif (!verbatim && key && isSensitiveKey(key)) return REDACTED_VALUE;\n\tif (depth >= MAX_DEPTH) return { type: \"truncated\" };\n\tif (value === null || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") return Number.isFinite(value) ? value : { type: \"non-finite-number\" };\n\tif (typeof value === \"string\") {\n\t\tconst normalizedValue =\n\t\t\t!verbatim && ((key && isUrlKey(key)) || looksLikeUrlWithPrivateParts(value)) ? stripUrlSearchAndHash(value) : value;\n\t\treturn sanitizeDiagnosticText(normalizedValue, state.maxStringLength);\n\t}\n\tif (value === undefined) return { type: \"undefined\" };\n\tif (value instanceof Date) return Number.isNaN(value.getTime()) ? { type: \"invalid-date\" } : value.toISOString();\n\tif (typeof value === \"object\") {\n\t\tif (state.seen.has(value)) return { type: \"circular\" };\n\t\tstate.seen.add(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\tconst keptItems = verbatim && value.length > MAX_ARRAY_ITEMS ? MAX_ARRAY_ITEMS - 1 : MAX_ARRAY_ITEMS;\n\t\tconst items = value.slice(0, keptItems).map((item) => createDiagnosticValueInternal(item, depth + 1, state));\n\t\tif (verbatim && value.length > keptItems) items.push({ type: \"truncated\", omittedItems: value.length - keptItems });\n\t\treturn items;\n\t}\n\tif (typeof value === \"object\") {\n\t\ttry {\n\t\t\tconst entries = Object.entries(value as Record<string, unknown>).sort(([left], [right]) => left.localeCompare(right));\n\t\t\tconst keptKeys = verbatim && entries.length > MAX_OBJECT_KEYS ? MAX_OBJECT_KEYS - 1 : MAX_OBJECT_KEYS;\n\t\t\tconst result: Record<string, ErrorReportSafeValue> = Object.fromEntries(\n\t\t\t\tentries\n\t\t\t\t\t.slice(0, keptKeys)\n\t\t\t\t\t.map(([entryKey, item]) => [entryKey, createDiagnosticValueInternal(item, depth + 1, state, entryKey)])\n\t\t\t);\n\t\t\tif (verbatim && entries.length > keptKeys) {\n\t\t\t\tlet markerKey = \"$truncated\";\n\t\t\t\twhile (Object.hasOwn(value, markerKey)) markerKey += \"_\";\n\t\t\t\tresult[markerKey] = { type: \"truncated\", omittedKeys: entries.length - keptKeys };\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch {\n\t\t\treturn { type: \"unreadable\" };\n\t\t}\n\t}\n\tif (typeof value === \"function\") return { type: \"function\" };\n\tif (typeof value === \"symbol\") return { type: \"symbol\" };\n\tif (typeof value === \"bigint\") return value.toString();\n\n\treturn { type: \"unknown\" };\n}\n\n/**\n * Превращает произвольное значение в JSON-совместимую диагностическую форму.\n * Значения сохраняются читаемыми, потому что queryKey/meta/context нужны\n * для восстановления пользовательского сценария; тяжелые данные query cache\n * отсекаются отдельно и сюда не передаются.\n */\nexport function createDiagnosticValue(value: unknown, depth = 0): ErrorReportSafeValue {\n\treturn createDiagnosticValueInternal(value, depth, {\n\t\tseen: new WeakSet(),\n\t\tmaxStringLength: MAX_DIAGNOSTIC_STRING_LENGTH\n\t});\n}\n\n/**\n * Описывает форму данных кеша без самих значений: типы, размеры массивов и ключи объектов.\n */\nexport function createDataShape(value: unknown, depth = 0): ErrorReportSafeValue {\n\tif (depth >= MAX_DEPTH) return { type: \"truncated\" };\n\tif (value === null) return { type: \"null\" };\n\tif (value === undefined) return { type: \"undefined\" };\n\tif (Array.isArray(value)) {\n\t\treturn {\n\t\t\ttype: \"array\",\n\t\t\tlength: value.length,\n\t\t\tfirstItemsShape: value.slice(0, 3).map((item) => createDataShape(item, depth + 1))\n\t\t};\n\t}\n\tif (typeof value === \"object\") {\n\t\tconst entries = Object.entries(value as Record<string, unknown>).slice(0, MAX_OBJECT_KEYS);\n\n\t\treturn {\n\t\t\ttype: \"object\",\n\t\t\tkeys: entries.map(([key]) => key),\n\t\t\tshape: Object.fromEntries(entries.map(([key, item]) => [key, createDataShape(item, depth + 1)]))\n\t\t};\n\t}\n\n\treturn { type: typeof value };\n}\n\n/**\n * Подключает предметный sanitizer приложения. `undefined` отключает callback и\n * одновременно предотвращает утечку старой policy при hot reload и в тестах.\n */\nexport function setErrorReportSanitizer(sanitizer: ErrorReportSanitizer | undefined) {\n\terrorReportSanitizer = sanitizer;\n}\n\n/**\n * Выполняет built-in нормализацию, затем предметную policy приложения и ещё\n * одну bounded-нормализацию результата перед включением секции в payload.\n */\nexport function sanitizeErrorReportValue(\n\tvalue: unknown,\n\tcontext: ErrorReportSanitizationContext,\n\tmaxStringLength = MAX_DIAGNOSTIC_STRING_LENGTH\n) {\n\tconst keyScope = context.scope === \"query-key\" || context.scope === \"mutation-key\" || context.scope === \"persisted-query-key\";\n\tconst effectiveMaxStringLength =\n\t\tgetErrorReportCaptureOptions().valuePolicy === \"verbatim\" && keyScope\n\t\t\t? Math.max(maxStringLength, MAX_VERBATIM_KEY_STRING_LENGTH)\n\t\t\t: maxStringLength;\n\tconst createBoundedValue = (candidate: unknown) =>\n\t\tcreateDiagnosticValueInternal(candidate, 0, { seen: new WeakSet(), maxStringLength: effectiveMaxStringLength });\n\tconst safeValue = createBoundedValue(value);\n\tif (!errorReportSanitizer) return safeValue;\n\n\ttry {\n\t\tconst appSanitizedValue = errorReportSanitizer(safeValue, context);\n\t\treturn appSanitizedValue === undefined ? undefined : createBoundedValue(appSanitizedValue);\n\t} catch {\n\t\t// Ошибка optional sanitizer безопаснее приводит к удалению секции, а не к\n\t\t// сохранению потенциально чувствительного исходного значения.\n\t\treturn undefined;\n\t}\n}\n\nexport function sanitizeDetail(\n\tdetail: Record<string, unknown> | undefined,\n\tcontext: ErrorReportSanitizationContext = { scope: \"context\" }\n): Record<string, ErrorReportSafeValue> | undefined {\n\tif (!detail) return undefined;\n\n\tconst sanitizedValue = sanitizeErrorReportValue(detail, context);\n\tif (!sanitizedValue || Array.isArray(sanitizedValue) || typeof sanitizedValue !== \"object\") return undefined;\n\n\treturn Object.keys(sanitizedValue).length ? sanitizedValue : undefined;\n}\n","import { truncateText } from \"../formatters\";\n\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { sanitizeDetail, sanitizeDiagnosticText } from \"./safeValue\";\n\nimport type { ErrorReportBreadcrumb } from \"./types\";\n\nconst MAX_BREADCRUMBS = 80;\nconst MAX_ELEMENT_CHAIN = 20;\nconst MAX_ATTRIBUTE_LENGTH = 120;\nconst INTERACTIVE_CLICK_TARGET_SELECTOR = [\"button\", \"a\", \"input\", \"select\", \"textarea\", \"[role]\"].join(\",\");\nconst SAFE_TARGET_VALUE = /^[a-z0-9][a-z0-9._:/-]*$/i;\n\nlet breadcrumbs: ErrorReportBreadcrumb[] = [];\n\nfunction nowUtc() {\n\treturn new Date().toISOString();\n}\n\nexport function addErrorReportBreadcrumb(breadcrumb: Omit<ErrorReportBreadcrumb, \"utc\"> & { utc?: string }) {\n\tbreadcrumbs = [\n\t\t...breadcrumbs,\n\t\t{\n\t\t\t...breadcrumb,\n\t\t\tutc: sanitizeDiagnosticText(breadcrumb.utc ?? nowUtc(), 64),\n\t\t\trouteId: breadcrumb.routeId\n\t\t\t\t? sanitizeDiagnosticText(\n\t\t\t\t\t\tgetErrorReportCaptureOptions().valuePolicy === \"verbatim\"\n\t\t\t\t\t\t\t? breadcrumb.routeId\n\t\t\t\t\t\t\t: (breadcrumb.routeId.split(/[?#]/, 1)[0] ?? breadcrumb.routeId),\n\t\t\t\t\t\t512\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\t\tappId: breadcrumb.appId ? sanitizeDiagnosticText(breadcrumb.appId, 128) : undefined,\n\t\t\tviewId: breadcrumb.viewId ? sanitizeDiagnosticText(breadcrumb.viewId, 128) : undefined,\n\t\t\ttarget: breadcrumb.target ? sanitizeDiagnosticText(breadcrumb.target, 2_048) : undefined,\n\t\t\tdetail: sanitizeDetail(breadcrumb.detail, {\n\t\t\t\tscope: \"breadcrumb-detail\",\n\t\t\t\tsource: breadcrumb.type\n\t\t\t})\n\t\t}\n\t].slice(-MAX_BREADCRUMBS);\n}\n\nexport function getErrorReportBreadcrumbs() {\n\treturn breadcrumbs.slice();\n}\n\nexport function clearErrorReportBreadcrumbs() {\n\tbreadcrumbs = [];\n}\n\nfunction truncateAttributeText(value: string | null | undefined) {\n\treturn truncateText(value, MAX_ATTRIBUTE_LENGTH);\n}\n\nfunction readSafeTargetValue(element: Element) {\n\tconst value = truncateAttributeText(element.getAttribute(\"data-error-report-target\"));\n\treturn value && SAFE_TARGET_VALUE.test(value) ? value : undefined;\n}\n\nfunction readTechnicalAttribute(element: Element, name: string) {\n\tconst value = truncateAttributeText(element.getAttribute(name));\n\treturn value && SAFE_TARGET_VALUE.test(value) ? value : undefined;\n}\n\nfunction readTechnicalAttributes(element: Element) {\n\tconst errorReportTarget = readSafeTargetValue(element);\n\n\t// Специализированный маркер однозначно переопределяет прежнюю host-разметку.\n\t// Fallback сохраняет уже внедрённые data-ui/data-action без возврата к DOM text.\n\treturn {\n\t\trole: readTechnicalAttribute(element, \"role\"),\n\t\ttype: readTechnicalAttribute(element, \"type\"),\n\t\terrorReportTarget,\n\t\tdataUi: errorReportTarget ? undefined : readTechnicalAttribute(element, \"data-ui\"),\n\t\tdataAction: errorReportTarget ? undefined : readTechnicalAttribute(element, \"data-action\")\n\t};\n}\n\nfunction escapeSelectorPart(value: string) {\n\tif (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n\t\treturn CSS.escape(value);\n\t}\n\n\treturn value.replace(/[\"\\\\#.[\\]>~+:]/g, \"\\\\$&\");\n}\n\nfunction buildElementSelector(element: Element) {\n\tconst attrs = readTechnicalAttributes(element);\n\tconst parts = [element.tagName.toLowerCase()];\n\n\tif (attrs.role) parts.push(`[role=\"${attrs.role}\"]`);\n\tif (attrs.type) parts.push(`[type=\"${attrs.type}\"]`);\n\tif (attrs.errorReportTarget) {\n\t\tparts.push(`[data-error-report-target=\"${escapeSelectorPart(attrs.errorReportTarget)}\"]`);\n\t} else {\n\t\tif (attrs.dataUi) parts.push(`[data-ui=\"${escapeSelectorPart(attrs.dataUi)}\"]`);\n\t\tif (attrs.dataAction) parts.push(`[data-action=\"${escapeSelectorPart(attrs.dataAction)}\"]`);\n\t}\n\n\treturn parts.join(\"\");\n}\n\nfunction describeElement(element: Element) {\n\tconst attrs = readTechnicalAttributes(element);\n\n\treturn {\n\t\ttag: element.tagName.toLowerCase(),\n\t\tselector: buildElementSelector(element),\n\t\t...attrs\n\t};\n}\n\nfunction compactElementDescription(description: ReturnType<typeof describeElement>) {\n\treturn Object.fromEntries(\n\t\tObject.entries(description).filter(([, value]) => value !== undefined && (!Array.isArray(value) || value.length > 0))\n\t);\n}\n\nfunction getClickElementChain(target: Element) {\n\tconst chain: Element[] = [];\n\tlet current: Element | null = target;\n\n\twhile (current && current !== document.documentElement && chain.length < MAX_ELEMENT_CHAIN) {\n\t\tchain.push(current);\n\t\tif (current === document.body) break;\n\t\tcurrent = current.parentElement;\n\t}\n\n\treturn chain;\n}\n\nfunction findMeaningfulClickTarget(target: Element) {\n\tconst chain = getClickElementChain(target);\n\tconst explicitTarget = chain.find((element) => readSafeTargetValue(element));\n\tif (explicitTarget) return explicitTarget;\n\n\treturn (\n\t\tchain.find(\n\t\t\t(element) =>\n\t\t\t\telement.matches(INTERACTIVE_CLICK_TARGET_SELECTOR) ||\n\t\t\t\treadTechnicalAttribute(element, \"data-action\") !== undefined ||\n\t\t\t\treadTechnicalAttribute(element, \"data-ui\") !== undefined\n\t\t) ?? target\n\t);\n}\n\nfunction describeClickTarget(target: EventTarget | null) {\n\tif (!(target instanceof Element)) return undefined;\n\n\tconst meaningfulTarget = findMeaningfulClickTarget(target);\n\tconst chain = getClickElementChain(meaningfulTarget);\n\n\treturn chain.map((element) => buildElementSelector(element)).join(\" > \");\n}\n\nfunction describeClickDetail(event: MouseEvent) {\n\tconst target = event.target instanceof Element ? event.target : undefined;\n\tconst meaningfulTarget = target ? findMeaningfulClickTarget(target) : undefined;\n\tconst chain = meaningfulTarget\n\t\t? getClickElementChain(meaningfulTarget).map((element) => compactElementDescription(describeElement(element)))\n\t\t: [];\n\n\treturn sanitizeDetail(\n\t\t{\n\t\t\tbutton: event.button,\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\ttarget: meaningfulTarget ? compactElementDescription(describeElement(meaningfulTarget)) : undefined,\n\t\t\tchain\n\t\t},\n\t\t{ scope: \"breadcrumb-detail\", source: \"click\" }\n\t);\n}\n\n/**\n * Подключает breadcrumbs по действиям пользователя без тел запросов.\n */\nexport function installErrorReportBrowserBreadcrumbs() {\n\tif (typeof window === \"undefined\") return () => undefined;\n\n\tconst onClick = (event: MouseEvent) => {\n\t\taddErrorReportBreadcrumb({\n\t\t\ttype: \"click\",\n\t\t\ttarget: describeClickTarget(event.target),\n\t\t\tdetail: describeClickDetail(event)\n\t\t});\n\t};\n\n\tconst onVisibilityChange = () => {\n\t\taddErrorReportBreadcrumb({\n\t\t\ttype: \"visibility\",\n\t\t\tdetail: sanitizeDetail({ visibilityState: document.visibilityState }, { scope: \"breadcrumb-detail\", source: \"visibility\" })\n\t\t});\n\t};\n\n\twindow.addEventListener(\"click\", onClick, true);\n\tdocument.addEventListener(\"visibilitychange\", onVisibilityChange);\n\n\treturn () => {\n\t\twindow.removeEventListener(\"click\", onClick, true);\n\t\tdocument.removeEventListener(\"visibilitychange\", onVisibilityChange);\n\t};\n}\n","import { getUtf8TextSize } from \"./safeValue\";\n\nimport type { ErrorReportDataPreview, ErrorReportSafeValue } from \"./types\";\n\nconst MAX_PREVIEW_DEPTH = 6;\nconst MAX_PREVIEW_ARRAY_ITEMS = 12;\nconst MAX_PREVIEW_OBJECT_KEYS = 24;\nconst MAX_PREVIEW_STRING_LENGTH = 1_024;\nconst MAX_PREVIEW_NODES = 128;\n\ntype PreviewState = {\n\tseen: WeakSet<object>;\n\tnodesLeft: number;\n\ttruncated: boolean;\n};\n\n/**\n * Строит конечное JSON-дерево без изменения исходного кэша. Структурные лимиты\n * защищают capture от больших коллекций ещё до проверки итоговых UTF-8 байтов.\n */\nfunction describePreviewValue(value: unknown, depth: number, state: PreviewState): ErrorReportSafeValue {\n\tif (depth >= MAX_PREVIEW_DEPTH || state.nodesLeft-- <= 0) {\n\t\tstate.truncated = true;\n\t\treturn { type: \"truncated\" };\n\t}\n\tif (value === null || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") return Number.isFinite(value) ? value : { type: \"non-finite-number\" };\n\tif (typeof value === \"string\") {\n\t\tif (value.length > MAX_PREVIEW_STRING_LENGTH) state.truncated = true;\n\t\tconst prefix = value.slice(0, MAX_PREVIEW_STRING_LENGTH);\n\t\tconst lastCodeUnit = prefix.charCodeAt(prefix.length - 1);\n\t\treturn lastCodeUnit >= 0xd800 && lastCodeUnit <= 0xdbff ? prefix.slice(0, -1) : prefix;\n\t}\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (value === undefined) return { type: \"undefined\" };\n\tif (typeof value === \"function\") return { type: \"function\" };\n\tif (typeof value === \"symbol\") return { type: \"symbol\" };\n\tif (value instanceof Date) return Number.isNaN(value.getTime()) ? { type: \"invalid-date\" } : value.toISOString();\n\tif (typeof value !== \"object\") return { type: \"unknown\" };\n\tif (state.seen.has(value)) return { type: \"circular\" };\n\tstate.seen.add(value);\n\n\tif (Array.isArray(value)) {\n\t\tif (value.length > MAX_PREVIEW_ARRAY_ITEMS) state.truncated = true;\n\t\treturn value.slice(0, MAX_PREVIEW_ARRAY_ITEMS).map((item) => describePreviewValue(item, depth + 1, state));\n\t}\n\n\ttry {\n\t\tconst entries = Object.entries(value);\n\t\tif (entries.length > MAX_PREVIEW_OBJECT_KEYS) state.truncated = true;\n\t\treturn Object.fromEntries(\n\t\t\tentries.slice(0, MAX_PREVIEW_OBJECT_KEYS).map(([key, item]) => [key, describePreviewValue(item, depth + 1, state)])\n\t\t);\n\t} catch {\n\t\treturn { type: \"unreadable\" };\n\t}\n}\n\nfunction shortenRootString(value: string): string {\n\tconst codePoints = Array.from(value);\n\treturn codePoints.slice(0, Math.floor(codePoints.length / 2)).join(\"\");\n}\n\n/** Сокращает хвост дерева, сохраняя исходную форму первых полей и элементов. */\nfunction shrinkPreviewValue(value: ErrorReportSafeValue): { value: ErrorReportSafeValue; changed: boolean } {\n\tif (typeof value === \"string\") {\n\t\treturn value ? { value: shortenRootString(value), changed: true } : { value, changed: false };\n\t}\n\tif (Array.isArray(value)) {\n\t\tif (value.length > 1) {\n\t\t\tvalue.pop();\n\t\t\treturn { value, changed: true };\n\t\t}\n\t\tif (value.length === 1) {\n\t\t\tconst item = shrinkPreviewValue(value[0]);\n\t\t\tif (item.changed) {\n\t\t\t\tvalue[0] = item.value;\n\t\t\t\treturn { value, changed: true };\n\t\t\t}\n\t\t\tvalue.pop();\n\t\t\treturn { value, changed: true };\n\t\t}\n\t\treturn { value, changed: false };\n\t}\n\tif (value !== null && typeof value === \"object\") {\n\t\tconst keys = Object.keys(value);\n\t\tconst lastKey = keys.at(-1);\n\t\tif (lastKey === undefined) return { value, changed: false };\n\t\tif (keys.length === 1) {\n\t\t\tconst item = shrinkPreviewValue(value[lastKey]);\n\t\t\tif (item.changed) {\n\t\t\t\tvalue[lastKey] = item.value;\n\t\t\t\treturn { value, changed: true };\n\t\t\t}\n\t\t}\n\t\tReflect.deleteProperty(value, lastKey);\n\t\treturn { value, changed: true };\n\t}\n\treturn { value, changed: false };\n}\n\n/**\n * Возвращает валидный JSON в заданном байтовом бюджете. `truncated` фиксирует\n * как структурное усечение, так и сокращение по размеру сериализованного JSON.\n */\nexport function createErrorReportDataPreview(value: unknown, maxBytes: number): ErrorReportDataPreview {\n\tconst state: PreviewState = { seen: new WeakSet(), nodesLeft: MAX_PREVIEW_NODES, truncated: false };\n\tlet previewValue = describePreviewValue(value, 0, state);\n\tlet json = JSON.stringify(previewValue);\n\tconst byteLimit = Math.max(4, maxBytes);\n\n\twhile (getUtf8TextSize(json) > byteLimit) {\n\t\tstate.truncated = true;\n\t\tconst reduced = shrinkPreviewValue(previewValue);\n\t\tpreviewValue = reduced.changed ? reduced.value : null;\n\t\tjson = JSON.stringify(previewValue);\n\t}\n\n\treturn { json, truncated: state.truncated };\n}\n","import { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { createErrorReportDataPreview } from \"./dataPreview\";\nimport {\n\tgetUtf8TextSize,\n\tsanitizeDetail,\n\tsanitizeDiagnosticText,\n\tsanitizeDiagnosticTextBytes,\n\tsanitizeErrorReportValue\n} from \"./safeValue\";\n\nimport type {\n\tErrorReportErrorInfo,\n\tErrorReportDataPreview,\n\tErrorReportMutationDiagnostics,\n\tErrorReportPayload,\n\tErrorReportPersistedQueryDiagnostics,\n\tErrorReportQueryDiagnostics\n} from \"./types\";\n\nexport const ERROR_REPORT_PAYLOAD_VERSION = 1 as const;\nexport const ERROR_REPORT_PAYLOAD_MAX_BYTES = 256 * 1_024;\nexport const ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES = 128 * 1_024;\nexport const ERROR_REPORT_STACK_TRACE_MAX_BYTES = 64 * 1_024;\n\nconst ERROR_REPORT_COMPONENT_STACK_MAX_BYTES = 32 * 1_024;\nconst ERROR_REPORT_SOURCE_MAX_LENGTH = 256;\nconst ERROR_REPORT_APPLICATION_MAX_LENGTH = 128;\nconst ERROR_REPORT_LOCATION_MAX_LENGTH = 2_048;\n\nfunction serializedByteLength(value: unknown) {\n\treturn new TextEncoder().encode(JSON.stringify(value)).byteLength;\n}\n\nfunction sanitizePathname(value: string) {\n\tconst pathname = getErrorReportCaptureOptions().valuePolicy === \"verbatim\" ? value : (value.split(/[?#]/, 1)[0] ?? value);\n\treturn sanitizeDiagnosticText(pathname, ERROR_REPORT_LOCATION_MAX_LENGTH);\n}\n\nfunction normalizeDataPreview(preview: ErrorReportDataPreview | undefined, maxBytes: number) {\n\tif (!preview || maxBytes <= 0 || getErrorReportCaptureOptions().valuePolicy !== \"verbatim\") return undefined;\n\ttry {\n\t\tconst value: unknown = JSON.parse(preview.json);\n\t\tif (getUtf8TextSize(preview.json) <= maxBytes) return preview;\n\t\tconst reduced = createErrorReportDataPreview(value, maxBytes);\n\t\treturn { ...reduced, truncated: true };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction sanitizeScopedText(\n\tvalue: string,\n\tcontext: { scope: \"error-message\" | \"stack-trace\"; source?: string },\n\tlimit: number,\n\tlimitUnit: \"bytes\" | \"characters\" = \"characters\"\n) {\n\tconst builtInValue = limitUnit === \"bytes\" ? sanitizeDiagnosticTextBytes(value, limit) : sanitizeDiagnosticText(value, limit);\n\tconst sanitizedValue = sanitizeErrorReportValue(builtInValue, context, limit);\n\tif (typeof sanitizedValue !== \"string\") return undefined;\n\treturn limitUnit === \"bytes\" ? sanitizeDiagnosticTextBytes(sanitizedValue, limit) : sanitizeDiagnosticText(sanitizedValue, limit);\n}\n\nfunction sanitizeErrorInfo(error: ErrorReportErrorInfo, source?: string): ErrorReportErrorInfo {\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === \"verbatim\";\n\treturn {\n\t\tname: sanitizeDiagnosticText(error.name, 256),\n\t\tmessage:\n\t\t\tsanitizeScopedText(\n\t\t\t\terror.message,\n\t\t\t\t{ scope: \"error-message\", source },\n\t\t\t\tverbatim ? ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES : 4_096,\n\t\t\t\tverbatim ? \"bytes\" : \"characters\"\n\t\t\t) ?? (verbatim ? sanitizeDiagnosticTextBytes(error.message, ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES) : \"[REDACTED]\"),\n\t\tcode: error.code ? sanitizeDiagnosticText(error.code, 128) : undefined,\n\t\tstackTrace: error.stackTrace\n\t\t\t? sanitizeScopedText(error.stackTrace, { scope: \"stack-trace\", source }, ERROR_REPORT_STACK_TRACE_MAX_BYTES, \"bytes\")\n\t\t\t: undefined,\n\t\thttpStatus: error.httpStatus\n\t};\n}\n\nfunction sanitizeQueryDiagnostics(query: ErrorReportQueryDiagnostics): ErrorReportQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\t...query,\n\t\tqueryHash: sanitizeDiagnosticText(query.queryHash, 512),\n\t\tqueryKey: sanitizeErrorReportValue(query.queryKey, {\n\t\t\tscope: \"query-key\",\n\t\t\tsource: query.queryHash\n\t\t}) ?? { type: \"redacted\" },\n\t\tmeta: sanitizeDetail(query.meta, { scope: \"query-meta\", source: query.queryHash }),\n\t\tdataShape: query.dataShape\n\t\t\t? sanitizeErrorReportValue(query.dataShape, { scope: \"query-data-shape\", source: query.queryHash })\n\t\t\t: undefined,\n\t\tdataPreview: normalizeDataPreview(query.dataPreview, captureOptions.dataPreviewBytes.query),\n\t\terror: query.error ? sanitizeErrorInfo(query.error, query.queryHash) : undefined\n\t};\n}\n\nfunction sanitizeMutationDiagnostics(mutation: ErrorReportMutationDiagnostics): ErrorReportMutationDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\t...mutation,\n\t\tmutationKey: mutation.mutationKey ? sanitizeErrorReportValue(mutation.mutationKey, { scope: \"mutation-key\" }) : undefined,\n\t\tmeta: sanitizeDetail(mutation.meta, { scope: \"mutation-meta\" }),\n\t\tvariablesPreview: normalizeDataPreview(mutation.variablesPreview, captureOptions.dataPreviewBytes.mutation),\n\t\terror: mutation.error ? sanitizeErrorInfo(mutation.error, \"mutation\") : undefined\n\t};\n}\n\nfunction sanitizePersistedQueryDiagnostics(query: ErrorReportPersistedQueryDiagnostics): ErrorReportPersistedQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\t...query,\n\t\tbuster: query.buster ? sanitizeDiagnosticText(query.buster, 512) : undefined,\n\t\tqueryHash: query.queryHash ? sanitizeDiagnosticText(query.queryHash, 512) : undefined,\n\t\tqueryKey: query.queryKey\n\t\t\t? sanitizeErrorReportValue(query.queryKey, {\n\t\t\t\t\tscope: \"persisted-query-key\",\n\t\t\t\t\tsource: query.queryHash\n\t\t\t\t})\n\t\t\t: undefined,\n\t\tdataPreview: normalizeDataPreview(query.dataPreview, captureOptions.dataPreviewBytes.persistedQuery),\n\t\terror: query.error ? sanitizeErrorInfo(query.error, query.queryHash) : undefined\n\t};\n}\n\n/** Возвращает точный UTF-8 размер JSON-формы, которую получит transport. */\nexport function getErrorReportPayloadSize(payload: ErrorReportPayload) {\n\treturn serializedByteLength(payload);\n}\n\nfunction normalizePayloadStrings(payload: ErrorReportPayload): ErrorReportPayload {\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === \"verbatim\";\n\treturn {\n\t\t...payload,\n\t\treportId: sanitizeDiagnosticText(payload.reportId, 128),\n\t\tsessionId: sanitizeDiagnosticText(payload.sessionId, 128),\n\t\tcreatedUtc: sanitizeDiagnosticText(payload.createdUtc, 64),\n\t\tapplication: sanitizeDiagnosticText(payload.application, ERROR_REPORT_APPLICATION_MAX_LENGTH),\n\t\tsource: sanitizeDiagnosticText(payload.source, ERROR_REPORT_SOURCE_MAX_LENGTH),\n\t\terror: sanitizeErrorInfo(payload.error, payload.source),\n\t\tenvironment: {\n\t\t\t...payload.environment,\n\t\t\tbuildId: payload.environment.buildId ? sanitizeDiagnosticText(payload.environment.buildId, 128) : undefined\n\t\t},\n\t\tclient: payload.client\n\t\t\t? {\n\t\t\t\t\tuserAgent: payload.client.userAgent ? sanitizeDiagnosticText(payload.client.userAgent) : undefined,\n\t\t\t\t\tlanguage: payload.client.language ? sanitizeDiagnosticText(payload.client.language, 128) : undefined,\n\t\t\t\t\ttimeZone: payload.client.timeZone ? sanitizeDiagnosticText(payload.client.timeZone, 128) : undefined\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tlocation: payload.location\n\t\t\t? {\n\t\t\t\t\tpathname: sanitizePathname(payload.location.pathname),\n\t\t\t\t\torigin: payload.location.origin\n\t\t\t\t\t\t? sanitizeDiagnosticText(\n\t\t\t\t\t\t\t\tpayload.location.origin.split(/[?#]/, 1)[0] ?? payload.location.origin,\n\t\t\t\t\t\t\t\tERROR_REPORT_LOCATION_MAX_LENGTH\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tsearch:\n\t\t\t\t\t\tgetErrorReportCaptureOptions().valuePolicy === \"verbatim\" && payload.location.search\n\t\t\t\t\t\t\t? sanitizeDiagnosticText(payload.location.search, ERROR_REPORT_LOCATION_MAX_LENGTH)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\thash:\n\t\t\t\t\t\tgetErrorReportCaptureOptions().valuePolicy === \"verbatim\" && payload.location.hash\n\t\t\t\t\t\t\t? sanitizeDiagnosticText(payload.location.hash, ERROR_REPORT_LOCATION_MAX_LENGTH)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t: undefined,\n\t\treact: payload.react?.componentStack\n\t\t\t? {\n\t\t\t\t\tcomponentStack: sanitizeScopedText(\n\t\t\t\t\t\tpayload.react.componentStack,\n\t\t\t\t\t\t{ scope: \"stack-trace\", source: \"react-component-stack\" },\n\t\t\t\t\t\tERROR_REPORT_COMPONENT_STACK_MAX_BYTES,\n\t\t\t\t\t\t\"bytes\"\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tquery: payload.query ? sanitizeQueryDiagnostics(payload.query) : undefined,\n\t\tmutation: payload.mutation ? sanitizeMutationDiagnostics(payload.mutation) : undefined,\n\t\tqueryClient: payload.queryClient\n\t\t\t? {\n\t\t\t\t\tqueries: payload.queryClient.queries.slice(-40).map(sanitizeQueryDiagnostics),\n\t\t\t\t\tmutations: payload.queryClient.mutations.slice(-40).map(sanitizeMutationDiagnostics),\n\t\t\t\t\t...(verbatim\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tomittedQueries:\n\t\t\t\t\t\t\t\t\t(payload.queryClient.omittedQueries ?? 0) + Math.max(0, payload.queryClient.queries.length - 40) ||\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tomittedMutations:\n\t\t\t\t\t\t\t\t\t(payload.queryClient.omittedMutations ?? 0) + Math.max(0, payload.queryClient.mutations.length - 40) ||\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {})\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tpersistedQueries: payload.persistedQueries?.slice(-40).map(sanitizePersistedQueryDiagnostics),\n\t\tbreadcrumbs: payload.breadcrumbs.slice(-80).map((breadcrumb) => ({\n\t\t\t...breadcrumb,\n\t\t\tutc: sanitizeDiagnosticText(breadcrumb.utc, 64),\n\t\t\trouteId: breadcrumb.routeId ? sanitizeDiagnosticText(breadcrumb.routeId, 512) : undefined,\n\t\t\tappId: breadcrumb.appId ? sanitizeDiagnosticText(breadcrumb.appId, 128) : undefined,\n\t\t\tviewId: breadcrumb.viewId ? sanitizeDiagnosticText(breadcrumb.viewId, 128) : undefined,\n\t\t\ttarget: breadcrumb.target ? sanitizeDiagnosticText(breadcrumb.target, 2_048) : undefined,\n\t\t\tdetail: sanitizeDetail(breadcrumb.detail, {\n\t\t\t\tscope: \"breadcrumb-detail\",\n\t\t\t\tsource: breadcrumb.type\n\t\t\t})\n\t\t})),\n\t\tcontext: sanitizeDetail(payload.context, { scope: \"context\", source: payload.source })\n\t};\n}\n\nfunction reducePreview(preview: ErrorReportDataPreview | undefined, maxBytes: number) {\n\tif (!preview || getUtf8TextSize(preview.json) <= maxBytes) return preview;\n\ttry {\n\t\tconst value: unknown = JSON.parse(preview.json);\n\t\tconst reduced = createErrorReportDataPreview(value, maxBytes);\n\t\treturn { ...reduced, truncated: true };\n\t} catch {\n\t\treturn { json: \"null\", truncated: true };\n\t}\n}\n\n/**\n * Сначала уменьшаем тяжёлые значения кэша, сохраняя ключи, статусы и ошибки.\n * Основные query/mutation отчёта сокращаются только после фонового снимка.\n */\nfunction reduceDataPreviews(payload: ErrorReportPayload, maxBytes: number, background: boolean): ErrorReportPayload {\n\tif (background) {\n\t\treturn {\n\t\t\t...payload,\n\t\t\tqueryClient: payload.queryClient\n\t\t\t\t? {\n\t\t\t\t\t\t...payload.queryClient,\n\t\t\t\t\t\tqueries: payload.queryClient.queries.map((query) => ({\n\t\t\t\t\t\t\t...query,\n\t\t\t\t\t\t\tdataPreview: reducePreview(query.dataPreview, maxBytes)\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tmutations: payload.queryClient.mutations.map((mutation) => ({\n\t\t\t\t\t\t\t...mutation,\n\t\t\t\t\t\t\tvariablesPreview: reducePreview(mutation.variablesPreview, maxBytes)\n\t\t\t\t\t\t}))\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tpersistedQueries: payload.persistedQueries?.map((query) => ({\n\t\t\t\t...query,\n\t\t\t\tdataPreview: reducePreview(query.dataPreview, maxBytes)\n\t\t\t}))\n\t\t};\n\t}\n\n\treturn {\n\t\t...payload,\n\t\tquery: payload.query ? { ...payload.query, dataPreview: reducePreview(payload.query.dataPreview, maxBytes) } : undefined,\n\t\tmutation: payload.mutation\n\t\t\t? { ...payload.mutation, variablesPreview: reducePreview(payload.mutation.variablesPreview, maxBytes) }\n\t\t\t: undefined\n\t};\n}\n\n/**\n * Удаляет диагностические секции в фиксированном порядке, пока payload не\n * помещается в transport/storage limit. Identity, классификация и ошибка\n * сохраняются всегда; маркер перечисляет каждую фактически удалённую секцию.\n */\nexport function limitErrorReportPayload(input: ErrorReportPayload): ErrorReportPayload {\n\tconst normalized = normalizePayloadStrings(input);\n\tconst originalBytes = getErrorReportPayloadSize(normalized);\n\tif (originalBytes <= ERROR_REPORT_PAYLOAD_MAX_BYTES) return normalized;\n\n\tconst droppedSections: string[] = [];\n\tlet payload: ErrorReportPayload = {\n\t\t...normalized,\n\t\ttruncation: {\n\t\t\treason: \"payload-size\",\n\t\t\tlimitBytes: ERROR_REPORT_PAYLOAD_MAX_BYTES,\n\t\t\toriginalBytes,\n\t\t\tdroppedSections\n\t\t}\n\t};\n\n\tif (getErrorReportCaptureOptions().valuePolicy === \"verbatim\") {\n\t\tfor (const previewLimit of [512, 128, 4]) {\n\t\t\tif (getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES) break;\n\t\t\tpayload = reduceDataPreviews(payload, previewLimit, true);\n\t\t\tif (getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES) break;\n\t\t\tpayload = reduceDataPreviews(payload, previewLimit, false);\n\t\t}\n\t}\n\n\tconst drop = (\n\t\tsection: string,\n\t\tisPresent: (current: ErrorReportPayload) => boolean,\n\t\tupdate: (current: ErrorReportPayload) => ErrorReportPayload\n\t) => {\n\t\tif (!isPresent(payload) || getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES) return;\n\t\tdroppedSections.push(section);\n\t\tpayload = update(payload);\n\t};\n\n\tif (getErrorReportCaptureOptions().valuePolicy === \"verbatim\") {\n\t\tdrop(\n\t\t\t\"queryClient.queries:oldest\",\n\t\t\t(current) => (current.queryClient?.queries.length ?? 0) > 10,\n\t\t\t(current) => ({\n\t\t\t\t...current,\n\t\t\t\tqueryClient: current.queryClient\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...current.queryClient,\n\t\t\t\t\t\t\tqueries: current.queryClient.queries.slice(-10),\n\t\t\t\t\t\t\tomittedQueries: (current.queryClient.omittedQueries ?? 0) + current.queryClient.queries.length - 10\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t})\n\t\t);\n\t\tdrop(\n\t\t\t\"queryClient.mutations:oldest\",\n\t\t\t(current) => (current.queryClient?.mutations.length ?? 0) > 10,\n\t\t\t(current) => ({\n\t\t\t\t...current,\n\t\t\t\tqueryClient: current.queryClient\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...current.queryClient,\n\t\t\t\t\t\t\tmutations: current.queryClient.mutations.slice(-10),\n\t\t\t\t\t\t\tomittedMutations: (current.queryClient.omittedMutations ?? 0) + current.queryClient.mutations.length - 10\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t})\n\t\t);\n\t\tdrop(\n\t\t\t\"persistedQueries:oldest\",\n\t\t\t(current) => (current.persistedQueries?.length ?? 0) > 10,\n\t\t\t(current) => ({ ...current, persistedQueries: current.persistedQueries?.slice(-10) })\n\t\t);\n\t}\n\tdrop(\n\t\t\"queryClient\",\n\t\t(current) => current.queryClient !== undefined,\n\t\t(current) => ({ ...current, queryClient: undefined })\n\t);\n\tdrop(\n\t\t\"persistedQueries\",\n\t\t(current) => current.persistedQueries !== undefined,\n\t\t(current) => ({ ...current, persistedQueries: undefined })\n\t);\n\tdrop(\n\t\t\"context\",\n\t\t(current) => current.context !== undefined,\n\t\t(current) => ({ ...current, context: undefined })\n\t);\n\tdrop(\n\t\t\"query.meta\",\n\t\t(current) => current.query?.meta !== undefined,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tquery: current.query ? { ...current.query, meta: undefined } : undefined\n\t\t})\n\t);\n\tdrop(\n\t\t\"query.dataShape\",\n\t\t(current) => current.query?.dataShape !== undefined,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tquery: current.query ? { ...current.query, dataShape: undefined } : undefined\n\t\t})\n\t);\n\tdrop(\n\t\t\"mutation.meta\",\n\t\t(current) => current.mutation?.meta !== undefined,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tmutation: current.mutation ? { ...current.mutation, meta: undefined } : undefined\n\t\t})\n\t);\n\tdrop(\n\t\t\"breadcrumbs:oldest\",\n\t\t(current) => current.breadcrumbs.length > 20,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tbreadcrumbs: current.breadcrumbs.slice(-20)\n\t\t})\n\t);\n\tdrop(\n\t\t\"query\",\n\t\t(current) => current.query !== undefined,\n\t\t(current) => ({ ...current, query: undefined })\n\t);\n\tdrop(\n\t\t\"mutation\",\n\t\t(current) => current.mutation !== undefined,\n\t\t(current) => ({ ...current, mutation: undefined })\n\t);\n\tdrop(\n\t\t\"react\",\n\t\t(current) => current.react !== undefined,\n\t\t(current) => ({ ...current, react: undefined })\n\t);\n\tdrop(\n\t\t\"breadcrumbs\",\n\t\t(current) => current.breadcrumbs.length > 0,\n\t\t(current) => ({ ...current, breadcrumbs: [] })\n\t);\n\tdrop(\n\t\t\"client\",\n\t\t(current) => current.client !== undefined,\n\t\t(current) => ({ ...current, client: undefined })\n\t);\n\tdrop(\n\t\t\"viewport\",\n\t\t(current) => current.viewport !== undefined,\n\t\t(current) => ({ ...current, viewport: undefined })\n\t);\n\n\treturn payload;\n}\n","import { normalizeText } from \"../formatters\";\n\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_STACK_TRACE_MAX_BYTES, ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES } from \"./payload\";\nimport { sanitizeDiagnosticText, sanitizeDiagnosticTextBytes } from \"./safeValue\";\n\nimport type { ErrorReportErrorInfo } from \"./types\";\n\nconst DEFAULT_ERROR_MESSAGE = \"Неизвестная ошибка\";\n\n/**\n * Гарантирует непустое диагностическое сообщение, сохраняя исходный текст ошибки.\n * Fallback нужен для Error без message и для брошенных пустых строк.\n */\nfunction resolveErrorMessage(message: string) {\n\tif (!normalizeText(message)) return DEFAULT_ERROR_MESSAGE;\n\treturn getErrorReportCaptureOptions().valuePolicy === \"verbatim\"\n\t\t? sanitizeDiagnosticTextBytes(message, ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES)\n\t\t: sanitizeDiagnosticText(message);\n}\n\nfunction readStatus(value: Record<string, unknown>) {\n\tconst status = value.status ?? value.statusCode ?? value.httpStatus;\n\treturn typeof status === \"number\" && Number.isFinite(status) ? status : undefined;\n}\n\nfunction readServerFnTransportErrorInfo(error: unknown): ErrorReportErrorInfo | null {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst transport = error as Record<string, unknown>;\n\tconst appError = transport.appError;\n\tif (!appError || typeof appError !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst payload = appError as Record<string, unknown>;\n\tconst message = normalizeText(payload.message);\n\tif (!message) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tname: \"AppError\",\n\t\tmessage: resolveErrorMessage(message),\n\t\tcode: normalizeText(payload.code) ? sanitizeDiagnosticText(String(payload.code), 128) : undefined,\n\t\thttpStatus: readStatus(payload)\n\t};\n}\n\n/**\n * Нормализует любое брошенное значение в форму, удобную для поиска и сохранения.\n * Stacktrace сохраняется до 64 KiB как основной диагностический контекст;\n * в verbatim-режиме превышение этого предела отмечается внутри строки.\n */\nexport function createErrorInfo(error: unknown): ErrorReportErrorInfo {\n\tconst serverFnErrorInfo = readServerFnTransportErrorInfo(error);\n\tif (serverFnErrorInfo) {\n\t\treturn serverFnErrorInfo;\n\t}\n\n\tif (error instanceof Error) {\n\t\treturn {\n\t\t\tname: sanitizeDiagnosticText(error.name || \"Error\", 256),\n\t\t\tmessage: resolveErrorMessage(error.message),\n\t\t\tstackTrace: error.stack ? sanitizeDiagnosticTextBytes(error.stack, ERROR_REPORT_STACK_TRACE_MAX_BYTES) : undefined\n\t\t};\n\t}\n\n\tif (error && typeof error === \"object\") {\n\t\tconst record = error as Record<string, unknown>;\n\t\treturn {\n\t\t\tname: sanitizeDiagnosticText(typeof record.name === \"string\" ? record.name : \"Error\", 256),\n\t\t\tmessage: resolveErrorMessage(typeof record.message === \"string\" ? record.message : String(error)),\n\t\t\tstackTrace:\n\t\t\t\ttypeof record.stack === \"string\"\n\t\t\t\t\t? sanitizeDiagnosticTextBytes(record.stack, ERROR_REPORT_STACK_TRACE_MAX_BYTES)\n\t\t\t\t\t: undefined,\n\t\t\thttpStatus: readStatus(record)\n\t\t};\n\t}\n\n\treturn {\n\t\tname: \"Error\",\n\t\tmessage: resolveErrorMessage(typeof error === \"string\" ? error : String(error ?? DEFAULT_ERROR_MESSAGE))\n\t};\n}\n","import { hashString128 } from \"../crypto\";\nimport { stableStringify } from \"../utils\";\n\nimport type { ErrorReportDraft, ErrorReportErrorInfo, ErrorReportSafeValue } from \"./types\";\n\nexport const RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS = 60_000;\n\nconst MAX_RECENT_RUNTIME_ERROR_REPORTS = 100;\nconst recentRuntimeErrorReports = new Map<\n\tstring,\n\t{\n\t\tcapturedAt: number;\n\t\tcapture: Promise<ErrorReportDraft | undefined>;\n\t\texpirationTimer: ReturnType<typeof setTimeout>;\n\t}\n>();\n\ntype RuntimeErrorReportDeduplicationInput = {\n\tcategory: \"runtime\" | \"react\";\n\tsource: string;\n\terror: ErrorReportErrorInfo;\n\tpathname?: string;\n\tscope?: {\n\t\tcomponentStack?: string;\n\t\tdetail?: Record<string, ErrorReportSafeValue>;\n\t};\n};\n\nfunction normalizeStackTrace(stackTrace: string | undefined) {\n\tif (!stackTrace) return undefined;\n\n\treturn stackTrace\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.trim())\n\t\t.filter(Boolean);\n}\n\nfunction createRuntimeErrorReportFingerprint(input: RuntimeErrorReportDeduplicationInput) {\n\treturn hashString128(\n\t\tstableStringify({\n\t\t\tcategory: input.category,\n\t\t\tsource: input.source,\n\t\t\terror: {\n\t\t\t\t...input.error,\n\t\t\t\tstackTrace: normalizeStackTrace(input.error.stackTrace)\n\t\t\t},\n\t\t\tpathname: input.pathname,\n\t\t\tscope: input.scope\n\t\t})\n\t);\n}\n\n/**\n * Удаляет только ожидаемую запись и освобождает связанный таймер.\n * Проверка Promise защищает новую запись того же fingerprint от завершения\n * или отклонения старого capture после lifecycle-сброса.\n */\nfunction removeRuntimeErrorReport(fingerprint: string, expectedCapture?: Promise<ErrorReportDraft | undefined>) {\n\tconst recentReport = recentRuntimeErrorReports.get(fingerprint);\n\tif (!recentReport || (expectedCapture && recentReport.capture !== expectedCapture)) {\n\t\treturn;\n\t}\n\n\tclearTimeout(recentReport.expirationTimer);\n\trecentRuntimeErrorReports.delete(fingerprint);\n}\n\nfunction removeExpiredRuntimeErrorReports(now: number) {\n\tfor (const [fingerprint, recentReport] of recentRuntimeErrorReports) {\n\t\tif (now - recentReport.capturedAt >= RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS) {\n\t\t\tremoveRuntimeErrorReport(fingerprint, recentReport.capture);\n\t\t}\n\t}\n}\n\nfunction removeOldestRuntimeErrorReport() {\n\tconst oldestFingerprint = recentRuntimeErrorReports.keys().next().value;\n\tif (oldestFingerprint) {\n\t\tremoveRuntimeErrorReport(oldestFingerprint);\n\t}\n}\n\n/**\n * Объединяет одинаковые runtime capture-вызовы вокруг одной Promise.\n * Все потребители получают один draft, поэтому capture-only boundary не может\n * заблокировать последующую app-level доставку того же отчёта.\n */\nexport function coalesceRuntimeErrorReportCapture(\n\tinput: RuntimeErrorReportDeduplicationInput,\n\tcapture: () => Promise<ErrorReportDraft | undefined>\n) {\n\tconst now = Date.now();\n\tconst fingerprint = createRuntimeErrorReportFingerprint(input);\n\tconst recentReport = recentRuntimeErrorReports.get(fingerprint);\n\n\tif (recentReport && now - recentReport.capturedAt < RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS) {\n\t\treturn recentReport.capture;\n\t}\n\n\tremoveExpiredRuntimeErrorReports(now);\n\twhile (recentRuntimeErrorReports.size >= MAX_RECENT_RUNTIME_ERROR_REPORTS) {\n\t\tremoveOldestRuntimeErrorReport();\n\t}\n\n\tconst capturePromise = capture();\n\tconst expirationTimer = setTimeout(() => {\n\t\tremoveRuntimeErrorReport(fingerprint, capturePromise);\n\t}, RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS);\n\n\trecentRuntimeErrorReports.set(fingerprint, {\n\t\tcapturedAt: now,\n\t\tcapture: capturePromise,\n\t\texpirationTimer\n\t});\n\n\tvoid capturePromise.catch(() => {\n\t\tremoveRuntimeErrorReport(fingerprint, capturePromise);\n\t});\n\n\treturn capturePromise;\n}\n\n/**\n * Очищает модульное состояние при смене app-level runtime reporter.\n * Функция не входит в публичный package subpath и нужна lifecycle-коду и тестам.\n */\nexport function clearRuntimeErrorReportDeduplication() {\n\tfor (const recentReport of recentRuntimeErrorReports.values()) {\n\t\tclearTimeout(recentReport.expirationTimer);\n\t}\n\trecentRuntimeErrorReports.clear();\n}\n","import { z } from \"zod\";\n\nimport { ERROR_REPORT_PAYLOAD_MAX_BYTES, getErrorReportPayloadSize } from \"./payload\";\nimport { getUtf8TextSize } from \"./safeValue\";\n\nimport type { ErrorReportDraft, ErrorReportPayload, ErrorReportSafeValue } from \"./types\";\n\nconst safeValueSchema: z.ZodType<ErrorReportSafeValue> = z.lazy(() =>\n\tz.union([\n\t\tz.string().max(8_192),\n\t\tz.number().finite(),\n\t\tz.boolean(),\n\t\tz.null(),\n\t\tz.array(safeValueSchema).max(20),\n\t\tz.record(z.string(), safeValueSchema).refine((value) => Object.keys(value).length <= 40)\n\t])\n);\n\nconst safeRecordSchema = z.record(z.string(), safeValueSchema).refine((value) => Object.keys(value).length <= 40);\nconst dataPreviewSchema = z\n\t.object({\n\t\tjson: z.string().refine((value) => {\n\t\t\tif (getUtf8TextSize(value) > 16 * 1_024) return false;\n\t\t\ttry {\n\t\t\t\tJSON.parse(value);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}),\n\t\ttruncated: z.boolean()\n\t})\n\t.strict();\nconst errorInfoSchema = z\n\t.object({\n\t\tname: z.string().min(1).max(256),\n\t\tmessage: z\n\t\t\t.string()\n\t\t\t.min(1)\n\t\t\t.max(128 * 1_024)\n\t\t\t.refine((value) => getUtf8TextSize(value) <= 128 * 1_024),\n\t\tcode: z.string().max(128).optional(),\n\t\tstackTrace: z\n\t\t\t.string()\n\t\t\t.refine((value) => getUtf8TextSize(value) <= 64 * 1_024)\n\t\t\t.optional(),\n\t\thttpStatus: z.number().finite().optional()\n\t})\n\t.strict();\nconst breadcrumbSchema = z\n\t.object({\n\t\tutc: z.string().min(1).max(64),\n\t\ttype: z.enum([\"route\", \"click\", \"visibility\", \"query-error\", \"mutation-error\", \"runtime-error\"]),\n\t\trouteId: z.string().max(512).optional(),\n\t\tappId: z.string().max(128).optional(),\n\t\tviewId: z.string().max(128).optional(),\n\t\ttarget: z.string().max(2_048).optional(),\n\t\tdetail: safeRecordSchema.optional()\n\t})\n\t.strict();\nconst queryDiagnosticsSchema = z\n\t.object({\n\t\tqueryHash: z.string().max(512),\n\t\tqueryKey: safeValueSchema,\n\t\tstatus: z.string().max(64).optional(),\n\t\tfetchStatus: z.string().max(64).optional(),\n\t\tdataUpdatedAt: z.number().finite().optional(),\n\t\terrorUpdatedAt: z.number().finite().optional(),\n\t\tfailureCount: z.number().finite().optional(),\n\t\tisInvalidated: z.boolean().optional(),\n\t\tobserversCount: z.number().finite().optional(),\n\t\tmeta: safeRecordSchema.optional(),\n\t\tdataShape: safeValueSchema.optional(),\n\t\tdataPreview: dataPreviewSchema.optional(),\n\t\terror: errorInfoSchema.optional()\n\t})\n\t.strict();\nconst mutationDiagnosticsSchema = z\n\t.object({\n\t\tmutationKey: safeValueSchema.optional(),\n\t\tstatus: z.string().max(64).optional(),\n\t\tfailureCount: z.number().finite().optional(),\n\t\tsubmittedAt: z.number().finite().optional(),\n\t\tmeta: safeRecordSchema.optional(),\n\t\tvariablesPreview: dataPreviewSchema.optional(),\n\t\terror: errorInfoSchema.optional()\n\t})\n\t.strict();\nconst persistedQueryDiagnosticsSchema = z\n\t.object({\n\t\tbuster: z.string().max(512).optional(),\n\t\tqueryHash: z.string().max(512).optional(),\n\t\tqueryKey: safeValueSchema.optional(),\n\t\tstatus: z.string().max(64).optional(),\n\t\tfetchStatus: z.string().max(64).optional(),\n\t\tdataUpdatedAt: z.number().finite().optional(),\n\t\terrorUpdatedAt: z.number().finite().optional(),\n\t\tfailureCount: z.number().finite().optional(),\n\t\tdataPreview: dataPreviewSchema.optional(),\n\t\terror: errorInfoSchema.optional()\n\t})\n\t.strict();\n\nconst errorReportPayloadSchema: z.ZodType<ErrorReportPayload> = z\n\t.object({\n\t\tpayloadVersion: z.literal(1),\n\t\tapplication: z.string().min(1).max(128),\n\t\treportId: z.string().uuid(),\n\t\tsessionId: z.string().uuid(),\n\t\tcreatedUtc: z.string().min(1).max(64),\n\t\tcategory: z.enum([\"query\", \"mutation\", \"runtime\", \"react\"]),\n\t\tsource: z.string().min(1).max(256),\n\t\terror: errorInfoSchema,\n\t\tenvironment: z\n\t\t\t.object({\n\t\t\t\tmode: z.enum([\"development\", \"production\"]),\n\t\t\t\tbuildId: z.string().max(128).optional()\n\t\t\t})\n\t\t\t.strict(),\n\t\tclient: z\n\t\t\t.object({\n\t\t\t\tuserAgent: z.string().max(4_096).optional(),\n\t\t\t\tlanguage: z.string().max(128).optional(),\n\t\t\t\ttimeZone: z.string().max(128).optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tlocation: z\n\t\t\t.object({\n\t\t\t\tpathname: z.string().max(2_048),\n\t\t\t\torigin: z.string().max(2_048).optional(),\n\t\t\t\tsearch: z.string().max(2_048).optional(),\n\t\t\t\thash: z.string().max(2_048).optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tviewport: z\n\t\t\t.object({\n\t\t\t\twidth: z.number().finite(),\n\t\t\t\theight: z.number().finite(),\n\t\t\t\tdevicePixelRatio: z.number().finite().optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\treact: z\n\t\t\t.object({\n\t\t\t\tcomponentStack: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.refine((value) => getUtf8TextSize(value) <= 32 * 1_024)\n\t\t\t\t\t.optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tquery: queryDiagnosticsSchema.optional(),\n\t\tmutation: mutationDiagnosticsSchema.optional(),\n\t\tqueryClient: z\n\t\t\t.object({\n\t\t\t\tqueries: z.array(queryDiagnosticsSchema).max(40),\n\t\t\t\tmutations: z.array(mutationDiagnosticsSchema).max(40),\n\t\t\t\tomittedQueries: z.number().int().nonnegative().optional(),\n\t\t\t\tomittedMutations: z.number().int().nonnegative().optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tpersistedQueries: z.array(persistedQueryDiagnosticsSchema).max(40).optional(),\n\t\tbreadcrumbs: z.array(breadcrumbSchema).max(80),\n\t\tcontext: safeRecordSchema.optional(),\n\t\ttruncation: z\n\t\t\t.object({\n\t\t\t\treason: z.literal(\"payload-size\"),\n\t\t\t\tlimitBytes: z.literal(ERROR_REPORT_PAYLOAD_MAX_BYTES),\n\t\t\t\toriginalBytes: z.number().int().positive(),\n\t\t\t\tdroppedSections: z.array(z.string().max(128)).max(32)\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional()\n\t})\n\t.strict()\n\t.refine((payload) => getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES);\n\nconst errorReportDraftSchema: z.ZodType<ErrorReportDraft> = z\n\t.object({\n\t\treportId: z.string().uuid(),\n\t\tsessionId: z.string().uuid(),\n\t\tcreatedUtc: z.string().min(1).max(64),\n\t\tcategory: z.enum([\"query\", \"mutation\", \"runtime\", \"react\"]),\n\t\tstatus: z.enum([\"pending\", \"sending\", \"sent\", \"failed\"]),\n\t\tsentUtc: z.string().min(1).max(64).optional(),\n\t\tfailedReason: z.string().max(4_096).optional(),\n\t\tpayload: errorReportPayloadSchema\n\t})\n\t.strict()\n\t.superRefine((draft, context) => {\n\t\tconst matchingIdentity =\n\t\t\tdraft.reportId === draft.payload.reportId &&\n\t\t\tdraft.sessionId === draft.payload.sessionId &&\n\t\t\tdraft.createdUtc === draft.payload.createdUtc &&\n\t\t\tdraft.category === draft.payload.category;\n\n\t\tif (!matchingIdentity) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"Draft identity должна совпадать с payload identity.\"\n\t\t\t});\n\t\t}\n\t});\n\nfunction isSerializedInputWithinLimit(value: unknown, maxBytes: number) {\n\ttry {\n\t\treturn new TextEncoder().encode(JSON.stringify(value)).byteLength <= maxBytes;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Парсит только текущую versioned форму. Unversioned и будущие payload\n * отклоняются явно, чтобы storage/delivery не угадывали форму контракта.\n */\nexport function parseErrorReportPayload(value: unknown) {\n\tif (!isSerializedInputWithinLimit(value, ERROR_REPORT_PAYLOAD_MAX_BYTES)) return undefined;\n\n\ttry {\n\t\tconst result = errorReportPayloadSchema.safeParse(value);\n\t\treturn result.success ? result.data : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Проверяет одну draft-запись, включая совпадение её identity с payload. */\nexport function parseErrorReportDraft(value: unknown) {\n\tif (!isSerializedInputWithinLimit(value, ERROR_REPORT_PAYLOAD_MAX_BYTES + 16 * 1_024)) return undefined;\n\n\ttry {\n\t\tconst result = errorReportDraftSchema.safeParse(value);\n\t\treturn result.success ? result.data : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Восстанавливает все валидные drafts независимо: одна повреждённая запись не\n * должна уничтожить остальные элементы browser storage.\n */\nexport function parseErrorReportDrafts(value: unknown) {\n\tif (!Array.isArray(value)) return [];\n\treturn value.flatMap((draft) => {\n\t\tconst parsed = parseErrorReportDraft(draft);\n\t\treturn parsed ? [parsed] : [];\n\t});\n}\n","import { uuidv4 } from \"../crypto\";\nimport { getSessionStorageId } from \"../session-storage\";\n\nimport { clearRuntimeErrorReportDeduplication } from \"./runtimeDeduplication\";\nimport { parseErrorReportDrafts } from \"./schema\";\nimport { type ErrorReportDraft } from \"./types\";\n\nconst STORAGE_KEY = `${__APP_ID__}.errorReport.drafts.v2`;\nconst SESSION_STORAGE_KEY = `${__APP_ID__}.errorReport.sessionId.v1`;\nconst MAX_DRAFTS = 10;\n\nlet browserStorageDisabled = false;\nlet browserDrafts: ErrorReportDraft[] | undefined;\nlet memoryDrafts: ErrorReportDraft[] = [];\nlet memorySessionId: string | undefined;\n\n/**\n * До конца текущего browser document переводит capture, drafts и persisted\n * diagnostics в память. Повторный вызов безопасен; capture options и reporter\n * lifecycle не включают storage обратно. При SSR вызов ничего не меняет.\n *\n * Вызывать до первого capture. Уже начатое чтение отменить нельзя, но его\n * поздний результат не попадёт в memory draft. Существующие browser records\n * не удаляются. Явно созданная createErrorReportQueue независима: приложение\n * обязано отдельно исключить её создание и доставку в таком документе.\n */\nexport function disableErrorReportBrowserStorage(): void {\n\tif (typeof window === \"undefined\" || browserStorageDisabled) return;\n\n\tbrowserStorageDisabled = true;\n\t// Снимок обычного режима не становится исходным содержимым memory store.\n\tbrowserDrafts = undefined;\n\tclearRuntimeErrorReportDeduplication();\n}\n\n/** Односторонняя граница проверяется и после await: обратного перехода нет. */\nexport function canUseErrorReportBrowserStorage(): boolean {\n\treturn !browserStorageDisabled;\n}\n\nexport function readErrorReportDrafts(): ErrorReportDraft[] {\n\tif (browserStorageDisabled) return memoryDrafts;\n\tif (browserDrafts === undefined) {\n\t\t// Lazy read позволяет выбрать memory policy даже после импорта subpath.\n\t\tbrowserDrafts = [];\n\t\tif (typeof sessionStorage !== \"undefined\") {\n\t\t\ttry {\n\t\t\t\tconst raw = sessionStorage.getItem(STORAGE_KEY);\n\t\t\t\tbrowserDrafts = parseErrorReportDrafts(raw ? JSON.parse(raw) : []);\n\t\t\t} catch {\n\t\t\t\t// Недоступное или повреждённое storage не ломает диагностику.\n\t\t\t}\n\t\t}\n\t}\n\n\treturn browserDrafts;\n}\n\nexport function saveErrorReportDrafts(nextDrafts: ErrorReportDraft[]): void {\n\tconst boundedDrafts = nextDrafts.slice(-MAX_DRAFTS);\n\tif (browserStorageDisabled) {\n\t\tmemoryDrafts = boundedDrafts;\n\t\treturn;\n\t}\n\n\tbrowserDrafts = boundedDrafts;\n\tif (typeof sessionStorage === \"undefined\") return;\n\n\ttry {\n\t\tsessionStorage.setItem(STORAGE_KEY, JSON.stringify(browserDrafts));\n\t} catch {\n\t\t// Переполнение sessionStorage не должно ломать пользовательский сценарий.\n\t}\n}\n\nexport function getErrorReportSessionId(): string {\n\tif (browserStorageDisabled) {\n\t\tmemorySessionId ??= uuidv4();\n\t\treturn memorySessionId;\n\t}\n\n\treturn getSessionStorageId(SESSION_STORAGE_KEY);\n}\n","import { type PersistedQuery } from \"@tanstack/query-persist-client-core\";\nimport { type MutationKey, type MutationState, type QueryClient, type QueryKey, type QueryState } from \"@tanstack/react-query\";\n\nimport { hashString128 } from \"../crypto\";\nimport { createIndexedDbQueryStorage } from \"../query-client\";\nimport { stableStringify } from \"../utils\";\n\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { createErrorReportDataPreview } from \"./dataPreview\";\nimport { createErrorInfo } from \"./errorInfo\";\nimport { canUseErrorReportBrowserStorage } from \"./errorReportStorage\";\nimport { createDataShape, sanitizeDetail, sanitizeDiagnosticText, sanitizeErrorReportValue } from \"./safeValue\";\nimport {\n\ttype ErrorReportMutationDiagnostics,\n\ttype ErrorReportPersistedQueryDiagnostics,\n\ttype ErrorReportQueryDiagnostics,\n\ttype ErrorReportSafeValue\n} from \"./types\";\n\ntype QueryDiagnosticSource = {\n\tqueryHash: string;\n\tqueryKey: QueryKey;\n\tstate: QueryState<unknown, unknown>;\n\tmeta?: Record<string, unknown>;\n\tgetObserversCount: () => number;\n};\n\ntype MutationDiagnosticSource = {\n\toptions: {\n\t\tmutationKey?: MutationKey;\n\t};\n\tstate: MutationState<unknown, unknown, unknown, unknown>;\n\tmeta?: Record<string, unknown>;\n};\n\nconst MAX_QUERY_DIAGNOSTICS = 40;\nconst MAX_MUTATION_DIAGNOSTICS = 40;\nconst MAX_PERSISTED_QUERY_DIAGNOSTICS = 40;\n\nfunction sanitizeMeta(\n\tmeta: Record<string, unknown> | undefined,\n\tscope: \"mutation-meta\" | \"query-meta\",\n\tsource?: string\n): Record<string, ErrorReportSafeValue> | undefined {\n\treturn sanitizeDetail(meta, { scope, source });\n}\n\nexport function collectQueryDiagnostics(query: QueryDiagnosticSource): ErrorReportQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\tconst queryKey = sanitizeErrorReportValue(query.queryKey, { scope: \"query-key\" }) ?? { type: \"redacted\" };\n\tconst queryHash = captureOptions.valuePolicy === \"verbatim\" ? hashString128(query.queryHash) : hashString128(stableStringify(queryKey));\n\n\treturn {\n\t\tqueryHash,\n\t\tqueryKey,\n\t\tstatus: query.state.status,\n\t\tfetchStatus: query.state.fetchStatus,\n\t\tdataUpdatedAt: query.state.dataUpdatedAt,\n\t\terrorUpdatedAt: query.state.errorUpdatedAt,\n\t\tfailureCount: query.state.fetchFailureCount,\n\t\tisInvalidated: query.state.isInvalidated,\n\t\tobserversCount: query.getObserversCount(),\n\t\tmeta: sanitizeMeta(query.meta, \"query-meta\", queryHash),\n\t\tdataShape: sanitizeErrorReportValue(createDataShape(query.state.data), {\n\t\t\tscope: \"query-data-shape\",\n\t\t\tsource: queryHash\n\t\t}),\n\t\tdataPreview:\n\t\t\tcaptureOptions.valuePolicy === \"verbatim\" && captureOptions.dataPreviewBytes.query > 0 && query.state.data !== undefined\n\t\t\t\t? createErrorReportDataPreview(query.state.data, captureOptions.dataPreviewBytes.query)\n\t\t\t\t: undefined,\n\t\terror: query.state.error ? createErrorInfo(query.state.error) : undefined\n\t};\n}\n\nexport function collectMutationDiagnostics(mutation: MutationDiagnosticSource): ErrorReportMutationDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\tmutationKey: mutation.options.mutationKey\n\t\t\t? sanitizeErrorReportValue(mutation.options.mutationKey, { scope: \"mutation-key\" })\n\t\t\t: undefined,\n\t\tstatus: mutation.state.status,\n\t\tfailureCount: mutation.state.failureCount,\n\t\tsubmittedAt: mutation.state.submittedAt,\n\t\tmeta: sanitizeMeta(mutation.meta, \"mutation-meta\"),\n\t\tvariablesPreview:\n\t\t\tcaptureOptions.valuePolicy === \"verbatim\" &&\n\t\t\tcaptureOptions.dataPreviewBytes.mutation > 0 &&\n\t\t\tmutation.state.variables !== undefined\n\t\t\t\t? createErrorReportDataPreview(mutation.state.variables, captureOptions.dataPreviewBytes.mutation)\n\t\t\t\t: undefined,\n\t\terror: mutation.state.error ? createErrorInfo(mutation.state.error) : undefined\n\t};\n}\n\nexport function collectQueryClientDiagnostics(queryClient: QueryClient) {\n\tconst queries = queryClient.getQueryCache().getAll();\n\tconst mutations = queryClient.getMutationCache().getAll();\n\treturn {\n\t\tqueries: queries.slice(-MAX_QUERY_DIAGNOSTICS).map(collectQueryDiagnostics),\n\t\tmutations: mutations.slice(-MAX_MUTATION_DIAGNOSTICS).map(collectMutationDiagnostics),\n\t\t...(getErrorReportCaptureOptions().valuePolicy === \"verbatim\"\n\t\t\t? {\n\t\t\t\t\tomittedQueries: Math.max(0, queries.length - MAX_QUERY_DIAGNOSTICS) || undefined,\n\t\t\t\t\tomittedMutations: Math.max(0, mutations.length - MAX_MUTATION_DIAGNOSTICS) || undefined\n\t\t\t\t}\n\t\t\t: {})\n\t};\n}\n\nfunction collectPersistedStateDiagnostics(persistedQuery: PersistedQuery): ErrorReportPersistedQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\tconst state = persistedQuery.state;\n\tconst queryKey = sanitizeErrorReportValue(persistedQuery.queryKey, { scope: \"persisted-query-key\" });\n\tconst queryHash =\n\t\tcaptureOptions.valuePolicy === \"verbatim\"\n\t\t\t? hashString128(persistedQuery.queryHash)\n\t\t\t: queryKey\n\t\t\t\t? hashString128(stableStringify(queryKey))\n\t\t\t\t: undefined;\n\n\treturn {\n\t\tbuster: persistedQuery.buster ? sanitizeDiagnosticText(persistedQuery.buster, 512) : undefined,\n\t\tqueryHash,\n\t\tqueryKey,\n\t\tstatus: state.status,\n\t\tfetchStatus: state.fetchStatus,\n\t\tdataUpdatedAt: state.dataUpdatedAt,\n\t\terrorUpdatedAt: state.errorUpdatedAt,\n\t\tfailureCount: state.fetchFailureCount,\n\t\tdataPreview:\n\t\t\tcaptureOptions.valuePolicy === \"verbatim\" && captureOptions.dataPreviewBytes.persistedQuery > 0 && state.data !== undefined\n\t\t\t\t? createErrorReportDataPreview(state.data, captureOptions.dataPreviewBytes.persistedQuery)\n\t\t\t\t: undefined,\n\t\terror: state.error ? createErrorInfo(state.error) : undefined\n\t};\n}\n\n/**\n * Читает IndexedDB persistence. Данные кэша попадают в результат только при\n * явном включении ограниченных previews приложением.\n */\nexport async function collectPersistedQueryDiagnostics(): Promise<ErrorReportPersistedQueryDiagnostics[]> {\n\tif (!canUseErrorReportBrowserStorage()) return [];\n\n\tconst storage = createIndexedDbQueryStorage<PersistedQuery>();\n\tif (!storage?.entries) return [];\n\n\ttry {\n\t\tconst entries = await storage.entries();\n\t\t// Уже начатую IDB operation не отменяем, но после opt-out её результат\n\t\t// больше не является доступным источником диагностики этого документа.\n\t\tif (!canUseErrorReportBrowserStorage()) return [];\n\t\treturn entries\n\t\t\t.slice(-MAX_PERSISTED_QUERY_DIAGNOSTICS)\n\t\t\t.map(([, persistedQuery]) => collectPersistedStateDiagnostics(persistedQuery));\n\t} catch {\n\t\treturn [];\n\t}\n}\n","type ErrorReportEnvironmentOptions = {\n\tisDev?: boolean;\n};\n\n/**\n * Отчеты собираются только в браузере и только вне dev-режима.\n * На серверном рендеринге draft не создается, чтобы не смешивать SSR-ошибки с клиентской диагностикой.\n */\nexport function isErrorReportingEnabled(options: ErrorReportEnvironmentOptions = {}) {\n\tconst isDev = options.isDev ?? __DEV__;\n\n\treturn typeof window !== \"undefined\" && !isDev;\n}\n\nexport function getErrorReportEnvironment() {\n\tconst mode: \"development\" | \"production\" = __DEV__ ? \"development\" : \"production\";\n\n\treturn {\n\t\tmode,\n\t\tbuildId: typeof __APP_BUILD_ID__ === \"string\" ? __APP_BUILD_ID__ : undefined\n\t};\n}\n\nexport function getErrorReportClientEnvironment() {\n\tif (typeof window === \"undefined\") return undefined;\n\n\treturn {\n\t\tuserAgent: window.navigator.userAgent,\n\t\tlanguage: window.navigator.language,\n\t\ttimeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\n\t};\n}\n","import { uuidv4 } from \"../crypto\";\nimport { formatDateAsODataDatetime } from \"../formatters\";\n\nimport { getErrorReportBreadcrumbs } from \"./breadcrumbs\";\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { getErrorReportClientEnvironment, getErrorReportEnvironment, isErrorReportingEnabled } from \"./environment\";\nimport {\n\tcanUseErrorReportBrowserStorage,\n\tgetErrorReportSessionId,\n\treadErrorReportDrafts,\n\tsaveErrorReportDrafts\n} from \"./errorReportStorage\";\nimport { ERROR_REPORT_PAYLOAD_VERSION, limitErrorReportPayload } from \"./payload\";\nimport { sanitizeDetail, sanitizeDiagnosticText, sanitizeErrorReportValue } from \"./safeValue\";\nimport { parseErrorReportDraft } from \"./schema\";\n\nimport type {\n\tErrorReportCategory,\n\tErrorReportDraft,\n\tErrorReportDraftLifecyclePatch,\n\tErrorReportErrorInfo,\n\tErrorReportPayload,\n\tErrorReportSafeValue\n} from \"./types\";\n\nfunction nowUtc() {\n\treturn formatDateAsODataDatetime(new Date());\n}\n\nfunction getLocationSnapshot() {\n\tif (typeof window === \"undefined\") return undefined;\n\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === \"verbatim\";\n\treturn {\n\t\tpathname: window.location.pathname,\n\t\torigin: window.location.origin,\n\t\tsearch: verbatim ? window.location.search : undefined,\n\t\thash: verbatim ? window.location.hash : undefined\n\t};\n}\n\nfunction getViewportSnapshot() {\n\tif (typeof window === \"undefined\") return undefined;\n\n\treturn {\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight,\n\t\tdevicePixelRatio: window.devicePixelRatio\n\t};\n}\n\nfunction sanitizeFailedReason(value: string | undefined) {\n\tif (!value) return undefined;\n\tconst sanitizedValue = sanitizeErrorReportValue(value, { scope: \"draft-failed-reason\", source: \"delivery\" });\n\treturn typeof sanitizedValue === \"string\" ? sanitizedValue : undefined;\n}\n\nexport function getErrorReportDraft(reportId: string) {\n\treturn readErrorReportDrafts().find((draft) => draft.reportId === reportId);\n}\n\nexport function updateErrorReportDraft(reportId: string, patch: ErrorReportDraftLifecyclePatch) {\n\tconst current = getErrorReportDraft(reportId);\n\tif (!current) return undefined;\n\n\tconst next = {\n\t\t...current,\n\t\t...patch,\n\t\tsentUtc: \"sentUtc\" in patch ? (patch.sentUtc ? sanitizeDiagnosticText(patch.sentUtc, 64) : undefined) : current.sentUtc,\n\t\tfailedReason: \"failedReason\" in patch ? sanitizeFailedReason(patch.failedReason) : current.failedReason\n\t};\n\tconst parsed = parseErrorReportDraft(next);\n\tif (!parsed) return undefined;\n\n\tsaveErrorReportDrafts(readErrorReportDrafts().map((draft) => (draft.reportId === reportId ? parsed : draft)));\n\treturn parsed;\n}\n\nexport function getErrorReportDrafts() {\n\treturn readErrorReportDrafts();\n}\n\nexport function captureErrorReportDraft(args: {\n\tcategory: ErrorReportCategory;\n\tsource: string;\n\terror: ErrorReportErrorInfo;\n\tquery?: ErrorReportPayload[\"query\"];\n\tmutation?: ErrorReportPayload[\"mutation\"];\n\tqueryClient?: ErrorReportPayload[\"queryClient\"];\n\tpersistedQueries?: ErrorReportPayload[\"persistedQueries\"];\n\treact?: ErrorReportPayload[\"react\"];\n\tcontext?: Record<string, ErrorReportSafeValue>;\n}) {\n\tif (!isErrorReportingEnabled()) return undefined;\n\n\tconst reportId = uuidv4();\n\tconst sessionId = getErrorReportSessionId();\n\tconst createdUtc = nowUtc();\n\tconst payload = limitErrorReportPayload({\n\t\tpayloadVersion: ERROR_REPORT_PAYLOAD_VERSION,\n\t\tapplication: __APP_ID__,\n\t\treportId,\n\t\tsessionId,\n\t\tcreatedUtc,\n\t\tcategory: args.category,\n\t\tsource: sanitizeDiagnosticText(args.source, 256),\n\t\terror: args.error,\n\t\tenvironment: getErrorReportEnvironment(),\n\t\tclient: getErrorReportClientEnvironment(),\n\t\tlocation: getLocationSnapshot(),\n\t\tviewport: getViewportSnapshot(),\n\t\treact: args.react,\n\t\tquery: args.query,\n\t\tmutation: args.mutation,\n\t\tqueryClient: args.queryClient,\n\t\t// Между завершением diagnostics и capture мог сработать browser opt-out.\n\t\tpersistedQueries: canUseErrorReportBrowserStorage() ? args.persistedQueries : undefined,\n\t\tbreadcrumbs: getErrorReportBreadcrumbs(),\n\t\tcontext: sanitizeDetail(args.context, { scope: \"context\", source: args.source })\n\t} satisfies ErrorReportPayload);\n\tconst draft: ErrorReportDraft = {\n\t\treportId,\n\t\tsessionId,\n\t\tcreatedUtc,\n\t\tcategory: args.category,\n\t\tstatus: \"pending\",\n\t\tpayload\n\t};\n\tconst parsed = parseErrorReportDraft(draft);\n\tif (!parsed) return undefined;\n\n\tsaveErrorReportDrafts([...readErrorReportDrafts(), parsed]);\n\treturn parsed;\n}\n","export type ErrorReportTransportHtmlSummary = {\n\tlength: number;\n\tformCount?: number;\n\tinputNames?: string[];\n\tsample?: string;\n\ttruncated?: boolean;\n};\n\nexport type ErrorReportTransportErrorContext = {\n\tsource: \"fetch.parseResponse\" | \"fetch.buildHttpError\";\n\trequestUrl?: string;\n\tresponseUrl?: string;\n\tmethod?: string;\n\tbaseUrlType?: string;\n\tsapClient?: string | null;\n\tstatus?: number;\n\tstatusText?: string;\n\tcontentType?: string;\n\tredirected?: boolean;\n\tresponseType?: string;\n\thtml?: ErrorReportTransportHtmlSummary;\n};\n\nexport type ErrorReportTransportErrorReporter = (error: Error, context: ErrorReportTransportErrorContext) => void | Promise<void>;\n\nconst DEDUPLICATION_INTERVAL_MS = 60_000;\nconst MAX_RECENT_REPORT_KEYS = 100;\nconst TRANSPORT_REPORT_DELAY_MS = 250;\n\nlet transportErrorReporter: ErrorReportTransportErrorReporter | undefined;\nconst scheduledTransportErrors = new WeakSet<Error>();\nconst suppressedTransportErrors = new WeakSet<Error>();\nconst recentReportKeys = new Map<string, number>();\n\nfunction createReportKey(context: ErrorReportTransportErrorContext) {\n\treturn [context.source, context.method, context.status, context.requestUrl, context.responseUrl].filter(Boolean).join(\"|\");\n}\n\nfunction shouldSkipByRecentKey(context: ErrorReportTransportErrorContext) {\n\tconst now = Date.now();\n\tconst key = createReportKey(context);\n\n\tfor (const [recentKey, timestamp] of recentReportKeys) {\n\t\tif (now - timestamp > DEDUPLICATION_INTERVAL_MS || recentReportKeys.size > MAX_RECENT_REPORT_KEYS) {\n\t\t\trecentReportKeys.delete(recentKey);\n\t\t}\n\t}\n\n\tconst lastReportedAt = recentReportKeys.get(key);\n\tif (lastReportedAt && now - lastReportedAt < DEDUPLICATION_INTERVAL_MS) return true;\n\n\trecentReportKeys.set(key, now);\n\treturn false;\n}\n\n/**\n * Регистрирует приложение как получателя транспортных ошибок.\n * Сам OData transport не знает про QueryClient и UI, поэтому только публикует событие,\n * а app-слой решает, как именно создать и отправить отчет.\n */\nexport function setErrorReportTransportErrorReporter(reporter: ErrorReportTransportErrorReporter | undefined) {\n\ttransportErrorReporter = reporter;\n\trecentReportKeys.clear();\n}\n\nexport function isTransportErrorReportScheduled(error: unknown) {\n\treturn error instanceof Error && scheduledTransportErrors.has(error);\n}\n\nexport function suppressTransportErrorReport(error: unknown) {\n\tif (error instanceof Error) {\n\t\tsuppressedTransportErrors.add(error);\n\t}\n}\n\nexport function reportTransportError(error: Error, context: ErrorReportTransportErrorContext) {\n\tscheduledTransportErrors.add(error);\n\n\t// Даем React Query шанс перехватить эту же ошибку и создать query/mutation-отчет\n\t// с более полезным снимком кеша. Если такого перехвата нет, transport-отчет уйдет сам.\n\tsetTimeout(() => {\n\t\tif (suppressedTransportErrors.has(error)) return;\n\t\tif (!transportErrorReporter) return;\n\t\tif (shouldSkipByRecentKey(context)) return;\n\n\t\ttry {\n\t\t\tconst result = transportErrorReporter(error, context);\n\t\t\tvoid Promise.resolve(result).catch(() => undefined);\n\t\t} catch {\n\t\t\t// Ошибка диагностического hook не должна менять поведение исходного fetch.\n\t\t}\n\t}, TRANSPORT_REPORT_DELAY_MS);\n}\n","import { type Mutation, type Query, type QueryClient } from \"@tanstack/react-query\";\n\nimport { addErrorReportBreadcrumb } from \"./breadcrumbs\";\nimport {\n\tcollectMutationDiagnostics,\n\tcollectPersistedQueryDiagnostics,\n\tcollectQueryClientDiagnostics,\n\tcollectQueryDiagnostics\n} from \"./diagnostics\";\nimport { captureErrorReportDraft } from \"./drafts\";\nimport { createErrorInfo } from \"./errorInfo\";\nimport { coalesceRuntimeErrorReportCapture } from \"./runtimeDeduplication\";\nimport { sanitizeDetail } from \"./safeValue\";\nimport { suppressTransportErrorReport } from \"./transport\";\n\nimport type { ErrorReportMutationContext, ErrorReportQueryContext, ErrorReportRuntimeContext } from \"./types\";\n\nexport async function captureQueryErrorReport(\n\terror: unknown,\n\tquery: Query<unknown, unknown, unknown>,\n\tqueryClient: QueryClient,\n\tcontext?: ErrorReportQueryContext\n) {\n\tsuppressTransportErrorReport(error);\n\tconst source = context?.source ?? \"query\";\n\n\taddErrorReportBreadcrumb({\n\t\ttype: \"query-error\",\n\t\tdetail: sanitizeDetail(\n\t\t\t{\n\t\t\t\tqueryKey: context?.queryKey ?? query.queryKey,\n\t\t\t\t...context?.detail\n\t\t\t},\n\t\t\t{ scope: \"breadcrumb-detail\", source }\n\t\t)\n\t});\n\n\tconst [persistedQueries, queryClientDiagnostics] = await Promise.all([\n\t\tcollectPersistedQueryDiagnostics(),\n\t\tPromise.resolve(collectQueryClientDiagnostics(queryClient))\n\t]);\n\n\treturn captureErrorReportDraft({\n\t\tcategory: \"query\",\n\t\tsource,\n\t\terror: context?.errorInfo ?? createErrorInfo(error),\n\t\tquery: collectQueryDiagnostics(query),\n\t\tqueryClient: queryClientDiagnostics,\n\t\tpersistedQueries,\n\t\tcontext: sanitizeDetail(context?.detail, { scope: \"context\", source })\n\t});\n}\n\nexport async function captureMutationErrorReport(\n\terror: unknown,\n\tmutation: Mutation<unknown, unknown, unknown, unknown>,\n\tqueryClient: QueryClient,\n\tcontext: ErrorReportMutationContext = {}\n) {\n\tsuppressTransportErrorReport(error);\n\tconst source = context.source ?? \"mutation\";\n\n\taddErrorReportBreadcrumb({\n\t\ttype: \"mutation-error\",\n\t\tdetail: sanitizeDetail({ mutationKey: mutation.options.mutationKey, ...context.detail }, { scope: \"breadcrumb-detail\", source })\n\t});\n\n\tconst [persistedQueries, queryClientDiagnostics] = await Promise.all([\n\t\tcollectPersistedQueryDiagnostics(),\n\t\tPromise.resolve(collectQueryClientDiagnostics(queryClient))\n\t]);\n\n\treturn captureErrorReportDraft({\n\t\tcategory: \"mutation\",\n\t\tsource,\n\t\terror: context.errorInfo ?? createErrorInfo(error),\n\t\tmutation: collectMutationDiagnostics(mutation),\n\t\tqueryClient: queryClientDiagnostics,\n\t\tpersistedQueries,\n\t\tcontext: sanitizeDetail(context.detail, { scope: \"context\", source })\n\t});\n}\n\nexport function captureRuntimeErrorReport(error: unknown, context: ErrorReportRuntimeContext = {}, queryClient?: QueryClient) {\n\tconst category = context.category ?? \"runtime\";\n\tconst source = context.source ?? context.category ?? \"runtime\";\n\tconst errorInfo = context.errorInfo ?? createErrorInfo(error);\n\tconst detail = sanitizeDetail(context.detail, { scope: \"context\", source });\n\n\tconst captureDraft = async () => {\n\t\taddErrorReportBreadcrumb({\n\t\t\ttype: \"runtime-error\",\n\t\t\tdetail: sanitizeDetail({ category, source, ...context.detail }, { scope: \"breadcrumb-detail\", source })\n\t\t});\n\n\t\tconst [persistedQueries, queryClientDiagnostics] = queryClient\n\t\t\t? await Promise.all([collectPersistedQueryDiagnostics(), Promise.resolve(collectQueryClientDiagnostics(queryClient))])\n\t\t\t: [undefined, undefined];\n\n\t\treturn captureErrorReportDraft({\n\t\t\tcategory,\n\t\t\tsource,\n\t\t\terror: errorInfo,\n\t\t\treact: context.componentStack ? { componentStack: context.componentStack } : undefined,\n\t\t\tqueryClient: queryClientDiagnostics,\n\t\t\tpersistedQueries,\n\t\t\tcontext: detail\n\t\t});\n\t};\n\n\t/**\n\t * Error report draft создаётся только в браузере. Прямой вызов capture\n\t * сохраняет прежнее SSR-поведение без клиентского TTL-таймера, который\n\t * иначе удерживал бы Node-процесс после no-op результата.\n\t */\n\tif (typeof window === \"undefined\") {\n\t\treturn captureDraft();\n\t}\n\n\treturn coalesceRuntimeErrorReportCapture(\n\t\t{\n\t\t\tcategory,\n\t\t\tsource,\n\t\t\terror: errorInfo,\n\t\t\tpathname: window.location.pathname,\n\t\t\tscope: {\n\t\t\t\tcomponentStack: context.componentStack,\n\t\t\t\tdetail\n\t\t\t}\n\t\t},\n\t\tcaptureDraft\n\t);\n}\n","import { type ErrorReportPayload } from \"./types\";\n\nexport const ERROR_REPORT_QUEUE_VERSION = 1 as const;\nexport const ERROR_REPORT_QUEUE_MAX_ITEMS = 50;\nexport const ERROR_REPORT_QUEUE_TTL_MS = 7 * 24 * 60 * 60 * 1_000;\nexport const ERROR_REPORT_QUEUE_LEASE_MS = 30 * 1_000;\n\nexport type ErrorReportQueueFailureKind = \"http\" | \"network\" | \"timeout\" | \"unknown\";\n\nexport type ErrorReportQueueRecord = {\n\treadonly queueVersion: typeof ERROR_REPORT_QUEUE_VERSION;\n\treadonly reportId: string;\n\treadonly enqueuedUtc: string;\n\treadonly expiresUtc: string;\n\treadonly nextAttemptUtc: string;\n\treadonly attemptCount: number;\n\treadonly payload: ErrorReportPayload;\n\treadonly lease?: {\n\t\treadonly ownerId: string;\n\t\treadonly expiresUtc: string;\n\t};\n\treadonly lastFailure?: {\n\t\treadonly utc: string;\n\t\treadonly kind: ErrorReportQueueFailureKind;\n\t\treadonly httpStatus?: number;\n\t};\n};\n\nexport type ErrorReportQueueEnqueueResult =\n\t| { readonly status: \"enqueued\"; readonly evictedReportId?: string }\n\t| { readonly status: \"duplicate\" }\n\t| { readonly status: \"invalid-payload\" }\n\t| { readonly status: \"capacity-exceeded\" };\n\nexport type ErrorReportQueueLeaseOptions = {\n\treadonly ownerId: string;\n\treadonly now?: Date;\n\treadonly leaseDurationMs?: number;\n};\n\nexport type ErrorReportQueueTransitionResult = \"updated\" | \"missing\" | \"lease-mismatch\";\n\nexport type ErrorReportQueueRetry = {\n\treadonly nextAttemptUtc: string;\n\treadonly failure: {\n\t\treadonly utc: string;\n\t\treadonly kind: ErrorReportQueueFailureKind;\n\t\treadonly httpStatus?: number;\n\t};\n};\n\n/**\n * Durable queue contract отделяет delivery policy от конкретной IndexedDB\n * реализации. Все переходы, зависящие от lease owner, выполняются атомарно.\n */\nexport type ErrorReportQueue = {\n\treadonly enqueue: (payload: ErrorReportPayload, now?: Date) => Promise<ErrorReportQueueEnqueueResult>;\n\treadonly leaseNext: (options: ErrorReportQueueLeaseOptions) => Promise<ErrorReportQueueRecord | undefined>;\n\treadonly acknowledge: (reportId: string, ownerId: string) => Promise<ErrorReportQueueTransitionResult>;\n\treadonly reschedule: (reportId: string, ownerId: string, retry: ErrorReportQueueRetry) => Promise<ErrorReportQueueTransitionResult>;\n\treadonly discard: (reportId: string, ownerId: string) => Promise<ErrorReportQueueTransitionResult>;\n\treadonly getRecords: (now?: Date) => Promise<readonly ErrorReportQueueRecord[]>;\n\treadonly getNextWakeUtc: (now?: Date) => Promise<string | undefined>;\n};\n","import {\n\tERROR_REPORT_QUEUE_MAX_ITEMS,\n\tERROR_REPORT_QUEUE_VERSION,\n\ttype ErrorReportQueueFailureKind,\n\ttype ErrorReportQueueRecord\n} from \"./queueContract\";\nimport { parseErrorReportPayload } from \"./schema\";\n\nconst FAILURE_KINDS = new Set<ErrorReportQueueFailureKind>([\"http\", \"network\", \"timeout\", \"unknown\"]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isUtc(value: unknown): value is string {\n\treturn typeof value === \"string\" && value.length <= 64 && Number.isFinite(Date.parse(value));\n}\n\nfunction isSafeCount(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction parseFailure(value: unknown): ErrorReportQueueRecord[\"lastFailure\"] {\n\tif (value === undefined) return undefined;\n\tif (!isRecord(value) || !isUtc(value.utc) || typeof value.kind !== \"string\") return undefined;\n\tif (!FAILURE_KINDS.has(value.kind as ErrorReportQueueFailureKind)) return undefined;\n\tif (\n\t\tvalue.httpStatus !== undefined &&\n\t\t(typeof value.httpStatus !== \"number\" || !Number.isInteger(value.httpStatus) || value.httpStatus < 100 || value.httpStatus > 599)\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tutc: value.utc,\n\t\tkind: value.kind as ErrorReportQueueFailureKind,\n\t\thttpStatus: value.httpStatus as number | undefined\n\t};\n}\n\nfunction parseLease(value: unknown): ErrorReportQueueRecord[\"lease\"] {\n\tif (value === undefined) return undefined;\n\tif (!isRecord(value) || typeof value.ownerId !== \"string\" || value.ownerId.length === 0 || value.ownerId.length > 128) {\n\t\treturn undefined;\n\t}\n\tif (!isUtc(value.expiresUtc)) return undefined;\n\n\treturn { ownerId: value.ownerId, expiresUtc: value.expiresUtc };\n}\n\n/**\n * Queue parser не угадывает прежние storage-формы. Повреждённая или будущая\n * запись отбрасывается отдельно, не уничтожая соседние валидные отчёты.\n */\nexport function parseErrorReportQueueRecord(value: unknown): ErrorReportQueueRecord | undefined {\n\tif (!isRecord(value) || value.queueVersion !== ERROR_REPORT_QUEUE_VERSION) return undefined;\n\tif (typeof value.reportId !== \"string\" || !isUtc(value.enqueuedUtc) || !isUtc(value.expiresUtc)) return undefined;\n\tif (!isUtc(value.nextAttemptUtc) || !isSafeCount(value.attemptCount)) return undefined;\n\n\tconst payload = parseErrorReportPayload(value.payload);\n\tif (!payload || payload.reportId !== value.reportId) return undefined;\n\n\tconst lease = parseLease(value.lease);\n\tif (value.lease !== undefined && !lease) return undefined;\n\tconst lastFailure = parseFailure(value.lastFailure);\n\tif (value.lastFailure !== undefined && !lastFailure) return undefined;\n\n\treturn {\n\t\tqueueVersion: ERROR_REPORT_QUEUE_VERSION,\n\t\treportId: value.reportId,\n\t\tenqueuedUtc: value.enqueuedUtc,\n\t\texpiresUtc: value.expiresUtc,\n\t\tnextAttemptUtc: value.nextAttemptUtc,\n\t\tattemptCount: value.attemptCount,\n\t\tpayload,\n\t\tlease,\n\t\tlastFailure\n\t};\n}\n\n/** Возвращает bounded текущую очередь без истёкших и повторяющихся ID. */\nexport function normalizeErrorReportQueueRecords(value: unknown, nowMs: number): ErrorReportQueueRecord[] {\n\tif (!Array.isArray(value)) return [];\n\n\tconst reportIds = new Set<string>();\n\tconst records: ErrorReportQueueRecord[] = [];\n\tfor (const valueRecord of value) {\n\t\tconst record = parseErrorReportQueueRecord(valueRecord);\n\t\tif (!record || Date.parse(record.expiresUtc) <= nowMs || reportIds.has(record.reportId)) continue;\n\n\t\treportIds.add(record.reportId);\n\t\trecords.push(record);\n\t\tif (records.length === ERROR_REPORT_QUEUE_MAX_ITEMS) break;\n\t}\n\n\treturn records;\n}\n","import { createIndexedDbQueryStorage, type IndexedDbQueryStorage } from \"../query-client\";\n\nimport {\n\tERROR_REPORT_QUEUE_LEASE_MS,\n\tERROR_REPORT_QUEUE_MAX_ITEMS,\n\tERROR_REPORT_QUEUE_TTL_MS,\n\tERROR_REPORT_QUEUE_VERSION,\n\ttype ErrorReportQueue,\n\ttype ErrorReportQueueEnqueueResult,\n\ttype ErrorReportQueueRecord,\n\ttype ErrorReportQueueTransitionResult\n} from \"./queueContract\";\nimport { normalizeErrorReportQueueRecords } from \"./queueRecord\";\nimport { parseErrorReportPayload } from \"./schema\";\nimport { type ErrorReportPayload } from \"./types\";\n\nconst QUEUE_STORAGE_KEY = \"queue.v1\";\nconst QUEUE_STORE_NAME = \"records\";\n\nexport type CreateErrorReportQueueOptions = {\n\treadonly dbName?: string;\n\treadonly indexedDB?: IDBFactory;\n\t/** Тестовая/альтернативная storage boundary; browser-приложения обычно её не задают. */\n\treadonly storage?: Pick<IndexedDbQueryStorage<unknown>, \"getItem\" | \"updateItem\">;\n};\n\nfunction toUtc(value: number) {\n\treturn new Date(value).toISOString();\n}\n\nfunction normalizeOwnerId(value: string) {\n\tconst ownerId = value.trim();\n\tif (ownerId.length === 0 || ownerId.length > 128) {\n\t\tthrow new Error(\"Error report lease owner должен содержать от 1 до 128 символов\");\n\t}\n\treturn ownerId;\n}\n\nfunction compareQueueOrder(left: ErrorReportQueueRecord, right: ErrorReportQueueRecord) {\n\treturn (\n\t\tDate.parse(left.nextAttemptUtc) - Date.parse(right.nextAttemptUtc) || Date.parse(left.enqueuedUtc) - Date.parse(right.enqueuedUtc)\n\t);\n}\n\nfunction resolveTransition(\n\trecords: ErrorReportQueueRecord[],\n\treportId: string,\n\townerId: string\n): { readonly index: number; readonly result: ErrorReportQueueTransitionResult } {\n\tconst index = records.findIndex((record) => record.reportId === reportId);\n\tif (index < 0) return { index, result: \"missing\" };\n\tif (records[index]?.lease?.ownerId !== ownerId) return { index, result: \"lease-mismatch\" };\n\treturn { index, result: \"updated\" };\n}\n\n/**\n * Создаёт IndexedDB-backed очередь. Одна запись-envelope намеренно хранит не\n * более 50 payload: существующий atomic update primitive тогда сериализует\n * выбор lease между вкладками без дополнительного локального storage слоя.\n */\nexport function createErrorReportQueue(options: CreateErrorReportQueueOptions = {}): ErrorReportQueue | undefined {\n\tconst storage =\n\t\toptions.storage ??\n\t\tcreateIndexedDbQueryStorage<unknown>({\n\t\t\tdbName: options.dbName ?? `${__APP_ID__}.error-report.queue.v1`,\n\t\t\tstoreName: QUEUE_STORE_NAME,\n\t\t\tindexedDB: options.indexedDB\n\t\t});\n\tif (!storage) return undefined;\n\tconst queueStorage = storage;\n\n\tfunction update<TResult>(\n\t\tnowMs: number,\n\t\toperation: (records: ErrorReportQueueRecord[]) => { readonly records: ErrorReportQueueRecord[]; readonly result: TResult }\n\t) {\n\t\treturn queueStorage.updateItem(QUEUE_STORAGE_KEY, (storedValue) => {\n\t\t\tconst decision = operation(normalizeErrorReportQueueRecords(storedValue, nowMs));\n\t\t\treturn { action: \"set\" as const, value: decision.records, result: decision.result };\n\t\t});\n\t}\n\n\treturn {\n\t\tenqueue: async (payload: ErrorReportPayload, now = new Date()) => {\n\t\t\tconst parsedPayload = parseErrorReportPayload(payload);\n\t\t\tif (!parsedPayload) return { status: \"invalid-payload\" as const };\n\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs)) return { status: \"invalid-payload\" as const };\n\n\t\t\treturn update<ErrorReportQueueEnqueueResult>(nowMs, (records) => {\n\t\t\t\tif (records.some((record) => record.reportId === parsedPayload.reportId)) {\n\t\t\t\t\treturn { records, result: { status: \"duplicate\" as const } };\n\t\t\t\t}\n\n\t\t\t\tlet evictedReportId: string | undefined;\n\t\t\t\tif (records.length >= ERROR_REPORT_QUEUE_MAX_ITEMS) {\n\t\t\t\t\tconst evictedIndex = records\n\t\t\t\t\t\t.map((record, index) => ({ record, index }))\n\t\t\t\t\t\t.filter(({ record }) => record.lease === undefined)\n\t\t\t\t\t\t.sort((left, right) => Date.parse(left.record.enqueuedUtc) - Date.parse(right.record.enqueuedUtc))[0]?.index;\n\n\t\t\t\t\tif (evictedIndex === undefined) {\n\t\t\t\t\t\treturn { records, result: { status: \"capacity-exceeded\" as const } };\n\t\t\t\t\t}\n\n\t\t\t\t\tevictedReportId = records[evictedIndex]?.reportId;\n\t\t\t\t\trecords.splice(evictedIndex, 1);\n\t\t\t\t}\n\n\t\t\t\tconst nowUtc = toUtc(nowMs);\n\t\t\t\trecords.push({\n\t\t\t\t\tqueueVersion: ERROR_REPORT_QUEUE_VERSION,\n\t\t\t\t\treportId: parsedPayload.reportId,\n\t\t\t\t\tenqueuedUtc: nowUtc,\n\t\t\t\t\texpiresUtc: toUtc(nowMs + ERROR_REPORT_QUEUE_TTL_MS),\n\t\t\t\t\tnextAttemptUtc: nowUtc,\n\t\t\t\t\tattemptCount: 0,\n\t\t\t\t\tpayload: parsedPayload\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\trecords,\n\t\t\t\t\tresult: evictedReportId ? { status: \"enqueued\" as const, evictedReportId } : { status: \"enqueued\" as const }\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tleaseNext: async ({ ownerId: inputOwnerId, now = new Date(), leaseDurationMs = ERROR_REPORT_QUEUE_LEASE_MS }) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs) || !Number.isFinite(leaseDurationMs) || leaseDurationMs <= 0) {\n\t\t\t\tthrow new Error(\"Error report lease требует валидное время и положительную длительность\");\n\t\t\t}\n\n\t\t\treturn update(nowMs, (records) => {\n\t\t\t\tconst record = records\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\t\tDate.parse(candidate.nextAttemptUtc) <= nowMs &&\n\t\t\t\t\t\t\t(candidate.lease === undefined || Date.parse(candidate.lease.expiresUtc) <= nowMs)\n\t\t\t\t\t)\n\t\t\t\t\t.sort(compareQueueOrder)[0];\n\t\t\t\tif (!record) return { records, result: undefined };\n\n\t\t\t\tconst leasedRecord: ErrorReportQueueRecord = {\n\t\t\t\t\t...record,\n\t\t\t\t\tattemptCount: record.attemptCount + 1,\n\t\t\t\t\tlease: { ownerId, expiresUtc: toUtc(nowMs + leaseDurationMs) }\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\trecords: records.map((candidate) => (candidate.reportId === record.reportId ? leasedRecord : candidate)),\n\t\t\t\t\tresult: leasedRecord\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tacknowledge: async (reportId, inputOwnerId) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\treturn update(Date.now(), (records) => {\n\t\t\t\tconst transition = resolveTransition(records, reportId, ownerId);\n\t\t\t\tif (transition.result !== \"updated\") return { records, result: transition.result };\n\t\t\t\trecords.splice(transition.index, 1);\n\t\t\t\treturn { records, result: \"updated\" as const };\n\t\t\t});\n\t\t},\n\t\treschedule: async (reportId, inputOwnerId, retry) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\tconst nextAttemptMs = Date.parse(retry.nextAttemptUtc);\n\t\t\tconst failureUtcMs = Date.parse(retry.failure.utc);\n\t\t\tif (!Number.isFinite(nextAttemptMs) || !Number.isFinite(failureUtcMs)) {\n\t\t\t\tthrow new Error(\"Error report retry требует валидные UTC timestamps\");\n\t\t\t}\n\n\t\t\treturn update(failureUtcMs, (records) => {\n\t\t\t\tconst transition = resolveTransition(records, reportId, ownerId);\n\t\t\t\tif (transition.result !== \"updated\") return { records, result: transition.result };\n\t\t\t\tconst record = records[transition.index];\n\t\t\t\tif (!record) return { records, result: \"missing\" as const };\n\t\t\t\trecords[transition.index] = {\n\t\t\t\t\t...record,\n\t\t\t\t\tnextAttemptUtc: retry.nextAttemptUtc,\n\t\t\t\t\tlease: undefined,\n\t\t\t\t\tlastFailure: retry.failure\n\t\t\t\t};\n\t\t\t\treturn { records, result: \"updated\" as const };\n\t\t\t});\n\t\t},\n\t\tdiscard: async (reportId, inputOwnerId) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\treturn update(Date.now(), (records) => {\n\t\t\t\tconst transition = resolveTransition(records, reportId, ownerId);\n\t\t\t\tif (transition.result !== \"updated\") return { records, result: transition.result };\n\t\t\t\trecords.splice(transition.index, 1);\n\t\t\t\treturn { records, result: \"updated\" as const };\n\t\t\t});\n\t\t},\n\t\tgetRecords: async (now = new Date()) => {\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs)) return [];\n\t\t\tconst storedValue = await queueStorage.getItem(QUEUE_STORAGE_KEY);\n\t\t\treturn normalizeErrorReportQueueRecords(storedValue, nowMs).sort(compareQueueOrder);\n\t\t},\n\t\tgetNextWakeUtc: async (now = new Date()) => {\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs)) return undefined;\n\t\t\tconst records = normalizeErrorReportQueueRecords(await queueStorage.getItem(QUEUE_STORAGE_KEY), nowMs);\n\t\t\tconst nextWakeMs = records.reduce<number | undefined>((current, record) => {\n\t\t\t\tconst recordWakeMs = Math.max(Date.parse(record.nextAttemptUtc), record.lease ? Date.parse(record.lease.expiresUtc) : 0);\n\t\t\t\treturn current === undefined || recordWakeMs < current ? recordWakeMs : current;\n\t\t\t}, undefined);\n\t\t\treturn nextWakeMs === undefined ? undefined : toUtc(nextWakeMs);\n\t\t}\n\t};\n}\n","import { clearRuntimeErrorReportDeduplication } from \"./runtimeDeduplication\";\n\nimport type { ErrorReportRuntimeContext } from \"./types\";\n\nexport type ErrorReportRuntimeErrorReporter = (error: unknown, context: ErrorReportRuntimeContext) => void | Promise<void>;\n\nlet runtimeErrorReporter: ErrorReportRuntimeErrorReporter | undefined;\n\n/**\n * Регистрирует app-слой как получателя ручных runtime-ошибок.\n * Shared-код может вызвать reportRuntimeError без знания о QueryClient, UI и режиме доставки.\n */\nexport function setErrorReportRuntimeErrorReporter(reporter: ErrorReportRuntimeErrorReporter | undefined) {\n\truntimeErrorReporter = reporter;\n\tclearRuntimeErrorReportDeduplication();\n}\n\n/**\n * Ручная отправка runtime-ошибки из try/catch или другого кода вне React-компонента.\n * Функция не бросает исключений: диагностический отчет не должен ломать основной сценарий.\n *\n * @example\n *\n * try {\n * // ...\n * } catch (error) {\n * reportRuntimeError(error, {\n * detail: {\n * source: \"s3-download\",\n * action: \"download-from-s3\"\n * }\n * });\n * }\n */\nexport async function reportRuntimeError(error: unknown, context: ErrorReportRuntimeContext = {}) {\n\tif (!runtimeErrorReporter) return;\n\n\ttry {\n\t\tawait runtimeErrorReporter(error, context);\n\t} catch {\n\t\t// Ошибка диагностического hook не должна менять поведение пользовательского кода.\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/error-report/capturePolicyConstants.ts","../../src/error-report/errorReportCaptureLimits.ts","../../src/error-report/captureOptions.ts","../../src/error-report/errorReportContractConstants.ts","../../src/error-report/safeValueMarkerConstants.ts","../../src/error-report/safeValue.ts","../../src/error-report/breadcrumbs.ts","../../src/error-report/dataPreview.ts","../../src/error-report/payload.ts","../../src/error-report/errorInfo.ts","../../src/error-report/runtimeDeduplication.ts","../../src/error-report/schema.ts","../../src/error-report/errorReportStorage.ts","../../src/error-report/diagnostics.ts","../../src/error-report/environment.ts","../../src/error-report/drafts.ts","../../src/error-report/transport.ts","../../src/error-report/capture.ts","../../src/error-report/queueContract.ts","../../src/error-report/queueResultConstants.ts","../../src/error-report/queueRecord.ts","../../src/error-report/queue.ts","../../src/error-report/runtime.ts"],"sourcesContent":["/** Политика значения разделяется сбором, очисткой и повторной нормализацией payload. */\nexport const ERROR_REPORT_VALUE_POLICY_REDACTED = \"redacted\";\nexport const ERROR_REPORT_VALUE_POLICY_VERBATIM = \"verbatim\";\n","/** Пределы capture-контракта общие для producers, повторной нормализации и runtime schema. */\nexport const ERROR_REPORT_SAFE_STRING_MAX_LENGTH = 8_192;\nexport const ERROR_REPORT_SAFE_ARRAY_MAX_ITEMS = 20;\nexport const ERROR_REPORT_SAFE_OBJECT_MAX_KEYS = 40;\nexport const ERROR_REPORT_DATA_PREVIEW_MAX_BYTES = 16_384;\nexport const ERROR_REPORT_ERROR_NAME_MAX_LENGTH = 256;\nexport const ERROR_REPORT_ERROR_CODE_MAX_LENGTH = 128;\nexport const ERROR_REPORT_UTC_MAX_LENGTH = 64;\nexport const ERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH = 512;\nexport const ERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH = 128;\nexport const ERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH = 128;\nexport const ERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH = 2_048;\nexport const ERROR_REPORT_QUERY_HASH_MAX_LENGTH = 512;\nexport const ERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH = 512;\nexport const ERROR_REPORT_APPLICATION_MAX_LENGTH = 128;\nexport const ERROR_REPORT_SOURCE_MAX_LENGTH = 256;\nexport const ERROR_REPORT_BUILD_ID_MAX_LENGTH = 128;\nexport const ERROR_REPORT_LANGUAGE_MAX_LENGTH = 128;\nexport const ERROR_REPORT_TIME_ZONE_MAX_LENGTH = 128;\nexport const ERROR_REPORT_LOCATION_MAX_LENGTH = 2_048;\nexport const ERROR_REPORT_COMPONENT_STACK_MAX_BYTES = 32_768;\nexport const ERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS = 40;\nexport const ERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS = 40;\nexport const ERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS = 40;\nexport const ERROR_REPORT_BREADCRUMBS_MAX_ITEMS = 80;\n","import { ERROR_REPORT_VALUE_POLICY_REDACTED, type ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport { ERROR_REPORT_DATA_PREVIEW_MAX_BYTES } from \"./errorReportCaptureLimits\";\n/**\n * Политика сбора задаётся приложением на время жизни его error-report lifecycle.\n * По умолчанию прежняя очистка остаётся активной для существующих потребителей.\n */\nexport type ErrorReportCaptureOptions = {\n\tvaluePolicy?: typeof ERROR_REPORT_VALUE_POLICY_REDACTED | typeof ERROR_REPORT_VALUE_POLICY_VERBATIM;\n\tdataPreviewBytes?: {\n\t\tquery?: number;\n\t\tpersistedQuery?: number;\n\t\tmutation?: number;\n\t};\n};\n\ntype ResolvedErrorReportCaptureOptions = {\n\tvaluePolicy: typeof ERROR_REPORT_VALUE_POLICY_REDACTED | typeof ERROR_REPORT_VALUE_POLICY_VERBATIM;\n\tdataPreviewBytes: {\n\t\tquery: number;\n\t\tpersistedQuery: number;\n\t\tmutation: number;\n\t};\n};\n\nconst DEFAULT_OPTIONS: ResolvedErrorReportCaptureOptions = {\n\tvaluePolicy: ERROR_REPORT_VALUE_POLICY_REDACTED,\n\tdataPreviewBytes: { query: 0, persistedQuery: 0, mutation: 0 }\n};\n\nlet captureOptions = DEFAULT_OPTIONS;\n\nfunction boundedPreviewBytes(value: number | undefined) {\n\tif (value === undefined || !Number.isFinite(value)) return 0;\n\treturn Math.max(0, Math.min(ERROR_REPORT_DATA_PREVIEW_MAX_BYTES, Math.trunc(value)));\n}\n\n/** `undefined` возвращает policy пакета и отключает сбор данных кэша. */\nexport function setErrorReportCaptureOptions(options: ErrorReportCaptureOptions | undefined) {\n\tcaptureOptions = options\n\t\t? {\n\t\t\t\tvaluePolicy: options.valuePolicy ?? DEFAULT_OPTIONS.valuePolicy,\n\t\t\t\tdataPreviewBytes: {\n\t\t\t\t\tquery: boundedPreviewBytes(options.dataPreviewBytes?.query),\n\t\t\t\t\tpersistedQuery: boundedPreviewBytes(options.dataPreviewBytes?.persistedQuery),\n\t\t\t\t\tmutation: boundedPreviewBytes(options.dataPreviewBytes?.mutation)\n\t\t\t\t}\n\t\t\t}\n\t\t: DEFAULT_OPTIONS;\n}\n\n/** Внутренний снимок настроек на момент сбора отдельной секции. */\nexport function getErrorReportCaptureOptions(): Readonly<ResolvedErrorReportCaptureOptions> {\n\treturn captureOptions;\n}\n","/** Значения capture-контракта общие для producers, runtime schema и публичных типов. */\nexport const ERROR_REPORT_CATEGORY_QUERY = \"query\";\nexport const ERROR_REPORT_CATEGORY_MUTATION = \"mutation\";\nexport const ERROR_REPORT_CATEGORY_RUNTIME = \"runtime\";\nexport const ERROR_REPORT_CATEGORY_REACT = \"react\";\n\n/** Fallback source не связывается с категорией: caller может задавать их независимо. */\nexport const ERROR_REPORT_SOURCE_MUTATION = \"mutation\";\n\nexport const ERROR_REPORT_STATUS_PENDING = \"pending\";\nexport const ERROR_REPORT_STATUS_SENDING = \"sending\";\nexport const ERROR_REPORT_STATUS_SENT = \"sent\";\nexport const ERROR_REPORT_STATUS_FAILED = \"failed\";\n\nexport const ERROR_REPORT_BREADCRUMB_ROUTE = \"route\";\nexport const ERROR_REPORT_BREADCRUMB_CLICK = \"click\";\nexport const ERROR_REPORT_BREADCRUMB_VISIBILITY = \"visibility\";\nexport const ERROR_REPORT_BREADCRUMB_QUERY_ERROR = \"query-error\";\nexport const ERROR_REPORT_BREADCRUMB_MUTATION_ERROR = \"mutation-error\";\nexport const ERROR_REPORT_BREADCRUMB_RUNTIME_ERROR = \"runtime-error\";\n\nexport const ERROR_REPORT_MODE_DEVELOPMENT = \"development\";\nexport const ERROR_REPORT_MODE_PRODUCTION = \"production\";\n\nexport const ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL = \"breadcrumb-detail\";\nexport const ERROR_REPORT_SCOPE_CONTEXT = \"context\";\nexport const ERROR_REPORT_SCOPE_DRAFT_FAILED_REASON = \"draft-failed-reason\";\nexport const ERROR_REPORT_SCOPE_ERROR_MESSAGE = \"error-message\";\nexport const ERROR_REPORT_SCOPE_MUTATION_KEY = \"mutation-key\";\nexport const ERROR_REPORT_SCOPE_MUTATION_META = \"mutation-meta\";\nexport const ERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY = \"persisted-query-key\";\nexport const ERROR_REPORT_SCOPE_QUERY_DATA_SHAPE = \"query-data-shape\";\nexport const ERROR_REPORT_SCOPE_QUERY_KEY = \"query-key\";\nexport const ERROR_REPORT_SCOPE_QUERY_META = \"query-meta\";\nexport const ERROR_REPORT_SCOPE_STACK_TRACE = \"stack-trace\";\n\nexport const ERROR_REPORT_TRUNCATION_PAYLOAD_SIZE = \"payload-size\";\n","/** Маркеры JSON-описаний общие для очищенных значений, preview и fallback payload. */\nexport const SAFE_VALUE_TYPE_TRUNCATED = \"truncated\";\nexport const SAFE_VALUE_TYPE_NON_FINITE_NUMBER = \"non-finite-number\";\nexport const SAFE_VALUE_TYPE_UNDEFINED = \"undefined\";\nexport const SAFE_VALUE_TYPE_FUNCTION = \"function\";\nexport const SAFE_VALUE_TYPE_SYMBOL = \"symbol\";\nexport const SAFE_VALUE_TYPE_INVALID_DATE = \"invalid-date\";\nexport const SAFE_VALUE_TYPE_UNKNOWN = \"unknown\";\nexport const SAFE_VALUE_TYPE_CIRCULAR = \"circular\";\nexport const SAFE_VALUE_TYPE_UNREADABLE = \"unreadable\";\nexport const SAFE_VALUE_TYPE_REDACTED = \"redacted\";\n\nexport const REDACTED_VALUE = \"[REDACTED]\";\n\n/** Диапазон старшего surrogate защищает границу обрезанного UTF-16 текста. */\nexport const HIGH_SURROGATE_FIRST = 0xd800;\nexport const HIGH_SURROGATE_LAST = 0xdbff;\n","import { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport {\n\tERROR_REPORT_SAFE_STRING_MAX_LENGTH,\n\tERROR_REPORT_SAFE_ARRAY_MAX_ITEMS,\n\tERROR_REPORT_SAFE_OBJECT_MAX_KEYS\n} from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_SCOPE_QUERY_KEY,\n\tERROR_REPORT_SCOPE_MUTATION_KEY,\n\tERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY,\n\tERROR_REPORT_SCOPE_CONTEXT\n} from \"./errorReportContractConstants\";\nimport {\n\tREDACTED_VALUE,\n\tHIGH_SURROGATE_FIRST,\n\tHIGH_SURROGATE_LAST,\n\tSAFE_VALUE_TYPE_TRUNCATED,\n\tSAFE_VALUE_TYPE_NON_FINITE_NUMBER,\n\tSAFE_VALUE_TYPE_UNDEFINED,\n\tSAFE_VALUE_TYPE_INVALID_DATE,\n\tSAFE_VALUE_TYPE_CIRCULAR,\n\tSAFE_VALUE_TYPE_UNREADABLE,\n\tSAFE_VALUE_TYPE_FUNCTION,\n\tSAFE_VALUE_TYPE_SYMBOL,\n\tSAFE_VALUE_TYPE_UNKNOWN\n} from \"./safeValueMarkerConstants\";\n\nimport type { ErrorReportSafeValue, ErrorReportSanitizationContext, ErrorReportSanitizer } from \"./types\";\n\nconst MAX_DEPTH = 4;\nconst MAX_DIAGNOSTIC_STRING_LENGTH = 4_096;\nconst MAX_ARRAY_SHAPE_ITEMS = 3;\nconst RELATIVE_URL_ORIGIN = \"https://error-report.invalid\";\nconst TRUNCATED_TEXT_MARKER = \"[TRUNCATED]\";\nconst SENSITIVE_KEY_PARTS = [\n\t\"apikey\",\n\t\"authorization\",\n\t\"cookie\",\n\t\"csrf\",\n\t\"password\",\n\t\"passwd\",\n\t\"refreshtoken\",\n\t\"secret\",\n\t\"sessiontoken\",\n\t\"token\"\n];\nconst URL_KEY_SUFFIX = \"url\";\n\nlet errorReportSanitizer: ErrorReportSanitizer | undefined;\n\nfunction normalizeKey(key: string) {\n\treturn key.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction isSensitiveKey(key: string) {\n\tconst normalizedKey = normalizeKey(key);\n\treturn SENSITIVE_KEY_PARTS.some((part) => normalizedKey.includes(part));\n}\n\nfunction isUrlKey(key: string) {\n\treturn normalizeKey(key).endsWith(URL_KEY_SUFFIX);\n}\n\nfunction looksLikeUrlWithPrivateParts(value: string) {\n\treturn /^(?:https?:\\/\\/|\\/)[^\\s]*[?#]/i.test(value);\n}\n\nfunction stripUrlSearchAndHash(value: string) {\n\ttry {\n\t\tconst parsed = new URL(value, RELATIVE_URL_ORIGIN);\n\t\tconst pathname = parsed.pathname;\n\t\treturn parsed.origin === RELATIVE_URL_ORIGIN ? pathname : `${parsed.origin}${pathname}`;\n\t} catch {\n\t\treturn value.split(/[?#]/, 1)[0] ?? value;\n\t}\n}\n\n/**\n * Удаляет наиболее узнаваемые секреты и email из свободного диагностического\n * текста. Это страховочная сетка; предметные персональные данные приложение\n * обязано исключить своим allow-list sanitizer.\n */\nexport function sanitizeDiagnosticText(value: string, maxLength = MAX_DIAGNOSTIC_STRING_LENGTH) {\n\tif (getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM) {\n\t\tif (value.length <= maxLength) return value;\n\t\tconst marker = `… [TRUNCATED: ${value.length} characters total]`;\n\t\tif (marker.length > maxLength) return TRUNCATED_TEXT_MARKER.slice(0, Math.max(0, maxLength));\n\t\tconst prefix = value.slice(0, Math.max(0, maxLength - marker.length));\n\t\tconst lastCodeUnit = prefix.charCodeAt(prefix.length - 1);\n\t\tconst safePrefix = lastCodeUnit >= HIGH_SURROGATE_FIRST && lastCodeUnit <= HIGH_SURROGATE_LAST ? prefix.slice(0, -1) : prefix;\n\t\treturn `${safePrefix}${marker}`;\n\t}\n\tlet sanitizedValue = value.slice(0, maxLength);\n\tif (/\\bbearer\\s/i.test(sanitizedValue)) {\n\t\tsanitizedValue = sanitizedValue.replace(/\\bBearer\\s+[A-Za-z0-9._~+/=-]{8,}/gi, \"Bearer [REDACTED]\");\n\t}\n\tif (sanitizedValue.includes(\"@\")) {\n\t\tsanitizedValue = sanitizedValue.replace(/[A-Z0-9._%+-]{1,254}@[A-Z0-9.-]{1,253}\\.[A-Z]{2,63}/gi, \"[REDACTED_EMAIL]\");\n\t}\n\n\treturn sanitizedValue;\n}\n\n/** Возвращает размер строки в UTF-8, совпадающий с размером JSON transport. */\nexport function getUtf8TextSize(value: string) {\n\treturn new TextEncoder().encode(value).byteLength;\n}\n\n/**\n * Обрезает уже очищенный текст по UTF-8 bytes без разрыва surrogate pair.\n * Binary search нужен для Unicode stack traces, где число code units не равно\n * размеру transport payload.\n */\nexport function sanitizeDiagnosticTextBytes(value: string, maxBytes: number) {\n\tif (getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM) {\n\t\tconst originalBytes = getUtf8TextSize(value);\n\t\tif (originalBytes <= maxBytes) return value;\n\t\tconst marker = `… [TRUNCATED: ${originalBytes} UTF-8 bytes total]`;\n\t\tif (getUtf8TextSize(marker) > maxBytes) return TRUNCATED_TEXT_MARKER.slice(0, Math.max(0, maxBytes));\n\t\tconst prefixLimit = Math.max(0, maxBytes - getUtf8TextSize(marker));\n\t\tlet left = 0;\n\t\tlet right = value.length;\n\t\twhile (left < right) {\n\t\t\tconst middle = Math.ceil((left + right) / 2);\n\t\t\tif (getUtf8TextSize(value.slice(0, middle)) <= prefixLimit) left = middle;\n\t\t\telse right = middle - 1;\n\t\t}\n\t\tconst lastCodeUnit = value.charCodeAt(left - 1);\n\t\tconst safeEnd = lastCodeUnit >= HIGH_SURROGATE_FIRST && lastCodeUnit <= HIGH_SURROGATE_LAST ? left - 1 : left;\n\t\treturn `${value.slice(0, safeEnd)}${marker}`;\n\t}\n\tconst sanitizedValue = sanitizeDiagnosticText(value, maxBytes);\n\tif (getUtf8TextSize(sanitizedValue) <= maxBytes) return sanitizedValue;\n\n\tlet left = 0;\n\tlet right = sanitizedValue.length;\n\twhile (left < right) {\n\t\tconst middle = Math.ceil((left + right) / 2);\n\t\tif (getUtf8TextSize(sanitizedValue.slice(0, middle)) <= maxBytes) left = middle;\n\t\telse right = middle - 1;\n\t}\n\n\tconst lastCodeUnit = sanitizedValue.charCodeAt(left - 1);\n\tconst safeEnd = lastCodeUnit >= HIGH_SURROGATE_FIRST && lastCodeUnit <= HIGH_SURROGATE_LAST ? left - 1 : left;\n\treturn sanitizedValue.slice(0, safeEnd);\n}\n\ntype DiagnosticValueState = {\n\tseen: WeakSet<object>;\n\tmaxStringLength: number;\n};\n\nfunction createDiagnosticValueInternal(value: unknown, depth: number, state: DiagnosticValueState, key?: string): ErrorReportSafeValue {\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM;\n\tif (!verbatim && key && isSensitiveKey(key)) return REDACTED_VALUE;\n\tif (depth >= MAX_DEPTH) return { type: SAFE_VALUE_TYPE_TRUNCATED };\n\tif (value === null || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") return Number.isFinite(value) ? value : { type: SAFE_VALUE_TYPE_NON_FINITE_NUMBER };\n\tif (typeof value === \"string\") {\n\t\tconst normalizedValue =\n\t\t\t!verbatim && ((key && isUrlKey(key)) || looksLikeUrlWithPrivateParts(value)) ? stripUrlSearchAndHash(value) : value;\n\t\treturn sanitizeDiagnosticText(normalizedValue, state.maxStringLength);\n\t}\n\tif (value === undefined) return { type: SAFE_VALUE_TYPE_UNDEFINED };\n\tif (value instanceof Date) return Number.isNaN(value.getTime()) ? { type: SAFE_VALUE_TYPE_INVALID_DATE } : value.toISOString();\n\tif (typeof value === \"object\") {\n\t\tif (state.seen.has(value)) return { type: SAFE_VALUE_TYPE_CIRCULAR };\n\t\tstate.seen.add(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\tconst keptItems =\n\t\t\tverbatim && value.length > ERROR_REPORT_SAFE_ARRAY_MAX_ITEMS\n\t\t\t\t? ERROR_REPORT_SAFE_ARRAY_MAX_ITEMS - 1\n\t\t\t\t: ERROR_REPORT_SAFE_ARRAY_MAX_ITEMS;\n\t\tconst items = value.slice(0, keptItems).map((item) => createDiagnosticValueInternal(item, depth + 1, state));\n\t\tif (verbatim && value.length > keptItems) items.push({ type: SAFE_VALUE_TYPE_TRUNCATED, omittedItems: value.length - keptItems });\n\t\treturn items;\n\t}\n\tif (typeof value === \"object\") {\n\t\ttry {\n\t\t\tconst entries = Object.entries(value as Record<string, unknown>).sort(([left], [right]) => left.localeCompare(right));\n\t\t\tconst keptKeys =\n\t\t\t\tverbatim && entries.length > ERROR_REPORT_SAFE_OBJECT_MAX_KEYS\n\t\t\t\t\t? ERROR_REPORT_SAFE_OBJECT_MAX_KEYS - 1\n\t\t\t\t\t: ERROR_REPORT_SAFE_OBJECT_MAX_KEYS;\n\t\t\tconst result: Record<string, ErrorReportSafeValue> = Object.fromEntries(\n\t\t\t\tentries\n\t\t\t\t\t.slice(0, keptKeys)\n\t\t\t\t\t.map(([entryKey, item]) => [entryKey, createDiagnosticValueInternal(item, depth + 1, state, entryKey)])\n\t\t\t);\n\t\t\tif (verbatim && entries.length > keptKeys) {\n\t\t\t\tlet markerKey = \"$truncated\";\n\t\t\t\twhile (Object.hasOwn(value, markerKey)) markerKey += \"_\";\n\t\t\t\tresult[markerKey] = { type: SAFE_VALUE_TYPE_TRUNCATED, omittedKeys: entries.length - keptKeys };\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch {\n\t\t\treturn { type: SAFE_VALUE_TYPE_UNREADABLE };\n\t\t}\n\t}\n\tif (typeof value === \"function\") return { type: SAFE_VALUE_TYPE_FUNCTION };\n\tif (typeof value === \"symbol\") return { type: SAFE_VALUE_TYPE_SYMBOL };\n\tif (typeof value === \"bigint\") return value.toString();\n\n\treturn { type: SAFE_VALUE_TYPE_UNKNOWN };\n}\n\n/**\n * Превращает произвольное значение в JSON-совместимую диагностическую форму.\n * Значения сохраняются читаемыми, потому что queryKey/meta/context нужны\n * для восстановления пользовательского сценария; тяжелые данные query cache\n * отсекаются отдельно и сюда не передаются.\n */\nexport function createDiagnosticValue(value: unknown, depth = 0): ErrorReportSafeValue {\n\treturn createDiagnosticValueInternal(value, depth, {\n\t\tseen: new WeakSet(),\n\t\tmaxStringLength: MAX_DIAGNOSTIC_STRING_LENGTH\n\t});\n}\n\n/**\n * Описывает форму данных кеша без самих значений: типы, размеры массивов и ключи объектов.\n */\nexport function createDataShape(value: unknown, depth = 0): ErrorReportSafeValue {\n\tif (depth >= MAX_DEPTH) return { type: SAFE_VALUE_TYPE_TRUNCATED };\n\tif (value === null) return { type: \"null\" };\n\tif (value === undefined) return { type: SAFE_VALUE_TYPE_UNDEFINED };\n\tif (Array.isArray(value)) {\n\t\treturn {\n\t\t\ttype: \"array\",\n\t\t\tlength: value.length,\n\t\t\tfirstItemsShape: value.slice(0, MAX_ARRAY_SHAPE_ITEMS).map((item) => createDataShape(item, depth + 1))\n\t\t};\n\t}\n\tif (typeof value === \"object\") {\n\t\tconst entries = Object.entries(value as Record<string, unknown>).slice(0, ERROR_REPORT_SAFE_OBJECT_MAX_KEYS);\n\n\t\treturn {\n\t\t\ttype: \"object\",\n\t\t\tkeys: entries.map(([key]) => key),\n\t\t\tshape: Object.fromEntries(entries.map(([key, item]) => [key, createDataShape(item, depth + 1)]))\n\t\t};\n\t}\n\n\treturn { type: typeof value };\n}\n\n/**\n * Подключает предметный sanitizer приложения. `undefined` отключает callback и\n * одновременно предотвращает утечку старой policy при hot reload и в тестах.\n */\nexport function setErrorReportSanitizer(sanitizer: ErrorReportSanitizer | undefined) {\n\terrorReportSanitizer = sanitizer;\n}\n\n/**\n * Выполняет built-in нормализацию, затем предметную policy приложения и ещё\n * одну bounded-нормализацию результата перед включением секции в payload.\n */\nexport function sanitizeErrorReportValue(\n\tvalue: unknown,\n\tcontext: ErrorReportSanitizationContext,\n\tmaxStringLength = MAX_DIAGNOSTIC_STRING_LENGTH\n) {\n\tconst keyScope =\n\t\tcontext.scope === ERROR_REPORT_SCOPE_QUERY_KEY ||\n\t\tcontext.scope === ERROR_REPORT_SCOPE_MUTATION_KEY ||\n\t\tcontext.scope === ERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY;\n\tconst effectiveMaxStringLength =\n\t\tgetErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM && keyScope\n\t\t\t? Math.max(maxStringLength, ERROR_REPORT_SAFE_STRING_MAX_LENGTH)\n\t\t\t: maxStringLength;\n\tconst createBoundedValue = (candidate: unknown) =>\n\t\tcreateDiagnosticValueInternal(candidate, 0, { seen: new WeakSet(), maxStringLength: effectiveMaxStringLength });\n\tconst safeValue = createBoundedValue(value);\n\tif (!errorReportSanitizer) return safeValue;\n\n\ttry {\n\t\tconst appSanitizedValue = errorReportSanitizer(safeValue, context);\n\t\treturn appSanitizedValue === undefined ? undefined : createBoundedValue(appSanitizedValue);\n\t} catch {\n\t\t// Ошибка optional sanitizer безопаснее приводит к удалению секции, а не к\n\t\t// сохранению потенциально чувствительного исходного значения.\n\t\treturn undefined;\n\t}\n}\n\nexport function sanitizeDetail(\n\tdetail: Record<string, unknown> | undefined,\n\tcontext: ErrorReportSanitizationContext = { scope: ERROR_REPORT_SCOPE_CONTEXT }\n): Record<string, ErrorReportSafeValue> | undefined {\n\tif (!detail) return undefined;\n\n\tconst sanitizedValue = sanitizeErrorReportValue(detail, context);\n\tif (!sanitizedValue || Array.isArray(sanitizedValue) || typeof sanitizedValue !== \"object\") return undefined;\n\n\treturn Object.keys(sanitizedValue).length ? sanitizedValue : undefined;\n}\n","import { truncateText } from \"../formatters\";\n\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport {\n\tERROR_REPORT_UTC_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMBS_MAX_ITEMS\n} from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_SCOPE_BREADCRUMB_DETAIL,\n\tERROR_REPORT_BREADCRUMB_CLICK,\n\tERROR_REPORT_BREADCRUMB_VISIBILITY\n} from \"./errorReportContractConstants\";\nimport { sanitizeDetail, sanitizeDiagnosticText } from \"./safeValue\";\n\nimport type { ErrorReportBreadcrumb } from \"./types\";\n\nconst CLICK_EVENT = \"click\";\nconst VISIBILITY_CHANGE_EVENT = \"visibilitychange\";\nconst ERROR_REPORT_TARGET_ATTRIBUTE = \"data-error-report-target\";\nconst DATA_UI_ATTRIBUTE = \"data-ui\";\nconst DATA_ACTION_ATTRIBUTE = \"data-action\";\nconst MAX_ELEMENT_CHAIN = 20;\nconst MAX_ATTRIBUTE_LENGTH = 120;\nconst INTERACTIVE_CLICK_TARGET_SELECTOR = [\"button\", \"a\", \"input\", \"select\", \"textarea\", \"[role]\"].join(\",\");\nconst SAFE_TARGET_VALUE = /^[a-z0-9][a-z0-9._:/-]*$/i;\n\nlet breadcrumbs: ErrorReportBreadcrumb[] = [];\n\nfunction nowUtc() {\n\treturn new Date().toISOString();\n}\n\nexport function addErrorReportBreadcrumb(breadcrumb: Omit<ErrorReportBreadcrumb, \"utc\"> & { utc?: string }) {\n\tbreadcrumbs = [\n\t\t...breadcrumbs,\n\t\t{\n\t\t\t...breadcrumb,\n\t\t\tutc: sanitizeDiagnosticText(breadcrumb.utc ?? nowUtc(), ERROR_REPORT_UTC_MAX_LENGTH),\n\t\t\trouteId: breadcrumb.routeId\n\t\t\t\t? sanitizeDiagnosticText(\n\t\t\t\t\t\tgetErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM\n\t\t\t\t\t\t\t? breadcrumb.routeId\n\t\t\t\t\t\t\t: (breadcrumb.routeId.split(/[?#]/, 1)[0] ?? breadcrumb.routeId),\n\t\t\t\t\t\tERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\t\tappId: breadcrumb.appId ? sanitizeDiagnosticText(breadcrumb.appId, ERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH) : undefined,\n\t\t\tviewId: breadcrumb.viewId ? sanitizeDiagnosticText(breadcrumb.viewId, ERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH) : undefined,\n\t\t\ttarget: breadcrumb.target ? sanitizeDiagnosticText(breadcrumb.target, ERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH) : undefined,\n\t\t\tdetail: sanitizeDetail(breadcrumb.detail, {\n\t\t\t\tscope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL,\n\t\t\t\tsource: breadcrumb.type\n\t\t\t})\n\t\t}\n\t].slice(-ERROR_REPORT_BREADCRUMBS_MAX_ITEMS);\n}\n\nexport function getErrorReportBreadcrumbs() {\n\treturn breadcrumbs.slice();\n}\n\nexport function clearErrorReportBreadcrumbs() {\n\tbreadcrumbs = [];\n}\n\nfunction truncateAttributeText(value: string | null | undefined) {\n\treturn truncateText(value, MAX_ATTRIBUTE_LENGTH);\n}\n\nfunction readSafeTargetValue(element: Element) {\n\tconst value = truncateAttributeText(element.getAttribute(ERROR_REPORT_TARGET_ATTRIBUTE));\n\treturn value && SAFE_TARGET_VALUE.test(value) ? value : undefined;\n}\n\nfunction readTechnicalAttribute(element: Element, name: string) {\n\tconst value = truncateAttributeText(element.getAttribute(name));\n\treturn value && SAFE_TARGET_VALUE.test(value) ? value : undefined;\n}\n\nfunction readTechnicalAttributes(element: Element) {\n\tconst errorReportTarget = readSafeTargetValue(element);\n\n\t// Специализированный маркер однозначно переопределяет прежнюю host-разметку.\n\t// Fallback сохраняет уже внедрённые data-ui/data-action без возврата к DOM text.\n\treturn {\n\t\trole: readTechnicalAttribute(element, \"role\"),\n\t\ttype: readTechnicalAttribute(element, \"type\"),\n\t\terrorReportTarget,\n\t\tdataUi: errorReportTarget ? undefined : readTechnicalAttribute(element, DATA_UI_ATTRIBUTE),\n\t\tdataAction: errorReportTarget ? undefined : readTechnicalAttribute(element, DATA_ACTION_ATTRIBUTE)\n\t};\n}\n\nfunction escapeSelectorPart(value: string) {\n\tif (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n\t\treturn CSS.escape(value);\n\t}\n\n\treturn value.replace(/[\"\\\\#.[\\]>~+:]/g, \"\\\\$&\");\n}\n\nfunction buildElementSelector(element: Element) {\n\tconst attrs = readTechnicalAttributes(element);\n\tconst parts = [element.tagName.toLowerCase()];\n\n\tif (attrs.role) parts.push(`[role=\"${attrs.role}\"]`);\n\tif (attrs.type) parts.push(`[type=\"${attrs.type}\"]`);\n\tif (attrs.errorReportTarget) {\n\t\tparts.push(`[${ERROR_REPORT_TARGET_ATTRIBUTE}=\"${escapeSelectorPart(attrs.errorReportTarget)}\"]`);\n\t} else {\n\t\tif (attrs.dataUi) parts.push(`[${DATA_UI_ATTRIBUTE}=\"${escapeSelectorPart(attrs.dataUi)}\"]`);\n\t\tif (attrs.dataAction) parts.push(`[${DATA_ACTION_ATTRIBUTE}=\"${escapeSelectorPart(attrs.dataAction)}\"]`);\n\t}\n\n\treturn parts.join(\"\");\n}\n\nfunction describeElement(element: Element) {\n\tconst attrs = readTechnicalAttributes(element);\n\n\treturn {\n\t\ttag: element.tagName.toLowerCase(),\n\t\tselector: buildElementSelector(element),\n\t\t...attrs\n\t};\n}\n\nfunction compactElementDescription(description: ReturnType<typeof describeElement>) {\n\treturn Object.fromEntries(\n\t\tObject.entries(description).filter(([, value]) => value !== undefined && (!Array.isArray(value) || value.length > 0))\n\t);\n}\n\nfunction getClickElementChain(target: Element) {\n\tconst chain: Element[] = [];\n\tlet current: Element | null = target;\n\n\twhile (current && current !== document.documentElement && chain.length < MAX_ELEMENT_CHAIN) {\n\t\tchain.push(current);\n\t\tif (current === document.body) break;\n\t\tcurrent = current.parentElement;\n\t}\n\n\treturn chain;\n}\n\nfunction findMeaningfulClickTarget(target: Element) {\n\tconst chain = getClickElementChain(target);\n\tconst explicitTarget = chain.find((element) => readSafeTargetValue(element));\n\tif (explicitTarget) return explicitTarget;\n\n\treturn (\n\t\tchain.find(\n\t\t\t(element) =>\n\t\t\t\telement.matches(INTERACTIVE_CLICK_TARGET_SELECTOR) ||\n\t\t\t\treadTechnicalAttribute(element, DATA_ACTION_ATTRIBUTE) !== undefined ||\n\t\t\t\treadTechnicalAttribute(element, DATA_UI_ATTRIBUTE) !== undefined\n\t\t) ?? target\n\t);\n}\n\nfunction describeClickTarget(target: EventTarget | null) {\n\tif (!(target instanceof Element)) return undefined;\n\n\tconst meaningfulTarget = findMeaningfulClickTarget(target);\n\tconst chain = getClickElementChain(meaningfulTarget);\n\n\treturn chain.map((element) => buildElementSelector(element)).join(\" > \");\n}\n\nfunction describeClickDetail(event: MouseEvent) {\n\tconst target = event.target instanceof Element ? event.target : undefined;\n\tconst meaningfulTarget = target ? findMeaningfulClickTarget(target) : undefined;\n\tconst chain = meaningfulTarget\n\t\t? getClickElementChain(meaningfulTarget).map((element) => compactElementDescription(describeElement(element)))\n\t\t: [];\n\n\treturn sanitizeDetail(\n\t\t{\n\t\t\tbutton: event.button,\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\ttarget: meaningfulTarget ? compactElementDescription(describeElement(meaningfulTarget)) : undefined,\n\t\t\tchain\n\t\t},\n\t\t{ scope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL, source: ERROR_REPORT_BREADCRUMB_CLICK }\n\t);\n}\n\n/**\n * Подключает breadcrumbs по действиям пользователя без тел запросов.\n */\nexport function installErrorReportBrowserBreadcrumbs() {\n\tif (typeof window === \"undefined\") return () => undefined;\n\n\tconst onClick = (event: MouseEvent) => {\n\t\taddErrorReportBreadcrumb({\n\t\t\ttype: ERROR_REPORT_BREADCRUMB_CLICK,\n\t\t\ttarget: describeClickTarget(event.target),\n\t\t\tdetail: describeClickDetail(event)\n\t\t});\n\t};\n\n\tconst onVisibilityChange = () => {\n\t\taddErrorReportBreadcrumb({\n\t\t\ttype: ERROR_REPORT_BREADCRUMB_VISIBILITY,\n\t\t\tdetail: sanitizeDetail(\n\t\t\t\t{ visibilityState: document.visibilityState },\n\t\t\t\t{ scope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL, source: ERROR_REPORT_BREADCRUMB_VISIBILITY }\n\t\t\t)\n\t\t});\n\t};\n\n\twindow.addEventListener(CLICK_EVENT, onClick, true);\n\tdocument.addEventListener(VISIBILITY_CHANGE_EVENT, onVisibilityChange);\n\n\treturn () => {\n\t\twindow.removeEventListener(CLICK_EVENT, onClick, true);\n\t\tdocument.removeEventListener(VISIBILITY_CHANGE_EVENT, onVisibilityChange);\n\t};\n}\n","import { getUtf8TextSize } from \"./safeValue\";\nimport {\n\tHIGH_SURROGATE_FIRST,\n\tHIGH_SURROGATE_LAST,\n\tSAFE_VALUE_TYPE_TRUNCATED,\n\tSAFE_VALUE_TYPE_NON_FINITE_NUMBER,\n\tSAFE_VALUE_TYPE_UNDEFINED,\n\tSAFE_VALUE_TYPE_FUNCTION,\n\tSAFE_VALUE_TYPE_SYMBOL,\n\tSAFE_VALUE_TYPE_INVALID_DATE,\n\tSAFE_VALUE_TYPE_UNKNOWN,\n\tSAFE_VALUE_TYPE_CIRCULAR,\n\tSAFE_VALUE_TYPE_UNREADABLE\n} from \"./safeValueMarkerConstants\";\n\nimport type { ErrorReportDataPreview, ErrorReportSafeValue } from \"./types\";\n\nconst MAX_PREVIEW_DEPTH = 6;\nconst MAX_PREVIEW_ARRAY_ITEMS = 12;\nconst MAX_PREVIEW_OBJECT_KEYS = 24;\nconst MAX_PREVIEW_STRING_LENGTH = 1_024;\nconst MAX_PREVIEW_NODES = 128;\nconst MIN_JSON_PREVIEW_BYTES = 4;\n\ntype PreviewState = {\n\tseen: WeakSet<object>;\n\tnodesLeft: number;\n\ttruncated: boolean;\n};\n\n/**\n * Строит конечное JSON-дерево без изменения исходного кэша. Структурные лимиты\n * защищают capture от больших коллекций ещё до проверки итоговых UTF-8 байтов.\n */\nfunction describePreviewValue(value: unknown, depth: number, state: PreviewState): ErrorReportSafeValue {\n\tif (depth >= MAX_PREVIEW_DEPTH || state.nodesLeft-- <= 0) {\n\t\tstate.truncated = true;\n\t\treturn { type: SAFE_VALUE_TYPE_TRUNCATED };\n\t}\n\tif (value === null || typeof value === \"boolean\") return value;\n\tif (typeof value === \"number\") return Number.isFinite(value) ? value : { type: SAFE_VALUE_TYPE_NON_FINITE_NUMBER };\n\tif (typeof value === \"string\") {\n\t\tif (value.length > MAX_PREVIEW_STRING_LENGTH) state.truncated = true;\n\t\tconst prefix = value.slice(0, MAX_PREVIEW_STRING_LENGTH);\n\t\tconst lastCodeUnit = prefix.charCodeAt(prefix.length - 1);\n\t\treturn lastCodeUnit >= HIGH_SURROGATE_FIRST && lastCodeUnit <= HIGH_SURROGATE_LAST ? prefix.slice(0, -1) : prefix;\n\t}\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (value === undefined) return { type: SAFE_VALUE_TYPE_UNDEFINED };\n\tif (typeof value === \"function\") return { type: SAFE_VALUE_TYPE_FUNCTION };\n\tif (typeof value === \"symbol\") return { type: SAFE_VALUE_TYPE_SYMBOL };\n\tif (value instanceof Date) return Number.isNaN(value.getTime()) ? { type: SAFE_VALUE_TYPE_INVALID_DATE } : value.toISOString();\n\tif (typeof value !== \"object\") return { type: SAFE_VALUE_TYPE_UNKNOWN };\n\tif (state.seen.has(value)) return { type: SAFE_VALUE_TYPE_CIRCULAR };\n\tstate.seen.add(value);\n\n\tif (Array.isArray(value)) {\n\t\tif (value.length > MAX_PREVIEW_ARRAY_ITEMS) state.truncated = true;\n\t\treturn value.slice(0, MAX_PREVIEW_ARRAY_ITEMS).map((item) => describePreviewValue(item, depth + 1, state));\n\t}\n\n\ttry {\n\t\tconst entries = Object.entries(value);\n\t\tif (entries.length > MAX_PREVIEW_OBJECT_KEYS) state.truncated = true;\n\t\treturn Object.fromEntries(\n\t\t\tentries.slice(0, MAX_PREVIEW_OBJECT_KEYS).map(([key, item]) => [key, describePreviewValue(item, depth + 1, state)])\n\t\t);\n\t} catch {\n\t\treturn { type: SAFE_VALUE_TYPE_UNREADABLE };\n\t}\n}\n\nfunction shortenRootString(value: string): string {\n\tconst codePoints = Array.from(value);\n\treturn codePoints.slice(0, Math.floor(codePoints.length / 2)).join(\"\");\n}\n\n/** Сокращает хвост дерева, сохраняя исходную форму первых полей и элементов. */\nfunction shrinkPreviewValue(value: ErrorReportSafeValue): { value: ErrorReportSafeValue; changed: boolean } {\n\tif (typeof value === \"string\") {\n\t\treturn value ? { value: shortenRootString(value), changed: true } : { value, changed: false };\n\t}\n\tif (Array.isArray(value)) {\n\t\tif (value.length > 1) {\n\t\t\tvalue.pop();\n\t\t\treturn { value, changed: true };\n\t\t}\n\t\tif (value.length === 1) {\n\t\t\tconst item = shrinkPreviewValue(value[0]);\n\t\t\tif (item.changed) {\n\t\t\t\tvalue[0] = item.value;\n\t\t\t\treturn { value, changed: true };\n\t\t\t}\n\t\t\tvalue.pop();\n\t\t\treturn { value, changed: true };\n\t\t}\n\t\treturn { value, changed: false };\n\t}\n\tif (value !== null && typeof value === \"object\") {\n\t\tconst keys = Object.keys(value);\n\t\tconst lastKey = keys.at(-1);\n\t\tif (lastKey === undefined) return { value, changed: false };\n\t\tif (keys.length === 1) {\n\t\t\tconst item = shrinkPreviewValue(value[lastKey]);\n\t\t\tif (item.changed) {\n\t\t\t\tvalue[lastKey] = item.value;\n\t\t\t\treturn { value, changed: true };\n\t\t\t}\n\t\t}\n\t\tReflect.deleteProperty(value, lastKey);\n\t\treturn { value, changed: true };\n\t}\n\treturn { value, changed: false };\n}\n\n/**\n * Возвращает валидный JSON в заданном байтовом бюджете. `truncated` фиксирует\n * как структурное усечение, так и сокращение по размеру сериализованного JSON.\n */\nexport function createErrorReportDataPreview(value: unknown, maxBytes: number): ErrorReportDataPreview {\n\tconst state: PreviewState = { seen: new WeakSet(), nodesLeft: MAX_PREVIEW_NODES, truncated: false };\n\tlet previewValue = describePreviewValue(value, 0, state);\n\tlet json = JSON.stringify(previewValue);\n\tconst byteLimit = Math.max(MIN_JSON_PREVIEW_BYTES, maxBytes);\n\n\twhile (getUtf8TextSize(json) > byteLimit) {\n\t\tstate.truncated = true;\n\t\tconst reduced = shrinkPreviewValue(previewValue);\n\t\tpreviewValue = reduced.changed ? reduced.value : null;\n\t\tjson = JSON.stringify(previewValue);\n\t}\n\n\treturn { json, truncated: state.truncated };\n}\n","import { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport { createErrorReportDataPreview } from \"./dataPreview\";\nimport {\n\tERROR_REPORT_ERROR_NAME_MAX_LENGTH,\n\tERROR_REPORT_ERROR_CODE_MAX_LENGTH,\n\tERROR_REPORT_UTC_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH,\n\tERROR_REPORT_QUERY_HASH_MAX_LENGTH,\n\tERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH,\n\tERROR_REPORT_APPLICATION_MAX_LENGTH,\n\tERROR_REPORT_SOURCE_MAX_LENGTH,\n\tERROR_REPORT_BUILD_ID_MAX_LENGTH,\n\tERROR_REPORT_LANGUAGE_MAX_LENGTH,\n\tERROR_REPORT_TIME_ZONE_MAX_LENGTH,\n\tERROR_REPORT_LOCATION_MAX_LENGTH,\n\tERROR_REPORT_COMPONENT_STACK_MAX_BYTES,\n\tERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_BREADCRUMBS_MAX_ITEMS\n} from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_SCOPE_ERROR_MESSAGE,\n\tERROR_REPORT_SCOPE_STACK_TRACE,\n\tERROR_REPORT_SCOPE_QUERY_KEY,\n\tERROR_REPORT_SCOPE_QUERY_META,\n\tERROR_REPORT_SCOPE_QUERY_DATA_SHAPE,\n\tERROR_REPORT_SCOPE_MUTATION_KEY,\n\tERROR_REPORT_SCOPE_MUTATION_META,\n\tERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY,\n\tERROR_REPORT_SCOPE_BREADCRUMB_DETAIL,\n\tERROR_REPORT_SCOPE_CONTEXT,\n\tERROR_REPORT_TRUNCATION_PAYLOAD_SIZE,\n\tERROR_REPORT_SOURCE_MUTATION\n} from \"./errorReportContractConstants\";\nimport {\n\tgetUtf8TextSize,\n\tsanitizeDetail,\n\tsanitizeDiagnosticText,\n\tsanitizeDiagnosticTextBytes,\n\tsanitizeErrorReportValue\n} from \"./safeValue\";\nimport { REDACTED_VALUE, SAFE_VALUE_TYPE_REDACTED } from \"./safeValueMarkerConstants\";\n\nimport type {\n\tErrorReportErrorInfo,\n\tErrorReportDataPreview,\n\tErrorReportMutationDiagnostics,\n\tErrorReportPayload,\n\tErrorReportPersistedQueryDiagnostics,\n\tErrorReportQueryDiagnostics\n} from \"./types\";\n\nexport const ERROR_REPORT_PAYLOAD_VERSION = 1 as const;\nexport const ERROR_REPORT_PAYLOAD_MAX_BYTES = 256 * 1_024;\nexport const ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES = 128 * 1_024;\nexport const ERROR_REPORT_STACK_TRACE_MAX_BYTES = 64 * 1_024;\n\nconst REPORT_ID_MAX_LENGTH = 128;\nconst SESSION_ID_MAX_LENGTH = 128;\nconst REDACTED_MESSAGE_MAX_LENGTH = 4_096;\nconst REDUCED_QUERIES_MAX_ITEMS = 10;\nconst REDUCED_MUTATIONS_MAX_ITEMS = 10;\nconst REDUCED_PERSISTED_QUERIES_MAX_ITEMS = 10;\nconst REDUCED_BREADCRUMBS_MAX_ITEMS = 20;\nconst REDUCED_PREVIEW_BYTE_LIMITS = [512, 128, 4];\n\nconst TEXT_LIMIT_BYTES = \"bytes\";\nconst TEXT_LIMIT_CHARACTERS = \"characters\";\n\nfunction serializedByteLength(value: unknown) {\n\treturn new TextEncoder().encode(JSON.stringify(value)).byteLength;\n}\n\nfunction sanitizePathname(value: string) {\n\tconst pathname =\n\t\tgetErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM ? value : (value.split(/[?#]/, 1)[0] ?? value);\n\treturn sanitizeDiagnosticText(pathname, ERROR_REPORT_LOCATION_MAX_LENGTH);\n}\n\nfunction normalizeDataPreview(preview: ErrorReportDataPreview | undefined, maxBytes: number) {\n\tif (!preview || maxBytes <= 0 || getErrorReportCaptureOptions().valuePolicy !== ERROR_REPORT_VALUE_POLICY_VERBATIM) return undefined;\n\ttry {\n\t\tconst value: unknown = JSON.parse(preview.json);\n\t\tif (getUtf8TextSize(preview.json) <= maxBytes) return preview;\n\t\tconst reduced = createErrorReportDataPreview(value, maxBytes);\n\t\treturn { ...reduced, truncated: true };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction sanitizeScopedText(\n\tvalue: string,\n\tcontext: { scope: typeof ERROR_REPORT_SCOPE_ERROR_MESSAGE | typeof ERROR_REPORT_SCOPE_STACK_TRACE; source?: string },\n\tlimit: number,\n\tlimitUnit: typeof TEXT_LIMIT_BYTES | typeof TEXT_LIMIT_CHARACTERS = TEXT_LIMIT_CHARACTERS\n) {\n\tconst builtInValue = limitUnit === TEXT_LIMIT_BYTES ? sanitizeDiagnosticTextBytes(value, limit) : sanitizeDiagnosticText(value, limit);\n\tconst sanitizedValue = sanitizeErrorReportValue(builtInValue, context, limit);\n\tif (typeof sanitizedValue !== \"string\") return undefined;\n\treturn limitUnit === TEXT_LIMIT_BYTES\n\t\t? sanitizeDiagnosticTextBytes(sanitizedValue, limit)\n\t\t: sanitizeDiagnosticText(sanitizedValue, limit);\n}\n\nfunction sanitizeErrorInfo(error: ErrorReportErrorInfo, source?: string): ErrorReportErrorInfo {\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM;\n\treturn {\n\t\tname: sanitizeDiagnosticText(error.name, ERROR_REPORT_ERROR_NAME_MAX_LENGTH),\n\t\tmessage:\n\t\t\tsanitizeScopedText(\n\t\t\t\terror.message,\n\t\t\t\t{ scope: ERROR_REPORT_SCOPE_ERROR_MESSAGE, source },\n\t\t\t\tverbatim ? ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES : REDACTED_MESSAGE_MAX_LENGTH,\n\t\t\t\tverbatim ? TEXT_LIMIT_BYTES : TEXT_LIMIT_CHARACTERS\n\t\t\t) ?? (verbatim ? sanitizeDiagnosticTextBytes(error.message, ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES) : REDACTED_VALUE),\n\t\tcode: error.code ? sanitizeDiagnosticText(error.code, ERROR_REPORT_ERROR_CODE_MAX_LENGTH) : undefined,\n\t\tstackTrace: error.stackTrace\n\t\t\t? sanitizeScopedText(\n\t\t\t\t\terror.stackTrace,\n\t\t\t\t\t{ scope: ERROR_REPORT_SCOPE_STACK_TRACE, source },\n\t\t\t\t\tERROR_REPORT_STACK_TRACE_MAX_BYTES,\n\t\t\t\t\tTEXT_LIMIT_BYTES\n\t\t\t\t)\n\t\t\t: undefined,\n\t\thttpStatus: error.httpStatus\n\t};\n}\n\nfunction sanitizeQueryDiagnostics(query: ErrorReportQueryDiagnostics): ErrorReportQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\t...query,\n\t\tqueryHash: sanitizeDiagnosticText(query.queryHash, ERROR_REPORT_QUERY_HASH_MAX_LENGTH),\n\t\tqueryKey: sanitizeErrorReportValue(query.queryKey, {\n\t\t\tscope: ERROR_REPORT_SCOPE_QUERY_KEY,\n\t\t\tsource: query.queryHash\n\t\t}) ?? { type: SAFE_VALUE_TYPE_REDACTED },\n\t\tmeta: sanitizeDetail(query.meta, { scope: ERROR_REPORT_SCOPE_QUERY_META, source: query.queryHash }),\n\t\tdataShape: query.dataShape\n\t\t\t? sanitizeErrorReportValue(query.dataShape, { scope: ERROR_REPORT_SCOPE_QUERY_DATA_SHAPE, source: query.queryHash })\n\t\t\t: undefined,\n\t\tdataPreview: normalizeDataPreview(query.dataPreview, captureOptions.dataPreviewBytes.query),\n\t\terror: query.error ? sanitizeErrorInfo(query.error, query.queryHash) : undefined\n\t};\n}\n\nfunction sanitizeMutationDiagnostics(mutation: ErrorReportMutationDiagnostics): ErrorReportMutationDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\t...mutation,\n\t\tmutationKey: mutation.mutationKey\n\t\t\t? sanitizeErrorReportValue(mutation.mutationKey, { scope: ERROR_REPORT_SCOPE_MUTATION_KEY })\n\t\t\t: undefined,\n\t\tmeta: sanitizeDetail(mutation.meta, { scope: ERROR_REPORT_SCOPE_MUTATION_META }),\n\t\tvariablesPreview: normalizeDataPreview(mutation.variablesPreview, captureOptions.dataPreviewBytes.mutation),\n\t\terror: mutation.error ? sanitizeErrorInfo(mutation.error, ERROR_REPORT_SOURCE_MUTATION) : undefined\n\t};\n}\n\nfunction sanitizePersistedQueryDiagnostics(query: ErrorReportPersistedQueryDiagnostics): ErrorReportPersistedQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\t...query,\n\t\tbuster: query.buster ? sanitizeDiagnosticText(query.buster, ERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH) : undefined,\n\t\tqueryHash: query.queryHash ? sanitizeDiagnosticText(query.queryHash, ERROR_REPORT_QUERY_HASH_MAX_LENGTH) : undefined,\n\t\tqueryKey: query.queryKey\n\t\t\t? sanitizeErrorReportValue(query.queryKey, {\n\t\t\t\t\tscope: ERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY,\n\t\t\t\t\tsource: query.queryHash\n\t\t\t\t})\n\t\t\t: undefined,\n\t\tdataPreview: normalizeDataPreview(query.dataPreview, captureOptions.dataPreviewBytes.persistedQuery),\n\t\terror: query.error ? sanitizeErrorInfo(query.error, query.queryHash) : undefined\n\t};\n}\n\n/** Возвращает точный UTF-8 размер JSON-формы, которую получит transport. */\nexport function getErrorReportPayloadSize(payload: ErrorReportPayload) {\n\treturn serializedByteLength(payload);\n}\n\nfunction normalizePayloadStrings(payload: ErrorReportPayload): ErrorReportPayload {\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM;\n\treturn {\n\t\t...payload,\n\t\treportId: sanitizeDiagnosticText(payload.reportId, REPORT_ID_MAX_LENGTH),\n\t\tsessionId: sanitizeDiagnosticText(payload.sessionId, SESSION_ID_MAX_LENGTH),\n\t\tcreatedUtc: sanitizeDiagnosticText(payload.createdUtc, ERROR_REPORT_UTC_MAX_LENGTH),\n\t\tapplication: sanitizeDiagnosticText(payload.application, ERROR_REPORT_APPLICATION_MAX_LENGTH),\n\t\tsource: sanitizeDiagnosticText(payload.source, ERROR_REPORT_SOURCE_MAX_LENGTH),\n\t\terror: sanitizeErrorInfo(payload.error, payload.source),\n\t\tenvironment: {\n\t\t\t...payload.environment,\n\t\t\tbuildId: payload.environment.buildId\n\t\t\t\t? sanitizeDiagnosticText(payload.environment.buildId, ERROR_REPORT_BUILD_ID_MAX_LENGTH)\n\t\t\t\t: undefined\n\t\t},\n\t\tclient: payload.client\n\t\t\t? {\n\t\t\t\t\tuserAgent: payload.client.userAgent ? sanitizeDiagnosticText(payload.client.userAgent) : undefined,\n\t\t\t\t\tlanguage: payload.client.language\n\t\t\t\t\t\t? sanitizeDiagnosticText(payload.client.language, ERROR_REPORT_LANGUAGE_MAX_LENGTH)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\ttimeZone: payload.client.timeZone\n\t\t\t\t\t\t? sanitizeDiagnosticText(payload.client.timeZone, ERROR_REPORT_TIME_ZONE_MAX_LENGTH)\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tlocation: payload.location\n\t\t\t? {\n\t\t\t\t\tpathname: sanitizePathname(payload.location.pathname),\n\t\t\t\t\torigin: payload.location.origin\n\t\t\t\t\t\t? sanitizeDiagnosticText(\n\t\t\t\t\t\t\t\tpayload.location.origin.split(/[?#]/, 1)[0] ?? payload.location.origin,\n\t\t\t\t\t\t\t\tERROR_REPORT_LOCATION_MAX_LENGTH\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tsearch:\n\t\t\t\t\t\tgetErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM && payload.location.search\n\t\t\t\t\t\t\t? sanitizeDiagnosticText(payload.location.search, ERROR_REPORT_LOCATION_MAX_LENGTH)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\thash:\n\t\t\t\t\t\tgetErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM && payload.location.hash\n\t\t\t\t\t\t\t? sanitizeDiagnosticText(payload.location.hash, ERROR_REPORT_LOCATION_MAX_LENGTH)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t: undefined,\n\t\treact: payload.react?.componentStack\n\t\t\t? {\n\t\t\t\t\tcomponentStack: sanitizeScopedText(\n\t\t\t\t\t\tpayload.react.componentStack,\n\t\t\t\t\t\t{ scope: ERROR_REPORT_SCOPE_STACK_TRACE, source: \"react-component-stack\" },\n\t\t\t\t\t\tERROR_REPORT_COMPONENT_STACK_MAX_BYTES,\n\t\t\t\t\t\tTEXT_LIMIT_BYTES\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tquery: payload.query ? sanitizeQueryDiagnostics(payload.query) : undefined,\n\t\tmutation: payload.mutation ? sanitizeMutationDiagnostics(payload.mutation) : undefined,\n\t\tqueryClient: payload.queryClient\n\t\t\t? {\n\t\t\t\t\tqueries: payload.queryClient.queries.slice(-ERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS).map(sanitizeQueryDiagnostics),\n\t\t\t\t\tmutations: payload.queryClient.mutations\n\t\t\t\t\t\t.slice(-ERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS)\n\t\t\t\t\t\t.map(sanitizeMutationDiagnostics),\n\t\t\t\t\t...(verbatim\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tomittedQueries:\n\t\t\t\t\t\t\t\t\t(payload.queryClient.omittedQueries ?? 0) +\n\t\t\t\t\t\t\t\t\t\tMath.max(0, payload.queryClient.queries.length - ERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS) ||\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tomittedMutations:\n\t\t\t\t\t\t\t\t\t(payload.queryClient.omittedMutations ?? 0) +\n\t\t\t\t\t\t\t\t\t\tMath.max(0, payload.queryClient.mutations.length - ERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS) ||\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {})\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tpersistedQueries: payload.persistedQueries\n\t\t\t?.slice(-ERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS)\n\t\t\t.map(sanitizePersistedQueryDiagnostics),\n\t\tbreadcrumbs: payload.breadcrumbs.slice(-ERROR_REPORT_BREADCRUMBS_MAX_ITEMS).map((breadcrumb) => ({\n\t\t\t...breadcrumb,\n\t\t\tutc: sanitizeDiagnosticText(breadcrumb.utc, ERROR_REPORT_UTC_MAX_LENGTH),\n\t\t\trouteId: breadcrumb.routeId ? sanitizeDiagnosticText(breadcrumb.routeId, ERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH) : undefined,\n\t\t\tappId: breadcrumb.appId ? sanitizeDiagnosticText(breadcrumb.appId, ERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH) : undefined,\n\t\t\tviewId: breadcrumb.viewId ? sanitizeDiagnosticText(breadcrumb.viewId, ERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH) : undefined,\n\t\t\ttarget: breadcrumb.target ? sanitizeDiagnosticText(breadcrumb.target, ERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH) : undefined,\n\t\t\tdetail: sanitizeDetail(breadcrumb.detail, {\n\t\t\t\tscope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL,\n\t\t\t\tsource: breadcrumb.type\n\t\t\t})\n\t\t})),\n\t\tcontext: sanitizeDetail(payload.context, { scope: ERROR_REPORT_SCOPE_CONTEXT, source: payload.source })\n\t};\n}\n\nfunction reducePreview(preview: ErrorReportDataPreview | undefined, maxBytes: number) {\n\tif (!preview || getUtf8TextSize(preview.json) <= maxBytes) return preview;\n\ttry {\n\t\tconst value: unknown = JSON.parse(preview.json);\n\t\tconst reduced = createErrorReportDataPreview(value, maxBytes);\n\t\treturn { ...reduced, truncated: true };\n\t} catch {\n\t\treturn { json: \"null\", truncated: true };\n\t}\n}\n\n/**\n * Сначала уменьшаем тяжёлые значения кэша, сохраняя ключи, статусы и ошибки.\n * Основные query/mutation отчёта сокращаются только после фонового снимка.\n */\nfunction reduceDataPreviews(payload: ErrorReportPayload, maxBytes: number, background: boolean): ErrorReportPayload {\n\tif (background) {\n\t\treturn {\n\t\t\t...payload,\n\t\t\tqueryClient: payload.queryClient\n\t\t\t\t? {\n\t\t\t\t\t\t...payload.queryClient,\n\t\t\t\t\t\tqueries: payload.queryClient.queries.map((query) => ({\n\t\t\t\t\t\t\t...query,\n\t\t\t\t\t\t\tdataPreview: reducePreview(query.dataPreview, maxBytes)\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tmutations: payload.queryClient.mutations.map((mutation) => ({\n\t\t\t\t\t\t\t...mutation,\n\t\t\t\t\t\t\tvariablesPreview: reducePreview(mutation.variablesPreview, maxBytes)\n\t\t\t\t\t\t}))\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tpersistedQueries: payload.persistedQueries?.map((query) => ({\n\t\t\t\t...query,\n\t\t\t\tdataPreview: reducePreview(query.dataPreview, maxBytes)\n\t\t\t}))\n\t\t};\n\t}\n\n\treturn {\n\t\t...payload,\n\t\tquery: payload.query ? { ...payload.query, dataPreview: reducePreview(payload.query.dataPreview, maxBytes) } : undefined,\n\t\tmutation: payload.mutation\n\t\t\t? { ...payload.mutation, variablesPreview: reducePreview(payload.mutation.variablesPreview, maxBytes) }\n\t\t\t: undefined\n\t};\n}\n\n/**\n * Удаляет диагностические секции в фиксированном порядке, пока payload не\n * помещается в transport/storage limit. Identity, классификация и ошибка\n * сохраняются всегда; маркер перечисляет каждую фактически удалённую секцию.\n */\nexport function limitErrorReportPayload(input: ErrorReportPayload): ErrorReportPayload {\n\tconst normalized = normalizePayloadStrings(input);\n\tconst originalBytes = getErrorReportPayloadSize(normalized);\n\tif (originalBytes <= ERROR_REPORT_PAYLOAD_MAX_BYTES) return normalized;\n\n\tconst droppedSections: string[] = [];\n\tlet payload: ErrorReportPayload = {\n\t\t...normalized,\n\t\ttruncation: {\n\t\t\treason: ERROR_REPORT_TRUNCATION_PAYLOAD_SIZE,\n\t\t\tlimitBytes: ERROR_REPORT_PAYLOAD_MAX_BYTES,\n\t\t\toriginalBytes,\n\t\t\tdroppedSections\n\t\t}\n\t};\n\n\tif (getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM) {\n\t\tfor (const previewLimit of REDUCED_PREVIEW_BYTE_LIMITS) {\n\t\t\tif (getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES) break;\n\t\t\tpayload = reduceDataPreviews(payload, previewLimit, true);\n\t\t\tif (getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES) break;\n\t\t\tpayload = reduceDataPreviews(payload, previewLimit, false);\n\t\t}\n\t}\n\n\tconst drop = (\n\t\tsection: string,\n\t\tisPresent: (current: ErrorReportPayload) => boolean,\n\t\tupdate: (current: ErrorReportPayload) => ErrorReportPayload\n\t) => {\n\t\tif (!isPresent(payload) || getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES) return;\n\t\tdroppedSections.push(section);\n\t\tpayload = update(payload);\n\t};\n\n\tif (getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM) {\n\t\tdrop(\n\t\t\t\"queryClient.queries:oldest\",\n\t\t\t(current) => (current.queryClient?.queries.length ?? 0) > REDUCED_QUERIES_MAX_ITEMS,\n\t\t\t(current) => ({\n\t\t\t\t...current,\n\t\t\t\tqueryClient: current.queryClient\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...current.queryClient,\n\t\t\t\t\t\t\tqueries: current.queryClient.queries.slice(-REDUCED_QUERIES_MAX_ITEMS),\n\t\t\t\t\t\t\tomittedQueries:\n\t\t\t\t\t\t\t\t(current.queryClient.omittedQueries ?? 0) + current.queryClient.queries.length - REDUCED_QUERIES_MAX_ITEMS\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t})\n\t\t);\n\t\tdrop(\n\t\t\t\"queryClient.mutations:oldest\",\n\t\t\t(current) => (current.queryClient?.mutations.length ?? 0) > REDUCED_MUTATIONS_MAX_ITEMS,\n\t\t\t(current) => ({\n\t\t\t\t...current,\n\t\t\t\tqueryClient: current.queryClient\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...current.queryClient,\n\t\t\t\t\t\t\tmutations: current.queryClient.mutations.slice(-REDUCED_MUTATIONS_MAX_ITEMS),\n\t\t\t\t\t\t\tomittedMutations:\n\t\t\t\t\t\t\t\t(current.queryClient.omittedMutations ?? 0) +\n\t\t\t\t\t\t\t\tcurrent.queryClient.mutations.length -\n\t\t\t\t\t\t\t\tREDUCED_MUTATIONS_MAX_ITEMS\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined\n\t\t\t})\n\t\t);\n\t\tdrop(\n\t\t\t\"persistedQueries:oldest\",\n\t\t\t(current) => (current.persistedQueries?.length ?? 0) > REDUCED_PERSISTED_QUERIES_MAX_ITEMS,\n\t\t\t(current) => ({ ...current, persistedQueries: current.persistedQueries?.slice(-REDUCED_PERSISTED_QUERIES_MAX_ITEMS) })\n\t\t);\n\t}\n\tdrop(\n\t\t\"queryClient\",\n\t\t(current) => current.queryClient !== undefined,\n\t\t(current) => ({ ...current, queryClient: undefined })\n\t);\n\tdrop(\n\t\t\"persistedQueries\",\n\t\t(current) => current.persistedQueries !== undefined,\n\t\t(current) => ({ ...current, persistedQueries: undefined })\n\t);\n\tdrop(\n\t\t\"context\",\n\t\t(current) => current.context !== undefined,\n\t\t(current) => ({ ...current, context: undefined })\n\t);\n\tdrop(\n\t\t\"query.meta\",\n\t\t(current) => current.query?.meta !== undefined,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tquery: current.query ? { ...current.query, meta: undefined } : undefined\n\t\t})\n\t);\n\tdrop(\n\t\t\"query.dataShape\",\n\t\t(current) => current.query?.dataShape !== undefined,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tquery: current.query ? { ...current.query, dataShape: undefined } : undefined\n\t\t})\n\t);\n\tdrop(\n\t\t\"mutation.meta\",\n\t\t(current) => current.mutation?.meta !== undefined,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tmutation: current.mutation ? { ...current.mutation, meta: undefined } : undefined\n\t\t})\n\t);\n\tdrop(\n\t\t\"breadcrumbs:oldest\",\n\t\t(current) => current.breadcrumbs.length > REDUCED_BREADCRUMBS_MAX_ITEMS,\n\t\t(current) => ({\n\t\t\t...current,\n\t\t\tbreadcrumbs: current.breadcrumbs.slice(-REDUCED_BREADCRUMBS_MAX_ITEMS)\n\t\t})\n\t);\n\tdrop(\n\t\t\"query\",\n\t\t(current) => current.query !== undefined,\n\t\t(current) => ({ ...current, query: undefined })\n\t);\n\tdrop(\n\t\t\"mutation\",\n\t\t(current) => current.mutation !== undefined,\n\t\t(current) => ({ ...current, mutation: undefined })\n\t);\n\tdrop(\n\t\t\"react\",\n\t\t(current) => current.react !== undefined,\n\t\t(current) => ({ ...current, react: undefined })\n\t);\n\tdrop(\n\t\t\"breadcrumbs\",\n\t\t(current) => current.breadcrumbs.length > 0,\n\t\t(current) => ({ ...current, breadcrumbs: [] })\n\t);\n\tdrop(\n\t\t\"client\",\n\t\t(current) => current.client !== undefined,\n\t\t(current) => ({ ...current, client: undefined })\n\t);\n\tdrop(\n\t\t\"viewport\",\n\t\t(current) => current.viewport !== undefined,\n\t\t(current) => ({ ...current, viewport: undefined })\n\t);\n\n\treturn payload;\n}\n","import { normalizeText } from \"../formatters\";\n\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport { ERROR_REPORT_ERROR_NAME_MAX_LENGTH, ERROR_REPORT_ERROR_CODE_MAX_LENGTH } from \"./errorReportCaptureLimits\";\nimport { ERROR_REPORT_STACK_TRACE_MAX_BYTES, ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES } from \"./payload\";\nimport { sanitizeDiagnosticText, sanitizeDiagnosticTextBytes } from \"./safeValue\";\n\nimport type { ErrorReportErrorInfo } from \"./types\";\n\nconst DEFAULT_ERROR_MESSAGE = \"Неизвестная ошибка\";\nconst DEFAULT_ERROR_NAME = \"Error\";\n\n/**\n * Гарантирует непустое диагностическое сообщение, сохраняя исходный текст ошибки.\n * Fallback нужен для Error без message и для брошенных пустых строк.\n */\nfunction resolveErrorMessage(message: string) {\n\tif (!normalizeText(message)) return DEFAULT_ERROR_MESSAGE;\n\treturn getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM\n\t\t? sanitizeDiagnosticTextBytes(message, ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES)\n\t\t: sanitizeDiagnosticText(message);\n}\n\nfunction readStatus(value: Record<string, unknown>) {\n\tconst status = value.status ?? value.statusCode ?? value.httpStatus;\n\treturn typeof status === \"number\" && Number.isFinite(status) ? status : undefined;\n}\n\nfunction readServerFnTransportErrorInfo(error: unknown): ErrorReportErrorInfo | null {\n\tif (!error || typeof error !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst transport = error as Record<string, unknown>;\n\tconst appError = transport.appError;\n\tif (!appError || typeof appError !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst payload = appError as Record<string, unknown>;\n\tconst message = normalizeText(payload.message);\n\tif (!message) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tname: \"AppError\",\n\t\tmessage: resolveErrorMessage(message),\n\t\tcode: normalizeText(payload.code) ? sanitizeDiagnosticText(String(payload.code), ERROR_REPORT_ERROR_CODE_MAX_LENGTH) : undefined,\n\t\thttpStatus: readStatus(payload)\n\t};\n}\n\n/**\n * Нормализует любое брошенное значение в форму, удобную для поиска и сохранения.\n * Stacktrace сохраняется до 64 KiB как основной диагностический контекст;\n * в verbatim-режиме превышение этого предела отмечается внутри строки.\n */\nexport function createErrorInfo(error: unknown): ErrorReportErrorInfo {\n\tconst serverFnErrorInfo = readServerFnTransportErrorInfo(error);\n\tif (serverFnErrorInfo) {\n\t\treturn serverFnErrorInfo;\n\t}\n\n\tif (error instanceof Error) {\n\t\treturn {\n\t\t\tname: sanitizeDiagnosticText(error.name || DEFAULT_ERROR_NAME, ERROR_REPORT_ERROR_NAME_MAX_LENGTH),\n\t\t\tmessage: resolveErrorMessage(error.message),\n\t\t\tstackTrace: error.stack ? sanitizeDiagnosticTextBytes(error.stack, ERROR_REPORT_STACK_TRACE_MAX_BYTES) : undefined\n\t\t};\n\t}\n\n\tif (error && typeof error === \"object\") {\n\t\tconst record = error as Record<string, unknown>;\n\t\treturn {\n\t\t\tname: sanitizeDiagnosticText(\n\t\t\t\ttypeof record.name === \"string\" ? record.name : DEFAULT_ERROR_NAME,\n\t\t\t\tERROR_REPORT_ERROR_NAME_MAX_LENGTH\n\t\t\t),\n\t\t\tmessage: resolveErrorMessage(typeof record.message === \"string\" ? record.message : String(error)),\n\t\t\tstackTrace:\n\t\t\t\ttypeof record.stack === \"string\"\n\t\t\t\t\t? sanitizeDiagnosticTextBytes(record.stack, ERROR_REPORT_STACK_TRACE_MAX_BYTES)\n\t\t\t\t\t: undefined,\n\t\t\thttpStatus: readStatus(record)\n\t\t};\n\t}\n\n\treturn {\n\t\tname: DEFAULT_ERROR_NAME,\n\t\tmessage: resolveErrorMessage(typeof error === \"string\" ? error : String(error ?? DEFAULT_ERROR_MESSAGE))\n\t};\n}\n","import { hashString128 } from \"../crypto\";\nimport { stableStringify } from \"../utils\";\n\nimport { type ERROR_REPORT_CATEGORY_RUNTIME, type ERROR_REPORT_CATEGORY_REACT } from \"./errorReportContractConstants\";\n\nimport type { ErrorReportDraft, ErrorReportErrorInfo, ErrorReportSafeValue } from \"./types\";\n\nexport const RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS = 60_000;\n\nconst MAX_RECENT_RUNTIME_ERROR_REPORTS = 100;\nconst recentRuntimeErrorReports = new Map<\n\tstring,\n\t{\n\t\tcapturedAt: number;\n\t\tcapture: Promise<ErrorReportDraft | undefined>;\n\t\texpirationTimer: ReturnType<typeof setTimeout>;\n\t}\n>();\n\ntype RuntimeErrorReportDeduplicationInput = {\n\tcategory: typeof ERROR_REPORT_CATEGORY_RUNTIME | typeof ERROR_REPORT_CATEGORY_REACT;\n\tsource: string;\n\terror: ErrorReportErrorInfo;\n\tpathname?: string;\n\tscope?: {\n\t\tcomponentStack?: string;\n\t\tdetail?: Record<string, ErrorReportSafeValue>;\n\t};\n};\n\nfunction normalizeStackTrace(stackTrace: string | undefined) {\n\tif (!stackTrace) return undefined;\n\n\treturn stackTrace\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.trim())\n\t\t.filter(Boolean);\n}\n\nfunction createRuntimeErrorReportFingerprint(input: RuntimeErrorReportDeduplicationInput) {\n\treturn hashString128(\n\t\tstableStringify({\n\t\t\tcategory: input.category,\n\t\t\tsource: input.source,\n\t\t\terror: {\n\t\t\t\t...input.error,\n\t\t\t\tstackTrace: normalizeStackTrace(input.error.stackTrace)\n\t\t\t},\n\t\t\tpathname: input.pathname,\n\t\t\tscope: input.scope\n\t\t})\n\t);\n}\n\n/**\n * Удаляет только ожидаемую запись и освобождает связанный таймер.\n * Проверка Promise защищает новую запись того же fingerprint от завершения\n * или отклонения старого capture после lifecycle-сброса.\n */\nfunction removeRuntimeErrorReport(fingerprint: string, expectedCapture?: Promise<ErrorReportDraft | undefined>) {\n\tconst recentReport = recentRuntimeErrorReports.get(fingerprint);\n\tif (!recentReport || (expectedCapture && recentReport.capture !== expectedCapture)) {\n\t\treturn;\n\t}\n\n\tclearTimeout(recentReport.expirationTimer);\n\trecentRuntimeErrorReports.delete(fingerprint);\n}\n\nfunction removeExpiredRuntimeErrorReports(now: number) {\n\tfor (const [fingerprint, recentReport] of recentRuntimeErrorReports) {\n\t\tif (now - recentReport.capturedAt >= RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS) {\n\t\t\tremoveRuntimeErrorReport(fingerprint, recentReport.capture);\n\t\t}\n\t}\n}\n\nfunction removeOldestRuntimeErrorReport() {\n\tconst oldestFingerprint = recentRuntimeErrorReports.keys().next().value;\n\tif (oldestFingerprint) {\n\t\tremoveRuntimeErrorReport(oldestFingerprint);\n\t}\n}\n\n/**\n * Объединяет одинаковые runtime capture-вызовы вокруг одной Promise.\n * Все потребители получают один draft, поэтому capture-only boundary не может\n * заблокировать последующую app-level доставку того же отчёта.\n */\nexport function coalesceRuntimeErrorReportCapture(\n\tinput: RuntimeErrorReportDeduplicationInput,\n\tcapture: () => Promise<ErrorReportDraft | undefined>\n) {\n\tconst now = Date.now();\n\tconst fingerprint = createRuntimeErrorReportFingerprint(input);\n\tconst recentReport = recentRuntimeErrorReports.get(fingerprint);\n\n\tif (recentReport && now - recentReport.capturedAt < RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS) {\n\t\treturn recentReport.capture;\n\t}\n\n\tremoveExpiredRuntimeErrorReports(now);\n\twhile (recentRuntimeErrorReports.size >= MAX_RECENT_RUNTIME_ERROR_REPORTS) {\n\t\tremoveOldestRuntimeErrorReport();\n\t}\n\n\tconst capturePromise = capture();\n\tconst expirationTimer = setTimeout(() => {\n\t\tremoveRuntimeErrorReport(fingerprint, capturePromise);\n\t}, RUNTIME_ERROR_REPORT_DEDUPLICATION_WINDOW_MS);\n\n\trecentRuntimeErrorReports.set(fingerprint, {\n\t\tcapturedAt: now,\n\t\tcapture: capturePromise,\n\t\texpirationTimer\n\t});\n\n\tvoid capturePromise.catch(() => {\n\t\tremoveRuntimeErrorReport(fingerprint, capturePromise);\n\t});\n\n\treturn capturePromise;\n}\n\n/**\n * Очищает модульное состояние при смене app-level runtime reporter.\n * Функция не входит в публичный package subpath и нужна lifecycle-коду и тестам.\n */\nexport function clearRuntimeErrorReportDeduplication() {\n\tfor (const recentReport of recentRuntimeErrorReports.values()) {\n\t\tclearTimeout(recentReport.expirationTimer);\n\t}\n\trecentRuntimeErrorReports.clear();\n}\n","import { z } from \"zod\";\n\nimport {\n\tERROR_REPORT_SAFE_STRING_MAX_LENGTH,\n\tERROR_REPORT_SAFE_ARRAY_MAX_ITEMS,\n\tERROR_REPORT_SAFE_OBJECT_MAX_KEYS,\n\tERROR_REPORT_DATA_PREVIEW_MAX_BYTES,\n\tERROR_REPORT_ERROR_NAME_MAX_LENGTH,\n\tERROR_REPORT_ERROR_CODE_MAX_LENGTH,\n\tERROR_REPORT_UTC_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH,\n\tERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH,\n\tERROR_REPORT_QUERY_HASH_MAX_LENGTH,\n\tERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH,\n\tERROR_REPORT_APPLICATION_MAX_LENGTH,\n\tERROR_REPORT_SOURCE_MAX_LENGTH,\n\tERROR_REPORT_BUILD_ID_MAX_LENGTH,\n\tERROR_REPORT_LANGUAGE_MAX_LENGTH,\n\tERROR_REPORT_TIME_ZONE_MAX_LENGTH,\n\tERROR_REPORT_LOCATION_MAX_LENGTH,\n\tERROR_REPORT_COMPONENT_STACK_MAX_BYTES,\n\tERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_BREADCRUMBS_MAX_ITEMS\n} from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_BREADCRUMB_ROUTE,\n\tERROR_REPORT_BREADCRUMB_CLICK,\n\tERROR_REPORT_BREADCRUMB_VISIBILITY,\n\tERROR_REPORT_BREADCRUMB_QUERY_ERROR,\n\tERROR_REPORT_BREADCRUMB_MUTATION_ERROR,\n\tERROR_REPORT_BREADCRUMB_RUNTIME_ERROR,\n\tERROR_REPORT_CATEGORY_QUERY,\n\tERROR_REPORT_CATEGORY_MUTATION,\n\tERROR_REPORT_CATEGORY_RUNTIME,\n\tERROR_REPORT_CATEGORY_REACT,\n\tERROR_REPORT_MODE_DEVELOPMENT,\n\tERROR_REPORT_MODE_PRODUCTION,\n\tERROR_REPORT_TRUNCATION_PAYLOAD_SIZE,\n\tERROR_REPORT_STATUS_PENDING,\n\tERROR_REPORT_STATUS_SENDING,\n\tERROR_REPORT_STATUS_SENT,\n\tERROR_REPORT_STATUS_FAILED\n} from \"./errorReportContractConstants\";\nimport {\n\tERROR_REPORT_PAYLOAD_MAX_BYTES,\n\tERROR_REPORT_PAYLOAD_VERSION,\n\tERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES,\n\tERROR_REPORT_STACK_TRACE_MAX_BYTES,\n\tgetErrorReportPayloadSize\n} from \"./payload\";\nimport { getUtf8TextSize } from \"./safeValue\";\n\nimport type { ErrorReportDraft, ErrorReportPayload, ErrorReportSafeValue } from \"./types\";\n\nconst ERROR_REPORT_QUERY_STATUS_MAX_LENGTH = 64;\nconst ERROR_REPORT_QUERY_FETCH_STATUS_MAX_LENGTH = 64;\nconst ERROR_REPORT_MUTATION_STATUS_MAX_LENGTH = 64;\nconst USER_AGENT_MAX_LENGTH = 4_096;\nconst FAILED_REASON_MAX_LENGTH = 4_096;\nconst DROPPED_SECTION_LABEL_MAX_LENGTH = 128;\nconst DROPPED_SECTIONS_MAX_ITEMS = 32;\nconst DRAFT_METADATA_MAX_BYTES = 16 * 1_024;\n\nconst safeValueSchema: z.ZodType<ErrorReportSafeValue> = z.lazy(() =>\n\tz.union([\n\t\tz.string().max(ERROR_REPORT_SAFE_STRING_MAX_LENGTH),\n\t\tz.number().finite(),\n\t\tz.boolean(),\n\t\tz.null(),\n\t\tz.array(safeValueSchema).max(ERROR_REPORT_SAFE_ARRAY_MAX_ITEMS),\n\t\tz.record(z.string(), safeValueSchema).refine((value) => Object.keys(value).length <= ERROR_REPORT_SAFE_OBJECT_MAX_KEYS)\n\t])\n);\n\nconst safeRecordSchema = z\n\t.record(z.string(), safeValueSchema)\n\t.refine((value) => Object.keys(value).length <= ERROR_REPORT_SAFE_OBJECT_MAX_KEYS);\nconst dataPreviewSchema = z\n\t.object({\n\t\tjson: z.string().refine((value) => {\n\t\t\tif (getUtf8TextSize(value) > ERROR_REPORT_DATA_PREVIEW_MAX_BYTES) return false;\n\t\t\ttry {\n\t\t\t\tJSON.parse(value);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}),\n\t\ttruncated: z.boolean()\n\t})\n\t.strict();\nconst errorInfoSchema = z\n\t.object({\n\t\tname: z.string().min(1).max(ERROR_REPORT_ERROR_NAME_MAX_LENGTH),\n\t\tmessage: z\n\t\t\t.string()\n\t\t\t.min(1)\n\t\t\t.max(ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES)\n\t\t\t.refine((value) => getUtf8TextSize(value) <= ERROR_REPORT_VERBATIM_MESSAGE_MAX_BYTES),\n\t\tcode: z.string().max(ERROR_REPORT_ERROR_CODE_MAX_LENGTH).optional(),\n\t\tstackTrace: z\n\t\t\t.string()\n\t\t\t.refine((value) => getUtf8TextSize(value) <= ERROR_REPORT_STACK_TRACE_MAX_BYTES)\n\t\t\t.optional(),\n\t\thttpStatus: z.number().finite().optional()\n\t})\n\t.strict();\nconst breadcrumbSchema = z\n\t.object({\n\t\tutc: z.string().min(1).max(ERROR_REPORT_UTC_MAX_LENGTH),\n\t\ttype: z.enum([\n\t\t\tERROR_REPORT_BREADCRUMB_ROUTE,\n\t\t\tERROR_REPORT_BREADCRUMB_CLICK,\n\t\t\tERROR_REPORT_BREADCRUMB_VISIBILITY,\n\t\t\tERROR_REPORT_BREADCRUMB_QUERY_ERROR,\n\t\t\tERROR_REPORT_BREADCRUMB_MUTATION_ERROR,\n\t\t\tERROR_REPORT_BREADCRUMB_RUNTIME_ERROR\n\t\t]),\n\t\trouteId: z.string().max(ERROR_REPORT_BREADCRUMB_ROUTE_MAX_LENGTH).optional(),\n\t\tappId: z.string().max(ERROR_REPORT_BREADCRUMB_APP_MAX_LENGTH).optional(),\n\t\tviewId: z.string().max(ERROR_REPORT_BREADCRUMB_VIEW_MAX_LENGTH).optional(),\n\t\ttarget: z.string().max(ERROR_REPORT_BREADCRUMB_TARGET_MAX_LENGTH).optional(),\n\t\tdetail: safeRecordSchema.optional()\n\t})\n\t.strict();\nconst queryDiagnosticsSchema = z\n\t.object({\n\t\tqueryHash: z.string().max(ERROR_REPORT_QUERY_HASH_MAX_LENGTH),\n\t\tqueryKey: safeValueSchema,\n\t\tstatus: z.string().max(ERROR_REPORT_QUERY_STATUS_MAX_LENGTH).optional(),\n\t\tfetchStatus: z.string().max(ERROR_REPORT_QUERY_FETCH_STATUS_MAX_LENGTH).optional(),\n\t\tdataUpdatedAt: z.number().finite().optional(),\n\t\terrorUpdatedAt: z.number().finite().optional(),\n\t\tfailureCount: z.number().finite().optional(),\n\t\tisInvalidated: z.boolean().optional(),\n\t\tobserversCount: z.number().finite().optional(),\n\t\tmeta: safeRecordSchema.optional(),\n\t\tdataShape: safeValueSchema.optional(),\n\t\tdataPreview: dataPreviewSchema.optional(),\n\t\terror: errorInfoSchema.optional()\n\t})\n\t.strict();\nconst mutationDiagnosticsSchema = z\n\t.object({\n\t\tmutationKey: safeValueSchema.optional(),\n\t\tstatus: z.string().max(ERROR_REPORT_MUTATION_STATUS_MAX_LENGTH).optional(),\n\t\tfailureCount: z.number().finite().optional(),\n\t\tsubmittedAt: z.number().finite().optional(),\n\t\tmeta: safeRecordSchema.optional(),\n\t\tvariablesPreview: dataPreviewSchema.optional(),\n\t\terror: errorInfoSchema.optional()\n\t})\n\t.strict();\nconst persistedQueryDiagnosticsSchema = z\n\t.object({\n\t\tbuster: z.string().max(ERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH).optional(),\n\t\tqueryHash: z.string().max(ERROR_REPORT_QUERY_HASH_MAX_LENGTH).optional(),\n\t\tqueryKey: safeValueSchema.optional(),\n\t\tstatus: z.string().max(ERROR_REPORT_QUERY_STATUS_MAX_LENGTH).optional(),\n\t\tfetchStatus: z.string().max(ERROR_REPORT_QUERY_FETCH_STATUS_MAX_LENGTH).optional(),\n\t\tdataUpdatedAt: z.number().finite().optional(),\n\t\terrorUpdatedAt: z.number().finite().optional(),\n\t\tfailureCount: z.number().finite().optional(),\n\t\tdataPreview: dataPreviewSchema.optional(),\n\t\terror: errorInfoSchema.optional()\n\t})\n\t.strict();\n\nconst errorReportPayloadSchema: z.ZodType<ErrorReportPayload> = z\n\t.object({\n\t\tpayloadVersion: z.literal(ERROR_REPORT_PAYLOAD_VERSION),\n\t\tapplication: z.string().min(1).max(ERROR_REPORT_APPLICATION_MAX_LENGTH),\n\t\treportId: z.string().uuid(),\n\t\tsessionId: z.string().uuid(),\n\t\tcreatedUtc: z.string().min(1).max(ERROR_REPORT_UTC_MAX_LENGTH),\n\t\tcategory: z.enum([\n\t\t\tERROR_REPORT_CATEGORY_QUERY,\n\t\t\tERROR_REPORT_CATEGORY_MUTATION,\n\t\t\tERROR_REPORT_CATEGORY_RUNTIME,\n\t\t\tERROR_REPORT_CATEGORY_REACT\n\t\t]),\n\t\tsource: z.string().min(1).max(ERROR_REPORT_SOURCE_MAX_LENGTH),\n\t\terror: errorInfoSchema,\n\t\tenvironment: z\n\t\t\t.object({\n\t\t\t\tmode: z.enum([ERROR_REPORT_MODE_DEVELOPMENT, ERROR_REPORT_MODE_PRODUCTION]),\n\t\t\t\tbuildId: z.string().max(ERROR_REPORT_BUILD_ID_MAX_LENGTH).optional()\n\t\t\t})\n\t\t\t.strict(),\n\t\tclient: z\n\t\t\t.object({\n\t\t\t\tuserAgent: z.string().max(USER_AGENT_MAX_LENGTH).optional(),\n\t\t\t\tlanguage: z.string().max(ERROR_REPORT_LANGUAGE_MAX_LENGTH).optional(),\n\t\t\t\ttimeZone: z.string().max(ERROR_REPORT_TIME_ZONE_MAX_LENGTH).optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tlocation: z\n\t\t\t.object({\n\t\t\t\tpathname: z.string().max(ERROR_REPORT_LOCATION_MAX_LENGTH),\n\t\t\t\torigin: z.string().max(ERROR_REPORT_LOCATION_MAX_LENGTH).optional(),\n\t\t\t\tsearch: z.string().max(ERROR_REPORT_LOCATION_MAX_LENGTH).optional(),\n\t\t\t\thash: z.string().max(ERROR_REPORT_LOCATION_MAX_LENGTH).optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tviewport: z\n\t\t\t.object({\n\t\t\t\twidth: z.number().finite(),\n\t\t\t\theight: z.number().finite(),\n\t\t\t\tdevicePixelRatio: z.number().finite().optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\treact: z\n\t\t\t.object({\n\t\t\t\tcomponentStack: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.refine((value) => getUtf8TextSize(value) <= ERROR_REPORT_COMPONENT_STACK_MAX_BYTES)\n\t\t\t\t\t.optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tquery: queryDiagnosticsSchema.optional(),\n\t\tmutation: mutationDiagnosticsSchema.optional(),\n\t\tqueryClient: z\n\t\t\t.object({\n\t\t\t\tqueries: z.array(queryDiagnosticsSchema).max(ERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS),\n\t\t\t\tmutations: z.array(mutationDiagnosticsSchema).max(ERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS),\n\t\t\t\tomittedQueries: z.number().int().nonnegative().optional(),\n\t\t\t\tomittedMutations: z.number().int().nonnegative().optional()\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional(),\n\t\tpersistedQueries: z.array(persistedQueryDiagnosticsSchema).max(ERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS).optional(),\n\t\tbreadcrumbs: z.array(breadcrumbSchema).max(ERROR_REPORT_BREADCRUMBS_MAX_ITEMS),\n\t\tcontext: safeRecordSchema.optional(),\n\t\ttruncation: z\n\t\t\t.object({\n\t\t\t\treason: z.literal(ERROR_REPORT_TRUNCATION_PAYLOAD_SIZE),\n\t\t\t\tlimitBytes: z.literal(ERROR_REPORT_PAYLOAD_MAX_BYTES),\n\t\t\t\toriginalBytes: z.number().int().positive(),\n\t\t\t\tdroppedSections: z.array(z.string().max(DROPPED_SECTION_LABEL_MAX_LENGTH)).max(DROPPED_SECTIONS_MAX_ITEMS)\n\t\t\t})\n\t\t\t.strict()\n\t\t\t.optional()\n\t})\n\t.strict()\n\t.refine((payload) => getErrorReportPayloadSize(payload) <= ERROR_REPORT_PAYLOAD_MAX_BYTES);\n\nconst errorReportDraftSchema: z.ZodType<ErrorReportDraft> = z\n\t.object({\n\t\treportId: z.string().uuid(),\n\t\tsessionId: z.string().uuid(),\n\t\tcreatedUtc: z.string().min(1).max(ERROR_REPORT_UTC_MAX_LENGTH),\n\t\tcategory: z.enum([\n\t\t\tERROR_REPORT_CATEGORY_QUERY,\n\t\t\tERROR_REPORT_CATEGORY_MUTATION,\n\t\t\tERROR_REPORT_CATEGORY_RUNTIME,\n\t\t\tERROR_REPORT_CATEGORY_REACT\n\t\t]),\n\t\tstatus: z.enum([ERROR_REPORT_STATUS_PENDING, ERROR_REPORT_STATUS_SENDING, ERROR_REPORT_STATUS_SENT, ERROR_REPORT_STATUS_FAILED]),\n\t\tsentUtc: z.string().min(1).max(ERROR_REPORT_UTC_MAX_LENGTH).optional(),\n\t\tfailedReason: z.string().max(FAILED_REASON_MAX_LENGTH).optional(),\n\t\tpayload: errorReportPayloadSchema\n\t})\n\t.strict()\n\t.superRefine((draft, context) => {\n\t\tconst matchingIdentity =\n\t\t\tdraft.reportId === draft.payload.reportId &&\n\t\t\tdraft.sessionId === draft.payload.sessionId &&\n\t\t\tdraft.createdUtc === draft.payload.createdUtc &&\n\t\t\tdraft.category === draft.payload.category;\n\n\t\tif (!matchingIdentity) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"Draft identity должна совпадать с payload identity.\"\n\t\t\t});\n\t\t}\n\t});\n\nfunction isSerializedInputWithinLimit(value: unknown, maxBytes: number) {\n\ttry {\n\t\treturn new TextEncoder().encode(JSON.stringify(value)).byteLength <= maxBytes;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Парсит только текущую versioned форму. Unversioned и будущие payload\n * отклоняются явно, чтобы storage/delivery не угадывали форму контракта.\n */\nexport function parseErrorReportPayload(value: unknown) {\n\tif (!isSerializedInputWithinLimit(value, ERROR_REPORT_PAYLOAD_MAX_BYTES)) return undefined;\n\n\ttry {\n\t\tconst result = errorReportPayloadSchema.safeParse(value);\n\t\treturn result.success ? result.data : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Проверяет одну draft-запись, включая совпадение её identity с payload. */\nexport function parseErrorReportDraft(value: unknown) {\n\tif (!isSerializedInputWithinLimit(value, ERROR_REPORT_PAYLOAD_MAX_BYTES + DRAFT_METADATA_MAX_BYTES)) return undefined;\n\n\ttry {\n\t\tconst result = errorReportDraftSchema.safeParse(value);\n\t\treturn result.success ? result.data : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Восстанавливает все валидные drafts независимо: одна повреждённая запись не\n * должна уничтожить остальные элементы browser storage.\n */\nexport function parseErrorReportDrafts(value: unknown) {\n\tif (!Array.isArray(value)) return [];\n\treturn value.flatMap((draft) => {\n\t\tconst parsed = parseErrorReportDraft(draft);\n\t\treturn parsed ? [parsed] : [];\n\t});\n}\n","import { uuidv4 } from \"../crypto\";\nimport { getSessionStorageId } from \"../session-storage\";\n\nimport { clearRuntimeErrorReportDeduplication } from \"./runtimeDeduplication\";\nimport { parseErrorReportDrafts } from \"./schema\";\nimport { type ErrorReportDraft } from \"./types\";\n\nconst STORAGE_KEY = `${__APP_ID__}.errorReport.drafts.v2`;\nconst SESSION_STORAGE_KEY = `${__APP_ID__}.errorReport.sessionId.v1`;\nconst MAX_DRAFTS = 10;\n\nlet browserStorageDisabled = false;\nlet browserDrafts: ErrorReportDraft[] | undefined;\nlet memoryDrafts: ErrorReportDraft[] = [];\nlet memorySessionId: string | undefined;\n\n/**\n * До конца текущего browser document переводит capture, drafts и persisted\n * diagnostics в память. Повторный вызов безопасен; capture options и reporter\n * lifecycle не включают storage обратно. При SSR вызов ничего не меняет.\n *\n * Вызывать до первого capture. Уже начатое чтение отменить нельзя, но его\n * поздний результат не попадёт в memory draft. Существующие browser records\n * не удаляются. Явно созданная createErrorReportQueue независима: приложение\n * обязано отдельно исключить её создание и доставку в таком документе.\n */\nexport function disableErrorReportBrowserStorage(): void {\n\tif (typeof window === \"undefined\" || browserStorageDisabled) return;\n\n\tbrowserStorageDisabled = true;\n\t// Снимок обычного режима не становится исходным содержимым memory store.\n\tbrowserDrafts = undefined;\n\tclearRuntimeErrorReportDeduplication();\n}\n\n/** Односторонняя граница проверяется и после await: обратного перехода нет. */\nexport function canUseErrorReportBrowserStorage(): boolean {\n\treturn !browserStorageDisabled;\n}\n\nexport function readErrorReportDrafts(): ErrorReportDraft[] {\n\tif (browserStorageDisabled) return memoryDrafts;\n\tif (browserDrafts === undefined) {\n\t\t// Lazy read позволяет выбрать memory policy даже после импорта subpath.\n\t\tbrowserDrafts = [];\n\t\tif (typeof sessionStorage !== \"undefined\") {\n\t\t\ttry {\n\t\t\t\tconst raw = sessionStorage.getItem(STORAGE_KEY);\n\t\t\t\tbrowserDrafts = parseErrorReportDrafts(raw ? JSON.parse(raw) : []);\n\t\t\t} catch {\n\t\t\t\t// Недоступное или повреждённое storage не ломает диагностику.\n\t\t\t}\n\t\t}\n\t}\n\n\treturn browserDrafts;\n}\n\nexport function saveErrorReportDrafts(nextDrafts: ErrorReportDraft[]): void {\n\tconst boundedDrafts = nextDrafts.slice(-MAX_DRAFTS);\n\tif (browserStorageDisabled) {\n\t\tmemoryDrafts = boundedDrafts;\n\t\treturn;\n\t}\n\n\tbrowserDrafts = boundedDrafts;\n\tif (typeof sessionStorage === \"undefined\") return;\n\n\ttry {\n\t\tsessionStorage.setItem(STORAGE_KEY, JSON.stringify(browserDrafts));\n\t} catch {\n\t\t// Переполнение sessionStorage не должно ломать пользовательский сценарий.\n\t}\n}\n\nexport function getErrorReportSessionId(): string {\n\tif (browserStorageDisabled) {\n\t\tmemorySessionId ??= uuidv4();\n\t\treturn memorySessionId;\n\t}\n\n\treturn getSessionStorageId(SESSION_STORAGE_KEY);\n}\n","import { type PersistedQuery } from \"@tanstack/query-persist-client-core\";\nimport { type MutationKey, type MutationState, type QueryClient, type QueryKey, type QueryState } from \"@tanstack/react-query\";\n\nimport { hashString128 } from \"../crypto\";\nimport { createIndexedDbQueryStorage } from \"../query-client\";\nimport { stableStringify } from \"../utils\";\n\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport { createErrorReportDataPreview } from \"./dataPreview\";\nimport { createErrorInfo } from \"./errorInfo\";\nimport {\n\tERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH,\n\tERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS,\n\tERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS\n} from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_SCOPE_MUTATION_META,\n\tERROR_REPORT_SCOPE_QUERY_META,\n\tERROR_REPORT_SCOPE_QUERY_KEY,\n\tERROR_REPORT_SCOPE_QUERY_DATA_SHAPE,\n\tERROR_REPORT_SCOPE_MUTATION_KEY,\n\tERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY\n} from \"./errorReportContractConstants\";\nimport { canUseErrorReportBrowserStorage } from \"./errorReportStorage\";\nimport { createDataShape, sanitizeDetail, sanitizeDiagnosticText, sanitizeErrorReportValue } from \"./safeValue\";\nimport { SAFE_VALUE_TYPE_REDACTED } from \"./safeValueMarkerConstants\";\nimport {\n\ttype ErrorReportMutationDiagnostics,\n\ttype ErrorReportPersistedQueryDiagnostics,\n\ttype ErrorReportQueryDiagnostics,\n\ttype ErrorReportSafeValue\n} from \"./types\";\n\ntype QueryDiagnosticSource = {\n\tqueryHash: string;\n\tqueryKey: QueryKey;\n\tstate: QueryState<unknown, unknown>;\n\tmeta?: Record<string, unknown>;\n\tgetObserversCount: () => number;\n};\n\ntype MutationDiagnosticSource = {\n\toptions: {\n\t\tmutationKey?: MutationKey;\n\t};\n\tstate: MutationState<unknown, unknown, unknown, unknown>;\n\tmeta?: Record<string, unknown>;\n};\n\nfunction sanitizeMeta(\n\tmeta: Record<string, unknown> | undefined,\n\tscope: typeof ERROR_REPORT_SCOPE_MUTATION_META | typeof ERROR_REPORT_SCOPE_QUERY_META,\n\tsource?: string\n): Record<string, ErrorReportSafeValue> | undefined {\n\treturn sanitizeDetail(meta, { scope, source });\n}\n\nexport function collectQueryDiagnostics(query: QueryDiagnosticSource): ErrorReportQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\tconst queryKey = sanitizeErrorReportValue(query.queryKey, { scope: ERROR_REPORT_SCOPE_QUERY_KEY }) ?? {\n\t\ttype: SAFE_VALUE_TYPE_REDACTED\n\t};\n\tconst queryHash =\n\t\tcaptureOptions.valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM\n\t\t\t? hashString128(query.queryHash)\n\t\t\t: hashString128(stableStringify(queryKey));\n\n\treturn {\n\t\tqueryHash,\n\t\tqueryKey,\n\t\tstatus: query.state.status,\n\t\tfetchStatus: query.state.fetchStatus,\n\t\tdataUpdatedAt: query.state.dataUpdatedAt,\n\t\terrorUpdatedAt: query.state.errorUpdatedAt,\n\t\tfailureCount: query.state.fetchFailureCount,\n\t\tisInvalidated: query.state.isInvalidated,\n\t\tobserversCount: query.getObserversCount(),\n\t\tmeta: sanitizeMeta(query.meta, ERROR_REPORT_SCOPE_QUERY_META, queryHash),\n\t\tdataShape: sanitizeErrorReportValue(createDataShape(query.state.data), {\n\t\t\tscope: ERROR_REPORT_SCOPE_QUERY_DATA_SHAPE,\n\t\t\tsource: queryHash\n\t\t}),\n\t\tdataPreview:\n\t\t\tcaptureOptions.valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM &&\n\t\t\tcaptureOptions.dataPreviewBytes.query > 0 &&\n\t\t\tquery.state.data !== undefined\n\t\t\t\t? createErrorReportDataPreview(query.state.data, captureOptions.dataPreviewBytes.query)\n\t\t\t\t: undefined,\n\t\terror: query.state.error ? createErrorInfo(query.state.error) : undefined\n\t};\n}\n\nexport function collectMutationDiagnostics(mutation: MutationDiagnosticSource): ErrorReportMutationDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\treturn {\n\t\tmutationKey: mutation.options.mutationKey\n\t\t\t? sanitizeErrorReportValue(mutation.options.mutationKey, { scope: ERROR_REPORT_SCOPE_MUTATION_KEY })\n\t\t\t: undefined,\n\t\tstatus: mutation.state.status,\n\t\tfailureCount: mutation.state.failureCount,\n\t\tsubmittedAt: mutation.state.submittedAt,\n\t\tmeta: sanitizeMeta(mutation.meta, ERROR_REPORT_SCOPE_MUTATION_META),\n\t\tvariablesPreview:\n\t\t\tcaptureOptions.valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM &&\n\t\t\tcaptureOptions.dataPreviewBytes.mutation > 0 &&\n\t\t\tmutation.state.variables !== undefined\n\t\t\t\t? createErrorReportDataPreview(mutation.state.variables, captureOptions.dataPreviewBytes.mutation)\n\t\t\t\t: undefined,\n\t\terror: mutation.state.error ? createErrorInfo(mutation.state.error) : undefined\n\t};\n}\n\nexport function collectQueryClientDiagnostics(queryClient: QueryClient) {\n\tconst queries = queryClient.getQueryCache().getAll();\n\tconst mutations = queryClient.getMutationCache().getAll();\n\treturn {\n\t\tqueries: queries.slice(-ERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS).map(collectQueryDiagnostics),\n\t\tmutations: mutations.slice(-ERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS).map(collectMutationDiagnostics),\n\t\t...(getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM\n\t\t\t? {\n\t\t\t\t\tomittedQueries: Math.max(0, queries.length - ERROR_REPORT_QUERY_DIAGNOSTICS_MAX_ITEMS) || undefined,\n\t\t\t\t\tomittedMutations: Math.max(0, mutations.length - ERROR_REPORT_MUTATION_DIAGNOSTICS_MAX_ITEMS) || undefined\n\t\t\t\t}\n\t\t\t: {})\n\t};\n}\n\nfunction collectPersistedStateDiagnostics(persistedQuery: PersistedQuery): ErrorReportPersistedQueryDiagnostics {\n\tconst captureOptions = getErrorReportCaptureOptions();\n\tconst state = persistedQuery.state;\n\tconst queryKey = sanitizeErrorReportValue(persistedQuery.queryKey, { scope: ERROR_REPORT_SCOPE_PERSISTED_QUERY_KEY });\n\tconst queryHash =\n\t\tcaptureOptions.valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM\n\t\t\t? hashString128(persistedQuery.queryHash)\n\t\t\t: queryKey\n\t\t\t\t? hashString128(stableStringify(queryKey))\n\t\t\t\t: undefined;\n\n\treturn {\n\t\tbuster: persistedQuery.buster\n\t\t\t? sanitizeDiagnosticText(persistedQuery.buster, ERROR_REPORT_PERSISTENCE_BUSTER_MAX_LENGTH)\n\t\t\t: undefined,\n\t\tqueryHash,\n\t\tqueryKey,\n\t\tstatus: state.status,\n\t\tfetchStatus: state.fetchStatus,\n\t\tdataUpdatedAt: state.dataUpdatedAt,\n\t\terrorUpdatedAt: state.errorUpdatedAt,\n\t\tfailureCount: state.fetchFailureCount,\n\t\tdataPreview:\n\t\t\tcaptureOptions.valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM &&\n\t\t\tcaptureOptions.dataPreviewBytes.persistedQuery > 0 &&\n\t\t\tstate.data !== undefined\n\t\t\t\t? createErrorReportDataPreview(state.data, captureOptions.dataPreviewBytes.persistedQuery)\n\t\t\t\t: undefined,\n\t\terror: state.error ? createErrorInfo(state.error) : undefined\n\t};\n}\n\n/**\n * Читает IndexedDB persistence. Данные кэша попадают в результат только при\n * явном включении ограниченных previews приложением.\n */\nexport async function collectPersistedQueryDiagnostics(): Promise<ErrorReportPersistedQueryDiagnostics[]> {\n\tif (!canUseErrorReportBrowserStorage()) return [];\n\n\tconst storage = createIndexedDbQueryStorage<PersistedQuery>();\n\tif (!storage?.entries) return [];\n\n\ttry {\n\t\tconst entries = await storage.entries();\n\t\t// Уже начатую IDB operation не отменяем, но после opt-out её результат\n\t\t// больше не является доступным источником диагностики этого документа.\n\t\tif (!canUseErrorReportBrowserStorage()) return [];\n\t\treturn entries\n\t\t\t.slice(-ERROR_REPORT_PERSISTED_DIAGNOSTICS_MAX_ITEMS)\n\t\t\t.map(([, persistedQuery]) => collectPersistedStateDiagnostics(persistedQuery));\n\t} catch {\n\t\treturn [];\n\t}\n}\n","import { ERROR_REPORT_MODE_DEVELOPMENT, ERROR_REPORT_MODE_PRODUCTION } from \"./errorReportContractConstants\";\ntype ErrorReportEnvironmentOptions = {\n\tisDev?: boolean;\n};\n\n/**\n * Отчеты собираются только в браузере и только вне dev-режима.\n * На серверном рендеринге draft не создается, чтобы не смешивать SSR-ошибки с клиентской диагностикой.\n */\nexport function isErrorReportingEnabled(options: ErrorReportEnvironmentOptions = {}) {\n\tconst isDev = options.isDev ?? __DEV__;\n\n\treturn typeof window !== \"undefined\" && !isDev;\n}\n\nexport function getErrorReportEnvironment() {\n\tconst mode: typeof ERROR_REPORT_MODE_DEVELOPMENT | typeof ERROR_REPORT_MODE_PRODUCTION = __DEV__\n\t\t? ERROR_REPORT_MODE_DEVELOPMENT\n\t\t: ERROR_REPORT_MODE_PRODUCTION;\n\n\treturn {\n\t\tmode,\n\t\tbuildId: typeof __APP_BUILD_ID__ === \"string\" ? __APP_BUILD_ID__ : undefined\n\t};\n}\n\nexport function getErrorReportClientEnvironment() {\n\tif (typeof window === \"undefined\") return undefined;\n\n\treturn {\n\t\tuserAgent: window.navigator.userAgent,\n\t\tlanguage: window.navigator.language,\n\t\ttimeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\n\t};\n}\n","import { uuidv4 } from \"../crypto\";\nimport { formatDateAsODataDatetime } from \"../formatters\";\n\nimport { getErrorReportBreadcrumbs } from \"./breadcrumbs\";\nimport { getErrorReportCaptureOptions } from \"./captureOptions\";\nimport { ERROR_REPORT_VALUE_POLICY_VERBATIM } from \"./capturePolicyConstants\";\nimport { getErrorReportClientEnvironment, getErrorReportEnvironment, isErrorReportingEnabled } from \"./environment\";\nimport { ERROR_REPORT_UTC_MAX_LENGTH, ERROR_REPORT_SOURCE_MAX_LENGTH } from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_SCOPE_DRAFT_FAILED_REASON,\n\tERROR_REPORT_SCOPE_CONTEXT,\n\tERROR_REPORT_STATUS_PENDING\n} from \"./errorReportContractConstants\";\nimport {\n\tcanUseErrorReportBrowserStorage,\n\tgetErrorReportSessionId,\n\treadErrorReportDrafts,\n\tsaveErrorReportDrafts\n} from \"./errorReportStorage\";\nimport { ERROR_REPORT_PAYLOAD_VERSION, limitErrorReportPayload } from \"./payload\";\nimport { sanitizeDetail, sanitizeDiagnosticText, sanitizeErrorReportValue } from \"./safeValue\";\nimport { parseErrorReportDraft } from \"./schema\";\n\nimport type {\n\tErrorReportCategory,\n\tErrorReportDraft,\n\tErrorReportDraftLifecyclePatch,\n\tErrorReportErrorInfo,\n\tErrorReportPayload,\n\tErrorReportSafeValue\n} from \"./types\";\n\nfunction nowUtc() {\n\treturn formatDateAsODataDatetime(new Date());\n}\n\nfunction getLocationSnapshot() {\n\tif (typeof window === \"undefined\") return undefined;\n\n\tconst verbatim = getErrorReportCaptureOptions().valuePolicy === ERROR_REPORT_VALUE_POLICY_VERBATIM;\n\treturn {\n\t\tpathname: window.location.pathname,\n\t\torigin: window.location.origin,\n\t\tsearch: verbatim ? window.location.search : undefined,\n\t\thash: verbatim ? window.location.hash : undefined\n\t};\n}\n\nfunction getViewportSnapshot() {\n\tif (typeof window === \"undefined\") return undefined;\n\n\treturn {\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight,\n\t\tdevicePixelRatio: window.devicePixelRatio\n\t};\n}\n\nfunction sanitizeFailedReason(value: string | undefined) {\n\tif (!value) return undefined;\n\tconst sanitizedValue = sanitizeErrorReportValue(value, { scope: ERROR_REPORT_SCOPE_DRAFT_FAILED_REASON, source: \"delivery\" });\n\treturn typeof sanitizedValue === \"string\" ? sanitizedValue : undefined;\n}\n\nexport function getErrorReportDraft(reportId: string) {\n\treturn readErrorReportDrafts().find((draft) => draft.reportId === reportId);\n}\n\nexport function updateErrorReportDraft(reportId: string, patch: ErrorReportDraftLifecyclePatch) {\n\tconst current = getErrorReportDraft(reportId);\n\tif (!current) return undefined;\n\n\tconst next = {\n\t\t...current,\n\t\t...patch,\n\t\tsentUtc:\n\t\t\t\"sentUtc\" in patch\n\t\t\t\t? patch.sentUtc\n\t\t\t\t\t? sanitizeDiagnosticText(patch.sentUtc, ERROR_REPORT_UTC_MAX_LENGTH)\n\t\t\t\t\t: undefined\n\t\t\t\t: current.sentUtc,\n\t\tfailedReason: \"failedReason\" in patch ? sanitizeFailedReason(patch.failedReason) : current.failedReason\n\t};\n\tconst parsed = parseErrorReportDraft(next);\n\tif (!parsed) return undefined;\n\n\tsaveErrorReportDrafts(readErrorReportDrafts().map((draft) => (draft.reportId === reportId ? parsed : draft)));\n\treturn parsed;\n}\n\nexport function getErrorReportDrafts() {\n\treturn readErrorReportDrafts();\n}\n\nexport function captureErrorReportDraft(args: {\n\tcategory: ErrorReportCategory;\n\tsource: string;\n\terror: ErrorReportErrorInfo;\n\tquery?: ErrorReportPayload[\"query\"];\n\tmutation?: ErrorReportPayload[\"mutation\"];\n\tqueryClient?: ErrorReportPayload[\"queryClient\"];\n\tpersistedQueries?: ErrorReportPayload[\"persistedQueries\"];\n\treact?: ErrorReportPayload[\"react\"];\n\tcontext?: Record<string, ErrorReportSafeValue>;\n}) {\n\tif (!isErrorReportingEnabled()) return undefined;\n\n\tconst reportId = uuidv4();\n\tconst sessionId = getErrorReportSessionId();\n\tconst createdUtc = nowUtc();\n\tconst payload = limitErrorReportPayload({\n\t\tpayloadVersion: ERROR_REPORT_PAYLOAD_VERSION,\n\t\tapplication: __APP_ID__,\n\t\treportId,\n\t\tsessionId,\n\t\tcreatedUtc,\n\t\tcategory: args.category,\n\t\tsource: sanitizeDiagnosticText(args.source, ERROR_REPORT_SOURCE_MAX_LENGTH),\n\t\terror: args.error,\n\t\tenvironment: getErrorReportEnvironment(),\n\t\tclient: getErrorReportClientEnvironment(),\n\t\tlocation: getLocationSnapshot(),\n\t\tviewport: getViewportSnapshot(),\n\t\treact: args.react,\n\t\tquery: args.query,\n\t\tmutation: args.mutation,\n\t\tqueryClient: args.queryClient,\n\t\t// Между завершением diagnostics и capture мог сработать browser opt-out.\n\t\tpersistedQueries: canUseErrorReportBrowserStorage() ? args.persistedQueries : undefined,\n\t\tbreadcrumbs: getErrorReportBreadcrumbs(),\n\t\tcontext: sanitizeDetail(args.context, { scope: ERROR_REPORT_SCOPE_CONTEXT, source: args.source })\n\t} satisfies ErrorReportPayload);\n\tconst draft: ErrorReportDraft = {\n\t\treportId,\n\t\tsessionId,\n\t\tcreatedUtc,\n\t\tcategory: args.category,\n\t\tstatus: ERROR_REPORT_STATUS_PENDING,\n\t\tpayload\n\t};\n\tconst parsed = parseErrorReportDraft(draft);\n\tif (!parsed) return undefined;\n\n\tsaveErrorReportDrafts([...readErrorReportDrafts(), parsed]);\n\treturn parsed;\n}\n","export type ErrorReportTransportHtmlSummary = {\n\tlength: number;\n\tformCount?: number;\n\tinputNames?: string[];\n\tsample?: string;\n\ttruncated?: boolean;\n};\n\nexport type ErrorReportTransportErrorContext = {\n\tsource: \"fetch.parseResponse\" | \"fetch.buildHttpError\";\n\trequestUrl?: string;\n\tresponseUrl?: string;\n\tmethod?: string;\n\tbaseUrlType?: string;\n\tsapClient?: string | null;\n\tstatus?: number;\n\tstatusText?: string;\n\tcontentType?: string;\n\tredirected?: boolean;\n\tresponseType?: string;\n\thtml?: ErrorReportTransportHtmlSummary;\n};\n\nexport type ErrorReportTransportErrorReporter = (error: Error, context: ErrorReportTransportErrorContext) => void | Promise<void>;\n\nconst DEDUPLICATION_INTERVAL_MS = 60_000;\nconst MAX_RECENT_REPORT_KEYS = 100;\nconst TRANSPORT_REPORT_DELAY_MS = 250;\n\nlet transportErrorReporter: ErrorReportTransportErrorReporter | undefined;\nconst scheduledTransportErrors = new WeakSet<Error>();\nconst suppressedTransportErrors = new WeakSet<Error>();\nconst recentReportKeys = new Map<string, number>();\n\nfunction createReportKey(context: ErrorReportTransportErrorContext) {\n\treturn [context.source, context.method, context.status, context.requestUrl, context.responseUrl].filter(Boolean).join(\"|\");\n}\n\nfunction shouldSkipByRecentKey(context: ErrorReportTransportErrorContext) {\n\tconst now = Date.now();\n\tconst key = createReportKey(context);\n\n\tfor (const [recentKey, timestamp] of recentReportKeys) {\n\t\tif (now - timestamp > DEDUPLICATION_INTERVAL_MS || recentReportKeys.size > MAX_RECENT_REPORT_KEYS) {\n\t\t\trecentReportKeys.delete(recentKey);\n\t\t}\n\t}\n\n\tconst lastReportedAt = recentReportKeys.get(key);\n\tif (lastReportedAt && now - lastReportedAt < DEDUPLICATION_INTERVAL_MS) return true;\n\n\trecentReportKeys.set(key, now);\n\treturn false;\n}\n\n/**\n * Регистрирует приложение как получателя транспортных ошибок.\n * Сам OData transport не знает про QueryClient и UI, поэтому только публикует событие,\n * а app-слой решает, как именно создать и отправить отчет.\n */\nexport function setErrorReportTransportErrorReporter(reporter: ErrorReportTransportErrorReporter | undefined) {\n\ttransportErrorReporter = reporter;\n\trecentReportKeys.clear();\n}\n\nexport function isTransportErrorReportScheduled(error: unknown) {\n\treturn error instanceof Error && scheduledTransportErrors.has(error);\n}\n\nexport function suppressTransportErrorReport(error: unknown) {\n\tif (error instanceof Error) {\n\t\tsuppressedTransportErrors.add(error);\n\t}\n}\n\nexport function reportTransportError(error: Error, context: ErrorReportTransportErrorContext) {\n\tscheduledTransportErrors.add(error);\n\n\t// Даем React Query шанс перехватить эту же ошибку и создать query/mutation-отчет\n\t// с более полезным снимком кеша. Если такого перехвата нет, transport-отчет уйдет сам.\n\tsetTimeout(() => {\n\t\tif (suppressedTransportErrors.has(error)) return;\n\t\tif (!transportErrorReporter) return;\n\t\tif (shouldSkipByRecentKey(context)) return;\n\n\t\ttry {\n\t\t\tconst result = transportErrorReporter(error, context);\n\t\t\tvoid Promise.resolve(result).catch(() => undefined);\n\t\t} catch {\n\t\t\t// Ошибка диагностического hook не должна менять поведение исходного fetch.\n\t\t}\n\t}, TRANSPORT_REPORT_DELAY_MS);\n}\n","import { type Mutation, type Query, type QueryClient } from \"@tanstack/react-query\";\n\nimport { addErrorReportBreadcrumb } from \"./breadcrumbs\";\nimport {\n\tcollectMutationDiagnostics,\n\tcollectPersistedQueryDiagnostics,\n\tcollectQueryClientDiagnostics,\n\tcollectQueryDiagnostics\n} from \"./diagnostics\";\nimport { captureErrorReportDraft } from \"./drafts\";\nimport { createErrorInfo } from \"./errorInfo\";\nimport {\n\tERROR_REPORT_BREADCRUMB_QUERY_ERROR,\n\tERROR_REPORT_SCOPE_BREADCRUMB_DETAIL,\n\tERROR_REPORT_CATEGORY_QUERY,\n\tERROR_REPORT_SCOPE_CONTEXT,\n\tERROR_REPORT_BREADCRUMB_MUTATION_ERROR,\n\tERROR_REPORT_CATEGORY_MUTATION,\n\tERROR_REPORT_CATEGORY_RUNTIME,\n\tERROR_REPORT_BREADCRUMB_RUNTIME_ERROR,\n\tERROR_REPORT_SOURCE_MUTATION\n} from \"./errorReportContractConstants\";\nimport { coalesceRuntimeErrorReportCapture } from \"./runtimeDeduplication\";\nimport { sanitizeDetail } from \"./safeValue\";\nimport { suppressTransportErrorReport } from \"./transport\";\n\nimport type { ErrorReportMutationContext, ErrorReportQueryContext, ErrorReportRuntimeContext } from \"./types\";\n\nexport async function captureQueryErrorReport(\n\terror: unknown,\n\tquery: Query<unknown, unknown, unknown>,\n\tqueryClient: QueryClient,\n\tcontext?: ErrorReportQueryContext\n) {\n\tsuppressTransportErrorReport(error);\n\tconst source = context?.source ?? \"query\";\n\n\taddErrorReportBreadcrumb({\n\t\ttype: ERROR_REPORT_BREADCRUMB_QUERY_ERROR,\n\t\tdetail: sanitizeDetail(\n\t\t\t{\n\t\t\t\tqueryKey: context?.queryKey ?? query.queryKey,\n\t\t\t\t...context?.detail\n\t\t\t},\n\t\t\t{ scope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL, source }\n\t\t)\n\t});\n\n\tconst [persistedQueries, queryClientDiagnostics] = await Promise.all([\n\t\tcollectPersistedQueryDiagnostics(),\n\t\tPromise.resolve(collectQueryClientDiagnostics(queryClient))\n\t]);\n\n\treturn captureErrorReportDraft({\n\t\tcategory: ERROR_REPORT_CATEGORY_QUERY,\n\t\tsource,\n\t\terror: context?.errorInfo ?? createErrorInfo(error),\n\t\tquery: collectQueryDiagnostics(query),\n\t\tqueryClient: queryClientDiagnostics,\n\t\tpersistedQueries,\n\t\tcontext: sanitizeDetail(context?.detail, { scope: ERROR_REPORT_SCOPE_CONTEXT, source })\n\t});\n}\n\nexport async function captureMutationErrorReport(\n\terror: unknown,\n\tmutation: Mutation<unknown, unknown, unknown, unknown>,\n\tqueryClient: QueryClient,\n\tcontext: ErrorReportMutationContext = {}\n) {\n\tsuppressTransportErrorReport(error);\n\tconst source = context.source ?? ERROR_REPORT_SOURCE_MUTATION;\n\n\taddErrorReportBreadcrumb({\n\t\ttype: ERROR_REPORT_BREADCRUMB_MUTATION_ERROR,\n\t\tdetail: sanitizeDetail(\n\t\t\t{ mutationKey: mutation.options.mutationKey, ...context.detail },\n\t\t\t{ scope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL, source }\n\t\t)\n\t});\n\n\tconst [persistedQueries, queryClientDiagnostics] = await Promise.all([\n\t\tcollectPersistedQueryDiagnostics(),\n\t\tPromise.resolve(collectQueryClientDiagnostics(queryClient))\n\t]);\n\n\treturn captureErrorReportDraft({\n\t\tcategory: ERROR_REPORT_CATEGORY_MUTATION,\n\t\tsource,\n\t\terror: context.errorInfo ?? createErrorInfo(error),\n\t\tmutation: collectMutationDiagnostics(mutation),\n\t\tqueryClient: queryClientDiagnostics,\n\t\tpersistedQueries,\n\t\tcontext: sanitizeDetail(context.detail, { scope: ERROR_REPORT_SCOPE_CONTEXT, source })\n\t});\n}\n\nexport function captureRuntimeErrorReport(error: unknown, context: ErrorReportRuntimeContext = {}, queryClient?: QueryClient) {\n\tconst category = context.category ?? ERROR_REPORT_CATEGORY_RUNTIME;\n\tconst source = context.source ?? context.category ?? ERROR_REPORT_CATEGORY_RUNTIME;\n\tconst errorInfo = context.errorInfo ?? createErrorInfo(error);\n\tconst detail = sanitizeDetail(context.detail, { scope: ERROR_REPORT_SCOPE_CONTEXT, source });\n\n\tconst captureDraft = async () => {\n\t\taddErrorReportBreadcrumb({\n\t\t\ttype: ERROR_REPORT_BREADCRUMB_RUNTIME_ERROR,\n\t\t\tdetail: sanitizeDetail({ category, source, ...context.detail }, { scope: ERROR_REPORT_SCOPE_BREADCRUMB_DETAIL, source })\n\t\t});\n\n\t\tconst [persistedQueries, queryClientDiagnostics] = queryClient\n\t\t\t? await Promise.all([collectPersistedQueryDiagnostics(), Promise.resolve(collectQueryClientDiagnostics(queryClient))])\n\t\t\t: [undefined, undefined];\n\n\t\treturn captureErrorReportDraft({\n\t\t\tcategory,\n\t\t\tsource,\n\t\t\terror: errorInfo,\n\t\t\treact: context.componentStack ? { componentStack: context.componentStack } : undefined,\n\t\t\tqueryClient: queryClientDiagnostics,\n\t\t\tpersistedQueries,\n\t\t\tcontext: detail\n\t\t});\n\t};\n\n\t/**\n\t * Error report draft создаётся только в браузере. Прямой вызов capture\n\t * сохраняет прежнее SSR-поведение без клиентского TTL-таймера, который\n\t * иначе удерживал бы Node-процесс после no-op результата.\n\t */\n\tif (typeof window === \"undefined\") {\n\t\treturn captureDraft();\n\t}\n\n\treturn coalesceRuntimeErrorReportCapture(\n\t\t{\n\t\t\tcategory,\n\t\t\tsource,\n\t\t\terror: errorInfo,\n\t\t\tpathname: window.location.pathname,\n\t\t\tscope: {\n\t\t\t\tcomponentStack: context.componentStack,\n\t\t\t\tdetail\n\t\t\t}\n\t\t},\n\t\tcaptureDraft\n\t);\n}\n","import {\n\ttype QUEUE_FAILURE_HTTP,\n\ttype QUEUE_FAILURE_NETWORK,\n\ttype QUEUE_FAILURE_TIMEOUT,\n\ttype QUEUE_FAILURE_UNKNOWN,\n\ttype QUEUE_ENQUEUE_ACCEPTED,\n\ttype QUEUE_ENQUEUE_DUPLICATE,\n\ttype QUEUE_ENQUEUE_INVALID_PAYLOAD,\n\ttype QUEUE_ENQUEUE_CAPACITY_EXCEEDED,\n\ttype QUEUE_TRANSITION_UPDATED,\n\ttype QUEUE_TRANSITION_MISSING,\n\ttype QUEUE_TRANSITION_LEASE_MISMATCH\n} from \"./queueResultConstants\";\nimport { type ErrorReportPayload } from \"./types\";\n\nexport const ERROR_REPORT_QUEUE_VERSION = 1 as const;\nexport const ERROR_REPORT_QUEUE_MAX_ITEMS = 50;\nexport const ERROR_REPORT_QUEUE_TTL_MS = 7 * 24 * 60 * 60 * 1_000;\nexport const ERROR_REPORT_QUEUE_LEASE_MS = 30 * 1_000;\n\nexport type ErrorReportQueueFailureKind =\n\ttypeof QUEUE_FAILURE_HTTP | typeof QUEUE_FAILURE_NETWORK | typeof QUEUE_FAILURE_TIMEOUT | typeof QUEUE_FAILURE_UNKNOWN;\n\nexport type ErrorReportQueueRecord = {\n\treadonly queueVersion: typeof ERROR_REPORT_QUEUE_VERSION;\n\treadonly reportId: string;\n\treadonly enqueuedUtc: string;\n\treadonly expiresUtc: string;\n\treadonly nextAttemptUtc: string;\n\treadonly attemptCount: number;\n\treadonly payload: ErrorReportPayload;\n\treadonly lease?: {\n\t\treadonly ownerId: string;\n\t\treadonly expiresUtc: string;\n\t};\n\treadonly lastFailure?: {\n\t\treadonly utc: string;\n\t\treadonly kind: ErrorReportQueueFailureKind;\n\t\treadonly httpStatus?: number;\n\t};\n};\n\nexport type ErrorReportQueueEnqueueResult =\n\t| { readonly status: typeof QUEUE_ENQUEUE_ACCEPTED; readonly evictedReportId?: string }\n\t| { readonly status: typeof QUEUE_ENQUEUE_DUPLICATE }\n\t| { readonly status: typeof QUEUE_ENQUEUE_INVALID_PAYLOAD }\n\t| { readonly status: typeof QUEUE_ENQUEUE_CAPACITY_EXCEEDED };\n\nexport type ErrorReportQueueLeaseOptions = {\n\treadonly ownerId: string;\n\treadonly now?: Date;\n\treadonly leaseDurationMs?: number;\n};\n\nexport type ErrorReportQueueTransitionResult =\n\ttypeof QUEUE_TRANSITION_UPDATED | typeof QUEUE_TRANSITION_MISSING | typeof QUEUE_TRANSITION_LEASE_MISMATCH;\n\nexport type ErrorReportQueueRetry = {\n\treadonly nextAttemptUtc: string;\n\treadonly failure: {\n\t\treadonly utc: string;\n\t\treadonly kind: ErrorReportQueueFailureKind;\n\t\treadonly httpStatus?: number;\n\t};\n};\n\n/**\n * Durable queue contract отделяет delivery policy от конкретной IndexedDB\n * реализации. Все переходы, зависящие от lease owner, выполняются атомарно.\n */\nexport type ErrorReportQueue = {\n\treadonly enqueue: (payload: ErrorReportPayload, now?: Date) => Promise<ErrorReportQueueEnqueueResult>;\n\treadonly leaseNext: (options: ErrorReportQueueLeaseOptions) => Promise<ErrorReportQueueRecord | undefined>;\n\treadonly acknowledge: (reportId: string, ownerId: string) => Promise<ErrorReportQueueTransitionResult>;\n\treadonly reschedule: (reportId: string, ownerId: string, retry: ErrorReportQueueRetry) => Promise<ErrorReportQueueTransitionResult>;\n\treadonly discard: (reportId: string, ownerId: string) => Promise<ErrorReportQueueTransitionResult>;\n\treadonly getRecords: (now?: Date) => Promise<readonly ErrorReportQueueRecord[]>;\n\treadonly getNextWakeUtc: (now?: Date) => Promise<string | undefined>;\n};\n","/** Значения durable queue разделяются producer, parser и публичными типами результата. */\nexport const QUEUE_FAILURE_HTTP = \"http\" as const;\nexport const QUEUE_FAILURE_NETWORK = \"network\" as const;\nexport const QUEUE_FAILURE_TIMEOUT = \"timeout\" as const;\nexport const QUEUE_FAILURE_UNKNOWN = \"unknown\" as const;\nexport const QUEUE_ENQUEUE_ACCEPTED = \"enqueued\" as const;\nexport const QUEUE_ENQUEUE_DUPLICATE = \"duplicate\" as const;\nexport const QUEUE_ENQUEUE_INVALID_PAYLOAD = \"invalid-payload\" as const;\nexport const QUEUE_ENQUEUE_CAPACITY_EXCEEDED = \"capacity-exceeded\" as const;\nexport const QUEUE_TRANSITION_UPDATED = \"updated\" as const;\nexport const QUEUE_TRANSITION_MISSING = \"missing\" as const;\nexport const QUEUE_TRANSITION_LEASE_MISMATCH = \"lease-mismatch\" as const;\n\nexport const QUEUE_LEASE_OWNER_MAX_LENGTH = 128;\n","import { ERROR_REPORT_UTC_MAX_LENGTH } from \"./errorReportCaptureLimits\";\nimport {\n\tERROR_REPORT_QUEUE_MAX_ITEMS,\n\tERROR_REPORT_QUEUE_VERSION,\n\ttype ErrorReportQueueFailureKind,\n\ttype ErrorReportQueueRecord\n} from \"./queueContract\";\nimport {\n\tQUEUE_LEASE_OWNER_MAX_LENGTH,\n\tQUEUE_FAILURE_HTTP,\n\tQUEUE_FAILURE_NETWORK,\n\tQUEUE_FAILURE_TIMEOUT,\n\tQUEUE_FAILURE_UNKNOWN\n} from \"./queueResultConstants\";\nimport { parseErrorReportPayload } from \"./schema\";\n\nconst HTTP_STATUS_FIRST = 100;\nconst HTTP_STATUS_LAST = 599;\n\nconst FAILURE_KINDS = new Set<ErrorReportQueueFailureKind>([\n\tQUEUE_FAILURE_HTTP,\n\tQUEUE_FAILURE_NETWORK,\n\tQUEUE_FAILURE_TIMEOUT,\n\tQUEUE_FAILURE_UNKNOWN\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isUtc(value: unknown): value is string {\n\treturn typeof value === \"string\" && value.length <= ERROR_REPORT_UTC_MAX_LENGTH && Number.isFinite(Date.parse(value));\n}\n\nfunction isSafeCount(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction parseFailure(value: unknown): ErrorReportQueueRecord[\"lastFailure\"] {\n\tif (value === undefined) return undefined;\n\tif (!isRecord(value) || !isUtc(value.utc) || typeof value.kind !== \"string\") return undefined;\n\tif (!FAILURE_KINDS.has(value.kind as ErrorReportQueueFailureKind)) return undefined;\n\tif (\n\t\tvalue.httpStatus !== undefined &&\n\t\t(typeof value.httpStatus !== \"number\" ||\n\t\t\t!Number.isInteger(value.httpStatus) ||\n\t\t\tvalue.httpStatus < HTTP_STATUS_FIRST ||\n\t\t\tvalue.httpStatus > HTTP_STATUS_LAST)\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tutc: value.utc,\n\t\tkind: value.kind as ErrorReportQueueFailureKind,\n\t\thttpStatus: value.httpStatus as number | undefined\n\t};\n}\n\nfunction parseLease(value: unknown): ErrorReportQueueRecord[\"lease\"] {\n\tif (value === undefined) return undefined;\n\tif (\n\t\t!isRecord(value) ||\n\t\ttypeof value.ownerId !== \"string\" ||\n\t\tvalue.ownerId.length === 0 ||\n\t\tvalue.ownerId.length > QUEUE_LEASE_OWNER_MAX_LENGTH\n\t) {\n\t\treturn undefined;\n\t}\n\tif (!isUtc(value.expiresUtc)) return undefined;\n\n\treturn { ownerId: value.ownerId, expiresUtc: value.expiresUtc };\n}\n\n/**\n * Queue parser не угадывает прежние storage-формы. Повреждённая или будущая\n * запись отбрасывается отдельно, не уничтожая соседние валидные отчёты.\n */\nexport function parseErrorReportQueueRecord(value: unknown): ErrorReportQueueRecord | undefined {\n\tif (!isRecord(value) || value.queueVersion !== ERROR_REPORT_QUEUE_VERSION) return undefined;\n\tif (typeof value.reportId !== \"string\" || !isUtc(value.enqueuedUtc) || !isUtc(value.expiresUtc)) return undefined;\n\tif (!isUtc(value.nextAttemptUtc) || !isSafeCount(value.attemptCount)) return undefined;\n\n\tconst payload = parseErrorReportPayload(value.payload);\n\tif (!payload || payload.reportId !== value.reportId) return undefined;\n\n\tconst lease = parseLease(value.lease);\n\tif (value.lease !== undefined && !lease) return undefined;\n\tconst lastFailure = parseFailure(value.lastFailure);\n\tif (value.lastFailure !== undefined && !lastFailure) return undefined;\n\n\treturn {\n\t\tqueueVersion: ERROR_REPORT_QUEUE_VERSION,\n\t\treportId: value.reportId,\n\t\tenqueuedUtc: value.enqueuedUtc,\n\t\texpiresUtc: value.expiresUtc,\n\t\tnextAttemptUtc: value.nextAttemptUtc,\n\t\tattemptCount: value.attemptCount,\n\t\tpayload,\n\t\tlease,\n\t\tlastFailure\n\t};\n}\n\n/** Возвращает bounded текущую очередь без истёкших и повторяющихся ID. */\nexport function normalizeErrorReportQueueRecords(value: unknown, nowMs: number): ErrorReportQueueRecord[] {\n\tif (!Array.isArray(value)) return [];\n\n\tconst reportIds = new Set<string>();\n\tconst records: ErrorReportQueueRecord[] = [];\n\tfor (const valueRecord of value) {\n\t\tconst record = parseErrorReportQueueRecord(valueRecord);\n\t\tif (!record || Date.parse(record.expiresUtc) <= nowMs || reportIds.has(record.reportId)) continue;\n\n\t\treportIds.add(record.reportId);\n\t\trecords.push(record);\n\t\tif (records.length === ERROR_REPORT_QUEUE_MAX_ITEMS) break;\n\t}\n\n\treturn records;\n}\n","import { createIndexedDbQueryStorage, type IndexedDbQueryStorage } from \"../query-client\";\n\nimport {\n\tERROR_REPORT_QUEUE_LEASE_MS,\n\tERROR_REPORT_QUEUE_MAX_ITEMS,\n\tERROR_REPORT_QUEUE_TTL_MS,\n\tERROR_REPORT_QUEUE_VERSION,\n\ttype ErrorReportQueue,\n\ttype ErrorReportQueueEnqueueResult,\n\ttype ErrorReportQueueRecord,\n\ttype ErrorReportQueueTransitionResult\n} from \"./queueContract\";\nimport { normalizeErrorReportQueueRecords } from \"./queueRecord\";\nimport {\n\tQUEUE_LEASE_OWNER_MAX_LENGTH,\n\tQUEUE_TRANSITION_MISSING,\n\tQUEUE_TRANSITION_LEASE_MISMATCH,\n\tQUEUE_TRANSITION_UPDATED,\n\tQUEUE_ENQUEUE_INVALID_PAYLOAD,\n\tQUEUE_ENQUEUE_DUPLICATE,\n\tQUEUE_ENQUEUE_CAPACITY_EXCEEDED,\n\tQUEUE_ENQUEUE_ACCEPTED\n} from \"./queueResultConstants\";\nimport { parseErrorReportPayload } from \"./schema\";\nimport { type ErrorReportPayload } from \"./types\";\n\nconst QUEUE_STORAGE_KEY = \"queue.v1\";\nconst QUEUE_STORE_NAME = \"records\";\n\nexport type CreateErrorReportQueueOptions = {\n\treadonly dbName?: string;\n\treadonly indexedDB?: IDBFactory;\n\t/** Тестовая/альтернативная storage boundary; browser-приложения обычно её не задают. */\n\treadonly storage?: Pick<IndexedDbQueryStorage<unknown>, \"getItem\" | \"updateItem\">;\n};\n\nfunction toUtc(value: number) {\n\treturn new Date(value).toISOString();\n}\n\nfunction normalizeOwnerId(value: string) {\n\tconst ownerId = value.trim();\n\tif (ownerId.length === 0 || ownerId.length > QUEUE_LEASE_OWNER_MAX_LENGTH) {\n\t\tthrow new Error(\"Error report lease owner должен содержать от 1 до 128 символов\");\n\t}\n\treturn ownerId;\n}\n\nfunction compareQueueOrder(left: ErrorReportQueueRecord, right: ErrorReportQueueRecord) {\n\treturn (\n\t\tDate.parse(left.nextAttemptUtc) - Date.parse(right.nextAttemptUtc) || Date.parse(left.enqueuedUtc) - Date.parse(right.enqueuedUtc)\n\t);\n}\n\nfunction resolveTransition(\n\trecords: ErrorReportQueueRecord[],\n\treportId: string,\n\townerId: string\n): { readonly index: number; readonly result: ErrorReportQueueTransitionResult } {\n\tconst index = records.findIndex((record) => record.reportId === reportId);\n\tif (index < 0) return { index, result: QUEUE_TRANSITION_MISSING };\n\tif (records[index]?.lease?.ownerId !== ownerId) return { index, result: QUEUE_TRANSITION_LEASE_MISMATCH };\n\treturn { index, result: QUEUE_TRANSITION_UPDATED };\n}\n\n/**\n * Создаёт IndexedDB-backed очередь. Одна запись-envelope намеренно хранит не\n * более 50 payload: существующий atomic update primitive тогда сериализует\n * выбор lease между вкладками без дополнительного локального storage слоя.\n */\nexport function createErrorReportQueue(options: CreateErrorReportQueueOptions = {}): ErrorReportQueue | undefined {\n\tconst storage =\n\t\toptions.storage ??\n\t\tcreateIndexedDbQueryStorage<unknown>({\n\t\t\tdbName: options.dbName ?? `${__APP_ID__}.error-report.queue.v1`,\n\t\t\tstoreName: QUEUE_STORE_NAME,\n\t\t\tindexedDB: options.indexedDB\n\t\t});\n\tif (!storage) return undefined;\n\tconst queueStorage = storage;\n\n\tfunction update<TResult>(\n\t\tnowMs: number,\n\t\toperation: (records: ErrorReportQueueRecord[]) => { readonly records: ErrorReportQueueRecord[]; readonly result: TResult }\n\t) {\n\t\treturn queueStorage.updateItem(QUEUE_STORAGE_KEY, (storedValue) => {\n\t\t\tconst decision = operation(normalizeErrorReportQueueRecords(storedValue, nowMs));\n\t\t\treturn { action: \"set\" as const, value: decision.records, result: decision.result };\n\t\t});\n\t}\n\n\treturn {\n\t\tenqueue: async (payload: ErrorReportPayload, now = new Date()) => {\n\t\t\tconst parsedPayload = parseErrorReportPayload(payload);\n\t\t\tif (!parsedPayload) return { status: QUEUE_ENQUEUE_INVALID_PAYLOAD };\n\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs)) return { status: QUEUE_ENQUEUE_INVALID_PAYLOAD };\n\n\t\t\treturn update<ErrorReportQueueEnqueueResult>(nowMs, (records) => {\n\t\t\t\tif (records.some((record) => record.reportId === parsedPayload.reportId)) {\n\t\t\t\t\treturn { records, result: { status: QUEUE_ENQUEUE_DUPLICATE } };\n\t\t\t\t}\n\n\t\t\t\tlet evictedReportId: string | undefined;\n\t\t\t\tif (records.length >= ERROR_REPORT_QUEUE_MAX_ITEMS) {\n\t\t\t\t\tconst evictedIndex = records\n\t\t\t\t\t\t.map((record, index) => ({ record, index }))\n\t\t\t\t\t\t.filter(({ record }) => record.lease === undefined)\n\t\t\t\t\t\t.sort((left, right) => Date.parse(left.record.enqueuedUtc) - Date.parse(right.record.enqueuedUtc))[0]?.index;\n\n\t\t\t\t\tif (evictedIndex === undefined) {\n\t\t\t\t\t\treturn { records, result: { status: QUEUE_ENQUEUE_CAPACITY_EXCEEDED } };\n\t\t\t\t\t}\n\n\t\t\t\t\tevictedReportId = records[evictedIndex]?.reportId;\n\t\t\t\t\trecords.splice(evictedIndex, 1);\n\t\t\t\t}\n\n\t\t\t\tconst nowUtc = toUtc(nowMs);\n\t\t\t\trecords.push({\n\t\t\t\t\tqueueVersion: ERROR_REPORT_QUEUE_VERSION,\n\t\t\t\t\treportId: parsedPayload.reportId,\n\t\t\t\t\tenqueuedUtc: nowUtc,\n\t\t\t\t\texpiresUtc: toUtc(nowMs + ERROR_REPORT_QUEUE_TTL_MS),\n\t\t\t\t\tnextAttemptUtc: nowUtc,\n\t\t\t\t\tattemptCount: 0,\n\t\t\t\t\tpayload: parsedPayload\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\trecords,\n\t\t\t\t\tresult: evictedReportId ? { status: QUEUE_ENQUEUE_ACCEPTED, evictedReportId } : { status: QUEUE_ENQUEUE_ACCEPTED }\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tleaseNext: async ({ ownerId: inputOwnerId, now = new Date(), leaseDurationMs = ERROR_REPORT_QUEUE_LEASE_MS }) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs) || !Number.isFinite(leaseDurationMs) || leaseDurationMs <= 0) {\n\t\t\t\tthrow new Error(\"Error report lease требует валидное время и положительную длительность\");\n\t\t\t}\n\n\t\t\treturn update(nowMs, (records) => {\n\t\t\t\tconst record = records\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\t\tDate.parse(candidate.nextAttemptUtc) <= nowMs &&\n\t\t\t\t\t\t\t(candidate.lease === undefined || Date.parse(candidate.lease.expiresUtc) <= nowMs)\n\t\t\t\t\t)\n\t\t\t\t\t.sort(compareQueueOrder)[0];\n\t\t\t\tif (!record) return { records, result: undefined };\n\n\t\t\t\tconst leasedRecord: ErrorReportQueueRecord = {\n\t\t\t\t\t...record,\n\t\t\t\t\tattemptCount: record.attemptCount + 1,\n\t\t\t\t\tlease: { ownerId, expiresUtc: toUtc(nowMs + leaseDurationMs) }\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\trecords: records.map((candidate) => (candidate.reportId === record.reportId ? leasedRecord : candidate)),\n\t\t\t\t\tresult: leasedRecord\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tacknowledge: async (reportId, inputOwnerId) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\treturn update(Date.now(), (records) => {\n\t\t\t\tconst transition = resolveTransition(records, reportId, ownerId);\n\t\t\t\tif (transition.result !== QUEUE_TRANSITION_UPDATED) return { records, result: transition.result };\n\t\t\t\trecords.splice(transition.index, 1);\n\t\t\t\treturn { records, result: QUEUE_TRANSITION_UPDATED };\n\t\t\t});\n\t\t},\n\t\treschedule: async (reportId, inputOwnerId, retry) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\tconst nextAttemptMs = Date.parse(retry.nextAttemptUtc);\n\t\t\tconst failureUtcMs = Date.parse(retry.failure.utc);\n\t\t\tif (!Number.isFinite(nextAttemptMs) || !Number.isFinite(failureUtcMs)) {\n\t\t\t\tthrow new Error(\"Error report retry требует валидные UTC timestamps\");\n\t\t\t}\n\n\t\t\treturn update(failureUtcMs, (records) => {\n\t\t\t\tconst transition = resolveTransition(records, reportId, ownerId);\n\t\t\t\tif (transition.result !== QUEUE_TRANSITION_UPDATED) return { records, result: transition.result };\n\t\t\t\tconst record = records[transition.index];\n\t\t\t\tif (!record) return { records, result: QUEUE_TRANSITION_MISSING };\n\t\t\t\trecords[transition.index] = {\n\t\t\t\t\t...record,\n\t\t\t\t\tnextAttemptUtc: retry.nextAttemptUtc,\n\t\t\t\t\tlease: undefined,\n\t\t\t\t\tlastFailure: retry.failure\n\t\t\t\t};\n\t\t\t\treturn { records, result: QUEUE_TRANSITION_UPDATED };\n\t\t\t});\n\t\t},\n\t\tdiscard: async (reportId, inputOwnerId) => {\n\t\t\tconst ownerId = normalizeOwnerId(inputOwnerId);\n\t\t\treturn update(Date.now(), (records) => {\n\t\t\t\tconst transition = resolveTransition(records, reportId, ownerId);\n\t\t\t\tif (transition.result !== QUEUE_TRANSITION_UPDATED) return { records, result: transition.result };\n\t\t\t\trecords.splice(transition.index, 1);\n\t\t\t\treturn { records, result: QUEUE_TRANSITION_UPDATED };\n\t\t\t});\n\t\t},\n\t\tgetRecords: async (now = new Date()) => {\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs)) return [];\n\t\t\tconst storedValue = await queueStorage.getItem(QUEUE_STORAGE_KEY);\n\t\t\treturn normalizeErrorReportQueueRecords(storedValue, nowMs).sort(compareQueueOrder);\n\t\t},\n\t\tgetNextWakeUtc: async (now = new Date()) => {\n\t\t\tconst nowMs = now.getTime();\n\t\t\tif (!Number.isFinite(nowMs)) return undefined;\n\t\t\tconst records = normalizeErrorReportQueueRecords(await queueStorage.getItem(QUEUE_STORAGE_KEY), nowMs);\n\t\t\tconst nextWakeMs = records.reduce<number | undefined>((current, record) => {\n\t\t\t\tconst recordWakeMs = Math.max(Date.parse(record.nextAttemptUtc), record.lease ? Date.parse(record.lease.expiresUtc) : 0);\n\t\t\t\treturn current === undefined || recordWakeMs < current ? recordWakeMs : current;\n\t\t\t}, undefined);\n\t\t\treturn nextWakeMs === undefined ? undefined : toUtc(nextWakeMs);\n\t\t}\n\t};\n}\n","import { clearRuntimeErrorReportDeduplication } from \"./runtimeDeduplication\";\n\nimport type { ErrorReportRuntimeContext } from \"./types\";\n\nexport type ErrorReportRuntimeErrorReporter = (error: unknown, context: ErrorReportRuntimeContext) => void | Promise<void>;\n\nlet runtimeErrorReporter: ErrorReportRuntimeErrorReporter | undefined;\n\n/**\n * Регистрирует app-слой как получателя ручных runtime-ошибок.\n * Shared-код может вызвать reportRuntimeError без знания о QueryClient, UI и режиме доставки.\n */\nexport function setErrorReportRuntimeErrorReporter(reporter: ErrorReportRuntimeErrorReporter | undefined) {\n\truntimeErrorReporter = reporter;\n\tclearRuntimeErrorReportDeduplication();\n}\n\n/**\n * Ручная отправка runtime-ошибки из try/catch или другого кода вне React-компонента.\n * Функция не бросает исключений: диагностический отчет не должен ломать основной сценарий.\n *\n * @example\n *\n * try {\n * // ...\n * } catch (error) {\n * reportRuntimeError(error, {\n * detail: {\n * source: \"s3-download\",\n * action: \"download-from-s3\"\n * }\n * });\n * }\n */\nexport async function reportRuntimeError(error: unknown, context: ErrorReportRuntimeContext = {}) {\n\tif (!runtimeErrorReporter) return;\n\n\ttry {\n\t\tawait runtimeErrorReporter(error, context);\n\t} catch {\n\t\t// Ошибка диагностического hook не должна менять поведение пользовательского кода.\n\t}\n}\n"],"mappings":"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"}
|