@elizaos/capacitor-mobile-signals 1.0.0 → 2.0.3-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shaw Walters and elizaOS Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # @elizaos/capacitor-mobile-signals
2
+
3
+ A Capacitor plugin that surfaces native mobile device state — wake/sleep, lock screen, battery, screen time, and health biometrics — to Eliza agents running in iOS and Android apps.
4
+
5
+ ## What it does
6
+
7
+ On iOS and Android the plugin reads native signals that are unavailable to ordinary web APIs:
8
+
9
+ - **Device state** — whether the screen is active, idle, locked, or the app is backgrounded; battery charging status.
10
+ - **Health data** — current sleep stage, biometrics (heart rate, HRV, respiratory rate, blood oxygen) from HealthKit (iOS) or Health Connect (Android).
11
+ - **Screen time** — per-app usage summaries via Apple's DeviceActivity framework (iOS) or `UsageStatsManager` (Android).
12
+
13
+ In browser environments a web fallback is provided using `document.visibilityState`, `window.focus/blur`, and the Battery Status API. Health and screen-time capabilities return `false` on the web fallback.
14
+
15
+ ## Capabilities
16
+
17
+ | Capability | iOS | Android | Web |
18
+ |---|---|---|---|
19
+ | Device state (active/idle/locked) | Yes | Yes | Partial (visibility/focus only) |
20
+ | Battery on/off charging | Yes | Yes | Yes (Battery Status API) |
21
+ | Sleep stage / biometrics | HealthKit | Health Connect | No |
22
+ | Screen time / usage | DeviceActivity + FamilyControls | `PACKAGE_USAGE_STATS` | No |
23
+ | Background refresh | Not available (foreground monitoring only) | Not available | No |
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ npm install @elizaos/capacitor-mobile-signals
29
+ npx cap sync
30
+ ```
31
+
32
+ The plugin is registered automatically by Capacitor on iOS and Android. No manual `registerPlugin` call is needed in application code — import `MobileSignals` from the package and call its methods directly.
33
+
34
+ ## Usage
35
+
36
+ ```typescript
37
+ import { MobileSignals } from "@elizaos/capacitor-mobile-signals";
38
+
39
+ // Check permissions before monitoring
40
+ const status = await MobileSignals.checkPermissions();
41
+ console.log(status.engine); // "healthkit-screen-time" | "health-connect-usage-stats" | "web-fallback"
42
+
43
+ // Request permissions (triggers native dialogs)
44
+ if (status.status === "not-determined") {
45
+ await MobileSignals.requestPermissions({ target: "all" });
46
+ }
47
+
48
+ // Start streaming signals
49
+ await MobileSignals.startMonitoring({ emitInitial: true });
50
+
51
+ await MobileSignals.addListener("signal", (signal) => {
52
+ if (signal.source === "mobile_device") {
53
+ console.log("Device state:", signal.state); // "active" | "idle" | "background" | "locked" | "sleeping"
54
+ console.log("On battery:", signal.onBattery);
55
+ }
56
+ if (signal.source === "mobile_health") {
57
+ console.log("Sleeping:", signal.sleep.isSleeping);
58
+ console.log("Heart rate:", signal.biometrics.heartRateBpm);
59
+ }
60
+ });
61
+
62
+ // One-shot read without streaming
63
+ const { snapshot, healthSnapshot } = await MobileSignals.getSnapshot();
64
+
65
+ // Stop when done
66
+ await MobileSignals.stopMonitoring();
67
+ ```
68
+
69
+ ## Permissions
70
+
71
+ ### iOS
72
+
73
+ Add to `Info.plist`:
74
+
75
+ ```xml
76
+ <key>NSHealthShareUsageDescription</key>
77
+ <string>Used to read sleep and biometric data for your agent.</string>
78
+ ```
79
+
80
+ Screen Time features additionally require:
81
+
82
+ - The `com.apple.developer.family-controls` entitlement (provisioned by Apple — requires a special request).
83
+ - `DeviceActivityMonitorExtension` and `DeviceActivityReportExtension` app-extension targets in the Xcode project.
84
+ - The `FamilyControls` and `DeviceActivity` frameworks linked via the podspec.
85
+
86
+ Validate the iOS build wiring:
87
+
88
+ ```bash
89
+ bun run --cwd plugins/plugin-native-mobile-signals validate:ios-screen-time
90
+ ```
91
+
92
+ ### Android
93
+
94
+ Add to `AndroidManifest.xml`:
95
+
96
+ ```xml
97
+ <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
98
+ tools:ignore="ProtectedPermissions" />
99
+ ```
100
+
101
+ Usage Access cannot be granted via a normal permission dialog. Direct the user to the system settings page:
102
+
103
+ ```typescript
104
+ await MobileSignals.openSettings({ target: "usageAccess" });
105
+ ```
106
+
107
+ ## Environment variables (build-time only)
108
+
109
+ | Variable | Description |
110
+ |---|---|
111
+ | `MOBILE_SIGNALS_IOS_PROVISIONING_PROFILE` | Path to a `.mobileprovision` to inspect for Screen Time entitlements during `validate:ios-screen-time`. |
112
+ | `MOBILE_SIGNALS_REQUIRE_IOS_PROVISIONING_PROFILE` | Set to `"1"` to fail validation when no provisioning profile is supplied. |
113
+
114
+ ## Platform notes
115
+
116
+ - **Node (desktop):** No native integration. The web fallback applies.
117
+ - **iOS:** Full support. Requires Xcode target with correct entitlements for screen time features.
118
+ - **Android:** Full support for device state and Health Connect. Usage stats require manual user grant via settings.
119
+ - **Web:** Graceful fallback only. Health and screen-time capabilities are unavailable.
120
+
@@ -8,6 +8,16 @@ ext {
8
8
  }
9
9
 
10
10
  apply plugin: 'com.android.library'
11
+ // Explicitly apply the Kotlin Android plugin. The kotlin-gradle-plugin is on
12
+ // the root buildscript classpath, but without applying it here AGP 8.13 falls
13
+ // back to its "built-in Kotlin" compile path (build/intermediates/
14
+ // built_in_kotlinc), which compiles the .kt sources but does NOT bundle the
15
+ // resulting .class files into the *release* library jar. The app's
16
+ // :app:assembleRelease then links a library AAR with zero plugin classes, so
17
+ // the Capacitor plugin (and any manifest-declared component) is absent from
18
+ // the release dex. Applying the standard Kotlin plugin wires Kotlin
19
+ // compilation into both the debug and release jar-bundling tasks.
20
+ apply plugin: 'org.jetbrains.kotlin.android'
11
21
  android {
12
22
  namespace = "ai.eliza.plugins.mobilesignals"
13
23
  compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
@@ -26,8 +36,12 @@ android {
26
36
  }
27
37
 
28
38
  compileOptions {
29
- sourceCompatibility JavaVersion.VERSION_17
30
- targetCompatibility JavaVersion.VERSION_17
39
+ sourceCompatibility JavaVersion.VERSION_21
40
+ targetCompatibility JavaVersion.VERSION_21
41
+ }
42
+
43
+ kotlinOptions {
44
+ jvmTarget = "21"
31
45
  }
32
46
 
33
47
  }
@@ -35,7 +49,7 @@ android {
35
49
  repositories {
36
50
  google()
37
51
  maven {
38
- url = uri(rootProject.ext.mavenCentralMirrorUrl)
52
+ url = uri(rootProject.ext.has('mavenCentralMirrorUrl') ? rootProject.ext.mavenCentralMirrorUrl : 'https://repo.maven.apache.org/maven2')
39
53
  }
40
54
  mavenCentral()
41
55
  }
@@ -5,4 +5,5 @@
5
5
  <uses-permission
6
6
  android:name="android.permission.PACKAGE_USAGE_STATS"
7
7
  tools:ignore="ProtectedPermissions" />
8
+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
8
9
  </manifest>
@@ -1,6 +1,8 @@
1
1
  package ai.eliza.plugins.mobilesignals
2
2
 
3
+ import android.Manifest
3
4
  import android.app.AppOpsManager
5
+ import android.app.NotificationManager
4
6
  import android.app.usage.UsageStatsManager
5
7
  import android.app.KeyguardManager
6
8
  import android.content.BroadcastReceiver
@@ -29,8 +31,11 @@ import com.getcapacitor.JSObject
29
31
  import com.getcapacitor.Plugin
30
32
  import com.getcapacitor.PluginCall
31
33
  import com.getcapacitor.PluginMethod
34
+ import com.getcapacitor.PermissionState
32
35
  import com.getcapacitor.annotation.ActivityCallback
33
36
  import com.getcapacitor.annotation.CapacitorPlugin
37
+ import com.getcapacitor.annotation.Permission
38
+ import com.getcapacitor.annotation.PermissionCallback
34
39
  import kotlinx.coroutines.CoroutineScope
35
40
  import kotlinx.coroutines.Dispatchers
36
41
  import kotlinx.coroutines.SupervisorJob
@@ -42,8 +47,17 @@ import org.json.JSONObject
42
47
  private const val HEALTH_CONNECT_PACKAGE = "com.google.android.apps.healthdata"
43
48
  private const val FAMILY_CONTROLS_ENTITLEMENT = "com.apple.developer.family-controls"
44
49
  private const val PACKAGE_USAGE_STATS_PERMISSION = "android.permission.PACKAGE_USAGE_STATS"
45
-
46
- @CapacitorPlugin(name = "MobileSignals")
50
+ private const val NOTIFICATION_PERMISSION_ALIAS = "notifications"
51
+
52
+ @CapacitorPlugin(
53
+ name = "MobileSignals",
54
+ permissions = [
55
+ Permission(
56
+ alias = NOTIFICATION_PERMISSION_ALIAS,
57
+ strings = [Manifest.permission.POST_NOTIFICATIONS],
58
+ ),
59
+ ],
60
+ )
47
61
  class MobileSignalsPlugin : Plugin() {
48
62
  private val tag = "MobileSignalsPlugin"
49
63
  private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
@@ -115,6 +129,31 @@ class MobileSignalsPlugin : Plugin() {
115
129
 
116
130
  @PluginMethod
117
131
  override fun requestPermissions(call: PluginCall) {
132
+ val target = call.getString("target") ?: "all"
133
+ if (target == "notifications") {
134
+ requestNotificationPermission(call)
135
+ return
136
+ }
137
+ if (target == "screenTime") {
138
+ val (_, intent) = settingsIntentFor("usageAccess")
139
+ try {
140
+ val starter = activity
141
+ if (starter != null) {
142
+ starter.startActivity(intent)
143
+ } else {
144
+ context.startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
145
+ }
146
+ scope.launch {
147
+ call.resolve(resolvePermissionResult("Opened Android Usage Access settings."))
148
+ }
149
+ } catch (error: Throwable) {
150
+ scope.launch {
151
+ call.resolve(resolvePermissionResult("Failed to open Android Usage Access settings: ${error.message}"))
152
+ }
153
+ }
154
+ return
155
+ }
156
+
118
157
  val sdkStatus = HealthConnectClient.getSdkStatus(context, HEALTH_CONNECT_PACKAGE)
119
158
  if (sdkStatus != HealthConnectClient.SDK_AVAILABLE) {
120
159
  call.resolve(buildPermissionResult(sdkStatus))
@@ -134,6 +173,55 @@ class MobileSignalsPlugin : Plugin() {
134
173
  startActivityForResult(call, intent, "handleHealthConnectPermissionResult")
135
174
  }
136
175
 
176
+ private fun requestNotificationPermission(call: PluginCall) {
177
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
178
+ openNotificationSettingsOrResolve(call)
179
+ return
180
+ }
181
+ val current = notificationPermissionStatus()
182
+ if (current.status == "granted") {
183
+ scope.launch {
184
+ call.resolve(resolvePermissionResult())
185
+ }
186
+ return
187
+ }
188
+ if (!current.canRequest) {
189
+ openNotificationSettingsOrResolve(call)
190
+ return
191
+ }
192
+ requestPermissionForAlias(
193
+ NOTIFICATION_PERMISSION_ALIAS,
194
+ call,
195
+ "handleNotificationsPermissionResult",
196
+ )
197
+ }
198
+
199
+ private fun openNotificationSettingsOrResolve(call: PluginCall) {
200
+ val (_, intent) = settingsIntentFor("notification")
201
+ try {
202
+ val starter = activity
203
+ if (starter != null) {
204
+ starter.startActivity(intent)
205
+ } else {
206
+ context.startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
207
+ }
208
+ scope.launch {
209
+ call.resolve(resolvePermissionResult("Opened Android notification settings."))
210
+ }
211
+ } catch (error: Throwable) {
212
+ scope.launch {
213
+ call.resolve(resolvePermissionResult("Failed to open Android notification settings: ${error.message}"))
214
+ }
215
+ }
216
+ }
217
+
218
+ @PermissionCallback
219
+ private fun handleNotificationsPermissionResult(call: PluginCall) {
220
+ scope.launch {
221
+ call.resolve(resolvePermissionResult())
222
+ }
223
+ }
224
+
137
225
  @PluginMethod
138
226
  fun openSettings(call: PluginCall) {
139
227
  val requestedTarget = call.getString("target") ?: "app"
@@ -273,6 +361,10 @@ class MobileSignalsPlugin : Plugin() {
273
361
  return JSObject().apply {
274
362
  put("status", status)
275
363
  put("canRequest", canRequest)
364
+ put("canOpenSettings", true)
365
+ put("settingsTarget", if (status == "granted") JSONObject.NULL else "healthConnect")
366
+ put("engine", "health-connect-usage-stats")
367
+ put("capabilities", mobileSignalsCapabilities(sdkStatus))
276
368
  if (statusReason != null) {
277
369
  put("reason", statusReason)
278
370
  }
@@ -285,6 +377,15 @@ class MobileSignalsPlugin : Plugin() {
285
377
  }
286
378
  }
287
379
 
380
+ private fun mobileSignalsCapabilities(sdkStatus: Int): JSObject {
381
+ return JSObject().apply {
382
+ put("health", sdkStatus == HealthConnectClient.SDK_AVAILABLE)
383
+ put("screenTime", true)
384
+ put("notifications", true)
385
+ put("settings", true)
386
+ }
387
+ }
388
+
288
389
  private fun computeIdleTimeSeconds(locked: Boolean, interactive: Boolean): Long? {
289
390
  if (!hasUsageStatsAccess()) {
290
391
  return null
@@ -641,6 +742,50 @@ class MobileSignalsPlugin : Plugin() {
641
742
  }
642
743
  }
643
744
 
745
+ private data class NotificationPermissionStatus(
746
+ val status: String,
747
+ val canRequest: Boolean,
748
+ val reason: String?,
749
+ )
750
+
751
+ private fun notificationPermissionStatus(): NotificationPermissionStatus {
752
+ val appNotificationsEnabled = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
753
+ val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
754
+ manager.areNotificationsEnabled()
755
+ } else {
756
+ true
757
+ }
758
+
759
+ val runtimeState = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
760
+ getPermissionState(NOTIFICATION_PERMISSION_ALIAS)
761
+ } else {
762
+ PermissionState.GRANTED
763
+ }
764
+
765
+ if (runtimeState == PermissionState.GRANTED && appNotificationsEnabled) {
766
+ return NotificationPermissionStatus("granted", false, null)
767
+ }
768
+
769
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && runtimeState != PermissionState.GRANTED) {
770
+ val canRequest = runtimeState != PermissionState.DENIED
771
+ return NotificationPermissionStatus(
772
+ if (runtimeState == PermissionState.DENIED) "denied" else "not-determined",
773
+ canRequest,
774
+ if (canRequest) {
775
+ "Allow notifications when LifeOps needs to remind or prompt you."
776
+ } else {
777
+ "Notifications are denied for Eliza. Open Android settings to enable reminders and prompts."
778
+ },
779
+ )
780
+ }
781
+
782
+ return NotificationPermissionStatus(
783
+ "denied",
784
+ false,
785
+ "Notifications are disabled for Eliza. Open Android settings to enable reminders and prompts.",
786
+ )
787
+ }
788
+
644
789
  private fun buildSetupActions(
645
790
  healthStatus: String,
646
791
  healthCanRequest: Boolean,
@@ -690,14 +835,15 @@ class MobileSignalsPlugin : Plugin() {
690
835
  },
691
836
  )
692
837
  })
838
+ val notifications = notificationPermissionStatus()
693
839
  actions.add(JSObject().apply {
694
840
  put("id", "notification_settings")
695
841
  put("label", "Notifications")
696
- put("status", "needs-action")
697
- put("canRequest", false)
842
+ put("status", if (notifications.status == "granted") "ready" else "needs-action")
843
+ put("canRequest", notifications.canRequest)
698
844
  put("canOpenSettings", true)
699
845
  put("settingsTarget", "notification")
700
- put("reason", "Open notification settings if reminders or telemetry prompts are muted.")
846
+ put("reason", notifications.reason ?: JSONObject.NULL)
701
847
  })
702
848
  actions.add(JSObject().apply {
703
849
  put("id", "battery_optimization")
@@ -3,6 +3,13 @@ export type MobileSignalsPlatform = "android" | "ios" | "web";
3
3
  export type MobileSignalsSource = "mobile_device" | "mobile_health";
4
4
  export type MobileSignalsState = "active" | "idle" | "background" | "locked" | "sleeping";
5
5
  export type MobileSignalsHealthSource = "healthkit" | "health_connect";
6
+ export type MobileSignalsEngine = "healthkit-screen-time" | "health-connect-usage-stats" | "web-fallback";
7
+ export interface MobileSignalsCapabilities {
8
+ health: boolean;
9
+ screenTime: boolean;
10
+ notifications: boolean;
11
+ settings: boolean;
12
+ }
6
13
  export type MobileSignalsSettingsTarget = "app" | "health" | "healthConnect" | "screenTime" | "usageAccess" | "notification" | "batteryOptimization" | "localNetwork" | "deviceSettings";
7
14
  export type MobileSignalsSetupActionStatus = "ready" | "needs-action" | "unavailable";
8
15
  export interface MobileSignalsSetupAction {
@@ -17,6 +24,10 @@ export interface MobileSignalsSetupAction {
17
24
  export interface MobileSignalsOpenSettingsOptions {
18
25
  target?: MobileSignalsSettingsTarget;
19
26
  }
27
+ export type MobileSignalsPermissionTarget = "all" | "health" | "screenTime" | "notifications";
28
+ export interface MobileSignalsRequestPermissionsOptions {
29
+ target?: MobileSignalsPermissionTarget;
30
+ }
20
31
  export interface MobileSignalsOpenSettingsResult {
21
32
  opened: boolean;
22
33
  target: MobileSignalsSettingsTarget;
@@ -32,6 +43,8 @@ export interface MobileSignalsScreenTimeStatus {
32
43
  frameworks: string[];
33
44
  deviceActivityReportExtension: boolean;
34
45
  deviceActivityMonitorExtension: boolean;
46
+ deviceActivityReportExtensionPoint?: string;
47
+ deviceActivityMonitorExtensionPoint?: string;
35
48
  android?: {
36
49
  usageStatsPermission: string;
37
50
  usageAccessSettingsAction: string;
@@ -49,6 +62,16 @@ export interface MobileSignalsScreenTimeStatus {
49
62
  status: "approved" | "denied" | "not-determined" | "unavailable";
50
63
  canRequest: boolean;
51
64
  };
65
+ extensions?: {
66
+ deviceActivityReportExtension: boolean;
67
+ deviceActivityMonitorExtension: boolean;
68
+ inspected: "bundle-plug-ins";
69
+ bundles: Array<{
70
+ bundleIdentifier: string;
71
+ extensionPoint: string | null;
72
+ path: string;
73
+ }>;
74
+ };
52
75
  reportAvailable: boolean;
53
76
  coarseSummaryAvailable: boolean;
54
77
  thresholdEventsAvailable: boolean;
@@ -138,7 +161,7 @@ export interface MobileSignalsCancelBackgroundRefreshResult {
138
161
  }
139
162
  export interface MobileSignalsPlugin {
140
163
  checkPermissions(): Promise<MobileSignalsPermissionStatus>;
141
- requestPermissions(): Promise<MobileSignalsPermissionStatus>;
164
+ requestPermissions(options?: MobileSignalsRequestPermissionsOptions): Promise<MobileSignalsPermissionStatus>;
142
165
  openSettings(options?: MobileSignalsOpenSettingsOptions): Promise<MobileSignalsOpenSettingsResult>;
143
166
  startMonitoring(options?: MobileSignalsStartOptions): Promise<MobileSignalsStartResult>;
144
167
  stopMonitoring(): Promise<MobileSignalsStopResult>;
@@ -151,6 +174,10 @@ export interface MobileSignalsPlugin {
151
174
  export interface MobileSignalsPermissionStatus {
152
175
  status: "granted" | "denied" | "not-determined" | "not-applicable";
153
176
  canRequest: boolean;
177
+ canOpenSettings: boolean;
178
+ settingsTarget: MobileSignalsSettingsTarget | null;
179
+ engine: MobileSignalsEngine;
180
+ capabilities: MobileSignalsCapabilities;
154
181
  reason?: string;
155
182
  screenTime: MobileSignalsScreenTimeStatus;
156
183
  setupActions: MobileSignalsSetupAction[];
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAEV,gCAAgC,EAChC,+BAA+B,EAC/B,6BAA6B,EAE7B,mBAAmB,EACnB,6BAA6B,EAG7B,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AAiCvB,iBAAS,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,6BAA6B,CA6B5E;AA6HD,qBAAa,gBAAiB,SAAQ,SAAU,YAAW,mBAAmB;IAC5E,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAiB;IAE1B,gBAAgB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAkB1D,kBAAkB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAI5D,YAAY,CAChB,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,+BAA+B,CAAC;IAS3C,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,cAAc;IAOhB,eAAe,CACnB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAMlD,WAAW,IAAI,OAAO,CAAC,2BAA2B,CAAC;IASnD,yBAAyB,IAAI,OAAO,CAAC;QACzC,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAOI,uBAAuB,IAAI,OAAO,CAAC;QACvC,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CAMH;AAED,eAAO,MAAM,UAAU;;CAEtB,CAAC"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAEV,gCAAgC,EAChC,+BAA+B,EAC/B,6BAA6B,EAE7B,mBAAmB,EACnB,6BAA6B,EAI7B,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AAqDvB,iBAAS,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,6BAA6B,CA6B5E;AAqID,qBAAa,gBAAiB,SAAQ,SAAU,YAAW,mBAAmB;IAC5E,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAiB;IAE1B,gBAAgB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IA2B1D,kBAAkB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAI5D,YAAY,CAChB,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,+BAA+B,CAAC;IAU3C,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,cAAc;IAOhB,eAAe,CACnB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAMlD,WAAW,IAAI,OAAO,CAAC,2BAA2B,CAAC;IASnD,yBAAyB,IAAI,OAAO,CAAC;QACzC,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAOI,uBAAuB,IAAI,OAAO,CAAC;QACvC,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CAMH;AAED,eAAO,MAAM,UAAU;;CAEtB,CAAC"}
package/dist/esm/web.js CHANGED
@@ -11,6 +11,25 @@ const SCREEN_TIME_REQUIREMENTS = {
11
11
  usageAccessSettingsAction: "android.settings.USAGE_ACCESS_SETTINGS",
12
12
  },
13
13
  };
14
+ const SETTINGS_TARGETS = new Set([
15
+ "app",
16
+ "health",
17
+ "healthConnect",
18
+ "screenTime",
19
+ "usageAccess",
20
+ "notification",
21
+ "batteryOptimization",
22
+ "localNetwork",
23
+ "deviceSettings",
24
+ ]);
25
+ function normalizeSettingsTarget(target) {
26
+ if (target === undefined)
27
+ return "app";
28
+ if (typeof target !== "string" || !SETTINGS_TARGETS.has(target)) {
29
+ throw new Error("target must be a valid mobile settings target");
30
+ }
31
+ return target;
32
+ }
14
33
  function getPlatform() {
15
34
  if (typeof navigator === "undefined") {
16
35
  return "web";
@@ -82,13 +101,21 @@ async function getBatterySnapshot() {
82
101
  if (!nav || typeof nav.getBattery !== "function") {
83
102
  return { onBattery: null, batteryLevel: null, isCharging: null };
84
103
  }
85
- const battery = await nav.getBattery();
104
+ let battery;
105
+ try {
106
+ battery = await nav.getBattery();
107
+ }
108
+ catch {
109
+ return { onBattery: null, batteryLevel: null, isCharging: null };
110
+ }
111
+ const charging = typeof battery.charging === "boolean" ? battery.charging : null;
112
+ const level = typeof battery.level === "number" && Number.isFinite(battery.level)
113
+ ? Math.max(0, Math.min(1, battery.level))
114
+ : null;
86
115
  return {
87
- onBattery: !battery.charging,
88
- batteryLevel: typeof battery.level === "number"
89
- ? Math.max(0, Math.min(1, battery.level))
90
- : null,
91
- isCharging: battery.charging,
116
+ onBattery: charging === null ? null : !charging,
117
+ batteryLevel: level,
118
+ isCharging: charging,
92
119
  };
93
120
  }
94
121
  async function buildSnapshot(reason) {
@@ -175,6 +202,15 @@ export class MobileSignalsWeb extends WebPlugin {
175
202
  return {
176
203
  status: "not-applicable",
177
204
  canRequest: false,
205
+ canOpenSettings: false,
206
+ settingsTarget: null,
207
+ engine: "web-fallback",
208
+ capabilities: {
209
+ health: false,
210
+ screenTime: false,
211
+ notifications: false,
212
+ settings: false,
213
+ },
178
214
  screenTime: buildScreenTimeStatus("Web fallback has no Family Controls or DeviceActivity access."),
179
215
  setupActions: buildSetupActions("Web fallback has no HealthKit or Health Connect access."),
180
216
  permissions: {
@@ -188,22 +224,27 @@ export class MobileSignalsWeb extends WebPlugin {
188
224
  return this.checkPermissions();
189
225
  }
190
226
  async openSettings(options = {}) {
227
+ const target = normalizeSettingsTarget(options.target);
191
228
  return {
192
229
  opened: false,
193
- target: options.target ?? "app",
230
+ target,
194
231
  actualTarget: "app",
195
232
  reason: "Web fallback cannot open native device settings.",
196
233
  };
197
234
  }
198
235
  attachListeners() {
199
- if (typeof document !== "undefined") {
236
+ if (typeof document !== "undefined" &&
237
+ typeof document.addEventListener === "function" &&
238
+ typeof document.removeEventListener === "function") {
200
239
  const handleVisibilityChange = () => {
201
240
  void this.emitSignal("visibilitychange");
202
241
  };
203
242
  document.addEventListener("visibilitychange", handleVisibilityChange);
204
243
  this.cleanup.push(() => document.removeEventListener("visibilitychange", handleVisibilityChange));
205
244
  }
206
- if (typeof window !== "undefined") {
245
+ if (typeof window !== "undefined" &&
246
+ typeof window.addEventListener === "function" &&
247
+ typeof window.removeEventListener === "function") {
207
248
  const handleFocus = () => {
208
249
  void this.emitSignal("focus");
209
250
  };