mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 05:25:40 +09:00
182 lines
7.4 KiB
TypeScript
182 lines
7.4 KiB
TypeScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import type {
|
|
VoiceEngineV2CameraEncodingOptions,
|
|
VoiceEngineV2CameraOptions,
|
|
VoiceEngineV2ConnectOptions,
|
|
VoiceEngineV2DataOptions,
|
|
VoiceEngineV2DiagnosticEntry,
|
|
VoiceEngineV2DisconnectReason,
|
|
VoiceEngineV2GatewayVoiceStateWrite,
|
|
VoiceEngineV2LifecycleReason,
|
|
VoiceEngineV2MicrophoneOptions,
|
|
VoiceEngineV2NativeAudioTapOptions,
|
|
VoiceEngineV2NativeCaptureOptions,
|
|
VoiceEngineV2NativeFrameSinkOptions,
|
|
VoiceEngineV2OperationId,
|
|
VoiceEngineV2OutputDeviceOptions,
|
|
VoiceEngineV2ParticipantVolumeOptions,
|
|
VoiceEngineV2PermissionName,
|
|
VoiceEngineV2RemoteTrackSubscriptionOptions,
|
|
VoiceEngineV2ResourceKey,
|
|
VoiceEngineV2ScreenAudioOptions,
|
|
VoiceEngineV2ScreenEncodingOptions,
|
|
VoiceEngineV2ScreenOptions,
|
|
VoiceEngineV2TimerOptions,
|
|
} from './types';
|
|
|
|
export type VoiceEngineV2Command =
|
|
| {type: 'implementation.prewarm'; operationId: VoiceEngineV2OperationId}
|
|
| {
|
|
type: 'gateway.voiceState.write';
|
|
operationId: VoiceEngineV2OperationId;
|
|
options: VoiceEngineV2GatewayVoiceStateWrite;
|
|
}
|
|
| {type: 'gateway.voiceState.clear'; operationId: VoiceEngineV2OperationId; guildId: string | null}
|
|
| {type: 'connection.connect'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2ConnectOptions}
|
|
| {
|
|
type: 'connection.disconnect';
|
|
operationId: VoiceEngineV2OperationId;
|
|
reason: VoiceEngineV2DisconnectReason;
|
|
}
|
|
| {
|
|
type: 'microphone.publish';
|
|
operationId: VoiceEngineV2OperationId;
|
|
options: VoiceEngineV2MicrophoneOptions;
|
|
}
|
|
| {type: 'microphone.unpublish'; operationId: VoiceEngineV2OperationId}
|
|
| {type: 'microphone.setEnabled'; operationId: VoiceEngineV2OperationId; enabled: boolean}
|
|
| {type: 'camera.publish'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2CameraOptions}
|
|
| {type: 'camera.updateEncoding'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2CameraEncodingOptions}
|
|
| {type: 'camera.unpublish'; operationId: VoiceEngineV2OperationId; options?: VoiceEngineV2CameraOptions}
|
|
| {type: 'screen.publish'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2ScreenOptions}
|
|
| {type: 'screen.updateEncoding'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2ScreenEncodingOptions}
|
|
| {type: 'screen.unpublish'; operationId: VoiceEngineV2OperationId}
|
|
| {type: 'screenAudio.publish'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2ScreenAudioOptions}
|
|
| {type: 'screenAudio.unpublish'; operationId: VoiceEngineV2OperationId}
|
|
| {type: 'outputDevice.set'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2OutputDeviceOptions}
|
|
| {
|
|
type: 'participantVolume.set';
|
|
operationId: VoiceEngineV2OperationId;
|
|
options: VoiceEngineV2ParticipantVolumeOptions;
|
|
}
|
|
| {
|
|
type: 'remoteTrackSubscription.set';
|
|
operationId: VoiceEngineV2OperationId;
|
|
options: VoiceEngineV2RemoteTrackSubscriptionOptions;
|
|
}
|
|
| {type: 'data.publish'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2DataOptions}
|
|
| {type: 'stats.collect'; operationId: VoiceEngineV2OperationId}
|
|
| {type: 'capabilities.queryHardwareEncoder'; operationId: VoiceEngineV2OperationId}
|
|
| {type: 'permissions.check'; operationId: VoiceEngineV2OperationId; name: VoiceEngineV2PermissionName}
|
|
| {type: 'permissions.request'; operationId: VoiceEngineV2OperationId; name: VoiceEngineV2PermissionName}
|
|
| {type: 'devices.enumerate'; operationId: VoiceEngineV2OperationId}
|
|
| {type: 'devices.selectAudioInput'; operationId: VoiceEngineV2OperationId; deviceId: string | null}
|
|
| {type: 'devices.selectAudioOutput'; operationId: VoiceEngineV2OperationId; deviceId: string | null}
|
|
| {type: 'devices.selectCamera'; operationId: VoiceEngineV2OperationId; deviceId: string | null}
|
|
| {type: 'nativeCapture.start'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2NativeCaptureOptions}
|
|
| {type: 'nativeCapture.update'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2NativeCaptureOptions}
|
|
| {type: 'nativeCapture.stop'; operationId: VoiceEngineV2OperationId; captureId: string}
|
|
| {type: 'nativeAudioTap.start'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2NativeAudioTapOptions}
|
|
| {type: 'nativeAudioTap.stop'; operationId: VoiceEngineV2OperationId; tapId: string}
|
|
| {
|
|
type: 'nativeFrameSink.attach';
|
|
operationId: VoiceEngineV2OperationId;
|
|
options: VoiceEngineV2NativeFrameSinkOptions;
|
|
}
|
|
| {type: 'nativeFrameSink.detach'; operationId: VoiceEngineV2OperationId; sinkId: string}
|
|
| {type: 'e2ee.setEnabled'; operationId: VoiceEngineV2OperationId; enabled: boolean; keyId?: string | null}
|
|
| {type: 'timer.schedule'; operationId: VoiceEngineV2OperationId; options: VoiceEngineV2TimerOptions}
|
|
| {type: 'timer.cancel'; operationId: VoiceEngineV2OperationId; timerId: string}
|
|
| {type: 'diagnostics.log'; operationId: VoiceEngineV2OperationId; entry: VoiceEngineV2DiagnosticEntry}
|
|
| {
|
|
type: 'operation.cancel';
|
|
operationId: VoiceEngineV2OperationId;
|
|
targetOperationId: VoiceEngineV2OperationId;
|
|
resourceKey: VoiceEngineV2ResourceKey;
|
|
reason: string;
|
|
}
|
|
| {type: 'lifecycle.teardown'; operationId: VoiceEngineV2OperationId; reason: VoiceEngineV2LifecycleReason};
|
|
|
|
export type VoiceEngineV2CommandType = VoiceEngineV2Command['type'];
|
|
|
|
export function getVoiceEngineV2CommandResourceKey(command: VoiceEngineV2Command): VoiceEngineV2ResourceKey {
|
|
if (command.type === 'operation.cancel') return command.resourceKey;
|
|
const resourceKey = getVoiceEngineV2CommandTypeResourceKey(command.type);
|
|
if (resourceKey == null) {
|
|
throw new Error(`Voice engine v2 command type does not have a static resource key: ${command.type}`);
|
|
}
|
|
return resourceKey;
|
|
}
|
|
|
|
export function getVoiceEngineV2CommandTypeResourceKey(
|
|
commandType: VoiceEngineV2CommandType,
|
|
): VoiceEngineV2ResourceKey | null {
|
|
switch (commandType) {
|
|
case 'implementation.prewarm':
|
|
return 'implementation';
|
|
case 'gateway.voiceState.write':
|
|
case 'gateway.voiceState.clear':
|
|
return 'gateway';
|
|
case 'connection.connect':
|
|
case 'connection.disconnect':
|
|
return 'connection';
|
|
case 'microphone.publish':
|
|
case 'microphone.unpublish':
|
|
case 'microphone.setEnabled':
|
|
return 'microphone';
|
|
case 'camera.publish':
|
|
case 'camera.updateEncoding':
|
|
case 'camera.unpublish':
|
|
return 'camera';
|
|
case 'screen.publish':
|
|
case 'screen.updateEncoding':
|
|
case 'screen.unpublish':
|
|
return 'screen';
|
|
case 'screenAudio.publish':
|
|
case 'screenAudio.unpublish':
|
|
return 'screenAudio';
|
|
case 'outputDevice.set':
|
|
return 'outputDevice';
|
|
case 'participantVolume.set':
|
|
return 'participantVolume';
|
|
case 'remoteTrackSubscription.set':
|
|
return 'remoteTrackSubscription';
|
|
case 'data.publish':
|
|
return 'dataChannel';
|
|
case 'stats.collect':
|
|
return 'stats';
|
|
case 'capabilities.queryHardwareEncoder':
|
|
return 'capabilities';
|
|
case 'permissions.check':
|
|
case 'permissions.request':
|
|
return 'permissions';
|
|
case 'devices.enumerate':
|
|
case 'devices.selectAudioInput':
|
|
case 'devices.selectAudioOutput':
|
|
case 'devices.selectCamera':
|
|
return 'devices';
|
|
case 'nativeCapture.start':
|
|
case 'nativeCapture.update':
|
|
case 'nativeCapture.stop':
|
|
return 'nativeCapture';
|
|
case 'nativeAudioTap.start':
|
|
case 'nativeAudioTap.stop':
|
|
return 'nativeAudioTap';
|
|
case 'nativeFrameSink.attach':
|
|
case 'nativeFrameSink.detach':
|
|
return 'nativeFrameSink';
|
|
case 'e2ee.setEnabled':
|
|
return 'e2ee';
|
|
case 'timer.schedule':
|
|
case 'timer.cancel':
|
|
return 'timer';
|
|
case 'diagnostics.log':
|
|
return 'diagnostics';
|
|
case 'operation.cancel':
|
|
return null;
|
|
case 'lifecycle.teardown':
|
|
return 'lifecycle';
|
|
}
|
|
}
|