expo-app-metrics 58.0.0 → 58.0.2
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/.npmignore +5 -0
- package/CHANGELOG.md +10 -0
- package/android/src/main/java/expo/modules/appmetrics/AppMetricsModule.kt +31 -2
- package/android/src/main/java/expo/modules/appmetrics/AppMetricsPreferences.kt +24 -0
- package/android/src/main/java/expo/modules/appmetrics/networkrequests/NetworkRequestPersistence.kt +31 -2
- package/android/src/main/java/expo/modules/appmetrics/networkrequests/NetworkTracesConfiguration.kt +67 -0
- package/build/module.web.d.ts +2 -1
- package/build/module.web.js +1 -0
- package/build/module.web.js.map +1 -1
- package/build/types.d.ts +20 -0
- package/build/types.js.map +1 -1
- package/expo-module.config.json +1 -1
- package/ios/AppMetricsAppDelegateSubscriber.swift +6 -1
- package/ios/AppMetricsModule.swift +25 -0
- package/ios/AppMetricsUserDefaults.swift +12 -0
- package/ios/NetworkRequests/NetworkRequestFilter.swift +2 -5
- package/ios/NetworkRequests/NetworkRequestPersistence.swift +16 -1
- package/ios/NetworkRequests/NetworkTracesConfiguration.swift +27 -0
- package/ios/Tests/NetworkRequestPersistenceTests.swift +64 -3
- package/ios/Tests/NetworkTracesConfigurationTests.swift +99 -0
- package/{android/build/intermediates/source_jar/release/release-sources.jar → local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2-sources.jar} +0 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2-sources.jar.md5 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2-sources.jar.sha1 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2-sources.jar.sha256 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2-sources.jar.sha512 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.aar +0 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.aar.md5 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.aar.sha1 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.aar.sha256 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.aar.sha512 +1 -0
- package/{android/build/publications/release/module.json → local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.module} +22 -22
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.module.md5 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.module.sha512 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/{58.0.0/expo.modules.appmetrics-58.0.0.pom → 58.0.2/expo.modules.appmetrics-58.0.2.pom} +1 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.2/expo.modules.appmetrics-58.0.2.pom.sha512 +1 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml +4 -4
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.md5 +1 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.sha1 +1 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.sha256 +1 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/maven-metadata.xml.sha512 +1 -1
- package/package.json +3 -3
- package/src/module.web.ts +1 -0
- package/src/types.ts +21 -0
- package/android/build/generated/ksp/release/kotlin/expo/modules/appmetrics/storage/CrashReportDao_Impl.kt +0 -148
- package/android/build/generated/ksp/release/kotlin/expo/modules/appmetrics/storage/LogDao_Impl.kt +0 -220
- package/android/build/generated/ksp/release/kotlin/expo/modules/appmetrics/storage/MetricDao_Impl.kt +0 -231
- package/android/build/generated/ksp/release/kotlin/expo/modules/appmetrics/storage/MetricsDatabase_Impl.kt +0 -268
- package/android/build/generated/ksp/release/kotlin/expo/modules/appmetrics/storage/SessionDao_Impl.kt +0 -1208
- package/android/build/generated/ksp/release/kotlin/expo/modules/appmetrics/storage/SpanDao_Impl.kt +0 -285
- package/android/build/generated/source/buildConfig/release/expo/modules/appmetrics/BuildConfig.java +0 -18
- package/android/build/intermediates/aapt_friendly_merged_manifests/release/processReleaseManifest/aapt/AndroidManifest.xml +0 -7
- package/android/build/intermediates/aapt_friendly_merged_manifests/release/processReleaseManifest/aapt/output-metadata.json +0 -18
- package/android/build/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar +0 -0
- package/android/build/intermediates/aar_metadata/release/writeReleaseAarMetadata/aar-metadata.properties +0 -7
- package/android/build/intermediates/annotation_processor_list/release/javaPreCompileRelease/annotationProcessors.json +0 -1
- package/android/build/intermediates/annotations_typedef_file/release/extractReleaseAnnotations/typedefs.txt +0 -0
- package/android/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/release/generateReleaseRFile/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/release/generateReleaseRFile/R.txt +0 -0
- package/android/build/intermediates/incremental/mergeReleaseAssets/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml +0 -2
- package/android/build/intermediates/incremental/release/packageReleaseResources/compile-file-map.properties +0 -1
- package/android/build/intermediates/incremental/release/packageReleaseResources/merger.xml +0 -2
- package/android/build/intermediates/incremental/release-mergeJavaRes/merge-state +0 -0
- package/android/build/intermediates/java_res/release/processReleaseJavaRes/out/META-INF/expo-app-metrics_release.kotlin_module +0 -0
- package/android/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes/expo/modules/appmetrics/BuildConfig.class +0 -0
- package/android/build/intermediates/local_only_symbol_list/release/parseReleaseLocalResources/R-def.txt +0 -2
- package/android/build/intermediates/manifest_merge_blame_file/release/processReleaseManifest/manifest-merger-blame-release-report.txt +0 -9
- package/android/build/intermediates/merged_java_res/release/mergeReleaseJavaResource/feature-expo-app-metrics.jar +0 -0
- package/android/build/intermediates/merged_manifest/release/processReleaseManifest/AndroidManifest.xml +0 -7
- package/android/build/intermediates/nested_resources_validation_report/release/generateReleaseResources/nestedResourcesValidationReport.txt +0 -1
- package/android/build/intermediates/symbol_list_with_package_name/release/generateReleaseRFile/package-aware-r.txt +0 -1
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.s +0 -1
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.s +0 -1
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.s +0 -1
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s +0 -1
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.s +0 -1
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
- package/android/build/kotlin/compileReleaseKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileReleaseKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/kspCaches/release/ap-classpath-entries.bin +0 -0
- package/android/build/kspCaches/release/backups/kotlin/expo/modules/appmetrics/storage/CrashReportDao_Impl.kt +0 -148
- package/android/build/kspCaches/release/backups/kotlin/expo/modules/appmetrics/storage/LogDao_Impl.kt +0 -220
- package/android/build/kspCaches/release/backups/kotlin/expo/modules/appmetrics/storage/MetricDao_Impl.kt +0 -231
- package/android/build/kspCaches/release/backups/kotlin/expo/modules/appmetrics/storage/MetricsDatabase_Impl.kt +0 -268
- package/android/build/kspCaches/release/backups/kotlin/expo/modules/appmetrics/storage/SessionDao_Impl.kt +0 -1208
- package/android/build/kspCaches/release/backups/kotlin/expo/modules/appmetrics/storage/SpanDao_Impl.kt +0 -285
- package/android/build/kspCaches/release/caches.uptodate +0 -0
- package/android/build/kspCaches/release/classpath-entries.bin +0 -0
- package/android/build/kspCaches/release/classpath-structure.bin +0 -0
- package/android/build/kspCaches/release/sealed +0 -1
- package/android/build/kspCaches/release/sourceToOutputs +0 -1
- package/android/build/kspCaches/release/symbolLookups/counters.tab +0 -2
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab +0 -0
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab.keystream +0 -0
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab.values.at +0 -0
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab_i +0 -0
- package/android/build/kspCaches/release/symbolLookups/file-to-id.tab_i.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab.keystream +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab.values.at +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab_i +0 -0
- package/android/build/kspCaches/release/symbolLookups/id-to-file.tab_i.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab.keystream +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab.keystream.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab.len +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab.values.at +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab_i +0 -0
- package/android/build/kspCaches/release/symbolLookups/lookups.tab_i.len +0 -0
- package/android/build/kspCaches/release/symbols +0 -1
- package/android/build/outputs/aar/expo-app-metrics-release.aar +0 -0
- package/android/build/outputs/logs/manifest-merger-release-report.txt +0 -14
- package/android/build/publications/release/pom-default.xml +0 -100
- package/android/build/tmp/compileReleaseJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/release/META-INF/expo-app-metrics_release.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetadata.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetadataProvider.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetadataProviderKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsActivityLifecycleListeners.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsApplicationLifecycleListeners.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$14$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$2$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$3$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$5$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$5$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$5$3$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$5$3.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$5$5.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$6$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$1$8$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$AsyncFunctionWithoutArgs$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Class$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Class$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$3.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$4.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$5.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$6.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Coroutine$7.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$3.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$4.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$5.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$6.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$7.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$8.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$Function$9.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$FunctionWithoutArgs$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$FunctionWithoutArgs$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$OnActivityDestroys$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$OnActivityEntersBackground$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$OnCreate$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$$inlined$OnDestroy$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$23$$inlined$Constructor$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$23$$inlined$Constructor$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$23$$inlined$Function$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$23$$inlined$Function$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$23$$inlined$Function$3.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Constructor$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$10.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$11.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$3.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$4.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$5.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$6.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$7.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$8.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Coroutine$9.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Property$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Property$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$definition$lambda$35$lambda$34$$inlined$Property$3.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$saveStartupMetricsJob$2$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$setEnvironment$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule$updatesStateDidChange$1$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsModule.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsPackage$createReactActivityHandlers$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsPackage.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsPreferences.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppMetricsPreferencesKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppStartupMetric$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppStartupMetric.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/AppUpdatesInfo.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/ConstantsKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/GlobalAttributes.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/MemoryMetric$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/MemoryMetric.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/MetricAttributes$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/MetricAttributes.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/MetricCategory.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/appstartup/AppStartType.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/appstartup/AppStartupManager$WhenMappings.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/appstartup/AppStartupManager.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/appstartup/EASObserveAppStartupInfo.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/appstartup/StartupState.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CallStackTreeBuilder.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashFileFormat.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashFileReader$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashFileReader.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashFileWriter$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashFileWriter.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashLogDetails.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashOrigin.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$CallStack$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$CallStack$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$CallStack.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$Frame$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$Frame$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree$Frame.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$CallStackTree.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReport.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReportAttributionKt$attributeAndStoreCrashReport$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReportAttributionKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReportProcessor$process$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReportProcessor$processCrashes$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/CrashReportProcessor.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/ExitInfoProvider.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/ExitInfoProviderImpl$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/ExitInfoProviderImpl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/ExitRecord$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/ExitRecord.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/JvmCrashHandler$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/JvmCrashHandler.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/LastProcessedExitStore.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/PendingJvmCrash.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/PendingJvmCrashPayload$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/PendingJvmCrashPayload$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/PendingJvmCrashPayload.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/crashreporting/PreferencesLastProcessedExitStore.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/frames/FrameMetricsRecord.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/frames/FrameMetricsRecorder$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/frames/FrameMetricsRecorder.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/frames/FrameRateMonitor.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/ErrorReport$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/ErrorReport.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/ErrorReportKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/ErrorSource.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/PendingErrorStore$PendingError$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/PendingErrorStore$PendingError$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/PendingErrorStore$PendingError.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/PendingErrorStore$drain$$inlined$sortedBy$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/jserrors/PendingErrorStore.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/AttributeValidationKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/DisplayNameValidationKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/EventBodyValidationKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/EventNameValidationKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/LogEventOptions$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/LogEventOptions.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/SanitizedLogAttributes.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/Severity$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/Severity$WhenMappings.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/Severity.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/logevents/TruncationKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/memory/MemoryMetricsManager$takeMemorySnapshot$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/memory/MemoryMetricsManager.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/memory/MemoryUsageSnapshot$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/memory/MemoryUsageSnapshot$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/memory/MemoryUsageSnapshot$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/memory/MemoryUsageSnapshot.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/AlreadyObservedMarker.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/BodyCloseSignal$signalingSource$2$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/BodyCloseSignal.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequest$FetchType.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequest$Redirect.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequest$Timings.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequest.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestEventListener$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestEventListener$MutablePhaseTimings.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestEventListener$PhaseTimings.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestEventListener.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestFilter$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestFilter.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestInterceptor$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestInterceptor.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestInterceptorKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestMonitor$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestMonitor.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestObserver$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestObserver.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestObserverDelegate$DefaultImpls.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestObserverDelegate.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestObserverKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestPersistence$persist$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestPersistence$persistBuffered$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestPersistence.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestPersistenceKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestStarted.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestSummary$Companion$busyDuration$$inlined$sortedBy$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestSummary$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestSummary$SlowestRequest.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestSummary.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/NetworkRequestSummaryKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/OkHttpClientProviderHook$installIfNeeded$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/networkrequests/OkHttpClientProviderHook.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/CrashReportDao.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/CrashReportDao_Impl$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/CrashReportDao_Impl$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/CrashReportDao_Impl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/CrashReportEntity.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsDebugSession$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsDebugSession$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsDebugSession.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsLogRecord$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsLogRecord$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsLogRecord.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsMetric$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsMetric$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/JsMetric.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogDao.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogDao_Impl$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogDao_Impl$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogDao_Impl$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogDao_Impl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogRecord$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogRecord$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/LogRecord.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Metric$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Metric$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Metric.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricDao.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricDao_Impl$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricDao_Impl$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricDao_Impl$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricDao_Impl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricsConstants.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricsDatabase$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricsDatabase.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricsDatabase_Impl$createOpenDelegate$_openDelegate$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/MetricsDatabase_Impl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Session$$serializer.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Session$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Session.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionDao.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionDao_Impl$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionDao_Impl$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionDao_Impl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionManager$cleanupOldSessions$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionManager$clearAllData$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionManager$getCrashReport$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionManager$getSessions$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionManager$storeCrashReportIfNew$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionManager.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionMappersKt.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionMetricInput$__Pika.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionMetricInput.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject$addLogs$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject$addMetrics$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject$getEndDate$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject$isActive$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject$sessionStartJob$2$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject$stop$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionSharedObject.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionWithChildren.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SessionWithMetrics.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Span$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/Span.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao$DefaultImpls.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao$insert$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao_Impl$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao_Impl$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao_Impl$insert$2.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/storage/SpanDao_Impl.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/updates/UpdatesMonitoring.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/updates/UpdatesStateEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/updates/UpdatesStateEvent$EventType.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/updates/UpdatesStateEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/DeviceConditions.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/DeviceState.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/JsonAny.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/MetricParamsBuilder$WhenMappings.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/MetricParamsBuilder.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/NetworkState.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/NetworkTransport.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/ThermalState.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/TimeUtils$utcFormatter$1.class +0 -0
- package/android/build/tmp/kotlin-classes/release/expo/modules/appmetrics/utils/TimeUtils.class +0 -0
- package/android/build/tmp/publishReleasePublicationToNPMPackageRepository/module-maven-metadata.xml +0 -13
- package/android/build/tmp/sourceReleaseJar/MANIFEST.MF +0 -2
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0-sources.jar +0 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0-sources.jar.md5 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0-sources.jar.sha1 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0-sources.jar.sha256 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0-sources.jar.sha512 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.aar +0 -0
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.aar.md5 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.aar.sha1 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.aar.sha256 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.aar.sha512 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.module +0 -156
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.module.md5 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.pom.sha256 +0 -1
- package/local-maven-repo/expo/modules/appmetrics/expo.modules.appmetrics/58.0.0/expo.modules.appmetrics-58.0.0.pom.sha512 +0 -1
package/.npmignore
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 58.0.2 — 2026-09-15
|
|
14
|
+
|
|
15
|
+
### 💡 Others
|
|
16
|
+
|
|
17
|
+
- Add an internal `setNetworkTracesConfig` to gate and filter network span recording at capture time. ([#48891](https://github.com/expo/expo/pull/48891) by [@tsapeta](https://github.com/tsapeta))
|
|
18
|
+
|
|
19
|
+
## 58.0.1 — 2026-09-14
|
|
20
|
+
|
|
21
|
+
_This version does not introduce any user-facing changes._
|
|
22
|
+
|
|
13
23
|
## 58.0.0 — 2026-09-10
|
|
14
24
|
|
|
15
25
|
### 🛠 Breaking changes
|
|
@@ -16,6 +16,7 @@ import expo.modules.appmetrics.networkrequests.NetworkRequestFilter
|
|
|
16
16
|
import expo.modules.appmetrics.networkrequests.NetworkRequestMonitor
|
|
17
17
|
import expo.modules.appmetrics.networkrequests.NetworkRequestObserver
|
|
18
18
|
import expo.modules.appmetrics.networkrequests.NetworkRequestPersistence
|
|
19
|
+
import expo.modules.appmetrics.networkrequests.NetworkTracesConfiguration
|
|
19
20
|
import expo.modules.appmetrics.logevents.Severity
|
|
20
21
|
import expo.modules.appmetrics.logevents.sanitizeLogEventAttributes
|
|
21
22
|
import expo.modules.appmetrics.logevents.validateDisplayName
|
|
@@ -69,8 +70,9 @@ class AppMetricsModule : Module(), UpdatesStateChangeListener {
|
|
|
69
70
|
lateinit var mainSession: SessionSharedObject
|
|
70
71
|
|
|
71
72
|
/**
|
|
72
|
-
* The span producer installed on the monitor in `OnCreate`, kept so `
|
|
73
|
-
*
|
|
73
|
+
* The span producer installed on the monitor in `OnCreate`, kept so `setNetworkTracesConfig`
|
|
74
|
+
* can apply a new recording policy to the live instance and `OnDestroy` can uninstall it
|
|
75
|
+
* when the module is torn down (a JS reload).
|
|
74
76
|
*/
|
|
75
77
|
private var networkRequestPersistence: NetworkRequestPersistence? = null
|
|
76
78
|
|
|
@@ -136,6 +138,22 @@ class AppMetricsModule : Module(), UpdatesStateChangeListener {
|
|
|
136
138
|
GlobalAttributes.set(attributes)
|
|
137
139
|
}
|
|
138
140
|
|
|
141
|
+
Function("setNetworkTracesConfig") { config: NetworkTracesConfigParam ->
|
|
142
|
+
val configuration = NetworkTracesConfiguration(
|
|
143
|
+
enabled = config.enabled,
|
|
144
|
+
hosts = config.filter?.hosts,
|
|
145
|
+
methods = config.filter?.methods
|
|
146
|
+
)
|
|
147
|
+
// Persisted before the hop, so a configure racing startup is either read from
|
|
148
|
+
// preferences by the installing producer or applied to the live one below.
|
|
149
|
+
AppMetricsPreferences.setNetworkTracesConfiguration(context, configuration)
|
|
150
|
+
scope.launch {
|
|
151
|
+
// `modulesQueue` is a single thread fed from the JS thread, so rapid calls land in
|
|
152
|
+
// order. iOS re-reads instead, because its actor hops carry no such guarantee.
|
|
153
|
+
networkRequestPersistence?.setConfiguration(configuration)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
139
157
|
OnCreate {
|
|
140
158
|
sessionManager = SessionManager(context)
|
|
141
159
|
|
|
@@ -167,6 +185,7 @@ class AppMetricsModule : Module(), UpdatesStateChangeListener {
|
|
|
167
185
|
val persistence = NetworkRequestPersistence(
|
|
168
186
|
database = MetricsDatabase.getDatabase(context),
|
|
169
187
|
scope = scope,
|
|
188
|
+
initialConfiguration = AppMetricsPreferences.getNetworkTracesConfiguration(context),
|
|
170
189
|
sessionId = mainSession.sessionId
|
|
171
190
|
)
|
|
172
191
|
networkRequestPersistence = persistence
|
|
@@ -390,3 +409,13 @@ data class MetricAttributes(
|
|
|
390
409
|
@Field val routeName: String? = null,
|
|
391
410
|
@Field val params: Map<String, Any>? = null
|
|
392
411
|
) : Record
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Payload of `setNetworkTracesConfig`: the normalized `networkTraces` setting pushed down by
|
|
415
|
+
* `Observe.configure`.
|
|
416
|
+
*/
|
|
417
|
+
@OptimizedRecord
|
|
418
|
+
data class NetworkTracesConfigParam(
|
|
419
|
+
@Field val enabled: Boolean = true,
|
|
420
|
+
@Field val filter: NetworkRequestFilter? = null
|
|
421
|
+
) : Record
|
|
@@ -2,10 +2,12 @@ package expo.modules.appmetrics
|
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import androidx.core.content.edit
|
|
5
|
+
import expo.modules.appmetrics.networkrequests.NetworkTracesConfiguration
|
|
5
6
|
|
|
6
7
|
private const val PREFS_NAME = "dev.expo.app-metrics"
|
|
7
8
|
private const val KEY_ENVIRONMENT = "environment"
|
|
8
9
|
private const val KEY_LAST_PROCESSED_EXIT_MILLIS = "lastProcessedExitMillis"
|
|
10
|
+
private const val KEY_NETWORK_TRACES_CONFIGURATION = "networkTracesConfiguration"
|
|
9
11
|
|
|
10
12
|
object AppMetricsPreferences {
|
|
11
13
|
/**
|
|
@@ -41,4 +43,26 @@ object AppMetricsPreferences {
|
|
|
41
43
|
fun getDefaultEnvironment(): String? {
|
|
42
44
|
return if (BuildConfig.DEBUG) "development" else null
|
|
43
45
|
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Last-applied network traces recording policy, or the default when JS never configured one.
|
|
49
|
+
* Persisted so requests observed before the JS bundle configures the SDK (early startup, or
|
|
50
|
+
* the next launch) follow the last-known setting.
|
|
51
|
+
*/
|
|
52
|
+
fun getNetworkTracesConfiguration(context: Context): NetworkTracesConfiguration {
|
|
53
|
+
val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
|
|
54
|
+
val json = prefs.getString(KEY_NETWORK_TRACES_CONFIGURATION, null)
|
|
55
|
+
?: return NetworkTracesConfiguration()
|
|
56
|
+
return NetworkTracesConfiguration.fromJson(json)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
fun setNetworkTracesConfiguration(
|
|
60
|
+
context: Context,
|
|
61
|
+
configuration: NetworkTracesConfiguration
|
|
62
|
+
) {
|
|
63
|
+
val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
|
|
64
|
+
// `apply()` rather than `commit()`: this runs inline on the JS thread, and iOS persists
|
|
65
|
+
// through `UserDefaults` without a synchronous flush either.
|
|
66
|
+
prefs.edit { putString(KEY_NETWORK_TRACES_CONFIGURATION, configuration.toJson()) }
|
|
67
|
+
}
|
|
44
68
|
}
|
package/android/src/main/java/expo/modules/appmetrics/networkrequests/NetworkRequestPersistence.kt
CHANGED
|
@@ -23,16 +23,37 @@ private const val TAG = "ExpoAppMetrics"
|
|
|
23
23
|
class NetworkRequestPersistence(
|
|
24
24
|
private val database: MetricsDatabase,
|
|
25
25
|
private val scope: CoroutineScope,
|
|
26
|
+
initialConfiguration: NetworkTracesConfiguration = NetworkTracesConfiguration(),
|
|
26
27
|
// A plain value rather than a provider: the id is constant for an instance, and resolving it
|
|
27
28
|
// eagerly keeps the monitor's record path off module state a teardown could have invalidated.
|
|
28
29
|
private val sessionId: String
|
|
29
30
|
) {
|
|
31
|
+
/**
|
|
32
|
+
* Capture-time recording policy. Volatile because the monitor reads it from OkHttp dispatcher
|
|
33
|
+
* threads while reconfigures land on the modules queue.
|
|
34
|
+
*/
|
|
35
|
+
@Volatile
|
|
36
|
+
private var configuration: NetworkTracesConfiguration = initialConfiguration
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Applies a new recording policy. Affects future requests only; rows already written stay.
|
|
40
|
+
*/
|
|
41
|
+
fun setConfiguration(configuration: NetworkTracesConfiguration) {
|
|
42
|
+
this.configuration = configuration
|
|
43
|
+
}
|
|
44
|
+
|
|
30
45
|
/**
|
|
31
46
|
* Records one completed request as a span.
|
|
32
47
|
*/
|
|
33
48
|
fun persist(request: NetworkRequest) {
|
|
34
|
-
//
|
|
35
|
-
//
|
|
49
|
+
// Checked before dispatching: a request the policy excludes costs nothing beyond this. A
|
|
50
|
+
// `hosts` list does parse the URL here, on the dispatcher thread, which is the price of
|
|
51
|
+
// deciding before the hop.
|
|
52
|
+
if (!configuration.allows(request.url, request.method)) {
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
// Converts and inserts on `scope`, so past the gate the dispatcher threads pay neither the
|
|
56
|
+
// span building nor the database write. Matches `persistBuffered`.
|
|
36
57
|
scope.launch {
|
|
37
58
|
val span = request.toSpan(sessionId) ?: return@launch
|
|
38
59
|
try {
|
|
@@ -60,7 +81,15 @@ class NetworkRequestPersistence(
|
|
|
60
81
|
// with the session INSERT and crash-report processing, so converting up to 200 requests
|
|
61
82
|
// there would be the most expensive place to do it.
|
|
62
83
|
scope.launch {
|
|
84
|
+
// Snapshotted once, unlike `persist`, which samples the policy per request. Everything in
|
|
85
|
+
// this batch was observed before the install that triggered the drain, so one policy keeps
|
|
86
|
+
// their treatment from depending on how far the loop happened to get before a reconfigure
|
|
87
|
+
// landed.
|
|
88
|
+
val policy = configuration
|
|
63
89
|
for (request in requests) {
|
|
90
|
+
if (!policy.allows(request.url, request.method)) {
|
|
91
|
+
continue
|
|
92
|
+
}
|
|
64
93
|
val span = request.toSpan(sessionId) ?: continue
|
|
65
94
|
try {
|
|
66
95
|
database.spanDao().insert(span)
|
package/android/src/main/java/expo/modules/appmetrics/networkrequests/NetworkTracesConfiguration.kt
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Copyright 2025-present 650 Industries. All rights reserved.
|
|
2
|
+
|
|
3
|
+
package expo.modules.appmetrics.networkrequests
|
|
4
|
+
|
|
5
|
+
import org.json.JSONArray
|
|
6
|
+
import org.json.JSONObject
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Which network requests get recorded as spans. Unlike the dispatch-side gates, a request
|
|
10
|
+
* rejected here never reaches disk.
|
|
11
|
+
*
|
|
12
|
+
* Persisted, so requests observed before JS configures anything follow the last-applied setting.
|
|
13
|
+
* Mirrors the iOS `NetworkTracesConfiguration`, except for how a partially corrupt blob decodes:
|
|
14
|
+
* this side recovers the readable fields, while iOS falls back to the default wholesale.
|
|
15
|
+
*/
|
|
16
|
+
data class NetworkTracesConfiguration(
|
|
17
|
+
val enabled: Boolean = false,
|
|
18
|
+
/**
|
|
19
|
+
* Allowed hosts, compared for exact, case-insensitive equality. `null` allows every host;
|
|
20
|
+
* an empty list allows none.
|
|
21
|
+
*/
|
|
22
|
+
val hosts: List<String>? = null,
|
|
23
|
+
/** Allowed HTTP methods, compared case-insensitively. `null` allows every method. */
|
|
24
|
+
val methods: List<String>? = null
|
|
25
|
+
) {
|
|
26
|
+
/**
|
|
27
|
+
* Whether a request should be recorded. Matching is delegated to `NetworkRequestFilter`, so
|
|
28
|
+
* the capture gate and the JS-facing observer can't drift apart.
|
|
29
|
+
*/
|
|
30
|
+
fun allows(url: String, method: String): Boolean {
|
|
31
|
+
if (!enabled) {
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
return filter.matches(url, method)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// `persist` gates on the OkHttp dispatcher thread, before the hop to the database queue, so this
|
|
38
|
+
// is built once instead of per request. The instance is immutable, so the filter is too.
|
|
39
|
+
private val filter by lazy { NetworkRequestFilter(hosts = hosts, methods = methods) }
|
|
40
|
+
|
|
41
|
+
/** JSON form for the preferences store. */
|
|
42
|
+
fun toJson(): String {
|
|
43
|
+
val json = JSONObject()
|
|
44
|
+
json.put("enabled", enabled)
|
|
45
|
+
hosts?.let { json.put("hosts", JSONArray(it)) }
|
|
46
|
+
methods?.let { json.put("methods", JSONArray(it)) }
|
|
47
|
+
return json.toString()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
companion object {
|
|
51
|
+
/** Parses the preferences-store form; a malformed blob falls back to the default policy. */
|
|
52
|
+
fun fromJson(json: String): NetworkTracesConfiguration {
|
|
53
|
+
return runCatching {
|
|
54
|
+
val obj = JSONObject(json)
|
|
55
|
+
NetworkTracesConfiguration(
|
|
56
|
+
enabled = obj.optBoolean("enabled", false),
|
|
57
|
+
hosts = obj.optJSONArray("hosts")?.let { array ->
|
|
58
|
+
List(array.length()) { index -> array.getString(index) }
|
|
59
|
+
},
|
|
60
|
+
methods = obj.optJSONArray("methods")?.let { array ->
|
|
61
|
+
List(array.length()) { index -> array.getString(index) }
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
}.getOrDefault(NetworkTracesConfiguration())
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
package/build/module.web.d.ts
CHANGED
|
@@ -10,11 +10,12 @@ declare class ExpoAppMetricsModule extends NativeModule implements ExpoAppMetric
|
|
|
10
10
|
markInteractive(attributes?: MetricAttributes): Promise<void>;
|
|
11
11
|
logEvent(name: string, options?: LogEventOptions): void;
|
|
12
12
|
setGlobalAttributes(attributes?: Record<string, LogAttributeValue> | null): void;
|
|
13
|
+
setNetworkTracesConfig(): void;
|
|
13
14
|
clearStoredEntries(): Promise<void>;
|
|
14
15
|
getInactiveSessions(): Promise<never[]>;
|
|
15
16
|
reportError(): void;
|
|
16
17
|
getMainSession(): Session;
|
|
17
18
|
getForegroundSession(): Promise<null>;
|
|
18
19
|
}
|
|
19
|
-
declare const _default:
|
|
20
|
+
declare const _default: ExpoAppMetricsModule;
|
|
20
21
|
export default _default;
|
package/build/module.web.js
CHANGED
|
@@ -31,6 +31,7 @@ class ExpoAppMetricsModule extends NativeModule {
|
|
|
31
31
|
async markInteractive(attributes) {}
|
|
32
32
|
logEvent(name, options) {}
|
|
33
33
|
setGlobalAttributes(attributes) {}
|
|
34
|
+
setNetworkTracesConfig() {}
|
|
34
35
|
async clearStoredEntries() {}
|
|
35
36
|
async getInactiveSessions() {
|
|
36
37
|
return [];
|
package/build/module.web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["module.web.ts"],"sourcesContent":[null],"names":["NativeModule","registerWebModule","SharedObject","NetworkRequestObserverWeb","WebSession","globalThis","expo","id","startDate","Date","toISOString","type","isActive","getEndDate","getMetrics","getLogs","addMetric","_metric","ExpoAppMetricsModule","NetworkRequestObserver","Session","mainSession","markFirstRender","markInteractive","attributes","logEvent","name","options","setGlobalAttributes","clearStoredEntries","getInactiveSessions","reportError","getMainSession","getForegroundSession"],"mappings":"AAAA,SAASA,YAAY,EAAEC,iBAAiB,EAAEC,YAAY,QAAQ,OAAO;AAerE,cAAc,UAAU;AAExB,MAAMC,kCAAkCD;AAGxC;AAEA,MAAME,mBAAmBC,WAAWC,IAAI,CAACJ,YAAY;;IAC1CK,KAAK,cAAc;IACnBC,YAAY,IAAIC,OAAOC,WAAW,GAAG;IAE9C,YAAY,AAASC,OAAoB,MAAM,CAAE;QAC/C,KAAK,SADcA,OAAAA;IAErB;IAEA,MAAMC,WAA6B;QACjC,OAAO;IACT;IACA,MAAMC,aAAqC;QACzC,OAAO;IACT;IACA,MAAMC,aAAgC;QACpC,OAAO,EAAE;IACX;IACA,MAAMC,UAAgC;QACpC,OAAO,EAAE;IACX;IACA,MAAMC,UAAUC,OAAoB,EAAiB,CAAC;AACxD;AAEA,MAAMC,6BAA6BlB;IACjCmB,yBACEhB,0BAA2F;IAC7FiB,UAAUhB,WAAwC;IAE1CiB,cAAiC,KAAK;IAE9C,MAAMC,kBAAkB,CAAC;IACzB,MAAMC,gBAAgBC,UAA6B,EAAE,CAAC;IACtDC,SAASC,IAAY,EAAEC,OAAyB,EAAE,CAAC;IACnDC,oBAAoBJ,UAAqD,EAAE,CAAC;
|
|
1
|
+
{"version":3,"sources":["module.web.ts"],"sourcesContent":[null],"names":["NativeModule","registerWebModule","SharedObject","NetworkRequestObserverWeb","WebSession","globalThis","expo","id","startDate","Date","toISOString","type","isActive","getEndDate","getMetrics","getLogs","addMetric","_metric","ExpoAppMetricsModule","NetworkRequestObserver","Session","mainSession","markFirstRender","markInteractive","attributes","logEvent","name","options","setGlobalAttributes","setNetworkTracesConfig","clearStoredEntries","getInactiveSessions","reportError","getMainSession","getForegroundSession"],"mappings":"AAAA,SAASA,YAAY,EAAEC,iBAAiB,EAAEC,YAAY,QAAQ,OAAO;AAerE,cAAc,UAAU;AAExB,MAAMC,kCAAkCD;AAGxC;AAEA,MAAME,mBAAmBC,WAAWC,IAAI,CAACJ,YAAY;;IAC1CK,KAAK,cAAc;IACnBC,YAAY,IAAIC,OAAOC,WAAW,GAAG;IAE9C,YAAY,AAASC,OAAoB,MAAM,CAAE;QAC/C,KAAK,SADcA,OAAAA;IAErB;IAEA,MAAMC,WAA6B;QACjC,OAAO;IACT;IACA,MAAMC,aAAqC;QACzC,OAAO;IACT;IACA,MAAMC,aAAgC;QACpC,OAAO,EAAE;IACX;IACA,MAAMC,UAAgC;QACpC,OAAO,EAAE;IACX;IACA,MAAMC,UAAUC,OAAoB,EAAiB,CAAC;AACxD;AAEA,MAAMC,6BAA6BlB;IACjCmB,yBACEhB,0BAA2F;IAC7FiB,UAAUhB,WAAwC;IAE1CiB,cAAiC,KAAK;IAE9C,MAAMC,kBAAkB,CAAC;IACzB,MAAMC,gBAAgBC,UAA6B,EAAE,CAAC;IACtDC,SAASC,IAAY,EAAEC,OAAyB,EAAE,CAAC;IACnDC,oBAAoBJ,UAAqD,EAAE,CAAC;IAC5EK,yBAAyB,CAAC;IAC1B,MAAMC,qBAAqB,CAAC;IAC5B,MAAMC,sBAAsB;QAC1B,OAAO,EAAE;IACX;IACAC,cAAc,CAAC;IACfC,iBAA0B;QACxB,IAAI,CAACZ,WAAW,KAAK,IAAIjB,WAAW;QACpC,OAAO,IAAI,CAACiB,WAAW;IACzB;IACA,MAAMa,uBAAuB;QAC3B,OAAO;IACT;AACF;AAEA,eAAejC,kBAAkBiB,sBAAsB,kBAAkB"}
|
package/build/types.d.ts
CHANGED
|
@@ -470,6 +470,20 @@ export type DebugSession = {
|
|
|
470
470
|
/** Crash report attached to the session, if any. */
|
|
471
471
|
crashReport?: CrashReport | null;
|
|
472
472
|
};
|
|
473
|
+
/**
|
|
474
|
+
* Normalized form of `Observe.configure({ networkTraces })`, persisted natively.
|
|
475
|
+
* @hidden
|
|
476
|
+
*/
|
|
477
|
+
export type NetworkTracesConfig = {
|
|
478
|
+
/**
|
|
479
|
+
* Whether completed network requests are written to the local `spans` table.
|
|
480
|
+
*/
|
|
481
|
+
enabled: boolean;
|
|
482
|
+
/**
|
|
483
|
+
* Only requests matching the filter are recorded. An omitted filter records every request.
|
|
484
|
+
*/
|
|
485
|
+
filter?: NetworkRequestFilter | null;
|
|
486
|
+
};
|
|
473
487
|
export interface ExpoAppMetricsModuleType {
|
|
474
488
|
markFirstRender(): void;
|
|
475
489
|
markInteractive(attributes?: MetricAttributes): void;
|
|
@@ -484,6 +498,12 @@ export interface ExpoAppMetricsModuleType {
|
|
|
484
498
|
* @param options Optional body, attributes, and severity overrides.
|
|
485
499
|
*/
|
|
486
500
|
logEvent(name: string, options?: LogEventOptions): void;
|
|
501
|
+
/**
|
|
502
|
+
* Applies and persists the network traces recording setting. Affects future captures only;
|
|
503
|
+
* spans already written keep dispatching.
|
|
504
|
+
* @hidden
|
|
505
|
+
*/
|
|
506
|
+
setNetworkTracesConfig(config: NetworkTracesConfig): void;
|
|
487
507
|
/**
|
|
488
508
|
* Sets attributes merged into every subsequent metric and log event.
|
|
489
509
|
* Per-record keys win on collision. Pass `null`, `undefined`, or an empty
|
package/build/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["types.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAsgBA,WAwHC"}
|
package/expo-module.config.json
CHANGED
|
@@ -14,7 +14,12 @@ public class AppMetricsAppDelegateSubscriber: ExpoAppDelegateSubscriber {
|
|
|
14
14
|
// From here on every completed request is written to the database, attributed to the main
|
|
15
15
|
// session. The session's row INSERT was enqueued on the actor when `mainSession` was first
|
|
16
16
|
// touched above, so it lands before any request row that references it.
|
|
17
|
-
|
|
17
|
+
// The persisted recording policy applies from the first observed request; JS can replace
|
|
18
|
+
// it later via `setNetworkTracesConfig`, affecting subsequent requests only.
|
|
19
|
+
NetworkRequestMonitor.shared.persistence = NetworkRequestPersistence(
|
|
20
|
+
database: AppMetrics.database,
|
|
21
|
+
configuration: AppMetricsUserDefaults.networkTracesConfiguration ?? NetworkTracesConfiguration()
|
|
22
|
+
) {
|
|
18
23
|
return AppMetrics.mainSession.id
|
|
19
24
|
}
|
|
20
25
|
}
|
|
@@ -64,6 +64,23 @@ public final class AppMetricsModule: Module, UpdatesStateChangeListener {
|
|
|
64
64
|
GlobalAttributes.set(attributes)
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
Function("setNetworkTracesConfig") { (config: NetworkTracesConfigParam) in
|
|
68
|
+
let configuration = NetworkTracesConfiguration(
|
|
69
|
+
enabled: config.enabled,
|
|
70
|
+
hosts: config.filter?.hosts,
|
|
71
|
+
methods: config.filter?.methods
|
|
72
|
+
)
|
|
73
|
+
// Persisted before the hop, so a configure racing startup is either read from
|
|
74
|
+
// `UserDefaults` by the installing producer or applied to the live one below.
|
|
75
|
+
AppMetricsUserDefaults.networkTracesConfiguration = configuration
|
|
76
|
+
AppMetricsActor.isolated {
|
|
77
|
+
// Re-read rather than captured: actor hops are unordered, so two rapid calls could
|
|
78
|
+
// otherwise apply out of order. Android captures, since its queue is a single thread.
|
|
79
|
+
let latest = AppMetricsUserDefaults.networkTracesConfiguration ?? NetworkTracesConfiguration()
|
|
80
|
+
NetworkRequestMonitor.shared.persistence?.setConfiguration(latest)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
67
84
|
AsyncFunction("getAppStartupTimesAsync") {
|
|
68
85
|
return await AppMetrics.mainSession.appStartupMonitor.metrics
|
|
69
86
|
}
|
|
@@ -195,6 +212,14 @@ private func storedSession(id: String) throws -> StoredSession? {
|
|
|
195
212
|
return StoredSession(from: row)
|
|
196
213
|
}
|
|
197
214
|
|
|
215
|
+
/// Payload of `setNetworkTracesConfig`: the normalized `networkTraces` setting pushed down by
|
|
216
|
+
/// `Observe.configure`.
|
|
217
|
+
@Record
|
|
218
|
+
internal struct NetworkTracesConfigParam {
|
|
219
|
+
var enabled: Bool = true
|
|
220
|
+
var filter: NetworkRequestFilter?
|
|
221
|
+
}
|
|
222
|
+
|
|
198
223
|
struct MetricAttributes: Record {
|
|
199
224
|
@Field var routeName: String?
|
|
200
225
|
@Field var params: [String: Any]?
|
|
@@ -8,6 +8,7 @@ public final class AppMetricsUserDefaults: UserDefaults {
|
|
|
8
8
|
private enum Keys: String {
|
|
9
9
|
case lastAppLaunchState
|
|
10
10
|
case environment
|
|
11
|
+
case networkTracesConfiguration
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
private init() {
|
|
@@ -41,4 +42,15 @@ public final class AppMetricsUserDefaults: UserDefaults {
|
|
|
41
42
|
defaults.set(codable: newValue, forKey: Keys.lastAppLaunchState.rawValue)
|
|
42
43
|
}
|
|
43
44
|
}
|
|
45
|
+
|
|
46
|
+
/// Last-applied network traces policy, or `nil` when JS never configured one. Persisted so
|
|
47
|
+
/// early-startup requests follow the last-known setting.
|
|
48
|
+
static var networkTracesConfiguration: NetworkTracesConfiguration? {
|
|
49
|
+
get {
|
|
50
|
+
return defaults.codable(forKey: Keys.networkTracesConfiguration.rawValue, as: NetworkTracesConfiguration.self)
|
|
51
|
+
}
|
|
52
|
+
set {
|
|
53
|
+
defaults.set(codable: newValue, forKey: Keys.networkTracesConfiguration.rawValue)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
44
56
|
}
|
|
@@ -15,13 +15,10 @@ import Foundation
|
|
|
15
15
|
/// unset places no constraint on its dimension, while a field set to an empty array allows nothing
|
|
16
16
|
/// through it (an empty allow-list matches no value), so any empty field drops every request. A
|
|
17
17
|
/// filter with no fields set matches every request, matching the no-filter default.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@Field
|
|
18
|
+
@Record
|
|
19
|
+
public struct NetworkRequestFilter: Sendable {
|
|
22
20
|
public var hosts: [String]?
|
|
23
21
|
|
|
24
|
-
@Field
|
|
25
22
|
public var methods: [String]?
|
|
26
23
|
|
|
27
24
|
/// Returns whether a request with the given URL and method passes this filter. Host and method
|
|
@@ -15,13 +15,28 @@ final class NetworkRequestPersistence: Sendable {
|
|
|
15
15
|
/// the app delegate finished wiring it.
|
|
16
16
|
private let sessionId: @Sendable () -> String
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
private var configuration: NetworkTracesConfiguration
|
|
19
|
+
|
|
20
|
+
init(
|
|
21
|
+
database: MetricsDatabase?,
|
|
22
|
+
configuration: NetworkTracesConfiguration = NetworkTracesConfiguration(),
|
|
23
|
+
sessionId: @escaping @Sendable () -> String
|
|
24
|
+
) {
|
|
19
25
|
self.database = database
|
|
26
|
+
self.configuration = configuration
|
|
20
27
|
self.sessionId = sessionId
|
|
21
28
|
}
|
|
22
29
|
|
|
30
|
+
/// Applies a new recording policy. Affects future requests only; rows already written stay.
|
|
31
|
+
func setConfiguration(_ configuration: NetworkTracesConfiguration) {
|
|
32
|
+
self.configuration = configuration
|
|
33
|
+
}
|
|
34
|
+
|
|
23
35
|
/// Records one completed request as a span.
|
|
24
36
|
func persist(_ request: NetworkRequest) {
|
|
37
|
+
guard configuration.allows(url: request.url, method: request.method) else {
|
|
38
|
+
return
|
|
39
|
+
}
|
|
25
40
|
guard let database, let row = SpanRow.from(request: request, sessionId: sessionId()) else {
|
|
26
41
|
return
|
|
27
42
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Copyright 2025-present 650 Industries. All rights reserved.
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
|
|
5
|
+
/// Which network requests get recorded as spans. Unlike the dispatch-side gates, a request
|
|
6
|
+
/// rejected here never reaches disk.
|
|
7
|
+
///
|
|
8
|
+
/// Persisted, so requests observed before JS configures anything follow the last-applied setting.
|
|
9
|
+
internal struct NetworkTracesConfiguration: Codable, Sendable {
|
|
10
|
+
var enabled: Bool = false
|
|
11
|
+
|
|
12
|
+
/// Allowed hosts, compared for exact, case-insensitive equality. `nil` allows every host;
|
|
13
|
+
/// an empty array allows none.
|
|
14
|
+
var hosts: [String]?
|
|
15
|
+
|
|
16
|
+
/// Allowed HTTP methods, compared case-insensitively. `nil` allows every method.
|
|
17
|
+
var methods: [String]?
|
|
18
|
+
|
|
19
|
+
/// Whether a request should be recorded. Matching is delegated to `NetworkRequestFilter`, so the
|
|
20
|
+
/// capture gate and the JS-facing observer can't drift apart.
|
|
21
|
+
func allows(url: URL, method: String) -> Bool {
|
|
22
|
+
guard enabled else {
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
return NetworkRequestFilter(hosts: hosts, methods: methods).matches(url: url, method: method)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -458,11 +458,66 @@ struct NetworkRequestPersistenceTests {
|
|
|
458
458
|
)
|
|
459
459
|
}
|
|
460
460
|
|
|
461
|
+
@Test
|
|
462
|
+
func `drops every request while recording is disabled`() throws {
|
|
463
|
+
try withTemporaryDatabase { database in
|
|
464
|
+
try insertSession(id: "s", into: database)
|
|
465
|
+
let persistence = NetworkRequestPersistence(
|
|
466
|
+
database: database,
|
|
467
|
+
configuration: NetworkTracesConfiguration(enabled: false)
|
|
468
|
+
) {
|
|
469
|
+
return "s"
|
|
470
|
+
}
|
|
471
|
+
persistence.persist(makeRequest())
|
|
472
|
+
#expect(try database.getSpans(afterId: -1).isEmpty)
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
@Test
|
|
477
|
+
func `records only requests matching the configured filter`() throws {
|
|
478
|
+
try withTemporaryDatabase { database in
|
|
479
|
+
try insertSession(id: "s", into: database)
|
|
480
|
+
let persistence = NetworkRequestPersistence(
|
|
481
|
+
database: database,
|
|
482
|
+
configuration: NetworkTracesConfiguration(enabled: true, hosts: ["API.myapp.com"], methods: nil)
|
|
483
|
+
) {
|
|
484
|
+
return "s"
|
|
485
|
+
}
|
|
486
|
+
persistence.persist(makeRequest(url: "https://api.example.com/skip"))
|
|
487
|
+
persistence.persist(makeRequest(url: "https://api.myapp.com/keep"))
|
|
488
|
+
let rows = try database.getSpans(afterId: -1)
|
|
489
|
+
#expect(rows.count == 1)
|
|
490
|
+
let attributes = try attributesDict(#require(rows.first))
|
|
491
|
+
#expect(attributes["url.full"] as? String == "https://api.myapp.com/keep")
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
@Test
|
|
496
|
+
func `applies a configuration change to subsequent requests only`() throws {
|
|
497
|
+
// "Applies forward": rows persisted before the change stay in the table and still dispatch.
|
|
498
|
+
try withTemporaryDatabase { database in
|
|
499
|
+
try insertSession(id: "s", into: database)
|
|
500
|
+
let persistence = NetworkRequestPersistence(
|
|
501
|
+
database: database,
|
|
502
|
+
configuration: NetworkTracesConfiguration(enabled: true)
|
|
503
|
+
) {
|
|
504
|
+
return "s"
|
|
505
|
+
}
|
|
506
|
+
persistence.persist(makeRequest())
|
|
507
|
+
persistence.setConfiguration(NetworkTracesConfiguration(enabled: false))
|
|
508
|
+
persistence.persist(makeRequest())
|
|
509
|
+
#expect(try database.getSpans(afterId: -1).count == 1)
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
461
513
|
@Test
|
|
462
514
|
func `persists a completed request as a span attributed to the provided session`() throws {
|
|
463
515
|
try withTemporaryDatabase { database in
|
|
464
516
|
try insertSession(id: "main-session", into: database)
|
|
465
|
-
let persistence = NetworkRequestPersistence(
|
|
517
|
+
let persistence = NetworkRequestPersistence(
|
|
518
|
+
database: database,
|
|
519
|
+
configuration: NetworkTracesConfiguration(enabled: true)
|
|
520
|
+
) {
|
|
466
521
|
return "main-session"
|
|
467
522
|
}
|
|
468
523
|
persistence.persist(makeRequest())
|
|
@@ -479,7 +534,10 @@ struct NetworkRequestPersistenceTests {
|
|
|
479
534
|
try withTemporaryDatabase { database in
|
|
480
535
|
try insertSession(id: "main-session", into: database)
|
|
481
536
|
let monitor = NetworkRequestMonitor()
|
|
482
|
-
monitor.persistence = NetworkRequestPersistence(
|
|
537
|
+
monitor.persistence = NetworkRequestPersistence(
|
|
538
|
+
database: database,
|
|
539
|
+
configuration: NetworkTracesConfiguration(enabled: true)
|
|
540
|
+
) {
|
|
483
541
|
return "main-session"
|
|
484
542
|
}
|
|
485
543
|
monitor.record(makeRequest(method: "GET"))
|
|
@@ -494,7 +552,10 @@ struct NetworkRequestPersistenceTests {
|
|
|
494
552
|
// The sessions FK protects referential integrity; persistence must degrade to a dropped
|
|
495
553
|
// row rather than throw into the monitor's record path.
|
|
496
554
|
try withTemporaryDatabase { database in
|
|
497
|
-
let persistence = NetworkRequestPersistence(
|
|
555
|
+
let persistence = NetworkRequestPersistence(
|
|
556
|
+
database: database,
|
|
557
|
+
configuration: NetworkTracesConfiguration(enabled: true)
|
|
558
|
+
) {
|
|
498
559
|
return "never-inserted"
|
|
499
560
|
}
|
|
500
561
|
persistence.persist(makeRequest())
|