feat(protocol): add shared WebSocket contract package
This commit is contained in:
52
apps/vela-protocol/src/index.cjs
Normal file
52
apps/vela-protocol/src/index.cjs
Normal file
@@ -0,0 +1,52 @@
|
||||
const PROTOCOL_PACKAGE_NAME = '@vela/protocol';
|
||||
|
||||
const SESSION_STATES = Object.freeze(['idle', 'listening', 'thinking', 'speaking']);
|
||||
|
||||
const CLIENT_EVENT_TYPES = Object.freeze([
|
||||
'session.start',
|
||||
'input_audio.append',
|
||||
'input_audio.commit',
|
||||
'response.cancel'
|
||||
]);
|
||||
|
||||
const SERVER_EVENT_TYPES = Object.freeze([
|
||||
'session.ready',
|
||||
'session.state',
|
||||
'transcript.partial',
|
||||
'transcript.final',
|
||||
'response.text.delta',
|
||||
'response.completed',
|
||||
'error'
|
||||
]);
|
||||
|
||||
function createMessageEnvelope(type, payload) {
|
||||
return { type, payload };
|
||||
}
|
||||
|
||||
function isMessageEnvelope(value) {
|
||||
return Boolean(
|
||||
value &&
|
||||
typeof value === 'object' &&
|
||||
typeof value.type === 'string' &&
|
||||
'payload' in value
|
||||
);
|
||||
}
|
||||
|
||||
function isClientEventType(type) {
|
||||
return CLIENT_EVENT_TYPES.includes(type);
|
||||
}
|
||||
|
||||
function isServerEventType(type) {
|
||||
return SERVER_EVENT_TYPES.includes(type);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
PROTOCOL_PACKAGE_NAME,
|
||||
SESSION_STATES,
|
||||
CLIENT_EVENT_TYPES,
|
||||
SERVER_EVENT_TYPES,
|
||||
createMessageEnvelope,
|
||||
isMessageEnvelope,
|
||||
isClientEventType,
|
||||
isServerEventType
|
||||
};
|
||||
Reference in New Issue
Block a user