101 lines
2.5 KiB
Markdown
101 lines
2.5 KiB
Markdown
---
|
|
sidebar_position: 10
|
|
---
|
|
|
|
# Storage API
|
|
|
|
Plugins can store local client data and per-server data. Desktop builds use Electron persistence when available; browser fallback uses renderer storage.
|
|
|
|
## Required Capabilities
|
|
|
|
| Method | Capability |
|
|
| --- | --- |
|
|
| `clientData.read(key)` | `storage.local` |
|
|
| `clientData.write(key, value)` | `storage.local` |
|
|
| `clientData.remove(key)` | `storage.local` |
|
|
| `serverData.read(key)` | `storage.serverData.read` |
|
|
| `serverData.write(key, value)` | `storage.serverData.write` |
|
|
| `serverData.remove(key)` | `storage.serverData.write` |
|
|
| `storage.get(key)` | `storage.local` |
|
|
| `storage.set(key, value)` | `storage.local` |
|
|
| `storage.remove(key)` | `storage.local` |
|
|
|
|
## Client Data
|
|
|
|
Client data belongs to this local user and client.
|
|
|
|
```js
|
|
export async function activate(context) {
|
|
await context.api.clientData.write('soundboard:volume', {
|
|
masterVolume: 0.7,
|
|
updatedAt: 1777473600000
|
|
});
|
|
|
|
const value = await context.api.clientData.read('soundboard:volume');
|
|
|
|
context.api.logger.info('Loaded client data', value);
|
|
}
|
|
```
|
|
|
|
## Server Data
|
|
|
|
Server data is local per-user/per-server state. It is not arbitrary signal-server persistence.
|
|
|
|
```js
|
|
export async function activate(context) {
|
|
await context.api.serverData.write('soundboard:favorites', [
|
|
{ id: 'chime', label: 'Chime', url: 'https://cdn.example.com/chime.wav' },
|
|
{ id: 'ready', label: 'Ready Check', url: 'https://cdn.example.com/ready.wav' }
|
|
]);
|
|
|
|
const favorites = await context.api.serverData.read('soundboard:favorites');
|
|
|
|
context.api.logger.info('Loaded server favorites', favorites);
|
|
}
|
|
```
|
|
|
|
## Remove Data
|
|
|
|
```js
|
|
export async function activate(context) {
|
|
await context.api.clientData.remove('soundboard:volume');
|
|
await context.api.serverData.remove('soundboard:favorites');
|
|
}
|
|
```
|
|
|
|
## Legacy Synchronous Storage
|
|
|
|
The `storage.*` methods are legacy local storage helpers. Prefer `clientData.*` for new plugins when async reads are acceptable.
|
|
|
|
```js
|
|
export function activate(context) {
|
|
context.api.storage.set('quick-toggle', { enabled: true });
|
|
|
|
const saved = context.api.storage.get('quick-toggle');
|
|
|
|
context.api.logger.info('Legacy storage value', saved);
|
|
|
|
context.api.storage.remove('quick-toggle');
|
|
}
|
|
```
|
|
|
|
## Manifest Data Declarations
|
|
|
|
Declare important data keys in the manifest.
|
|
|
|
```json
|
|
{
|
|
"data": [
|
|
{
|
|
"key": "soundboard:volume",
|
|
"scope": "client",
|
|
"storage": "local"
|
|
},
|
|
{
|
|
"key": "soundboard:favorites",
|
|
"scope": "server",
|
|
"storage": "serverData"
|
|
}
|
|
]
|
|
}
|
|
``` |