@elizaos/capacitor-system 1.0.0 → 2.0.11-beta.7

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,110 @@
1
+ # @elizaos/capacitor-system
2
+
3
+ Android system-role status bridge for elizaOS.
4
+
5
+ A [Capacitor](https://capacitorjs.com/) plugin that exposes Android system roles (home launcher, default dialer, SMS app, assistant), screen brightness, and audio-volume controls to TypeScript code running inside an elizaOS-based Android app.
6
+
7
+ ## What it does
8
+
9
+ On **Android**, the plugin lets TypeScript code:
10
+
11
+ - Query which Android system roles the app currently holds (home, dialer, SMS, voice assistant).
12
+ - Request a system role via the standard Android role-request dialog.
13
+ - Read and write screen brightness (requires WRITE_SETTINGS permission).
14
+ - Read and set per-stream audio volume (music, ring, alarm, notification, system, voice call).
15
+ - Open standard Android settings screens (main settings, Wi-Fi, display, sound, WRITE_SETTINGS permission grant).
16
+
17
+ On **web/browser**, `getStatus()` and `getDeviceSettings()` return safe fallback values. All other methods throw a descriptive error.
18
+
19
+ ## Installation
20
+
21
+ This package is part of the elizaOS monorepo. In a standalone Capacitor project, install it as you would any Capacitor plugin:
22
+
23
+ ```bash
24
+ npm install @elizaos/capacitor-system
25
+ npx cap sync android
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ ```typescript
31
+ import { System } from "@elizaos/capacitor-system";
32
+
33
+ // Check which roles the app holds
34
+ const status = await System.getStatus();
35
+ console.log(status.packageName, status.roles);
36
+
37
+ // Request the default SMS role
38
+ const result = await System.requestRole({ role: "sms" });
39
+ if (result.held) {
40
+ console.log("App is now the default SMS handler");
41
+ }
42
+
43
+ // Read device settings
44
+ const settings = await System.getDeviceSettings();
45
+ console.log("Brightness:", settings.brightness);
46
+ console.log("Can write settings:", settings.canWriteSettings);
47
+
48
+ // Set screen brightness (requires WRITE_SETTINGS permission)
49
+ if (!settings.canWriteSettings) {
50
+ await System.openWriteSettings(); // redirect user to grant permission
51
+ } else {
52
+ await System.setScreenBrightness({ brightness: 0.5 });
53
+ }
54
+
55
+ // Set music volume
56
+ await System.setVolume({ stream: "music", volume: 10, showUi: true });
57
+ ```
58
+
59
+ ## Android roles
60
+
61
+ | Role name | Android constant | What it controls |
62
+ |-----------|-----------------|------------------|
63
+ | `home` | `ROLE_HOME` | Default launcher / home screen |
64
+ | `dialer` | `ROLE_DIALER` | Default phone/dialer app |
65
+ | `sms` | `ROLE_SMS` | Default SMS messaging app |
66
+ | `assistant` | `ROLE_ASSISTANT` | Default voice assistant |
67
+
68
+ Role queries and requests require **Android 10 (API 29+)**. On older devices, `getStatus()` returns an empty roles array; `requestRole()` rejects.
69
+
70
+ ## Permissions
71
+
72
+ The plugin declares these permissions in its `AndroidManifest.xml`. They are merged into the host app automatically via Capacitor:
73
+
74
+ | Permission | Required for |
75
+ |------------|-------------|
76
+ | `MODIFY_AUDIO_SETTINGS` | `setVolume` |
77
+ | `WRITE_SETTINGS` | `setScreenBrightness` |
78
+
79
+ `WRITE_SETTINGS` is a special system permission that cannot be granted via the standard permission dialog. Direct the user to grant it:
80
+
81
+ ```typescript
82
+ await System.openWriteSettings();
83
+ ```
84
+
85
+ ## API
86
+
87
+ Full TypeScript types are exported from the package root. See `src/definitions.ts` for the complete interface.
88
+
89
+ ```typescript
90
+ interface SystemPlugin {
91
+ getStatus(): Promise<SystemStatus>;
92
+ requestRole(options: { role: AndroidRoleName }): Promise<AndroidRoleRequestResult>;
93
+ openSettings(): Promise<void>;
94
+ openNetworkSettings(): Promise<void>;
95
+ openWriteSettings(): Promise<void>;
96
+ openDisplaySettings(): Promise<void>;
97
+ openSoundSettings(): Promise<void>;
98
+ getDeviceSettings(): Promise<DeviceSettingsStatus>;
99
+ setScreenBrightness(options: { brightness: number }): Promise<DeviceSettingsStatus>;
100
+ setVolume(options: { stream: SystemVolumeStream; volume: number; showUi?: boolean }): Promise<SystemVolumeStatus>;
101
+ }
102
+ ```
103
+
104
+ ## Building
105
+
106
+ ```bash
107
+ bun run --cwd plugins/plugin-native-system build
108
+ ```
109
+
110
+ The Android library is built by Gradle as part of the host Capacitor Android project (`npx cap build android`).
@@ -4,6 +4,11 @@ ext {
4
4
  }
5
5
 
6
6
  apply plugin: 'com.android.library'
7
+ // Apply the Kotlin Android plugin so the plugin's .kt class is bundled into the
8
+ // library AAR. Without it AGP's built-in kotlinc compiles the sources but does
9
+ // NOT bundle the .class files, so the Capacitor plugin class is absent from the
10
+ // app dex at runtime (PluginLoadException -> the whole plugin set fails to load).
11
+ apply plugin: 'org.jetbrains.kotlin.android'
7
12
  android {
8
13
  namespace = "ai.eliza.plugins.system"
9
14
  compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
@@ -15,11 +20,14 @@ android {
15
20
  sourceCompatibility JavaVersion.VERSION_17
16
21
  targetCompatibility JavaVersion.VERSION_17
17
22
  }
23
+ kotlinOptions {
24
+ jvmTarget = "17"
25
+ }
18
26
  }
19
27
 
20
28
  repositories {
21
29
  google()
22
- maven { url = uri(rootProject.ext.mavenCentralMirrorUrl) }
30
+ maven { url = uri(rootProject.ext.has('mavenCentralMirrorUrl') ? rootProject.ext.mavenCentralMirrorUrl : 'https://repo.maven.apache.org/maven2') }
23
31
  mavenCentral()
24
32
  }
25
33
 
@@ -1,2 +1,5 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
- <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
4
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
5
+ </manifest>
@@ -1,9 +1,11 @@
1
1
  package ai.eliza.plugins.system
2
2
 
3
3
  import android.app.role.RoleManager
4
+ import android.media.AudioManager
4
5
  import android.content.ComponentName
5
6
  import android.content.Context
6
7
  import android.content.Intent
8
+ import android.net.Uri
7
9
  import android.os.Build
8
10
  import android.provider.Settings
9
11
  import android.provider.Telephony
@@ -25,6 +27,14 @@ class SystemPlugin : Plugin() {
25
27
  "sms" to RoleManager.ROLE_SMS,
26
28
  "assistant" to RoleManager.ROLE_ASSISTANT
27
29
  )
30
+ private val volumeStreamMap = mapOf(
31
+ "music" to AudioManager.STREAM_MUSIC,
32
+ "ring" to AudioManager.STREAM_RING,
33
+ "alarm" to AudioManager.STREAM_ALARM,
34
+ "notification" to AudioManager.STREAM_NOTIFICATION,
35
+ "system" to AudioManager.STREAM_SYSTEM,
36
+ "voiceCall" to AudioManager.STREAM_VOICE_CALL
37
+ )
28
38
 
29
39
  @PluginMethod
30
40
  fun getStatus(call: PluginCall) {
@@ -143,4 +153,147 @@ class SystemPlugin : Plugin() {
143
153
  context.startActivity(intent)
144
154
  call.resolve()
145
155
  }
156
+
157
+ @PluginMethod
158
+ fun openNetworkSettings(call: PluginCall) {
159
+ val intent = Intent(Settings.ACTION_WIFI_SETTINGS)
160
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
161
+ context.startActivity(intent)
162
+ call.resolve()
163
+ }
164
+
165
+ @PluginMethod
166
+ fun openWriteSettings(call: PluginCall) {
167
+ val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
168
+ Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:${context.packageName}"))
169
+ } else {
170
+ Intent(Settings.ACTION_SETTINGS)
171
+ }
172
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
173
+ context.startActivity(intent)
174
+ call.resolve()
175
+ }
176
+
177
+ @PluginMethod
178
+ fun openDisplaySettings(call: PluginCall) {
179
+ val intent = Intent(Settings.ACTION_DISPLAY_SETTINGS)
180
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
181
+ context.startActivity(intent)
182
+ call.resolve()
183
+ }
184
+
185
+ @PluginMethod
186
+ fun openSoundSettings(call: PluginCall) {
187
+ val intent = Intent(Settings.ACTION_SOUND_SETTINGS)
188
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
189
+ context.startActivity(intent)
190
+ call.resolve()
191
+ }
192
+
193
+ @PluginMethod
194
+ fun getDeviceSettings(call: PluginCall) {
195
+ call.resolve(deviceSettingsResult())
196
+ }
197
+
198
+ @PluginMethod
199
+ fun setScreenBrightness(call: PluginCall) {
200
+ val brightness = call.getDouble("brightness")
201
+ if (brightness == null || brightness.isNaN()) {
202
+ call.reject("brightness must be a number between 0 and 1")
203
+ return
204
+ }
205
+ val clamped = brightness.coerceIn(0.0, 1.0)
206
+ if (!canWriteSettings()) {
207
+ call.reject("WRITE_SETTINGS permission is required to change system brightness")
208
+ return
209
+ }
210
+ try {
211
+ Settings.System.putInt(
212
+ context.contentResolver,
213
+ Settings.System.SCREEN_BRIGHTNESS_MODE,
214
+ Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
215
+ )
216
+ Settings.System.putInt(
217
+ context.contentResolver,
218
+ Settings.System.SCREEN_BRIGHTNESS,
219
+ (clamped * 255.0).toInt().coerceIn(0, 255)
220
+ )
221
+ call.resolve(deviceSettingsResult())
222
+ } catch (error: RuntimeException) {
223
+ call.reject("Failed to set screen brightness", error)
224
+ }
225
+ }
226
+
227
+ @PluginMethod
228
+ fun setVolume(call: PluginCall) {
229
+ val streamName = call.getString("stream")?.trim()
230
+ val stream = volumeStreamMap[streamName]
231
+ if (streamName.isNullOrEmpty() || stream == null) {
232
+ call.reject("stream must be one of ${volumeStreamMap.keys.joinToString(", ")}")
233
+ return
234
+ }
235
+ val volume = call.getInt("volume")
236
+ if (volume == null) {
237
+ call.reject("volume is required")
238
+ return
239
+ }
240
+ val showUi = call.getBoolean("showUi") ?: false
241
+ val audio = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
242
+ val max = audio.getStreamMaxVolume(stream)
243
+ val clamped = volume.coerceIn(0, max)
244
+ val flags = if (showUi) AudioManager.FLAG_SHOW_UI else 0
245
+ try {
246
+ audio.setStreamVolume(stream, clamped, flags)
247
+ call.resolve(volumeStatus(streamName, stream, audio))
248
+ } catch (error: RuntimeException) {
249
+ call.reject("Failed to set $streamName volume", error)
250
+ }
251
+ }
252
+
253
+ private fun canWriteSettings(): Boolean {
254
+ return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || Settings.System.canWrite(context)
255
+ }
256
+
257
+ private fun deviceSettingsResult(): JSObject {
258
+ val result = JSObject()
259
+ result.put("brightness", readBrightness())
260
+ result.put("brightnessMode", readBrightnessMode())
261
+ result.put("canWriteSettings", canWriteSettings())
262
+ val audio = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
263
+ val volumes = JSArray()
264
+ for ((name, stream) in volumeStreamMap) {
265
+ volumes.put(volumeStatus(name, stream, audio))
266
+ }
267
+ result.put("volumes", volumes)
268
+ return result
269
+ }
270
+
271
+ private fun readBrightness(): Double {
272
+ return try {
273
+ Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS)
274
+ .coerceIn(0, 255) / 255.0
275
+ } catch (_: Settings.SettingNotFoundException) {
276
+ 0.75
277
+ }
278
+ }
279
+
280
+ private fun readBrightnessMode(): String {
281
+ return try {
282
+ when (Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE)) {
283
+ Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL -> "manual"
284
+ Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC -> "automatic"
285
+ else -> "unknown"
286
+ }
287
+ } catch (_: Settings.SettingNotFoundException) {
288
+ "unknown"
289
+ }
290
+ }
291
+
292
+ private fun volumeStatus(name: String, stream: Int, audio: AudioManager): JSObject {
293
+ val result = JSObject()
294
+ result.put("stream", name)
295
+ result.put("current", audio.getStreamVolume(stream))
296
+ result.put("max", audio.getStreamMaxVolume(stream))
297
+ return result
298
+ }
146
299
  }
@@ -15,11 +15,36 @@ export interface AndroidRoleRequestResult {
15
15
  held: boolean;
16
16
  resultCode: number;
17
17
  }
18
+ export type SystemVolumeStream = "music" | "ring" | "alarm" | "notification" | "system" | "voiceCall";
19
+ export interface SystemVolumeStatus {
20
+ stream: SystemVolumeStream;
21
+ current: number;
22
+ max: number;
23
+ }
24
+ export interface DeviceSettingsStatus {
25
+ brightness: number;
26
+ brightnessMode: "manual" | "automatic" | "unknown";
27
+ canWriteSettings: boolean;
28
+ volumes: SystemVolumeStatus[];
29
+ }
18
30
  export interface SystemPlugin {
19
31
  getStatus(): Promise<SystemStatus>;
20
32
  requestRole(options: {
21
33
  role: AndroidRoleName;
22
34
  }): Promise<AndroidRoleRequestResult>;
23
35
  openSettings(): Promise<void>;
36
+ openNetworkSettings(): Promise<void>;
37
+ getDeviceSettings(): Promise<DeviceSettingsStatus>;
38
+ setScreenBrightness(options: {
39
+ brightness: number;
40
+ }): Promise<DeviceSettingsStatus>;
41
+ setVolume(options: {
42
+ stream: SystemVolumeStream;
43
+ volume: number;
44
+ showUi?: boolean;
45
+ }): Promise<SystemVolumeStatus>;
46
+ openWriteSettings(): Promise<void>;
47
+ openDisplaySettings(): Promise<void>;
48
+ openSoundSettings(): Promise<void>;
24
49
  }
25
50
  //# sourceMappingURL=definitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,WAAW,CAAC,OAAO,EAAE;QACnB,IAAI,EAAE,eAAe,CAAC;KACvB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,MAAM,GACN,OAAO,GACP,cAAc,GACd,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACnD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACnC,WAAW,CAAC,OAAO,EAAE;QACnB,IAAI,EAAE,eAAe,CAAC;KACvB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnD,mBAAmB,CAAC,OAAO,EAAE;QAC3B,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE;QACjB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC"}
package/dist/esm/web.d.ts CHANGED
@@ -1,10 +1,23 @@
1
1
  import { WebPlugin } from "@capacitor/core";
2
- import type { AndroidRoleName, AndroidRoleRequestResult, SystemPlugin, SystemStatus } from "./definitions";
2
+ import type { AndroidRoleName, AndroidRoleRequestResult, DeviceSettingsStatus, SystemPlugin, SystemStatus, SystemVolumeStatus, SystemVolumeStream } from "./definitions";
3
3
  export declare class SystemWeb extends WebPlugin implements SystemPlugin {
4
4
  getStatus(): Promise<SystemStatus>;
5
5
  openSettings(): Promise<void>;
6
+ openNetworkSettings(): Promise<void>;
7
+ openWriteSettings(): Promise<void>;
8
+ openDisplaySettings(): Promise<void>;
9
+ openSoundSettings(): Promise<void>;
6
10
  requestRole(options: {
7
11
  role: AndroidRoleName;
8
12
  }): Promise<AndroidRoleRequestResult>;
13
+ getDeviceSettings(): Promise<DeviceSettingsStatus>;
14
+ setScreenBrightness(_options: {
15
+ brightness: number;
16
+ }): Promise<DeviceSettingsStatus>;
17
+ setVolume(options: {
18
+ stream: SystemVolumeStream;
19
+ volume: number;
20
+ showUi?: boolean;
21
+ }): Promise<SystemVolumeStatus>;
9
22
  }
10
23
  //# sourceMappingURL=web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACb,MAAM,eAAe,CAAC;AAEvB,qBAAa,SAAU,SAAQ,SAAU,YAAW,YAAY;IACxD,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAOlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,WAAW,CAAC,OAAO,EAAE;QACzB,IAAI,EAAE,eAAe,CAAC;KACvB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAKtC"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAqCvB,qBAAa,SAAU,SAAQ,SAAU,YAAW,YAAY;IACxD,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAOlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,WAAW,CAAC,OAAO,EAAE;QACzB,IAAI,EAAE,eAAe,CAAC;KACvB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAK/B,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAclD,mBAAmB,CAAC,QAAQ,EAAE;QAClC,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAY3B,SAAS,CAAC,OAAO,EAAE;QACvB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAYhC"}
package/dist/esm/web.js CHANGED
@@ -1,4 +1,31 @@
1
1
  import { WebPlugin } from "@capacitor/core";
2
+ const ANDROID_ROLES = new Set([
3
+ "home",
4
+ "dialer",
5
+ "sms",
6
+ "assistant",
7
+ ]);
8
+ const VOLUME_STREAMS = new Set([
9
+ "music",
10
+ "ring",
11
+ "alarm",
12
+ "notification",
13
+ "system",
14
+ "voiceCall",
15
+ ]);
16
+ function validateRole(role) {
17
+ if (typeof role !== "string" || !ANDROID_ROLES.has(role)) {
18
+ throw new Error("role must be one of home, dialer, sms, assistant");
19
+ }
20
+ return role;
21
+ }
22
+ function validateVolumeStream(stream) {
23
+ if (typeof stream !== "string" ||
24
+ !VOLUME_STREAMS.has(stream)) {
25
+ throw new Error("stream must be one of music, ring, alarm, notification, system, voiceCall");
26
+ }
27
+ return stream;
28
+ }
2
29
  export class SystemWeb extends WebPlugin {
3
30
  async getStatus() {
4
31
  return {
@@ -9,8 +36,53 @@ export class SystemWeb extends WebPlugin {
9
36
  async openSettings() {
10
37
  throw new Error("System settings are only available on Android.");
11
38
  }
39
+ async openNetworkSettings() {
40
+ throw new Error("Network settings are only available on Android.");
41
+ }
42
+ async openWriteSettings() {
43
+ throw new Error("Write-settings permission is only available on Android.");
44
+ }
45
+ async openDisplaySettings() {
46
+ throw new Error("Display settings are only available on Android.");
47
+ }
48
+ async openSoundSettings() {
49
+ throw new Error("Sound settings are only available on Android.");
50
+ }
12
51
  async requestRole(options) {
13
- throw new Error(`Android role ${options.role} is only available on Android.`);
52
+ const role = validateRole(options?.role);
53
+ throw new Error(`Android role ${role} is only available on Android.`);
54
+ }
55
+ async getDeviceSettings() {
56
+ return {
57
+ brightness: 0.75,
58
+ brightnessMode: "unknown",
59
+ canWriteSettings: false,
60
+ volumes: [
61
+ { stream: "music", current: 7, max: 15 },
62
+ { stream: "ring", current: 4, max: 7 },
63
+ { stream: "alarm", current: 4, max: 7 },
64
+ { stream: "notification", current: 4, max: 7 },
65
+ ],
66
+ };
67
+ }
68
+ async setScreenBrightness(_options) {
69
+ if (typeof _options?.brightness !== "number" ||
70
+ !Number.isFinite(_options.brightness) ||
71
+ _options.brightness < 0 ||
72
+ _options.brightness > 1) {
73
+ throw new Error("brightness must be a number between 0 and 1");
74
+ }
75
+ throw new Error("Brightness control is only available on Android.");
76
+ }
77
+ async setVolume(options) {
78
+ const stream = validateVolumeStream(options?.stream);
79
+ if (typeof options?.volume !== "number" ||
80
+ !Number.isFinite(options.volume) ||
81
+ !Number.isInteger(options.volume) ||
82
+ options.volume < 0) {
83
+ throw new Error("volume must be a non-negative finite integer");
84
+ }
85
+ throw new Error(`${stream} volume control is only available on Android.`);
14
86
  }
15
87
  }
16
88
  //# sourceMappingURL=web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C,MAAM,OAAO,SAAU,SAAQ,SAAS;IACtC,KAAK,CAAC,SAAS;QACb,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAEjB;QACC,MAAM,IAAI,KAAK,CACb,gBAAgB,OAAO,CAAC,IAAI,gCAAgC,CAC7D,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=web.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.test.d.ts","sourceRoot":"","sources":["../../src/web.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { SystemWeb } from "./web";
3
+ describe("SystemWeb fallback", () => {
4
+ it("returns bounded fallback status and device settings on non-Android runtimes", async () => {
5
+ const system = new SystemWeb();
6
+ await expect(system.getStatus()).resolves.toEqual({
7
+ packageName: "web",
8
+ roles: [],
9
+ });
10
+ await expect(system.getDeviceSettings()).resolves.toMatchObject({
11
+ brightness: 0.75,
12
+ brightnessMode: "unknown",
13
+ canWriteSettings: false,
14
+ volumes: expect.arrayContaining([
15
+ { stream: "music", current: 7, max: 15 },
16
+ { stream: "ring", current: 4, max: 7 },
17
+ ]),
18
+ });
19
+ });
20
+ it("rejects malformed role requests without echoing hostile values", async () => {
21
+ const system = new SystemWeb();
22
+ await expect(system.requestRole({ role: "../sms" })).rejects.toThrow("role must be one of home, dialer, sms, assistant");
23
+ await expect(system.requestRole({ role: "sms" })).rejects.toThrow("Android role sms is only available on Android.");
24
+ });
25
+ it("rejects malformed brightness and volume options before fallback errors", async () => {
26
+ const system = new SystemWeb();
27
+ await expect(system.setScreenBrightness({ brightness: Number.NaN })).rejects.toThrow("brightness must be a number between 0 and 1");
28
+ await expect(system.setScreenBrightness({ brightness: -0.1 })).rejects.toThrow("brightness must be a number between 0 and 1");
29
+ await expect(system.setScreenBrightness({ brightness: 1.1 })).rejects.toThrow("brightness must be a number between 0 and 1");
30
+ await expect(system.setVolume({ stream: "../../music", volume: 1 })).rejects.toThrow("stream must be one of music, ring, alarm, notification, system, voiceCall");
31
+ await expect(system.setVolume({ stream: "music", volume: Number.POSITIVE_INFINITY })).rejects.toThrow("volume must be a non-negative finite integer");
32
+ await expect(system.setVolume({ stream: "music", volume: 1.5 })).rejects.toThrow("volume must be a non-negative finite integer");
33
+ await expect(system.setVolume({ stream: "music", volume: -1 })).rejects.toThrow("volume must be a non-negative finite integer");
34
+ await expect(system.setScreenBrightness({ brightness: 0.5 })).rejects.toThrow("Brightness control is only available on Android.");
35
+ await expect(system.setVolume({ stream: "music", volume: 1 })).rejects.toThrow("music volume control is only available on Android.");
36
+ });
37
+ });
38
+ //# sourceMappingURL=web.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.test.js","sourceRoot":"","sources":["../../src/web.test.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,33 @@ const System = core.registerPlugin("ElizaSystem", {
7
7
  web: loadWeb,
8
8
  });
9
9
 
10
+ const ANDROID_ROLES = new Set([
11
+ "home",
12
+ "dialer",
13
+ "sms",
14
+ "assistant",
15
+ ]);
16
+ const VOLUME_STREAMS = new Set([
17
+ "music",
18
+ "ring",
19
+ "alarm",
20
+ "notification",
21
+ "system",
22
+ "voiceCall",
23
+ ]);
24
+ function validateRole(role) {
25
+ if (typeof role !== "string" || !ANDROID_ROLES.has(role)) {
26
+ throw new Error("role must be one of home, dialer, sms, assistant");
27
+ }
28
+ return role;
29
+ }
30
+ function validateVolumeStream(stream) {
31
+ if (typeof stream !== "string" ||
32
+ !VOLUME_STREAMS.has(stream)) {
33
+ throw new Error("stream must be one of music, ring, alarm, notification, system, voiceCall");
34
+ }
35
+ return stream;
36
+ }
10
37
  class SystemWeb extends core.WebPlugin {
11
38
  async getStatus() {
12
39
  return {
@@ -17,8 +44,53 @@ class SystemWeb extends core.WebPlugin {
17
44
  async openSettings() {
18
45
  throw new Error("System settings are only available on Android.");
19
46
  }
47
+ async openNetworkSettings() {
48
+ throw new Error("Network settings are only available on Android.");
49
+ }
50
+ async openWriteSettings() {
51
+ throw new Error("Write-settings permission is only available on Android.");
52
+ }
53
+ async openDisplaySettings() {
54
+ throw new Error("Display settings are only available on Android.");
55
+ }
56
+ async openSoundSettings() {
57
+ throw new Error("Sound settings are only available on Android.");
58
+ }
20
59
  async requestRole(options) {
21
- throw new Error(`Android role ${options.role} is only available on Android.`);
60
+ const role = validateRole(options?.role);
61
+ throw new Error(`Android role ${role} is only available on Android.`);
62
+ }
63
+ async getDeviceSettings() {
64
+ return {
65
+ brightness: 0.75,
66
+ brightnessMode: "unknown",
67
+ canWriteSettings: false,
68
+ volumes: [
69
+ { stream: "music", current: 7, max: 15 },
70
+ { stream: "ring", current: 4, max: 7 },
71
+ { stream: "alarm", current: 4, max: 7 },
72
+ { stream: "notification", current: 4, max: 7 },
73
+ ],
74
+ };
75
+ }
76
+ async setScreenBrightness(_options) {
77
+ if (typeof _options?.brightness !== "number" ||
78
+ !Number.isFinite(_options.brightness) ||
79
+ _options.brightness < 0 ||
80
+ _options.brightness > 1) {
81
+ throw new Error("brightness must be a number between 0 and 1");
82
+ }
83
+ throw new Error("Brightness control is only available on Android.");
84
+ }
85
+ async setVolume(options) {
86
+ const stream = validateVolumeStream(options?.stream);
87
+ if (typeof options?.volume !== "number" ||
88
+ !Number.isFinite(options.volume) ||
89
+ !Number.isInteger(options.volume) ||
90
+ options.volume < 0) {
91
+ throw new Error("volume must be a non-negative finite integer");
92
+ }
93
+ throw new Error(`${stream} volume control is only available on Android.`);
22
94
  }
23
95
  }
24
96
 
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from \"@capacitor/core\";\nexport * from \"./definitions\";\nconst loadWeb = () => import(\"./web\").then((m) => new m.SystemWeb());\nexport const System = registerPlugin(\"ElizaSystem\", {\n web: loadWeb,\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nexport class SystemWeb extends WebPlugin {\n async getStatus() {\n return {\n packageName: \"web\",\n roles: [],\n };\n }\n async openSettings() {\n throw new Error(\"System settings are only available on Android.\");\n }\n async requestRole(options) {\n throw new Error(`Android role ${options.role} is only available on Android.`);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;;AAEA,MAAM,OAAO,GAAG,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;AACxD,MAAC,MAAM,GAAGA,mBAAc,CAAC,aAAa,EAAE;AACpD,IAAI,GAAG,EAAE,OAAO;AAChB,CAAC;;ACJM,MAAM,SAAS,SAASC,cAAS,CAAC;AACzC,IAAI,MAAM,SAAS,GAAG;AACtB,QAAQ,OAAO;AACf,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,KAAK,EAAE,EAAE;AACrB,SAAS;AACT,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;AACzE,IAAI;AACJ,IAAI,MAAM,WAAW,CAAC,OAAO,EAAE;AAC/B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AACrF,IAAI;AACJ;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from \"@capacitor/core\";\nexport * from \"./definitions\";\nconst loadWeb = () => import(\"./web\").then((m) => new m.SystemWeb());\nexport const System = registerPlugin(\"ElizaSystem\", {\n web: loadWeb,\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nconst ANDROID_ROLES = new Set([\n \"home\",\n \"dialer\",\n \"sms\",\n \"assistant\",\n]);\nconst VOLUME_STREAMS = new Set([\n \"music\",\n \"ring\",\n \"alarm\",\n \"notification\",\n \"system\",\n \"voiceCall\",\n]);\nfunction validateRole(role) {\n if (typeof role !== \"string\" || !ANDROID_ROLES.has(role)) {\n throw new Error(\"role must be one of home, dialer, sms, assistant\");\n }\n return role;\n}\nfunction validateVolumeStream(stream) {\n if (typeof stream !== \"string\" ||\n !VOLUME_STREAMS.has(stream)) {\n throw new Error(\"stream must be one of music, ring, alarm, notification, system, voiceCall\");\n }\n return stream;\n}\nexport class SystemWeb extends WebPlugin {\n async getStatus() {\n return {\n packageName: \"web\",\n roles: [],\n };\n }\n async openSettings() {\n throw new Error(\"System settings are only available on Android.\");\n }\n async openNetworkSettings() {\n throw new Error(\"Network settings are only available on Android.\");\n }\n async openWriteSettings() {\n throw new Error(\"Write-settings permission is only available on Android.\");\n }\n async openDisplaySettings() {\n throw new Error(\"Display settings are only available on Android.\");\n }\n async openSoundSettings() {\n throw new Error(\"Sound settings are only available on Android.\");\n }\n async requestRole(options) {\n const role = validateRole(options?.role);\n throw new Error(`Android role ${role} is only available on Android.`);\n }\n async getDeviceSettings() {\n return {\n brightness: 0.75,\n brightnessMode: \"unknown\",\n canWriteSettings: false,\n volumes: [\n { stream: \"music\", current: 7, max: 15 },\n { stream: \"ring\", current: 4, max: 7 },\n { stream: \"alarm\", current: 4, max: 7 },\n { stream: \"notification\", current: 4, max: 7 },\n ],\n };\n }\n async setScreenBrightness(_options) {\n if (typeof _options?.brightness !== \"number\" ||\n !Number.isFinite(_options.brightness) ||\n _options.brightness < 0 ||\n _options.brightness > 1) {\n throw new Error(\"brightness must be a number between 0 and 1\");\n }\n throw new Error(\"Brightness control is only available on Android.\");\n }\n async setVolume(options) {\n const stream = validateVolumeStream(options?.stream);\n if (typeof options?.volume !== \"number\" ||\n !Number.isFinite(options.volume) ||\n !Number.isInteger(options.volume) ||\n options.volume < 0) {\n throw new Error(\"volume must be a non-negative finite integer\");\n }\n throw new Error(`${stream} volume control is only available on Android.`);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -6,6 +6,33 @@ var capacitorSystem = (function (exports, core) {
6
6
  web: loadWeb,
7
7
  });
8
8
 
9
+ const ANDROID_ROLES = new Set([
10
+ "home",
11
+ "dialer",
12
+ "sms",
13
+ "assistant",
14
+ ]);
15
+ const VOLUME_STREAMS = new Set([
16
+ "music",
17
+ "ring",
18
+ "alarm",
19
+ "notification",
20
+ "system",
21
+ "voiceCall",
22
+ ]);
23
+ function validateRole(role) {
24
+ if (typeof role !== "string" || !ANDROID_ROLES.has(role)) {
25
+ throw new Error("role must be one of home, dialer, sms, assistant");
26
+ }
27
+ return role;
28
+ }
29
+ function validateVolumeStream(stream) {
30
+ if (typeof stream !== "string" ||
31
+ !VOLUME_STREAMS.has(stream)) {
32
+ throw new Error("stream must be one of music, ring, alarm, notification, system, voiceCall");
33
+ }
34
+ return stream;
35
+ }
9
36
  class SystemWeb extends core.WebPlugin {
10
37
  async getStatus() {
11
38
  return {
@@ -16,8 +43,53 @@ var capacitorSystem = (function (exports, core) {
16
43
  async openSettings() {
17
44
  throw new Error("System settings are only available on Android.");
18
45
  }
46
+ async openNetworkSettings() {
47
+ throw new Error("Network settings are only available on Android.");
48
+ }
49
+ async openWriteSettings() {
50
+ throw new Error("Write-settings permission is only available on Android.");
51
+ }
52
+ async openDisplaySettings() {
53
+ throw new Error("Display settings are only available on Android.");
54
+ }
55
+ async openSoundSettings() {
56
+ throw new Error("Sound settings are only available on Android.");
57
+ }
19
58
  async requestRole(options) {
20
- throw new Error(`Android role ${options.role} is only available on Android.`);
59
+ const role = validateRole(options?.role);
60
+ throw new Error(`Android role ${role} is only available on Android.`);
61
+ }
62
+ async getDeviceSettings() {
63
+ return {
64
+ brightness: 0.75,
65
+ brightnessMode: "unknown",
66
+ canWriteSettings: false,
67
+ volumes: [
68
+ { stream: "music", current: 7, max: 15 },
69
+ { stream: "ring", current: 4, max: 7 },
70
+ { stream: "alarm", current: 4, max: 7 },
71
+ { stream: "notification", current: 4, max: 7 },
72
+ ],
73
+ };
74
+ }
75
+ async setScreenBrightness(_options) {
76
+ if (typeof _options?.brightness !== "number" ||
77
+ !Number.isFinite(_options.brightness) ||
78
+ _options.brightness < 0 ||
79
+ _options.brightness > 1) {
80
+ throw new Error("brightness must be a number between 0 and 1");
81
+ }
82
+ throw new Error("Brightness control is only available on Android.");
83
+ }
84
+ async setVolume(options) {
85
+ const stream = validateVolumeStream(options?.stream);
86
+ if (typeof options?.volume !== "number" ||
87
+ !Number.isFinite(options.volume) ||
88
+ !Number.isInteger(options.volume) ||
89
+ options.volume < 0) {
90
+ throw new Error("volume must be a non-negative finite integer");
91
+ }
92
+ throw new Error(`${stream} volume control is only available on Android.`);
21
93
  }
22
94
  }
23
95
 
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from \"@capacitor/core\";\nexport * from \"./definitions\";\nconst loadWeb = () => import(\"./web\").then((m) => new m.SystemWeb());\nexport const System = registerPlugin(\"ElizaSystem\", {\n web: loadWeb,\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nexport class SystemWeb extends WebPlugin {\n async getStatus() {\n return {\n packageName: \"web\",\n roles: [],\n };\n }\n async openSettings() {\n throw new Error(\"System settings are only available on Android.\");\n }\n async requestRole(options) {\n throw new Error(`Android role ${options.role} is only available on Android.`);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;IAEA,MAAM,OAAO,GAAG,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;AACxD,UAAC,MAAM,GAAGA,mBAAc,CAAC,aAAa,EAAE;IACpD,IAAI,GAAG,EAAE,OAAO;IAChB,CAAC;;ICJM,MAAM,SAAS,SAASC,cAAS,CAAC;IACzC,IAAI,MAAM,SAAS,GAAG;IACtB,QAAQ,OAAO;IACf,YAAY,WAAW,EAAE,KAAK;IAC9B,YAAY,KAAK,EAAE,EAAE;IACrB,SAAS;IACT,IAAI;IACJ,IAAI,MAAM,YAAY,GAAG;IACzB,QAAQ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;IACzE,IAAI;IACJ,IAAI,MAAM,WAAW,CAAC,OAAO,EAAE;IAC/B,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACrF,IAAI;IACJ;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from \"@capacitor/core\";\nexport * from \"./definitions\";\nconst loadWeb = () => import(\"./web\").then((m) => new m.SystemWeb());\nexport const System = registerPlugin(\"ElizaSystem\", {\n web: loadWeb,\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nconst ANDROID_ROLES = new Set([\n \"home\",\n \"dialer\",\n \"sms\",\n \"assistant\",\n]);\nconst VOLUME_STREAMS = new Set([\n \"music\",\n \"ring\",\n \"alarm\",\n \"notification\",\n \"system\",\n \"voiceCall\",\n]);\nfunction validateRole(role) {\n if (typeof role !== \"string\" || !ANDROID_ROLES.has(role)) {\n throw new Error(\"role must be one of home, dialer, sms, assistant\");\n }\n return role;\n}\nfunction validateVolumeStream(stream) {\n if (typeof stream !== \"string\" ||\n !VOLUME_STREAMS.has(stream)) {\n throw new Error(\"stream must be one of music, ring, alarm, notification, system, voiceCall\");\n }\n return stream;\n}\nexport class SystemWeb extends WebPlugin {\n async getStatus() {\n return {\n packageName: \"web\",\n roles: [],\n };\n }\n async openSettings() {\n throw new Error(\"System settings are only available on Android.\");\n }\n async openNetworkSettings() {\n throw new Error(\"Network settings are only available on Android.\");\n }\n async openWriteSettings() {\n throw new Error(\"Write-settings permission is only available on Android.\");\n }\n async openDisplaySettings() {\n throw new Error(\"Display settings are only available on Android.\");\n }\n async openSoundSettings() {\n throw new Error(\"Sound settings are only available on Android.\");\n }\n async requestRole(options) {\n const role = validateRole(options?.role);\n throw new Error(`Android role ${role} is only available on Android.`);\n }\n async getDeviceSettings() {\n return {\n brightness: 0.75,\n brightnessMode: \"unknown\",\n canWriteSettings: false,\n volumes: [\n { stream: \"music\", current: 7, max: 15 },\n { stream: \"ring\", current: 4, max: 7 },\n { stream: \"alarm\", current: 4, max: 7 },\n { stream: \"notification\", current: 4, max: 7 },\n ],\n };\n }\n async setScreenBrightness(_options) {\n if (typeof _options?.brightness !== \"number\" ||\n !Number.isFinite(_options.brightness) ||\n _options.brightness < 0 ||\n _options.brightness > 1) {\n throw new Error(\"brightness must be a number between 0 and 1\");\n }\n throw new Error(\"Brightness control is only available on Android.\");\n }\n async setVolume(options) {\n const stream = validateVolumeStream(options?.stream);\n if (typeof options?.volume !== \"number\" ||\n !Number.isFinite(options.volume) ||\n !Number.isInteger(options.volume) ||\n options.volume < 0) {\n throw new Error(\"volume must be a non-negative finite integer\");\n }\n throw new Error(`${stream} volume control is only available on Android.`);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/capacitor-system",
3
- "version": "1.0.0",
3
+ "version": "2.0.11-beta.7",
4
4
  "description": "Android system-role status bridge for ElizaOS.",
5
5
  "main": "./dist/plugin.cjs.js",
6
6
  "module": "./dist/esm/index.js",
@@ -8,6 +8,8 @@
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./dist/esm/index.d.ts",
11
+ "bun": "./src/index.ts",
12
+ "development": "./src/index.ts",
11
13
  "import": "./dist/esm/index.js",
12
14
  "require": "./dist/plugin.cjs.js"
13
15
  },
@@ -16,12 +18,15 @@
16
18
  "files": [
17
19
  "android/src/main/",
18
20
  "android/build.gradle",
19
- "dist/"
21
+ "dist/",
22
+ "dist"
20
23
  ],
21
24
  "scripts": {
22
- "build": "npm run clean && tsc && rollup -c rollup.config.mjs",
23
- "clean": "rimraf ./dist",
24
- "prepublishOnly": "npm run build"
25
+ "build": "node ../../packages/scripts/with-package-build-lock.mjs plugins/plugin-native-system -- bun run build:unlocked",
26
+ "clean": "node ../../packages/scripts/rm-path-recursive.mjs dist",
27
+ "test": "vitest run",
28
+ "prepublishOnly": "bun run build",
29
+ "build:unlocked": "bun run clean && tsc && bunx rollup -c rollup.config.mjs"
25
30
  },
26
31
  "license": "MIT",
27
32
  "capacitor": {
@@ -30,11 +35,10 @@
30
35
  }
31
36
  },
32
37
  "devDependencies": {
33
- "@capacitor/cli": "^8.0.0",
34
38
  "@capacitor/core": "^8.3.1",
35
- "rimraf": "^6.0.0",
36
39
  "rollup": "^4.60.2",
37
- "typescript": "^6.0.0"
40
+ "typescript": "^6.0.3",
41
+ "vitest": "^4.0.0"
38
42
  },
39
43
  "peerDependencies": {
40
44
  "@capacitor/core": "^8.3.1"
@@ -52,5 +56,6 @@
52
56
  },
53
57
  "publishConfig": {
54
58
  "access": "public"
55
- }
59
+ },
60
+ "gitHead": "cdbc876f793d96073d7eb0d09715a031ce0cd32e"
56
61
  }