feat: plugins v1.5
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user