@elizaos/capacitor-system 2.0.0-beta.1 → 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 +21 -0
- package/README.md +110 -0
- package/android/build.gradle +8 -0
- package/android/src/main/AndroidManifest.xml +4 -1
- package/android/src/main/java/ai/eliza/plugins/system/SystemPlugin.kt +153 -0
- package/dist/esm/definitions.d.ts +25 -0
- package/dist/esm/definitions.d.ts.map +1 -1
- package/dist/esm/web.d.ts +14 -1
- package/dist/esm/web.d.ts.map +1 -1
- package/dist/esm/web.js +73 -1
- package/dist/esm/web.js.map +1 -1
- package/dist/esm/web.test.d.ts +2 -0
- package/dist/esm/web.test.d.ts.map +1 -0
- package/dist/esm/web.test.js +38 -0
- package/dist/esm/web.test.js.map +1 -0
- package/dist/plugin.cjs.js +73 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +73 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +12 -8
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`).
|
package/android/build.gradle
CHANGED
|
@@ -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,6 +20,9 @@ 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 {
|
|
@@ -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;
|
|
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
|
package/dist/esm/web.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
|
package/dist/plugin.js.map
CHANGED
|
@@ -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.
|
|
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": "2.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
|
},
|
|
@@ -20,9 +22,11 @@
|
|
|
20
22
|
"dist"
|
|
21
23
|
],
|
|
22
24
|
"scripts": {
|
|
23
|
-
"build": "
|
|
24
|
-
"clean": "node
|
|
25
|
-
"
|
|
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"
|
|
26
30
|
},
|
|
27
31
|
"license": "MIT",
|
|
28
32
|
"capacitor": {
|
|
@@ -31,11 +35,10 @@
|
|
|
31
35
|
}
|
|
32
36
|
},
|
|
33
37
|
"devDependencies": {
|
|
34
|
-
"@capacitor/cli": "^8.0.0",
|
|
35
38
|
"@capacitor/core": "^8.3.1",
|
|
36
|
-
"rimraf": "^6.0.0",
|
|
37
39
|
"rollup": "^4.60.2",
|
|
38
|
-
"typescript": "^6.0.3"
|
|
40
|
+
"typescript": "^6.0.3",
|
|
41
|
+
"vitest": "^4.0.0"
|
|
39
42
|
},
|
|
40
43
|
"peerDependencies": {
|
|
41
44
|
"@capacitor/core": "^8.3.1"
|
|
@@ -53,5 +56,6 @@
|
|
|
53
56
|
},
|
|
54
57
|
"publishConfig": {
|
|
55
58
|
"access": "public"
|
|
56
|
-
}
|
|
59
|
+
},
|
|
60
|
+
"gitHead": "cdbc876f793d96073d7eb0d09715a031ce0cd32e"
|
|
57
61
|
}
|