feat: plugins v1.5

This commit is contained in:
2026-04-29 01:14:30 +02:00
parent 6920f93b41
commit eabbc08896
59 changed files with 2197 additions and 352 deletions

View File

@@ -33,6 +33,7 @@ import type {
} from '../../domain/models/plugin-api.models';
import { PluginCapabilityService } from './plugin-capability.service';
import { PluginLoggerService } from './plugin-logger.service';
import { PluginMessageBusService } from './plugin-message-bus.service';
import { PluginStorageService } from './plugin-storage.service';
import { PluginUiRegistryService } from './plugin-ui-registry.service';
@@ -40,6 +41,7 @@ import { PluginUiRegistryService } from './plugin-ui-registry.service';
export class PluginClientApiService {
private readonly capabilities = inject(PluginCapabilityService);
private readonly logger = inject(PluginLoggerService);
private readonly messageBus = inject(PluginMessageBusService);
private readonly realtime = inject(RealtimeSessionFacade);
private readonly store = inject(Store);
private readonly storage = inject(PluginStorageService);
@@ -118,6 +120,20 @@ export class PluginClientApiService {
info: (message, data) => this.logger.info(pluginId, message, data),
warn: (message, data) => this.logger.warn(pluginId, message, data)
},
clientData: {
read: async (key) => {
requireCapability('storage.local');
return await this.storage.readClientData(pluginId, key);
},
remove: async (key) => {
requireCapability('storage.local');
await this.storage.removeClientData(pluginId, key);
},
write: async (key, value) => {
requireCapability('storage.local');
await this.storage.writeClientData(pluginId, key, value);
}
},
media: {
addCustomAudioStream: async (request) => {
requireCapability('media.addAudioStream');
@@ -170,6 +186,31 @@ export class PluginClientApiService {
this.store.dispatch(MessagesActions.syncMessages({ messages }));
}
},
messageBus: {
publish: (request) => {
requireCapability('events.p2p.publish');
if (request.includeLatestMessages) {
requireCapability('messages.read');
}
return this.messageBus.publish(pluginId, request);
},
sendLatestMessages: (request = {}) => {
requireCapability('events.p2p.publish');
requireCapability('messages.read');
return this.messageBus.sendLatestMessages(pluginId, request);
},
subscribe: (subscription) => {
requireCapability('events.p2p.subscribe');
if (subscription.replayLatest) {
requireCapability('messages.read');
}
return this.messageBus.subscribe(pluginId, subscription);
}
},
p2p: {
broadcastData: (eventName, payload) => {
requireCapability('p2p.data');