*:last-child]:mb-0!')}>
{propsDeclarations?.map(prop =>
prop
? renderProp(
diff --git a/docs/pages/build-reference/infrastructure.mdx b/docs/pages/build-reference/infrastructure.mdx
index 3070d258b324ac..97bd80a2ae2e4f 100644
--- a/docs/pages/build-reference/infrastructure.mdx
+++ b/docs/pages/build-reference/infrastructure.mdx
@@ -1,5 +1,5 @@
---
-modificationDate: September 17th, 2025
+modificationDate: May 12th, 2026
title: Build server infrastructure
sidebar_title: Server infrastructure
maxHeadingDepth: 4
@@ -44,15 +44,7 @@ Android builders run on virtual machines in an isolated environment. Every build
- [npm cache deployed with Kubernetes](/build-reference/caching/#javascript-dependencies)
- [Maven cache deployed with Kubernetes](/build-reference/caching/#android-dependencies)
-- Global Gradle configuration in **~/.gradle/gradle.properties**:
-
- ```ini ~/.gradle/gradle.properties
- org.gradle.jvmargs=-Xmx14g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
- org.gradle.parallel=true
- org.gradle.configureondemand=true
- org.gradle.daemon=false
- ```
-
+- Gradle JVM args are injected via the `GRADLE_OPTS` environment variable when the build environment is provisioned. See [Gradle JVM args](#gradle-jvm-args) below.
- Global npm configuration in **~/.npmrc**:
```ini ~/.npmrc
@@ -68,6 +60,32 @@ Android builders run on virtual machines in an isolated environment. Every build
enableImmutableInstalls: false
```
+### Gradle JVM args
+
+EAS Build sets the `GRADLE_OPTS` environment variable on the build VM (the worker) before Gradle runs. The values depend on the [resource class](/eas/json/#resourceclass) you select:
+
+| Resource class | `-Xmx` (max heap) |
+| -------------- | ----------------- |
+| `medium` | `4g` |
+| `large` | `8g` |
+
+In addition to `-Xmx`, the worker passes the following JVM args to the Gradle build JVM via `-Dorg.gradle.jvmargs`:
+
+- `-XX:MaxMetaspaceSize=1g`
+- `-XX:+HeapDumpOnOutOfMemoryError`
+- `-Dfile.encoding=UTF-8`
+
+The worker also sets these top-level Gradle properties on `GRADLE_OPTS`:
+
+- `-Dorg.gradle.parallel=true`
+- `-Dorg.gradle.daemon=false`
+
+> **warning** The worker sets `org.gradle.jvmargs` via `GRADLE_OPTS`, which overrides any `org.gradle.jvmargs` defined in your project's **gradle.properties**.
+
+#### Overriding `GRADLE_OPTS`
+
+You can replace the worker default by setting `GRADLE_OPTS` under a build profile's [`env`](/eas/json/#env) in **eas.json**, in a [workflow file](/eas/workflows/syntax/#jobsjob_idenv), or with [EAS Environment Variables](/eas/environment-variables/). Project environment values take precedence over the worker's default values.
+
### Android server images
#### `ubuntu-24.04-jdk-17-ndk-r27b-sdk-55` (`latest`, `sdk-55`)
diff --git a/docs/pages/versions/unversioned/sdk/ui/index.mdx b/docs/pages/versions/unversioned/sdk/ui/index.mdx
index 54e1277061ae11..ff7724b0e7a6ef 100644
--- a/docs/pages/versions/unversioned/sdk/ui/index.mdx
+++ b/docs/pages/versions/unversioned/sdk/ui/index.mdx
@@ -20,6 +20,4 @@ Components are available for the following platforms:
## Drop-in replacements
-API-compatible replacements for popular React Native community libraries:
-
-- **[DateTimePicker](drop-in-replacements/datetimepicker)**: Compatible with `@react-native-community/datetimepicker`
+See **[Drop-in replacements](drop-in-replacements)** for API-compatible replacements for popular React Native community libraries.
diff --git a/docs/pages/versions/v55.0.0/sdk/ui/index.mdx b/docs/pages/versions/v55.0.0/sdk/ui/index.mdx
index 6fabc06332113b..017e3b5948f0eb 100644
--- a/docs/pages/versions/v55.0.0/sdk/ui/index.mdx
+++ b/docs/pages/versions/v55.0.0/sdk/ui/index.mdx
@@ -19,6 +19,4 @@ Components are available for the following platforms:
## Drop-in replacements
-API-compatible replacements for popular React Native community libraries:
-
-- **[DateTimePicker](drop-in-replacements/datetimepicker)**: Compatible with `@react-native-community/datetimepicker`
+See **[Drop-in replacements](drop-in-replacements)** for API-compatible replacements for popular React Native community libraries.
diff --git a/docs/pages/versions/v56.0.0/sdk/ui/index.mdx b/docs/pages/versions/v56.0.0/sdk/ui/index.mdx
index 8b2b1c99f49b47..0ae8e85ef86c83 100644
--- a/docs/pages/versions/v56.0.0/sdk/ui/index.mdx
+++ b/docs/pages/versions/v56.0.0/sdk/ui/index.mdx
@@ -20,6 +20,4 @@ Components are available for the following platforms:
## Drop-in replacements
-API-compatible replacements for popular React Native community libraries:
-
-- **[DateTimePicker](drop-in-replacements/datetimepicker)**: Compatible with `@react-native-community/datetimepicker`
+See **[Drop-in replacements](drop-in-replacements)** for API-compatible replacements for popular React Native community libraries.
diff --git a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/AppMetricsModule.kt b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/AppMetricsModule.kt
index 3793021a44b75d..8cc97260c0742f 100644
--- a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/AppMetricsModule.kt
+++ b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/AppMetricsModule.kt
@@ -4,17 +4,18 @@ import android.content.Context
import expo.modules.appmetrics.appstartup.AppStartupManager
import expo.modules.appmetrics.logevents.LogEventOptions
import expo.modules.appmetrics.logevents.Severity
-import expo.modules.appmetrics.logevents.attributesToJsonObject
import expo.modules.appmetrics.logevents.sanitizeLogEventAttributes
import expo.modules.appmetrics.logevents.validateEventBody
import expo.modules.appmetrics.logevents.validateEventName
import expo.modules.appmetrics.memory.MemoryMetricsManager
+import expo.modules.appmetrics.storage.JsMetric
import expo.modules.appmetrics.storage.JsSession
import expo.modules.appmetrics.storage.LogRecord
import expo.modules.appmetrics.storage.Metric
import expo.modules.appmetrics.storage.SessionManager
import expo.modules.appmetrics.updates.UpdatesMonitoring
import expo.modules.appmetrics.updates.UpdatesStateEvent
+import expo.modules.appmetrics.utils.JsonAny
import expo.modules.appmetrics.utils.TimeUtils
import expo.modules.interfaces.constants.ConstantsInterface
import expo.modules.kotlin.exception.Exceptions
@@ -30,7 +31,6 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import kotlinx.serialization.json.Json
class AppMetricsModule : Module(), UpdatesStateChangeListener {
private val context: Context
@@ -97,7 +97,7 @@ class AppMetricsModule : Module(), UpdatesStateChangeListener {
name = validatedName,
body = validatedBody,
severity = severity.rawValue,
- attributes = sanitized.attributes?.let { Json.encodeToString(attributesToJsonObject(it)) },
+ attributes = sanitized.attributes?.let { JsonAny.encodeMapToJsonString(it) },
droppedAttributesCount = sanitized.droppedCount
)
),
@@ -170,30 +170,8 @@ class AppMetricsModule : Module(), UpdatesStateChangeListener {
AsyncFunction("clearStoredEntries") Coroutine { -> sessionManager.clearAllData() }
- Function("startSession") {
- val sessionId = sessionManager.createSessionId()
- val timestamp = TimeUtils.getCurrentTimestampInISOFormat()
- val sessionMetadata = metadata
-
- scope.launch {
- sessionManager.startSessionWithIdAt(
- sessionId = sessionId,
- timestamp = timestamp,
- metadata = sessionMetadata
- )
- }
-
- return@Function sessionId
- }
-
- Function("stopSession") { sessionId: String ->
- scope.launch {
- sessionManager.stopSession(sessionId = sessionId)
- }
- }
-
- AsyncFunction("addCustomMetricToSession") Coroutine { sessionId: String, metric: PartialMetric ->
- sessionManager.addMetrics(listOf(metric.toMetric(sessionId)), sessionId = sessionId)
+ AsyncFunction("addCustomMetricToSession") Coroutine { metric: JsMetric ->
+ sessionManager.addMetrics(listOf(metric.toMetric()), sessionId = metric.sessionId)
}
AsyncFunction("getMainSession") Coroutine { ->
@@ -237,25 +215,6 @@ class AppMetricsModule : Module(), UpdatesStateChangeListener {
}
}
-data class PartialMetric(
- @Field val category: String,
- @Field val name: String,
- @Field val value: Double,
- @Field val routeName: String? = null,
- @Field val params: Map? = null
-) : Record {
- fun toMetric(sessionId: String): Metric =
- Metric(
- sessionId = sessionId,
- timestamp = TimeUtils.getCurrentTimestampInISOFormat(),
- category = category,
- name = name,
- value = value,
- routeName = routeName,
- params = params?.let { Json.encodeToString(it) }
- )
-}
-
data class MetricAttributes(
@Field val routeName: String? = null,
@Field val params: Map? = null
diff --git a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/Metrics.kt b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/Metrics.kt
index 0483ba1f868699..1c0becc9734b05 100644
--- a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/Metrics.kt
+++ b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/Metrics.kt
@@ -48,5 +48,6 @@ enum class MetricCategory(
AppStartup("appStartup"),
FrameRate("frameRate"),
Memory("memory"),
- Updates("updates")
+ Updates("updates"),
+ Navigation("navigation")
}
diff --git a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/logevents/AttributeValidation.kt b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/logevents/AttributeValidation.kt
index 8a40ffed392702..05ed57b275d0ca 100644
--- a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/logevents/AttributeValidation.kt
+++ b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/logevents/AttributeValidation.kt
@@ -2,8 +2,6 @@ package expo.modules.appmetrics.logevents
import android.util.Log
import expo.modules.appmetrics.TAG
-import expo.modules.appmetrics.utils.JsonAny
-import kotlinx.serialization.json.JsonObject
/**
* Patterns that match attribute keys reserved by the SDK. Caller-provided
@@ -115,13 +113,3 @@ internal fun sanitizeLogEventAttributes(attributes: Map?): Sanitiz
droppedCount = emptyKeyDrops + reservedKeyDrops.size + overflowDrops
)
}
-
-/**
- * Converts a sanitized attribute map to a `JsonObject` for storage. Values
- * whose type cannot be represented in OTLP (e.g. `Date`, NaN/Infinity doubles)
- * are encoded as JSON `null` here; the typed-attribute encoder at dispatch
- * time will skip them and add to `droppedAttributesCount` accordingly.
- */
-internal fun attributesToJsonObject(attributes: Map): JsonObject {
- return JsonObject(attributes.mapValues { (_, value) -> JsonAny.toElement(value) })
-}
diff --git a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/storage/SessionMappers.kt b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/storage/SessionMappers.kt
index 43b8bac389e6cd..6cdcf45579e894 100644
--- a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/storage/SessionMappers.kt
+++ b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/storage/SessionMappers.kt
@@ -1,8 +1,10 @@
package expo.modules.appmetrics.storage
import expo.modules.appmetrics.utils.JsonAny
+import expo.modules.appmetrics.utils.TimeUtils
import expo.modules.kotlin.records.Field
import expo.modules.kotlin.records.Record
+import java.util.UUID
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
@@ -39,16 +41,29 @@ data class JsSession(
}
data class JsMetric(
- @Field val metricId: String,
@Field val sessionId: String,
- @Field val timestamp: String,
@Field val category: String,
@Field val name: String,
@Field val value: Double,
- @Field val routeName: String?,
- @Field val updateId: String?,
- @Field val params: Map?
+ @Field val metricId: String? = UUID.randomUUID().toString(),
+ @Field val timestamp: String = TimeUtils.getCurrentTimestampInISOFormat(),
+ @Field val routeName: String? = null,
+ @Field val updateId: String? = null,
+ @Field val params: Map? = null
) : Record {
+ fun toMetric(): Metric =
+ Metric(
+ metricId = metricId ?: UUID.randomUUID().toString(),
+ sessionId = sessionId,
+ timestamp = timestamp,
+ category = category,
+ name = name,
+ value = value,
+ routeName = routeName,
+ updateId = updateId,
+ params = params?.let { JsonAny.encodeMapToJsonString(it) }
+ )
+
companion object {
fun fromMetric(metric: Metric): JsMetric =
JsMetric(
diff --git a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/utils/JsonAny.kt b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/utils/JsonAny.kt
index 3e265d086b1da1..89286e61200eba 100644
--- a/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/utils/JsonAny.kt
+++ b/packages/expo-app-metrics/android/src/main/java/expo/modules/appmetrics/utils/JsonAny.kt
@@ -1,5 +1,6 @@
package expo.modules.appmetrics.utils
+import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonNull
@@ -56,4 +57,13 @@ object JsonAny {
is JsonArray -> element.map { fromElement(it) }
}
}
+
+ // `Json.encodeToString(map)` would fail at runtime with "Serializer for class
+ // 'Any' is not found" — kotlinx.serialization has no built-in `Any`
+ // serializer, so we route every value through `toElement` first.
+ fun encodeMapToJsonString(map: Map): String =
+ Json.encodeToString(
+ JsonObject.serializer(),
+ JsonObject(map.mapValues { (_, v) -> toElement(v) })
+ )
}
diff --git a/packages/expo-app-metrics/android/src/test/java/expo/modules/appmetrics/utils/JsonAnyTest.kt b/packages/expo-app-metrics/android/src/test/java/expo/modules/appmetrics/utils/JsonAnyTest.kt
new file mode 100644
index 00000000000000..407194043b005a
--- /dev/null
+++ b/packages/expo-app-metrics/android/src/test/java/expo/modules/appmetrics/utils/JsonAnyTest.kt
@@ -0,0 +1,41 @@
+package expo.modules.appmetrics.utils
+
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.json.JsonElement
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+
+@RunWith(RobolectricTestRunner::class)
+@Config(manifest = Config.NONE, sdk = [28])
+class JsonAnyTest {
+ @Test
+ fun `encodeMapToJsonString round-trips primitives, booleans and nested structures`() {
+ val encoded = JsonAny.encodeMapToJsonString(
+ mapOf(
+ "isInitial" to true,
+ "isAppLaunch" to false,
+ "screen" to "Home",
+ "attempt" to 3,
+ "ratio" to 1.5,
+ "missing" to null,
+ "tags" to listOf("a", "b"),
+ "nested" to mapOf("k" to true)
+ )
+ )
+
+ @Suppress("UNCHECKED_CAST")
+ val decoded = JsonAny.fromElement(Json.decodeFromString(encoded)) as Map
+ assertEquals(true, decoded["isInitial"])
+ assertEquals(false, decoded["isAppLaunch"])
+ assertEquals("Home", decoded["screen"])
+ assertEquals(3L, decoded["attempt"])
+ assertEquals(1.5, decoded["ratio"])
+ assertNull(decoded["missing"])
+ assertEquals(listOf("a", "b"), decoded["tags"])
+ assertEquals(mapOf("k" to true), decoded["nested"])
+ }
+}
diff --git a/packages/expo-app-metrics/build/module.web.d.ts b/packages/expo-app-metrics/build/module.web.d.ts
index bec19e61032dd8..7f69340b00de2c 100644
--- a/packages/expo-app-metrics/build/module.web.d.ts
+++ b/packages/expo-app-metrics/build/module.web.d.ts
@@ -1,12 +1,8 @@
import { NativeModule } from 'expo';
-import type { ExpoAppMetricsModuleType, LogEventOptions, MetricAttributes } from './types';
+import type { ExpoAppMetricsModuleType, LogEventOptions, Metric, MetricAttributes } from './types';
export * from './types';
declare class ExpoAppMetricsModule extends NativeModule implements ExpoAppMetricsModuleType {
- addCustomMetricToSession(sessionId: string, metric: {
- category: string;
- name: string;
- value: number;
- }): Promise;
+ addCustomMetricToSession(metric: Metric): Promise;
markFirstRender(): Promise;
markInteractive(attributes?: MetricAttributes): Promise;
logEvent(name: string, options?: LogEventOptions): void;
@@ -15,8 +11,6 @@ declare class ExpoAppMetricsModule extends NativeModule implements ExpoAppMetric
getAllSessions(): Promise;
simulateCrashReport(): void;
triggerCrash(): void;
- startSession(metadata?: string): string;
- stopSession(sessionId: string): void;
getMainSession(): Promise;
}
declare const _default: typeof ExpoAppMetricsModule;
diff --git a/packages/expo-app-metrics/build/module.web.d.ts.map b/packages/expo-app-metrics/build/module.web.d.ts.map
index e972f55bbf4361..5f09f5a6cd5bb3 100644
--- a/packages/expo-app-metrics/build/module.web.d.ts.map
+++ b/packages/expo-app-metrics/build/module.web.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"module.web.d.ts","sourceRoot":"","sources":["../src/module.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,MAAM,CAAC;AAEvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3F,cAAc,SAAS,CAAC;AAExB,cAAM,oBAAqB,SAAQ,YAAa,YAAW,wBAAwB;IACjF,wBAAwB,CACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,IAAI,CAAC;IAGV,eAAe;IACf,eAAe,CAAC,UAAU,CAAC,EAAE,gBAAgB;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAC1C,gBAAgB;IAGhB,kBAAkB;IAClB,cAAc;IAGpB,mBAAmB;IACnB,YAAY;IACZ,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM;IAG9B,WAAW,CAAC,SAAS,EAAE,MAAM;IACvB,cAAc;CAGrB;;AAED,wBAAyE"}
\ No newline at end of file
+{"version":3,"file":"module.web.d.ts","sourceRoot":"","sources":["../src/module.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,MAAM,CAAC;AAEvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEnG,cAAc,SAAS,CAAC;AAExB,cAAM,oBAAqB,SAAQ,YAAa,YAAW,wBAAwB;IACjF,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGjD,eAAe;IACf,eAAe,CAAC,UAAU,CAAC,EAAE,gBAAgB;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAC1C,gBAAgB;IAGhB,kBAAkB;IAClB,cAAc;IAGpB,mBAAmB;IACnB,YAAY;IACN,cAAc;CAGrB;;AAED,wBAAyE"}
\ No newline at end of file
diff --git a/packages/expo-app-metrics/build/module.web.js b/packages/expo-app-metrics/build/module.web.js
index 32e3ab37c8acd5..d4ed0a8265a9ef 100644
--- a/packages/expo-app-metrics/build/module.web.js
+++ b/packages/expo-app-metrics/build/module.web.js
@@ -1,7 +1,7 @@
import { NativeModule, registerWebModule } from 'expo';
export * from './types';
class ExpoAppMetricsModule extends NativeModule {
- addCustomMetricToSession(sessionId, metric) {
+ addCustomMetricToSession(metric) {
throw new Error('Method not implemented.');
}
async markFirstRender() { }
@@ -16,10 +16,6 @@ class ExpoAppMetricsModule extends NativeModule {
}
simulateCrashReport() { }
triggerCrash() { }
- startSession(metadata) {
- return '';
- }
- stopSession(sessionId) { }
async getMainSession() {
return null;
}
diff --git a/packages/expo-app-metrics/build/module.web.js.map b/packages/expo-app-metrics/build/module.web.js.map
index b9322b23d36867..957831704bc838 100644
--- a/packages/expo-app-metrics/build/module.web.js.map
+++ b/packages/expo-app-metrics/build/module.web.js.map
@@ -1 +1 @@
-{"version":3,"file":"module.web.js","sourceRoot":"","sources":["../src/module.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAIvD,cAAc,SAAS,CAAC;AAExB,MAAM,oBAAqB,SAAQ,YAAY;IAC7C,wBAAwB,CACtB,SAAiB,EACjB,MAAyD;QAEzD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,eAAe,KAAI,CAAC;IAC1B,KAAK,CAAC,eAAe,CAAC,UAA6B,IAAG,CAAC;IACvD,QAAQ,CAAC,IAAY,EAAE,OAAyB,IAAG,CAAC;IACpD,KAAK,CAAC,gBAAgB;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,CAAC,kBAAkB,KAAI,CAAC;IAC7B,KAAK,CAAC,cAAc;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,mBAAmB,KAAI,CAAC;IACxB,YAAY,KAAI,CAAC;IACjB,YAAY,CAAC,QAAiB;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,WAAW,CAAC,SAAiB,IAAG,CAAC;IACjC,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC","sourcesContent":["import { NativeModule, registerWebModule } from 'expo';\n\nimport type { ExpoAppMetricsModuleType, LogEventOptions, MetricAttributes } from './types';\n\nexport * from './types';\n\nclass ExpoAppMetricsModule extends NativeModule implements ExpoAppMetricsModuleType {\n addCustomMetricToSession(\n sessionId: string,\n metric: { category: string; name: string; value: number }\n ): Promise {\n throw new Error('Method not implemented.');\n }\n async markFirstRender() {}\n async markInteractive(attributes?: MetricAttributes) {}\n logEvent(name: string, options?: LogEventOptions) {}\n async getStoredEntries() {\n return [];\n }\n async clearStoredEntries() {}\n async getAllSessions() {\n return [];\n }\n simulateCrashReport() {}\n triggerCrash() {}\n startSession(metadata?: string) {\n return '';\n }\n stopSession(sessionId: string) {}\n async getMainSession() {\n return null;\n }\n}\n\nexport default registerWebModule(ExpoAppMetricsModule, 'ExpoAppMetrics');\n"]}
\ No newline at end of file
+{"version":3,"file":"module.web.js","sourceRoot":"","sources":["../src/module.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAIvD,cAAc,SAAS,CAAC;AAExB,MAAM,oBAAqB,SAAQ,YAAY;IAC7C,wBAAwB,CAAC,MAAc;QACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,eAAe,KAAI,CAAC;IAC1B,KAAK,CAAC,eAAe,CAAC,UAA6B,IAAG,CAAC;IACvD,QAAQ,CAAC,IAAY,EAAE,OAAyB,IAAG,CAAC;IACpD,KAAK,CAAC,gBAAgB;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,KAAK,CAAC,kBAAkB,KAAI,CAAC;IAC7B,KAAK,CAAC,cAAc;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,mBAAmB,KAAI,CAAC;IACxB,YAAY,KAAI,CAAC;IACjB,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC","sourcesContent":["import { NativeModule, registerWebModule } from 'expo';\n\nimport type { ExpoAppMetricsModuleType, LogEventOptions, Metric, MetricAttributes } from './types';\n\nexport * from './types';\n\nclass ExpoAppMetricsModule extends NativeModule implements ExpoAppMetricsModuleType {\n addCustomMetricToSession(metric: Metric): Promise {\n throw new Error('Method not implemented.');\n }\n async markFirstRender() {}\n async markInteractive(attributes?: MetricAttributes) {}\n logEvent(name: string, options?: LogEventOptions) {}\n async getStoredEntries() {\n return [];\n }\n async clearStoredEntries() {}\n async getAllSessions() {\n return [];\n }\n simulateCrashReport() {}\n triggerCrash() {}\n async getMainSession() {\n return null;\n }\n}\n\nexport default registerWebModule(ExpoAppMetricsModule, 'ExpoAppMetrics');\n"]}
\ No newline at end of file
diff --git a/packages/expo-app-metrics/build/types.d.ts b/packages/expo-app-metrics/build/types.d.ts
index a4ee6610e361e2..458f3fb813584e 100644
--- a/packages/expo-app-metrics/build/types.d.ts
+++ b/packages/expo-app-metrics/build/types.d.ts
@@ -277,30 +277,11 @@ export interface ExpoAppMetricsModuleType {
* @platform ios
*/
triggerCrash(kind: CrashKind): void;
- /**
- * Starts a new app metrics session. Returns the session ID.
- *
- * @private This API is unstable and may change without notice.
- * @platform android
- */
- startSession(): string;
- /**
- * Stops the app metrics session with the given session ID.
- *
- * @platform android
- */
- stopSession(sessionId: string): void;
/**
* @private This API is unstable and may change without notice.
* @platform android
*/
- addCustomMetricToSession(sessionId: string, metric: {
- category: string;
- name: string;
- value: number;
- routeName?: string;
- params?: Record;
- }): Promise;
+ addCustomMetricToSession(metric: Metric): Promise;
/**
* Returns the current main session, including its metrics. Resolves to
* `null` if the session row hasn't been persisted yet.
diff --git a/packages/expo-app-metrics/build/types.d.ts.map b/packages/expo-app-metrics/build/types.d.ts.map
index b919c2e4dae608..40e7d594a641c4 100644
--- a/packages/expo-app-metrics/build/types.d.ts.map
+++ b/packages/expo-app-metrics/build/types.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/packages/expo-app-metrics/build/types.js.map b/packages/expo-app-metrics/build/types.js.map
index 7aa98299ad3c92..1c9100f3482e96 100644
--- a/packages/expo-app-metrics/build/types.js.map
+++ b/packages/expo-app-metrics/build/types.js.map
@@ -1 +1 @@
-{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type AppStartupTimes = {\n /**\n * Time from when the user taps the app to the moment the app starts executing the main code.\n * It includes loading native dynamic libraries, executing C++ static constructors\n * and Objective-C `+load` methods defined in classes or categories.\n *\n * @platform iOS\n */\n loadTime?: number;\n /**\n * Full time from process start until the root view of the React Native instance is created,\n * recorded when the app is launched fresh by the user.\n */\n coldLaunchTime?: number;\n /**\n * Launch time recorded when the process was already running in the background\n * before the user launches the app.\n */\n warmLaunchTime?: number;\n /**\n * Duration to evaluate the JavaScript bundle by the runtime.\n */\n bundleLoadTime?: number;\n /**\n * Time until the first React render occurs.\n */\n timeToFirstRender?: number;\n /**\n * Time until the app is interactive (after first render).\n */\n timeToInteractive?: number;\n};\n\nexport type MemoryUsageSnapshot = {\n /**\n * Memory in bytes allocated by the app, including both the physical memory and additional memory that the app might be using,\n * such as memory that has been paged out (swapped) to disk or memory that is shared with other processes.\n *\n * @platform iOS\n */\n allocated?: number;\n /**\n * Physical memory in bytes pages currently in use (resident size).\n */\n physical: number;\n /**\n * The amount of available memory in bytes that app can still allocate.\n */\n available: number;\n /**\n * The amount of memory in bytes currently used by the Java heap.\n *\n * @platform android\n */\n javaHeap?: number;\n};\n\nexport type FrameRateMetrics = {\n /**\n * Total amount of frames rendered.\n */\n renderedFrames: number;\n /**\n * Expected amount of frames rendered if everything renders without any delay.\n */\n expectedFrames: number;\n /**\n * Number of frames which were skipped because the main thread was busy with some work.\n */\n droppedFrames: number;\n /**\n * Total amount of frozen frames. Frozen frame is frame that takes at least 700ms to render.\n * It is a term from [Android development](https://developer.android.com/topic/performance/vitals/frozen).\n */\n frozenFrames: number;\n /**\n * Total amount of slow frames. Slow frame is frame that takes at least 17ms to render.\n * It is a term from [Android development](https://developer.android.com/topic/performance/vitals/render).\n */\n slowFrames: number;\n /**\n * Total amount of freeze durations, in seconds. Freeze is an amount of time every frame rendering was delayed by in comparison with the ideal performant frame.\n * For example if expected frame duration was 16ms, but in reality we've rendered this frame in 320ms, we have a freeze with 304ms duration.\n */\n freezeTime: number;\n /**\n * Total duration of the screen session, in seconds. It is counted by summing up all rendered frames duration.\n */\n sessionDuration: number;\n};\n\nexport interface Metric {\n timestamp: string;\n category: string;\n name: string;\n value: number;\n sessionId: string;\n routeName?: string;\n params?: Record;\n}\n\nexport type MetricAttributes = {\n /**\n * Name of the route associated with the metric. Some metrics populate this\n * with a sensible default when omitted — for example, the TTI metric falls\n * back to the initial route name detected from the router.\n */\n routeName?: string;\n /**\n * Custom parameters to attach to the metric.\n */\n params?: Record;\n};\n\n/**\n * Severity of a log event, ordered from least to most severe:\n *\n * - `\"trace\"` — Fine-grained tracing, typically only useful while reproducing\n * a specific issue.\n * - `\"debug\"` — Diagnostic detail useful during development; usually filtered\n * out in production.\n * - `\"info\"` — Routine, expected events that record normal app behavior.\n * - `\"warn\"` — Unexpected but recoverable conditions worth investigating.\n * - `\"error\"` — An operation failed; the app continues running but is in a\n * degraded state.\n * - `\"fatal\"` — A severe failure, often immediately followed by app termination.\n */\nexport type LogSeverity = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\n/**\n * Value types accepted in a log event's `attributes` map. Strings, numbers,\n * and booleans are stored as typed primitives; arrays and nested maps preserve\n * their structure. Other JS values (functions, `Date`, `undefined`, etc.) are\n * not supported and may be dropped by downstream consumers.\n */\nexport type LogAttributeValue =\n | string\n | number\n | boolean\n | LogAttributeValue[]\n | { [key: string]: LogAttributeValue };\n\n/**\n * A single log event collected during a session.\n */\nexport type LogRecord = {\n /**\n * ISO 8601 timestamp of when the record was created.\n */\n timestamp: string;\n /**\n * Event name.\n */\n name: string;\n /**\n * Optional free-form message describing the event.\n */\n body?: string | null;\n /**\n * Custom attributes attached to the event. Each entry is preserved with its\n * original value type — see `LogAttributeValue` for the supported shapes.\n */\n attributes?: Record | null;\n /**\n * Severity of the event.\n */\n severity: LogSeverity;\n};\n\n/**\n * Optional configuration accepted by `logEvent`. The event name is passed as\n * the first positional argument since it's required and the only field most\n * callers set.\n */\nexport type LogEventOptions = {\n /**\n * Optional free-form message describing the event.\n */\n body?: string | null;\n /**\n * Custom attributes attached to the event. Each entry is preserved with its\n * original value type — see `LogAttributeValue` for the supported shapes.\n */\n attributes?: Record | null;\n /**\n * Severity of the event.\n *\n * @default \"info\"\n */\n severity?: LogSeverity | null;\n};\n\nexport type SessionType = 'main' | 'foreground' | 'screen' | 'custom' | 'unknown';\n\nexport type CrashKind =\n | 'badAccess'\n | 'fatalError'\n | 'divideByZero'\n | 'forceUnwrapNil'\n | 'arrayOutOfBounds'\n | 'objcException'\n | 'stackOverflow';\n\ntype SessionBase = {\n id: string;\n startDate: string;\n endDate?: string | null;\n metrics: Metric[];\n logs: LogRecord[];\n};\n\nexport type MainSession = SessionBase & {\n type: 'main';\n crashReport?: CrashReport | null;\n};\n\nexport type GenericSession = SessionBase & {\n type: Exclude;\n};\n\nexport type Session = MainSession | GenericSession;\n\nexport type CallStackFrame = {\n binaryName?: string | null;\n binaryUUID?: string | null;\n address?: number | null;\n offsetIntoBinaryTextSegment?: number | null;\n sampleCount?: number | null;\n subFrames?: CallStackFrame[] | null;\n /**\n * Resolved symbol from on-device `dladdr` symbolication. Swift and Itanium-ABI C++\n * names are demangled; Objective-C selectors and plain C symbols are returned as-is.\n * `null` when the binary is not loaded in this process or `dladdr` could not resolve it.\n *\n * @platform ios\n */\n symbol?: string | null;\n};\n\nexport type CallStack = {\n threadAttributed?: boolean | null;\n callStackRootFrames?: CallStackFrame[] | null;\n};\n\nexport type CallStackTree = {\n callStacks?: CallStack[] | null;\n};\n\nexport type CrashReport = {\n exceptionType?: number | null;\n exceptionCode?: number | null;\n signal?: number | null;\n terminationReason?: string | null;\n virtualMemoryRegionInfo?: string | null;\n exceptionReason?: {\n composedMessage: string;\n formatString: string;\n arguments: string[];\n exceptionType: string;\n className: string;\n exceptionName: string;\n } | null;\n callStackTree?: CallStackTree | null;\n timestampBegin: string;\n timestampEnd: string;\n ingestedAt: string;\n};\n\nexport interface ExpoAppMetricsModuleType {\n markFirstRender(): void;\n markInteractive(attributes?: MetricAttributes): void;\n /**\n * Records a log event against the current main session. The event is\n * persisted locally and dispatched on the next `dispatchEvents()` flush as an\n * OpenTelemetry log record sent to the `/v1/logs` endpoint.\n *\n * Severity defaults to `\"info\"` when not provided.\n *\n * @param name Event name. Maps to the OpenTelemetry `event.name` attribute.\n * @param options Optional body, attributes, and severity overrides.\n */\n logEvent(name: string, options?: LogEventOptions): void;\n getStoredEntries(): Promise;\n clearStoredEntries(): Promise;\n /**\n * Returns all sessions across the current and historical entries,\n * ordered with the current launch first.\n *\n * @private This API is unstable and may change without notice.\n * @platform ios\n */\n getAllSessions(): Promise;\n\n /**\n * Simulates a crash report, attributing it to the current main session.\n * Intended for development and debugging only.\n *\n * @private This API is unstable and may change without notice.\n * @platform ios\n */\n simulateCrashReport(): void;\n\n /**\n * Intentionally crashes the app to produce a real MetricKit diagnostic.\n * Intended for development and debugging only.\n *\n * @private This API is unstable and may change without notice.\n * @platform ios\n */\n triggerCrash(kind: CrashKind): void;\n\n /**\n * Starts a new app metrics session. Returns the session ID.\n *\n * @private This API is unstable and may change without notice.\n * @platform android\n */\n startSession(): string;\n /**\n * Stops the app metrics session with the given session ID.\n *\n * @platform android\n */\n stopSession(sessionId: string): void;\n /**\n * @private This API is unstable and may change without notice.\n * @platform android\n */\n addCustomMetricToSession(\n sessionId: string,\n metric: {\n category: string;\n name: string;\n value: number;\n routeName?: string;\n params?: Record;\n }\n ): Promise;\n /**\n * Returns the current main session, including its metrics. Resolves to\n * `null` if the session row hasn't been persisted yet.\n *\n * @private This API is unstable and may change without notice.\n * @platform android\n */\n getMainSession(): Promise;\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type AppStartupTimes = {\n /**\n * Time from when the user taps the app to the moment the app starts executing the main code.\n * It includes loading native dynamic libraries, executing C++ static constructors\n * and Objective-C `+load` methods defined in classes or categories.\n *\n * @platform iOS\n */\n loadTime?: number;\n /**\n * Full time from process start until the root view of the React Native instance is created,\n * recorded when the app is launched fresh by the user.\n */\n coldLaunchTime?: number;\n /**\n * Launch time recorded when the process was already running in the background\n * before the user launches the app.\n */\n warmLaunchTime?: number;\n /**\n * Duration to evaluate the JavaScript bundle by the runtime.\n */\n bundleLoadTime?: number;\n /**\n * Time until the first React render occurs.\n */\n timeToFirstRender?: number;\n /**\n * Time until the app is interactive (after first render).\n */\n timeToInteractive?: number;\n};\n\nexport type MemoryUsageSnapshot = {\n /**\n * Memory in bytes allocated by the app, including both the physical memory and additional memory that the app might be using,\n * such as memory that has been paged out (swapped) to disk or memory that is shared with other processes.\n *\n * @platform iOS\n */\n allocated?: number;\n /**\n * Physical memory in bytes pages currently in use (resident size).\n */\n physical: number;\n /**\n * The amount of available memory in bytes that app can still allocate.\n */\n available: number;\n /**\n * The amount of memory in bytes currently used by the Java heap.\n *\n * @platform android\n */\n javaHeap?: number;\n};\n\nexport type FrameRateMetrics = {\n /**\n * Total amount of frames rendered.\n */\n renderedFrames: number;\n /**\n * Expected amount of frames rendered if everything renders without any delay.\n */\n expectedFrames: number;\n /**\n * Number of frames which were skipped because the main thread was busy with some work.\n */\n droppedFrames: number;\n /**\n * Total amount of frozen frames. Frozen frame is frame that takes at least 700ms to render.\n * It is a term from [Android development](https://developer.android.com/topic/performance/vitals/frozen).\n */\n frozenFrames: number;\n /**\n * Total amount of slow frames. Slow frame is frame that takes at least 17ms to render.\n * It is a term from [Android development](https://developer.android.com/topic/performance/vitals/render).\n */\n slowFrames: number;\n /**\n * Total amount of freeze durations, in seconds. Freeze is an amount of time every frame rendering was delayed by in comparison with the ideal performant frame.\n * For example if expected frame duration was 16ms, but in reality we've rendered this frame in 320ms, we have a freeze with 304ms duration.\n */\n freezeTime: number;\n /**\n * Total duration of the screen session, in seconds. It is counted by summing up all rendered frames duration.\n */\n sessionDuration: number;\n};\n\nexport interface Metric {\n timestamp: string;\n category: string;\n name: string;\n value: number;\n sessionId: string;\n routeName?: string;\n params?: Record;\n}\n\nexport type MetricAttributes = {\n /**\n * Name of the route associated with the metric. Some metrics populate this\n * with a sensible default when omitted — for example, the TTI metric falls\n * back to the initial route name detected from the router.\n */\n routeName?: string;\n /**\n * Custom parameters to attach to the metric.\n */\n params?: Record;\n};\n\n/**\n * Severity of a log event, ordered from least to most severe:\n *\n * - `\"trace\"` — Fine-grained tracing, typically only useful while reproducing\n * a specific issue.\n * - `\"debug\"` — Diagnostic detail useful during development; usually filtered\n * out in production.\n * - `\"info\"` — Routine, expected events that record normal app behavior.\n * - `\"warn\"` — Unexpected but recoverable conditions worth investigating.\n * - `\"error\"` — An operation failed; the app continues running but is in a\n * degraded state.\n * - `\"fatal\"` — A severe failure, often immediately followed by app termination.\n */\nexport type LogSeverity = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\n/**\n * Value types accepted in a log event's `attributes` map. Strings, numbers,\n * and booleans are stored as typed primitives; arrays and nested maps preserve\n * their structure. Other JS values (functions, `Date`, `undefined`, etc.) are\n * not supported and may be dropped by downstream consumers.\n */\nexport type LogAttributeValue =\n | string\n | number\n | boolean\n | LogAttributeValue[]\n | { [key: string]: LogAttributeValue };\n\n/**\n * A single log event collected during a session.\n */\nexport type LogRecord = {\n /**\n * ISO 8601 timestamp of when the record was created.\n */\n timestamp: string;\n /**\n * Event name.\n */\n name: string;\n /**\n * Optional free-form message describing the event.\n */\n body?: string | null;\n /**\n * Custom attributes attached to the event. Each entry is preserved with its\n * original value type — see `LogAttributeValue` for the supported shapes.\n */\n attributes?: Record | null;\n /**\n * Severity of the event.\n */\n severity: LogSeverity;\n};\n\n/**\n * Optional configuration accepted by `logEvent`. The event name is passed as\n * the first positional argument since it's required and the only field most\n * callers set.\n */\nexport type LogEventOptions = {\n /**\n * Optional free-form message describing the event.\n */\n body?: string | null;\n /**\n * Custom attributes attached to the event. Each entry is preserved with its\n * original value type — see `LogAttributeValue` for the supported shapes.\n */\n attributes?: Record | null;\n /**\n * Severity of the event.\n *\n * @default \"info\"\n */\n severity?: LogSeverity | null;\n};\n\nexport type SessionType = 'main' | 'foreground' | 'screen' | 'custom' | 'unknown';\n\nexport type CrashKind =\n | 'badAccess'\n | 'fatalError'\n | 'divideByZero'\n | 'forceUnwrapNil'\n | 'arrayOutOfBounds'\n | 'objcException'\n | 'stackOverflow';\n\ntype SessionBase = {\n id: string;\n startDate: string;\n endDate?: string | null;\n metrics: Metric[];\n logs: LogRecord[];\n};\n\nexport type MainSession = SessionBase & {\n type: 'main';\n crashReport?: CrashReport | null;\n};\n\nexport type GenericSession = SessionBase & {\n type: Exclude;\n};\n\nexport type Session = MainSession | GenericSession;\n\nexport type CallStackFrame = {\n binaryName?: string | null;\n binaryUUID?: string | null;\n address?: number | null;\n offsetIntoBinaryTextSegment?: number | null;\n sampleCount?: number | null;\n subFrames?: CallStackFrame[] | null;\n /**\n * Resolved symbol from on-device `dladdr` symbolication. Swift and Itanium-ABI C++\n * names are demangled; Objective-C selectors and plain C symbols are returned as-is.\n * `null` when the binary is not loaded in this process or `dladdr` could not resolve it.\n *\n * @platform ios\n */\n symbol?: string | null;\n};\n\nexport type CallStack = {\n threadAttributed?: boolean | null;\n callStackRootFrames?: CallStackFrame[] | null;\n};\n\nexport type CallStackTree = {\n callStacks?: CallStack[] | null;\n};\n\nexport type CrashReport = {\n exceptionType?: number | null;\n exceptionCode?: number | null;\n signal?: number | null;\n terminationReason?: string | null;\n virtualMemoryRegionInfo?: string | null;\n exceptionReason?: {\n composedMessage: string;\n formatString: string;\n arguments: string[];\n exceptionType: string;\n className: string;\n exceptionName: string;\n } | null;\n callStackTree?: CallStackTree | null;\n timestampBegin: string;\n timestampEnd: string;\n ingestedAt: string;\n};\n\nexport interface ExpoAppMetricsModuleType {\n markFirstRender(): void;\n markInteractive(attributes?: MetricAttributes): void;\n /**\n * Records a log event against the current main session. The event is\n * persisted locally and dispatched on the next `dispatchEvents()` flush as an\n * OpenTelemetry log record sent to the `/v1/logs` endpoint.\n *\n * Severity defaults to `\"info\"` when not provided.\n *\n * @param name Event name. Maps to the OpenTelemetry `event.name` attribute.\n * @param options Optional body, attributes, and severity overrides.\n */\n logEvent(name: string, options?: LogEventOptions): void;\n getStoredEntries(): Promise;\n clearStoredEntries(): Promise;\n /**\n * Returns all sessions across the current and historical entries,\n * ordered with the current launch first.\n *\n * @private This API is unstable and may change without notice.\n * @platform ios\n */\n getAllSessions(): Promise;\n\n /**\n * Simulates a crash report, attributing it to the current main session.\n * Intended for development and debugging only.\n *\n * @private This API is unstable and may change without notice.\n * @platform ios\n */\n simulateCrashReport(): void;\n\n /**\n * Intentionally crashes the app to produce a real MetricKit diagnostic.\n * Intended for development and debugging only.\n *\n * @private This API is unstable and may change without notice.\n * @platform ios\n */\n triggerCrash(kind: CrashKind): void;\n\n /**\n * @private This API is unstable and may change without notice.\n * @platform android\n */\n addCustomMetricToSession(metric: Metric): Promise;\n /**\n * Returns the current main session, including its metrics. Resolves to\n * `null` if the session row hasn't been persisted yet.\n *\n * @private This API is unstable and may change without notice.\n * @platform android\n */\n getMainSession(): Promise;\n}\n"]}
\ No newline at end of file
diff --git a/packages/expo-app-metrics/src/module.web.ts b/packages/expo-app-metrics/src/module.web.ts
index 2d7ad6db5962fa..4f5fd53ffc8e17 100644
--- a/packages/expo-app-metrics/src/module.web.ts
+++ b/packages/expo-app-metrics/src/module.web.ts
@@ -1,14 +1,11 @@
import { NativeModule, registerWebModule } from 'expo';
-import type { ExpoAppMetricsModuleType, LogEventOptions, MetricAttributes } from './types';
+import type { ExpoAppMetricsModuleType, LogEventOptions, Metric, MetricAttributes } from './types';
export * from './types';
class ExpoAppMetricsModule extends NativeModule implements ExpoAppMetricsModuleType {
- addCustomMetricToSession(
- sessionId: string,
- metric: { category: string; name: string; value: number }
- ): Promise {
+ addCustomMetricToSession(metric: Metric): Promise {
throw new Error('Method not implemented.');
}
async markFirstRender() {}
@@ -23,10 +20,6 @@ class ExpoAppMetricsModule extends NativeModule implements ExpoAppMetricsModuleT
}
simulateCrashReport() {}
triggerCrash() {}
- startSession(metadata?: string) {
- return '';
- }
- stopSession(sessionId: string) {}
async getMainSession() {
return null;
}
diff --git a/packages/expo-app-metrics/src/types.ts b/packages/expo-app-metrics/src/types.ts
index 1d8003d27e6cd4..4aa02663ae5380 100644
--- a/packages/expo-app-metrics/src/types.ts
+++ b/packages/expo-app-metrics/src/types.ts
@@ -309,33 +309,11 @@ export interface ExpoAppMetricsModuleType {
*/
triggerCrash(kind: CrashKind): void;
- /**
- * Starts a new app metrics session. Returns the session ID.
- *
- * @private This API is unstable and may change without notice.
- * @platform android
- */
- startSession(): string;
- /**
- * Stops the app metrics session with the given session ID.
- *
- * @platform android
- */
- stopSession(sessionId: string): void;
/**
* @private This API is unstable and may change without notice.
* @platform android
*/
- addCustomMetricToSession(
- sessionId: string,
- metric: {
- category: string;
- name: string;
- value: number;
- routeName?: string;
- params?: Record;
- }
- ): Promise;
+ addCustomMetricToSession(metric: Metric): Promise;
/**
* Returns the current main session, including its metrics. Resolves to
* `null` if the session row hasn't been persisted yet.
diff --git a/packages/expo-audio/CHANGELOG.md b/packages/expo-audio/CHANGELOG.md
index 9aa465034bb9dc..ce99b86ffa9de0 100644
--- a/packages/expo-audio/CHANGELOG.md
+++ b/packages/expo-audio/CHANGELOG.md
@@ -10,6 +10,8 @@
### 💡 Others
+- Updated permission type and permission status imports to be imported from `expo` instead of `expo-modules-core` ([#45565](https://github.com/expo/expo/pull/45565) by [@Wenszel](https://github.com/Wenszel))
+
## 56.0.4 — 2026-05-11
_This version does not introduce any user-facing changes._
diff --git a/packages/expo-audio/build/AudioModule.types.d.ts b/packages/expo-audio/build/AudioModule.types.d.ts
index b932c5d42be297..f3ae4ee4044d86 100644
--- a/packages/expo-audio/build/AudioModule.types.d.ts
+++ b/packages/expo-audio/build/AudioModule.types.d.ts
@@ -1,4 +1,4 @@
-import type { PermissionResponse } from 'expo-modules-core';
+import type { PermissionResponse } from 'expo';
import { NativeModule, SharedObject } from 'expo-modules-core';
import type { AudioMetadata, AudioMode, AudioPlaylistLoopMode, AudioPlaylistStatus, AudioSource, AudioSourceInfo, AudioStatus, PitchCorrectionQuality, RecorderState, RecordingInput, RecordingOptions, RecordingStartOptions, RecordingStatus } from './Audio.types';
import type { AudioLockScreenOptions } from './AudioConstants';
diff --git a/packages/expo-audio/build/AudioModule.types.d.ts.map b/packages/expo-audio/build/AudioModule.types.d.ts.map
index 38fa88f11d003e..761680ff0f9d78 100644
--- a/packages/expo-audio/build/AudioModule.types.d.ts.map
+++ b/packages/expo-audio/build/AudioModule.types.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"AudioModule.types.d.ts","sourceRoot":"","sources":["../src/AudioModule.types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"AudioModule.types.d.ts","sourceRoot":"","sources":["../src/AudioModule.types.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/packages/expo-audio/build/AudioModule.types.js.map b/packages/expo-audio/build/AudioModule.types.js.map
index 6431dbac52666f..33554a408330c5 100644
--- a/packages/expo-audio/build/AudioModule.types.js.map
+++ b/packages/expo-audio/build/AudioModule.types.js.map
@@ -1 +1 @@
-{"version":3,"file":"AudioModule.types.js","sourceRoot":"","sources":["../src/AudioModule.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["import type { PermissionResponse } from 'expo-modules-core';\nimport { NativeModule, SharedObject } from 'expo-modules-core';\n\nimport type {\n AudioMetadata,\n AudioMode,\n AudioPlaylistLoopMode,\n AudioPlaylistStatus,\n AudioSource,\n AudioSourceInfo,\n AudioStatus,\n PitchCorrectionQuality,\n RecorderState,\n RecordingInput,\n RecordingOptions,\n RecordingStartOptions,\n RecordingStatus,\n} from './Audio.types';\nimport type { AudioLockScreenOptions } from './AudioConstants';\nimport type { AudioStream } from './AudioStream.types';\n\n/**\n * @hidden\n */\nexport declare class NativeAudioModule extends NativeModule {\n setIsAudioActiveAsync(active: boolean): Promise;\n setAudioModeAsync(category: Partial): Promise;\n requestRecordingPermissionsAsync(): Promise;\n requestNotificationPermissionsAsync(): Promise;\n getRecordingPermissionsAsync(): Promise;\n preload(source: AudioSource, preferredForwardBufferDuration: number): Promise;\n clearPreloadedSource(source: AudioSource): Promise;\n clearAllPreloadedSources(): Promise;\n getPreloadedSources(): Promise;\n\n readonly AudioPlayer: typeof AudioPlayer;\n readonly AudioRecorder: typeof AudioRecorder;\n readonly AudioPlaylist: typeof AudioPlaylist;\n readonly AudioStream: typeof AudioStream;\n}\n\nexport declare class AudioPlayer extends SharedObject {\n /**\n * Initializes a new audio player instance with the given source.\n * @hidden\n */\n constructor(\n source: AudioSource,\n updateInterval: number,\n keepAudioSessionActive: boolean,\n preferredForwardBufferDuration: number\n );\n\n /**\n * Unique identifier for the player object.\n */\n id: string;\n\n /**\n * Boolean value indicating whether the player is currently playing.\n */\n playing: boolean;\n\n /**\n * Boolean value indicating whether the player is currently muted.\n */\n muted: boolean;\n\n /**\n * Boolean value indicating whether the player is currently looping.\n */\n loop: boolean;\n\n /**\n * Boolean value indicating whether the player is currently paused.\n */\n paused: boolean;\n\n /**\n * Boolean value indicating whether the player is finished loading.\n */\n isLoaded: boolean;\n\n /**\n * Boolean value indicating whether audio sampling is supported on the platform.\n */\n isAudioSamplingSupported: boolean;\n\n /**\n * Boolean value indicating whether the player is buffering.\n */\n isBuffering: boolean;\n\n /**\n * The current position through the audio item in seconds.\n */\n currentTime: number;\n\n /**\n * The total duration of the audio in seconds.\n */\n duration: number;\n\n /**\n * The current volume of the audio.\n *\n * **Range:** `0.0` to `1.0`. For example, `0.0` is completely silent (0%), `0.5` is half volume (50%), and `1.0` is full volume (100%).\n *\n *\n * @example\n * ```tsx\n * import { useAudioPlayer } from 'expo-audio';\n *\n * export default function App() {\n * const player = useAudioPlayer(source);\n *\n * // Mute the audio\n * player.volume = 0.0;\n *\n * // Set volume to 50%\n * player.volume = 0.5;\n *\n * // Set to full volume\n * player.volume = 1.0;\n * }\n * ```\n */\n volume: number;\n\n /**\n * The current playback rate of the audio. It accepts different values depending on the platform:\n * - **Android**: `0.1` to `2.0`\n * - **iOS**: `0.0` to `2.0`\n * - **Web**: Follows browser implementation\n *\n * @example\n * ```tsx\n * import { useAudioPlayer } from 'expo-audio';\n *\n * export default function App() {\n * const player = useAudioPlayer(source);\n *\n * // Normal playback speed\n * player.playbackRate = 1.0;\n *\n * // Slow motion (half speed)\n * player.playbackRate = 0.5;\n *\n * // Fast playback (1.5x speed)\n * player.playbackRate = 1.5;\n *\n * // Maximum speed on mobile\n * player.playbackRate = 2.0;\n * }\n * ```\n */\n playbackRate: number;\n\n /**\n * A boolean describing if we are correcting the pitch for a changed rate.\n */\n shouldCorrectPitch: boolean;\n\n /**\n * The current status of the audio player.\n * @hidden\n */\n currentStatus: AudioStatus;\n\n /**\n * Start playing audio.\n */\n play(): void;\n\n /**\n * Pauses the player.\n */\n pause(): void;\n\n /**\n * Replaces the current audio source with a new one.\n */\n replace(source: AudioSource): void;\n\n /**\n * Seeks the playback by the given number of seconds.\n * @param seconds The number of seconds to seek by.\n * @param toleranceMillisBefore The tolerance allowed before the requested seek time, in milliseconds. iOS only.\n * @param toleranceMillisAfter The tolerance allowed after the requested seek time, in milliseconds. iOS only.\n */\n seekTo(\n seconds: number,\n toleranceMillisBefore?: number,\n toleranceMillisAfter?: number\n ): Promise;\n\n /**\n * Sets the current playback rate of the audio.\n *\n * @param rate The playback rate of the audio. See [`playbackRate`](#playbackrate) property for detailed range information.\n * @param pitchCorrectionQuality The quality of the pitch correction.\n */\n setPlaybackRate(rate: number, pitchCorrectionQuality?: PitchCorrectionQuality): void;\n\n /**\n *\n * @hidden\n */\n setAudioSamplingEnabled(enabled: boolean): void;\n\n /**\n * Sets or removes this audio player as the active player for lock screen controls.\n * Only one player can control the lock screen at a time.\n *\n * > **Note:** For lock screen controls to work correctly, [`interruptionMode`](#interruptionmode) must be set to `doNotMix` using [`setAudioModeAsync`](#audiosetaudiomodeasyncmode).\n * > Without this, the OS might not associate lock screen controls with your player.\n *\n * @param active Whether this player should be active for lock screen controls.\n * @param metadata Optional metadata to display on the lock screen (title, artist, album, artwork).\n * @param options Optional configuration to configure the lock screen controls.\n */\n setActiveForLockScreen(\n active: boolean,\n metadata?: AudioMetadata,\n options?: AudioLockScreenOptions\n ): void;\n\n /**\n * Updates the metadata displayed on the lock screen for this player.\n * This method only has an effect if this player is currently active for lock screen controls.\n * @param metadata The metadata to display (title, artist, album, artwork).\n */\n updateLockScreenMetadata(metadata: AudioMetadata): void;\n\n /**\n * Removes this player from lock screen controls if it's currently active.\n * This will clear the lock screen's now playing info.\n */\n clearLockScreenControls(): void;\n\n /**\n * Remove the player from memory to free up resources.\n */\n remove(): void;\n}\n\n/**\n * Represents a single audio sample containing waveform data from all audio channels.\n *\n * Audio samples are provided in real-time when audio sampling is enabled on an `AudioPlayer`.\n * Each sample contains the raw PCM audio data for all channels (mono has 1 channel, stereo has 2).\n * This data can be used for audio visualization, analysis, or processing.\n */\nexport type AudioSample = {\n /** Array of audio channels, each containing PCM frame data. Stereo audio will have 2 channels (left/right). */\n channels: AudioSampleChannel[];\n /** Timestamp of this sample relative to the audio track's timeline, in seconds. */\n timestamp: number;\n};\n\n/**\n * Represents audio data for a single channel (for example, left or right in stereo audio).\n *\n * Contains the raw PCM (Pulse Code Modulation) audio frames for this channel.\n * Frame values are normalized between -1.0 and 1.0, where 0 represents silence.\n */\nexport type AudioSampleChannel = {\n /** Array of PCM audio frame values, each between -1.0 and 1.0. */\n frames: number[];\n};\n\n/**\n * Event types that an `AudioPlayer` can emit.\n *\n * These events allow you to listen for changes in playback state and receive real-time audio data.\n * Use `player.addListener()` to subscribe to these events.\n */\nexport type AudioEvents = {\n /** Fired when the player's status changes (play/pause/seek/load and so on.). */\n playbackStatusUpdate(status: AudioStatus): void;\n /** Fired when audio sampling is enabled and new sample data is available. */\n audioSampleUpdate(data: AudioSample): void;\n};\n\nexport declare class AudioRecorder extends SharedObject {\n /**\n * Initializes a new audio recorder instance with the given source.\n * @hidden\n */\n constructor(options: Partial);\n\n /**\n * Unique identifier for the recorder object.\n */\n id: string;\n\n /**\n * The current length of the recording, in seconds.\n */\n currentTime: number;\n\n /**\n * Boolean value indicating whether the recording is in progress.\n */\n isRecording: boolean;\n\n /**\n * The uri of the recording.\n */\n uri: string | null;\n\n /**\n * Starts the recording.\n * @param options Optional recording configuration options.\n */\n record(options?: RecordingStartOptions): void;\n\n /**\n * Stop the recording.\n */\n stop(): Promise;\n\n /**\n * Pause the recording.\n */\n pause(): void;\n\n /**\n * Returns a list of available recording inputs. This method can only be called if the `Recording` has been prepared.\n * @return A `Promise` that is fulfilled with an array of `RecordingInput` objects.\n */\n getAvailableInputs(): RecordingInput[];\n\n /**\n * Returns the currently-selected recording input. This method can only be called if the `Recording` has been prepared.\n * @return A `Promise` that is fulfilled with a `RecordingInput` object.\n */\n getCurrentInput(): Promise;\n\n /**\n * Sets the current recording input.\n * @param inputUid The uid of a `RecordingInput`.\n * @return A `Promise` that is resolved if successful or rejected if not.\n */\n setInput(inputUid: string): void;\n\n /**\n * Status of the current recording.\n */\n getStatus(): RecorderState;\n\n /**\n * Starts the recording at the given time.\n * @param seconds The time in seconds to start recording at.\n * @deprecated Use `record({ atTime: seconds })` instead.\n */\n startRecordingAtTime(seconds: number): void;\n\n /**\n * Prepares the recording for recording.\n */\n prepareToRecordAsync(options?: Partial): Promise;\n\n /**\n * Stops the recording once the specified time has elapsed.\n * @param seconds The time in seconds to stop recording at.\n * @deprecated Use `record({ forDuration: seconds })` instead.\n */\n recordForDuration(seconds: number): void;\n}\n\n/**\n * Event types that an `AudioRecorder` can emit.\n *\n * These events are used internally by `expo-audio` hooks to provide real-time status updates.\n * Use `useAudioRecorderState()` or the `statusListener` parameter in `useAudioRecorder()` instead of subscribing directly.\n */\nexport type RecordingEvents = {\n /** Fired when the recorder's status changes (start/stop/pause/error, and so on). */\n recordingStatusUpdate: (status: RecordingStatus) => void;\n};\n\n/**\n * Event types that an `AudioPlaylist` can emit.\n *\n * These events allow you to listen for changes in playlist playback state.\n * Use `playlist.addListener()` to subscribe to these events.\n */\nexport type AudioPlaylistEvents = {\n /** Fired when the playlist's status changes (play/pause/seek/load/track change). */\n playlistStatusUpdate(status: AudioPlaylistStatus): void;\n /** Fired when the current track changes (next/previous/skip). */\n trackChanged(data: { previousIndex: number; currentIndex: number }): void;\n};\n\nexport declare class AudioPlaylist extends SharedObject {\n /**\n * Initializes a new audio playlist instance.\n * @hidden\n */\n constructor(sources: AudioSource[], updateInterval: number, loop: AudioPlaylistLoopMode);\n\n /**\n * Unique identifier for the playlist instance.\n */\n id: string;\n\n /**\n * Index of the currently playing track in the playlist.\n */\n readonly currentIndex: number;\n\n /**\n * Total number of tracks in the playlist.\n */\n readonly trackCount: number;\n\n /**\n * The audio sources currently in the playlist.\n */\n readonly sources: AudioSourceInfo[];\n\n /**\n * Boolean value indicating whether the playlist is currently playing.\n */\n playing: boolean;\n\n /**\n * Boolean value indicating whether the playlist is currently muted.\n */\n muted: boolean;\n\n /**\n * Boolean value indicating whether the current track has finished loading.\n */\n isLoaded: boolean;\n\n /**\n * Boolean value indicating whether the playlist is buffering.\n */\n isBuffering: boolean;\n\n /**\n * Current playback position in seconds.\n */\n currentTime: number;\n\n /**\n * Duration of the current track in seconds.\n */\n duration: number;\n\n /**\n * Current volume (0.0 to 1.0).\n */\n volume: number;\n\n /**\n * Current playback rate (1.0 = normal speed).\n */\n playbackRate: number;\n\n /**\n * Current loop mode.\n */\n loop: AudioPlaylistLoopMode;\n\n /**\n * The current status of the audio playlist.\n * @hidden\n */\n currentStatus: AudioPlaylistStatus;\n\n /**\n * Start playing the current track in the playlist.\n */\n play(): void;\n\n /**\n * Pause playback.\n */\n pause(): void;\n\n /**\n * Skip to the next track in the playlist.\n * If at the end of the playlist and loop mode is 'all', wraps to the first track.\n * If loop mode is 'none' and at the end, does nothing.\n */\n next(): void;\n\n /**\n * Skip to the previous track in the playlist.\n * If at the beginning of the playlist and loop mode is 'all', wraps to the last track.\n * If loop mode is 'none' and at the beginning, does nothing.\n */\n previous(): void;\n\n /**\n * Skip to a specific track in the playlist by index.\n * @param index The index of the track to skip to.\n */\n skipTo(index: number): void;\n\n /**\n * Seeks the playback to a specific position in seconds.\n * @param seconds The position to seek to.\n */\n seekTo(seconds: number): Promise;\n\n /**\n * Add a track to the end of the playlist.\n * @param source The audio source to add.\n */\n add(source: AudioSource): void;\n\n /**\n * Insert a track at a specific position in the playlist.\n * @param source The audio source to insert.\n * @param index The position to insert at.\n */\n insert(source: AudioSource, index: number): void;\n\n /**\n * Remove a track from the playlist by index.\n * @param index The index of the track to remove.\n */\n remove(index: number): void;\n\n /**\n * Clear all tracks from the playlist.\n */\n clear(): void;\n\n /**\n * Destroy the playlist and free up resources.\n */\n destroy(): void;\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"AudioModule.types.js","sourceRoot":"","sources":["../src/AudioModule.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["import type { PermissionResponse } from 'expo';\nimport { NativeModule, SharedObject } from 'expo-modules-core';\n\nimport type {\n AudioMetadata,\n AudioMode,\n AudioPlaylistLoopMode,\n AudioPlaylistStatus,\n AudioSource,\n AudioSourceInfo,\n AudioStatus,\n PitchCorrectionQuality,\n RecorderState,\n RecordingInput,\n RecordingOptions,\n RecordingStartOptions,\n RecordingStatus,\n} from './Audio.types';\nimport type { AudioLockScreenOptions } from './AudioConstants';\nimport type { AudioStream } from './AudioStream.types';\n\n/**\n * @hidden\n */\nexport declare class NativeAudioModule extends NativeModule {\n setIsAudioActiveAsync(active: boolean): Promise;\n setAudioModeAsync(category: Partial): Promise;\n requestRecordingPermissionsAsync(): Promise;\n requestNotificationPermissionsAsync(): Promise;\n getRecordingPermissionsAsync(): Promise;\n preload(source: AudioSource, preferredForwardBufferDuration: number): Promise;\n clearPreloadedSource(source: AudioSource): Promise;\n clearAllPreloadedSources(): Promise;\n getPreloadedSources(): Promise;\n\n readonly AudioPlayer: typeof AudioPlayer;\n readonly AudioRecorder: typeof AudioRecorder;\n readonly AudioPlaylist: typeof AudioPlaylist;\n readonly AudioStream: typeof AudioStream;\n}\n\nexport declare class AudioPlayer extends SharedObject {\n /**\n * Initializes a new audio player instance with the given source.\n * @hidden\n */\n constructor(\n source: AudioSource,\n updateInterval: number,\n keepAudioSessionActive: boolean,\n preferredForwardBufferDuration: number\n );\n\n /**\n * Unique identifier for the player object.\n */\n id: string;\n\n /**\n * Boolean value indicating whether the player is currently playing.\n */\n playing: boolean;\n\n /**\n * Boolean value indicating whether the player is currently muted.\n */\n muted: boolean;\n\n /**\n * Boolean value indicating whether the player is currently looping.\n */\n loop: boolean;\n\n /**\n * Boolean value indicating whether the player is currently paused.\n */\n paused: boolean;\n\n /**\n * Boolean value indicating whether the player is finished loading.\n */\n isLoaded: boolean;\n\n /**\n * Boolean value indicating whether audio sampling is supported on the platform.\n */\n isAudioSamplingSupported: boolean;\n\n /**\n * Boolean value indicating whether the player is buffering.\n */\n isBuffering: boolean;\n\n /**\n * The current position through the audio item in seconds.\n */\n currentTime: number;\n\n /**\n * The total duration of the audio in seconds.\n */\n duration: number;\n\n /**\n * The current volume of the audio.\n *\n * **Range:** `0.0` to `1.0`. For example, `0.0` is completely silent (0%), `0.5` is half volume (50%), and `1.0` is full volume (100%).\n *\n *\n * @example\n * ```tsx\n * import { useAudioPlayer } from 'expo-audio';\n *\n * export default function App() {\n * const player = useAudioPlayer(source);\n *\n * // Mute the audio\n * player.volume = 0.0;\n *\n * // Set volume to 50%\n * player.volume = 0.5;\n *\n * // Set to full volume\n * player.volume = 1.0;\n * }\n * ```\n */\n volume: number;\n\n /**\n * The current playback rate of the audio. It accepts different values depending on the platform:\n * - **Android**: `0.1` to `2.0`\n * - **iOS**: `0.0` to `2.0`\n * - **Web**: Follows browser implementation\n *\n * @example\n * ```tsx\n * import { useAudioPlayer } from 'expo-audio';\n *\n * export default function App() {\n * const player = useAudioPlayer(source);\n *\n * // Normal playback speed\n * player.playbackRate = 1.0;\n *\n * // Slow motion (half speed)\n * player.playbackRate = 0.5;\n *\n * // Fast playback (1.5x speed)\n * player.playbackRate = 1.5;\n *\n * // Maximum speed on mobile\n * player.playbackRate = 2.0;\n * }\n * ```\n */\n playbackRate: number;\n\n /**\n * A boolean describing if we are correcting the pitch for a changed rate.\n */\n shouldCorrectPitch: boolean;\n\n /**\n * The current status of the audio player.\n * @hidden\n */\n currentStatus: AudioStatus;\n\n /**\n * Start playing audio.\n */\n play(): void;\n\n /**\n * Pauses the player.\n */\n pause(): void;\n\n /**\n * Replaces the current audio source with a new one.\n */\n replace(source: AudioSource): void;\n\n /**\n * Seeks the playback by the given number of seconds.\n * @param seconds The number of seconds to seek by.\n * @param toleranceMillisBefore The tolerance allowed before the requested seek time, in milliseconds. iOS only.\n * @param toleranceMillisAfter The tolerance allowed after the requested seek time, in milliseconds. iOS only.\n */\n seekTo(\n seconds: number,\n toleranceMillisBefore?: number,\n toleranceMillisAfter?: number\n ): Promise;\n\n /**\n * Sets the current playback rate of the audio.\n *\n * @param rate The playback rate of the audio. See [`playbackRate`](#playbackrate) property for detailed range information.\n * @param pitchCorrectionQuality The quality of the pitch correction.\n */\n setPlaybackRate(rate: number, pitchCorrectionQuality?: PitchCorrectionQuality): void;\n\n /**\n *\n * @hidden\n */\n setAudioSamplingEnabled(enabled: boolean): void;\n\n /**\n * Sets or removes this audio player as the active player for lock screen controls.\n * Only one player can control the lock screen at a time.\n *\n * > **Note:** For lock screen controls to work correctly, [`interruptionMode`](#interruptionmode) must be set to `doNotMix` using [`setAudioModeAsync`](#audiosetaudiomodeasyncmode).\n * > Without this, the OS might not associate lock screen controls with your player.\n *\n * @param active Whether this player should be active for lock screen controls.\n * @param metadata Optional metadata to display on the lock screen (title, artist, album, artwork).\n * @param options Optional configuration to configure the lock screen controls.\n */\n setActiveForLockScreen(\n active: boolean,\n metadata?: AudioMetadata,\n options?: AudioLockScreenOptions\n ): void;\n\n /**\n * Updates the metadata displayed on the lock screen for this player.\n * This method only has an effect if this player is currently active for lock screen controls.\n * @param metadata The metadata to display (title, artist, album, artwork).\n */\n updateLockScreenMetadata(metadata: AudioMetadata): void;\n\n /**\n * Removes this player from lock screen controls if it's currently active.\n * This will clear the lock screen's now playing info.\n */\n clearLockScreenControls(): void;\n\n /**\n * Remove the player from memory to free up resources.\n */\n remove(): void;\n}\n\n/**\n * Represents a single audio sample containing waveform data from all audio channels.\n *\n * Audio samples are provided in real-time when audio sampling is enabled on an `AudioPlayer`.\n * Each sample contains the raw PCM audio data for all channels (mono has 1 channel, stereo has 2).\n * This data can be used for audio visualization, analysis, or processing.\n */\nexport type AudioSample = {\n /** Array of audio channels, each containing PCM frame data. Stereo audio will have 2 channels (left/right). */\n channels: AudioSampleChannel[];\n /** Timestamp of this sample relative to the audio track's timeline, in seconds. */\n timestamp: number;\n};\n\n/**\n * Represents audio data for a single channel (for example, left or right in stereo audio).\n *\n * Contains the raw PCM (Pulse Code Modulation) audio frames for this channel.\n * Frame values are normalized between -1.0 and 1.0, where 0 represents silence.\n */\nexport type AudioSampleChannel = {\n /** Array of PCM audio frame values, each between -1.0 and 1.0. */\n frames: number[];\n};\n\n/**\n * Event types that an `AudioPlayer` can emit.\n *\n * These events allow you to listen for changes in playback state and receive real-time audio data.\n * Use `player.addListener()` to subscribe to these events.\n */\nexport type AudioEvents = {\n /** Fired when the player's status changes (play/pause/seek/load and so on.). */\n playbackStatusUpdate(status: AudioStatus): void;\n /** Fired when audio sampling is enabled and new sample data is available. */\n audioSampleUpdate(data: AudioSample): void;\n};\n\nexport declare class AudioRecorder extends SharedObject {\n /**\n * Initializes a new audio recorder instance with the given source.\n * @hidden\n */\n constructor(options: Partial);\n\n /**\n * Unique identifier for the recorder object.\n */\n id: string;\n\n /**\n * The current length of the recording, in seconds.\n */\n currentTime: number;\n\n /**\n * Boolean value indicating whether the recording is in progress.\n */\n isRecording: boolean;\n\n /**\n * The uri of the recording.\n */\n uri: string | null;\n\n /**\n * Starts the recording.\n * @param options Optional recording configuration options.\n */\n record(options?: RecordingStartOptions): void;\n\n /**\n * Stop the recording.\n */\n stop(): Promise;\n\n /**\n * Pause the recording.\n */\n pause(): void;\n\n /**\n * Returns a list of available recording inputs. This method can only be called if the `Recording` has been prepared.\n * @return A `Promise` that is fulfilled with an array of `RecordingInput` objects.\n */\n getAvailableInputs(): RecordingInput[];\n\n /**\n * Returns the currently-selected recording input. This method can only be called if the `Recording` has been prepared.\n * @return A `Promise` that is fulfilled with a `RecordingInput` object.\n */\n getCurrentInput(): Promise;\n\n /**\n * Sets the current recording input.\n * @param inputUid The uid of a `RecordingInput`.\n * @return A `Promise` that is resolved if successful or rejected if not.\n */\n setInput(inputUid: string): void;\n\n /**\n * Status of the current recording.\n */\n getStatus(): RecorderState;\n\n /**\n * Starts the recording at the given time.\n * @param seconds The time in seconds to start recording at.\n * @deprecated Use `record({ atTime: seconds })` instead.\n */\n startRecordingAtTime(seconds: number): void;\n\n /**\n * Prepares the recording for recording.\n */\n prepareToRecordAsync(options?: Partial): Promise;\n\n /**\n * Stops the recording once the specified time has elapsed.\n * @param seconds The time in seconds to stop recording at.\n * @deprecated Use `record({ forDuration: seconds })` instead.\n */\n recordForDuration(seconds: number): void;\n}\n\n/**\n * Event types that an `AudioRecorder` can emit.\n *\n * These events are used internally by `expo-audio` hooks to provide real-time status updates.\n * Use `useAudioRecorderState()` or the `statusListener` parameter in `useAudioRecorder()` instead of subscribing directly.\n */\nexport type RecordingEvents = {\n /** Fired when the recorder's status changes (start/stop/pause/error, and so on). */\n recordingStatusUpdate: (status: RecordingStatus) => void;\n};\n\n/**\n * Event types that an `AudioPlaylist` can emit.\n *\n * These events allow you to listen for changes in playlist playback state.\n * Use `playlist.addListener()` to subscribe to these events.\n */\nexport type AudioPlaylistEvents = {\n /** Fired when the playlist's status changes (play/pause/seek/load/track change). */\n playlistStatusUpdate(status: AudioPlaylistStatus): void;\n /** Fired when the current track changes (next/previous/skip). */\n trackChanged(data: { previousIndex: number; currentIndex: number }): void;\n};\n\nexport declare class AudioPlaylist extends SharedObject {\n /**\n * Initializes a new audio playlist instance.\n * @hidden\n */\n constructor(sources: AudioSource[], updateInterval: number, loop: AudioPlaylistLoopMode);\n\n /**\n * Unique identifier for the playlist instance.\n */\n id: string;\n\n /**\n * Index of the currently playing track in the playlist.\n */\n readonly currentIndex: number;\n\n /**\n * Total number of tracks in the playlist.\n */\n readonly trackCount: number;\n\n /**\n * The audio sources currently in the playlist.\n */\n readonly sources: AudioSourceInfo[];\n\n /**\n * Boolean value indicating whether the playlist is currently playing.\n */\n playing: boolean;\n\n /**\n * Boolean value indicating whether the playlist is currently muted.\n */\n muted: boolean;\n\n /**\n * Boolean value indicating whether the current track has finished loading.\n */\n isLoaded: boolean;\n\n /**\n * Boolean value indicating whether the playlist is buffering.\n */\n isBuffering: boolean;\n\n /**\n * Current playback position in seconds.\n */\n currentTime: number;\n\n /**\n * Duration of the current track in seconds.\n */\n duration: number;\n\n /**\n * Current volume (0.0 to 1.0).\n */\n volume: number;\n\n /**\n * Current playback rate (1.0 = normal speed).\n */\n playbackRate: number;\n\n /**\n * Current loop mode.\n */\n loop: AudioPlaylistLoopMode;\n\n /**\n * The current status of the audio playlist.\n * @hidden\n */\n currentStatus: AudioPlaylistStatus;\n\n /**\n * Start playing the current track in the playlist.\n */\n play(): void;\n\n /**\n * Pause playback.\n */\n pause(): void;\n\n /**\n * Skip to the next track in the playlist.\n * If at the end of the playlist and loop mode is 'all', wraps to the first track.\n * If loop mode is 'none' and at the end, does nothing.\n */\n next(): void;\n\n /**\n * Skip to the previous track in the playlist.\n * If at the beginning of the playlist and loop mode is 'all', wraps to the last track.\n * If loop mode is 'none' and at the beginning, does nothing.\n */\n previous(): void;\n\n /**\n * Skip to a specific track in the playlist by index.\n * @param index The index of the track to skip to.\n */\n skipTo(index: number): void;\n\n /**\n * Seeks the playback to a specific position in seconds.\n * @param seconds The position to seek to.\n */\n seekTo(seconds: number): Promise;\n\n /**\n * Add a track to the end of the playlist.\n * @param source The audio source to add.\n */\n add(source: AudioSource): void;\n\n /**\n * Insert a track at a specific position in the playlist.\n * @param source The audio source to insert.\n * @param index The position to insert at.\n */\n insert(source: AudioSource, index: number): void;\n\n /**\n * Remove a track from the playlist by index.\n * @param index The index of the track to remove.\n */\n remove(index: number): void;\n\n /**\n * Clear all tracks from the playlist.\n */\n clear(): void;\n\n /**\n * Destroy the playlist and free up resources.\n */\n destroy(): void;\n}\n"]}
\ No newline at end of file
diff --git a/packages/expo-audio/build/AudioModule.web.d.ts b/packages/expo-audio/build/AudioModule.web.d.ts
index 168d4e49a88f2c..0cc7fbc6775d8a 100644
--- a/packages/expo-audio/build/AudioModule.web.d.ts
+++ b/packages/expo-audio/build/AudioModule.web.d.ts
@@ -1,4 +1,4 @@
-import type { PermissionResponse } from 'expo-modules-core';
+import { type PermissionResponse } from 'expo';
import type { AudioMode, AudioSource } from './Audio.types';
export { AudioPlayerWeb } from './AudioPlayer.web';
export { AudioPlaylistWeb } from './AudioPlaylist.web';
diff --git a/packages/expo-audio/build/AudioModule.web.d.ts.map b/packages/expo-audio/build/AudioModule.web.d.ts.map
index a10d93b6930672..a95680c68c461c 100644
--- a/packages/expo-audio/build/AudioModule.web.d.ts.map
+++ b/packages/expo-audio/build/AudioModule.web.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"AudioModule.web.d.ts","sourceRoot":"","sources":["../src/AudioModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,IAAI,aAAa,SAAO,CAAC;AAuBhC,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,SAAS,iBAAI;AAC3D,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,OAAO,iBAS1D;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEjD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAS9D;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAoBhF;AAED,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAkBpF"}
\ No newline at end of file
+{"version":3,"file":"AudioModule.web.d.ts","sourceRoot":"","sources":["../src/AudioModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,MAAM,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,IAAI,aAAa,SAAO,CAAC;AAuBhC,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,SAAS,iBAAI;AAC3D,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,OAAO,iBAS1D;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEjD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAS9D;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAoBhF;AAED,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAkBpF"}
\ No newline at end of file
diff --git a/packages/expo-audio/build/AudioModule.web.js b/packages/expo-audio/build/AudioModule.web.js
index d8252d46f57867..01c49937d85e3a 100644
--- a/packages/expo-audio/build/AudioModule.web.js
+++ b/packages/expo-audio/build/AudioModule.web.js
@@ -1,4 +1,4 @@
-import { PermissionStatus } from 'expo-modules-core';
+import { PermissionStatus } from 'expo';
import { activePlayers } from './AudioPlayer.web';
import { getUserMedia, getSourceUri, preloadCache } from './AudioUtils.web';
export { AudioPlayerWeb } from './AudioPlayer.web';
diff --git a/packages/expo-audio/build/AudioModule.web.js.map b/packages/expo-audio/build/AudioModule.web.js.map
index f38dcf9ef399b1..74bb8e8b8c9965 100644
--- a/packages/expo-audio/build/AudioModule.web.js.map
+++ b/packages/expo-audio/build/AudioModule.web.js.map
@@ -1 +1 @@
-{"version":3,"file":"AudioModule.web.js","sourceRoot":"","sources":["../src/AudioModule.web.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PermissionResponse } from 'expo-modules-core';\nimport { PermissionStatus } from 'expo-modules-core';\n\nimport type { AudioMode, AudioSource } from './Audio.types';\nimport { activePlayers } from './AudioPlayer.web';\nimport { getUserMedia, getSourceUri, preloadCache } from './AudioUtils.web';\n\nexport { AudioPlayerWeb } from './AudioPlayer.web';\nexport { AudioPlaylistWeb } from './AudioPlaylist.web';\nexport { AudioRecorderWeb } from './AudioRecorder.web';\n\nexport let isAudioActive = true;\n\nasync function getPermissionWithQueryAsync(\n name: PermissionNameWithAdditionalValues\n): Promise {\n if (!navigator || !navigator.permissions || !navigator.permissions.query) return null;\n\n try {\n const { state } = await navigator.permissions.query({ name });\n switch (state) {\n case 'granted':\n return PermissionStatus.GRANTED;\n case 'denied':\n return PermissionStatus.DENIED;\n default:\n return PermissionStatus.UNDETERMINED;\n }\n } catch {\n // Firefox - TypeError: 'microphone' (value of 'name' member of PermissionDescriptor) is not a valid value for enumeration PermissionName.\n return PermissionStatus.UNDETERMINED;\n }\n}\n\nexport async function setAudioModeAsync(mode: AudioMode) {}\nexport async function setIsAudioActiveAsync(active: boolean) {\n isAudioActive = active;\n if (!active) {\n for (const player of activePlayers) {\n if (player.playing) {\n player.pause();\n }\n }\n }\n}\n\nexport async function preloadAsync(source: AudioSource): Promise {\n const uri = getSourceUri(source);\n if (!uri || preloadCache.has(uri)) return;\n\n const headers =\n source && typeof source === 'object' && !Array.isArray(source) ? source.headers : undefined;\n\n const response = await fetch(uri, headers ? { headers } : undefined);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n const audio = new Audio(blobUrl);\n audio.preload = 'auto';\n preloadCache.set(uri, { blobUrl, audio });\n}\n\nexport function preload(source: AudioSource): void {\n preloadAsync(source).catch(() => {});\n}\n\nexport function clearPreloadedSource(source: AudioSource): void {\n const uri = getSourceUri(source);\n if (!uri) return;\n\n const cached = preloadCache.get(uri);\n if (cached) {\n URL.revokeObjectURL(cached.blobUrl);\n preloadCache.delete(uri);\n }\n}\n\nexport function clearAllPreloadedSources(): void {\n for (const cached of preloadCache.values()) {\n URL.revokeObjectURL(cached.blobUrl);\n }\n preloadCache.clear();\n}\n\nexport function getPreloadedSources(): string[] {\n return Array.from(preloadCache.keys());\n}\n\nexport async function getRecordingPermissionsAsync(): Promise {\n const maybeStatus = await getPermissionWithQueryAsync('microphone');\n switch (maybeStatus) {\n case PermissionStatus.GRANTED:\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: true,\n granted: true,\n };\n case PermissionStatus.DENIED:\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n default:\n return await requestRecordingPermissionsAsync();\n }\n}\n\nexport async function requestRecordingPermissionsAsync(): Promise {\n try {\n const stream = await getUserMedia({ audio: true });\n stream.getTracks().forEach((track) => track.stop());\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: true,\n granted: true,\n };\n } catch {\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"file":"AudioModule.web.js","sourceRoot":"","sources":["../src/AudioModule.web.ts"],"names":[],"mappings":"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","sourcesContent":["import { type PermissionResponse, PermissionStatus } from 'expo';\n\nimport type { AudioMode, AudioSource } from './Audio.types';\nimport { activePlayers } from './AudioPlayer.web';\nimport { getUserMedia, getSourceUri, preloadCache } from './AudioUtils.web';\n\nexport { AudioPlayerWeb } from './AudioPlayer.web';\nexport { AudioPlaylistWeb } from './AudioPlaylist.web';\nexport { AudioRecorderWeb } from './AudioRecorder.web';\n\nexport let isAudioActive = true;\n\nasync function getPermissionWithQueryAsync(\n name: PermissionNameWithAdditionalValues\n): Promise {\n if (!navigator || !navigator.permissions || !navigator.permissions.query) return null;\n\n try {\n const { state } = await navigator.permissions.query({ name });\n switch (state) {\n case 'granted':\n return PermissionStatus.GRANTED;\n case 'denied':\n return PermissionStatus.DENIED;\n default:\n return PermissionStatus.UNDETERMINED;\n }\n } catch {\n // Firefox - TypeError: 'microphone' (value of 'name' member of PermissionDescriptor) is not a valid value for enumeration PermissionName.\n return PermissionStatus.UNDETERMINED;\n }\n}\n\nexport async function setAudioModeAsync(mode: AudioMode) {}\nexport async function setIsAudioActiveAsync(active: boolean) {\n isAudioActive = active;\n if (!active) {\n for (const player of activePlayers) {\n if (player.playing) {\n player.pause();\n }\n }\n }\n}\n\nexport async function preloadAsync(source: AudioSource): Promise {\n const uri = getSourceUri(source);\n if (!uri || preloadCache.has(uri)) return;\n\n const headers =\n source && typeof source === 'object' && !Array.isArray(source) ? source.headers : undefined;\n\n const response = await fetch(uri, headers ? { headers } : undefined);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n const audio = new Audio(blobUrl);\n audio.preload = 'auto';\n preloadCache.set(uri, { blobUrl, audio });\n}\n\nexport function preload(source: AudioSource): void {\n preloadAsync(source).catch(() => {});\n}\n\nexport function clearPreloadedSource(source: AudioSource): void {\n const uri = getSourceUri(source);\n if (!uri) return;\n\n const cached = preloadCache.get(uri);\n if (cached) {\n URL.revokeObjectURL(cached.blobUrl);\n preloadCache.delete(uri);\n }\n}\n\nexport function clearAllPreloadedSources(): void {\n for (const cached of preloadCache.values()) {\n URL.revokeObjectURL(cached.blobUrl);\n }\n preloadCache.clear();\n}\n\nexport function getPreloadedSources(): string[] {\n return Array.from(preloadCache.keys());\n}\n\nexport async function getRecordingPermissionsAsync(): Promise {\n const maybeStatus = await getPermissionWithQueryAsync('microphone');\n switch (maybeStatus) {\n case PermissionStatus.GRANTED:\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: true,\n granted: true,\n };\n case PermissionStatus.DENIED:\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n default:\n return await requestRecordingPermissionsAsync();\n }\n}\n\nexport async function requestRecordingPermissionsAsync(): Promise {\n try {\n const stream = await getUserMedia({ audio: true });\n stream.getTracks().forEach((track) => track.stop());\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: true,\n granted: true,\n };\n } catch {\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n }\n}\n"]}
\ No newline at end of file
diff --git a/packages/expo-audio/build/ExpoAudio.d.ts b/packages/expo-audio/build/ExpoAudio.d.ts
index d2f2198aba8d94..0e753738f8e429 100644
--- a/packages/expo-audio/build/ExpoAudio.d.ts
+++ b/packages/expo-audio/build/ExpoAudio.d.ts
@@ -1,4 +1,4 @@
-import type { PermissionResponse } from 'expo-modules-core';
+import { type PermissionResponse } from 'expo';
import type { AudioMode, AudioPlayerOptions, AudioPlaylistOptions, AudioPlaylistStatus, AudioSource, AudioStatus, PreloadOptions, RecordingOptions, RecordingStatus } from './Audio.types';
import AudioModule from './AudioModule';
import type { AudioPlayer, AudioPlaylist, AudioRecorder, AudioSample } from './AudioModule.types';
diff --git a/packages/expo-audio/build/ExpoAudio.d.ts.map b/packages/expo-audio/build/ExpoAudio.d.ts.map
index 78633a9a03d407..850833183cd006 100644
--- a/packages/expo-audio/build/ExpoAudio.d.ts.map
+++ b/packages/expo-audio/build/ExpoAudio.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ExpoAudio.d.ts","sourceRoot":"","sources":["../src/ExpoAudio.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"ExpoAudio.d.ts","sourceRoot":"","sources":["../src/ExpoAudio.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/packages/expo-audio/build/ExpoAudio.js.map b/packages/expo-audio/build/ExpoAudio.js.map
index 39aac77cb32722..22ff33034b1512 100644
--- a/packages/expo-audio/build/ExpoAudio.js.map
+++ b/packages/expo-audio/build/ExpoAudio.js.map
@@ -1 +1 @@
-{"version":3,"file":"ExpoAudio.js","sourceRoot":"","sources":["../src/ExpoAudio.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEvent } from 'expo';\nimport type { PermissionResponse } from 'expo-modules-core';\nimport { useReleasingSharedObject } from 'expo-modules-core';\nimport { useEffect, useMemo } from 'react';\nimport { Platform } from 'react-native';\n\nimport type {\n AudioMode,\n AudioPlayerOptions,\n AudioPlaylistOptions,\n AudioPlaylistStatus,\n AudioSource,\n AudioStatus,\n PitchCorrectionQuality,\n PreloadOptions,\n RecordingOptions,\n RecordingStatus,\n} from './Audio.types';\nimport {\n AUDIO_SAMPLE_UPDATE,\n PLAYBACK_STATUS_UPDATE,\n PLAYLIST_STATUS_UPDATE,\n RECORDING_STATUS_UPDATE,\n} from './AudioEventKeys';\nimport AudioModule from './AudioModule';\nimport type { AudioPlayer, AudioPlaylist, AudioRecorder, AudioSample } from './AudioModule.types';\nimport { createRecordingOptions } from './utils/options';\nimport { resolveSource, resolveSources, resolveSourceWithDownload } from './utils/resolveSource';\n\n// TODO: Temporary solution until we develop a way of overriding prototypes that won't break the lazy loading of the module.\nconst replace = AudioModule.AudioPlayer.prototype.replace;\nAudioModule.AudioPlayer.prototype.replace = function (source: AudioSource) {\n return replace.call(this, resolveSource(source));\n};\n\nconst setPlaybackRate = AudioModule.AudioPlayer.prototype.setPlaybackRate;\nAudioModule.AudioPlayer.prototype.setPlaybackRate = function (\n rate: number,\n pitchCorrectionQuality?: PitchCorrectionQuality\n) {\n if (Platform.OS === 'android') {\n return setPlaybackRate.call(this, rate);\n } else {\n return setPlaybackRate.call(this, rate, pitchCorrectionQuality);\n }\n};\n\n// Audio recording prototypes should not be shimmed on tvOS, where they do not exist\nif (!Platform.isTV || Platform.OS !== 'ios') {\n const prepareToRecordAsync = AudioModule.AudioRecorder.prototype.prepareToRecordAsync;\n AudioModule.AudioRecorder.prototype.prepareToRecordAsync = function (options?: RecordingOptions) {\n const processedOptions = options ? createRecordingOptions(options) : undefined;\n return prepareToRecordAsync.call(this, processedOptions);\n };\n}\n\n/**\n * Creates an `AudioPlayer` instance that automatically releases when the component unmounts.\n *\n * This hook manages the player's lifecycle and ensures it's properly disposed when no longer needed.\n * The player will start loading the audio source immediately upon creation.\n *\n * @param source The audio source to load. Can be a local asset via `require()`, a remote URL, or null for no initial source.\n * @param options Audio player configuration options.\n * @returns An `AudioPlayer` instance that's automatically managed by the component lifecycle.\n *\n * @example\n * ```tsx\n * import { useAudioPlayer } from 'expo-audio';\n *\n * function MyComponent() {\n * const player = useAudioPlayer(require('./sound.mp3'));\n *\n * return (\n *