@layercode/js-sdk 1.0.21 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,18 @@
1
+ /**
2
+ * Interface for LayercodeClient public methods
3
+ */
4
+ interface ILayercodeClient {
5
+ connect(): Promise<void>;
6
+ disconnect(): Promise<void>;
7
+ triggerUserTurnStarted(): Promise<void>;
8
+ triggerUserTurnFinished(): Promise<void>;
9
+ getStream(): MediaStream | null;
10
+ setInputDevice(deviceId: string): Promise<void>;
11
+ readonly status: string;
12
+ readonly userAudioAmplitude: number;
13
+ readonly agentAudioAmplitude: number;
14
+ readonly sessionId: string | null;
15
+ }
1
16
  /**
2
17
  * Interface for LayercodeClient constructor options
3
18
  */
@@ -35,7 +50,7 @@ interface LayercodeClientOptions {
35
50
  * @class LayercodeClient
36
51
  * @classdesc Core client for Layercode audio pipeline that manages audio recording, WebSocket communication, and speech processing.
37
52
  */
38
- declare class LayercodeClient {
53
+ declare class LayercodeClient implements ILayercodeClient {
39
54
  private options;
40
55
  private wavRecorder;
41
56
  private wavPlayer;
@@ -45,11 +60,13 @@ declare class LayercodeClient {
45
60
  private pushToTalkActive;
46
61
  private pushToTalkEnabled;
47
62
  private canInterrupt;
48
- private vadPausedPlayer;
49
63
  private userIsSpeaking;
50
64
  private endUserTurn;
51
65
  private recorderStarted;
52
66
  private readySent;
67
+ private currentTurnId;
68
+ private audioBuffer;
69
+ private audioPauseTime;
53
70
  _websocketUrl: string;
54
71
  status: string;
55
72
  userAudioAmplitude: number;
@@ -60,6 +77,7 @@ declare class LayercodeClient {
60
77
  * @param {Object} options - Configuration options
61
78
  */
62
79
  constructor(options: LayercodeClientOptions);
80
+ private _setupAmplitudeBasedVAD;
63
81
  private _initializeVAD;
64
82
  /**
65
83
  * Updates the connection status and triggers the callback
@@ -103,6 +121,7 @@ declare class LayercodeClient {
103
121
  * @returns {Promise<void>}
104
122
  */
105
123
  connect(): Promise<void>;
124
+ private _resetTurnTracking;
106
125
  disconnect(): Promise<void>;
107
126
  /**
108
127
  * Gets the microphone MediaStream used by this client
@@ -116,3 +135,4 @@ declare class LayercodeClient {
116
135
  setInputDevice(deviceId: string): Promise<void>;
117
136
  }
118
137
  export default LayercodeClient;
138
+ export type { ILayercodeClient, LayercodeClientOptions };
@@ -1,4 +1,4 @@
1
- export type LayercodeMessageType = 'client.audio' | 'trigger.turn.start' | 'trigger.turn.end' | 'trigger.response.audio.replay_finished' | 'vad_events' | 'client.ready' | 'turn.start' | 'turn.end' | 'response.audio' | 'response.data';
1
+ export type LayercodeMessageType = 'client.audio' | 'trigger.turn.start' | 'trigger.turn.end' | 'trigger.response.audio.replay_finished' | 'trigger.response.audio.interrupted' | 'vad_events' | 'client.ready' | 'turn.start' | 'turn.end' | 'response.audio' | 'response.text' | 'response.data';
2
2
  export interface BaseLayercodeMessage {
3
3
  type: LayercodeMessageType;
4
4
  event_id?: string;
@@ -13,16 +13,24 @@ export interface ClientTriggerTurnMessage extends BaseLayercodeMessage {
13
13
  }
14
14
  export interface ClientVadEventsMessage extends BaseLayercodeMessage {
15
15
  type: 'vad_events';
16
- event: 'vad_start' | 'vad_end';
16
+ event: 'vad_start' | 'vad_end' | 'vad_model_failed';
17
17
  }
18
18
  export interface ClientReadyMessage extends BaseLayercodeMessage {
19
19
  type: 'client.ready';
20
20
  }
21
21
  export interface ClientTriggerResponseAudioReplayFinishedMessage extends BaseLayercodeMessage {
22
22
  type: 'trigger.response.audio.replay_finished';
23
- reason: 'completed' | 'interrupted';
23
+ reason: 'completed';
24
24
  last_delta_id_played?: string;
25
25
  }
26
+ export interface ClientTriggerResponseAudioInterruptedMessage extends BaseLayercodeMessage {
27
+ type: 'trigger.response.audio.interrupted';
28
+ playback_offset?: number;
29
+ interruption_context?: {
30
+ turn_id: string;
31
+ playback_offset_ms: number;
32
+ };
33
+ }
26
34
  export interface ServerTurnMessage extends BaseLayercodeMessage {
27
35
  type: 'turn.start' | 'turn.end';
28
36
  role: 'user' | 'assistant';
@@ -33,11 +41,16 @@ export interface ServerResponseAudioMessage extends BaseLayercodeMessage {
33
41
  delta_id?: string;
34
42
  turn_id: string;
35
43
  }
44
+ export interface ServerResponseTextMessage extends BaseLayercodeMessage {
45
+ type: 'response.text';
46
+ content: string;
47
+ turn_id: string;
48
+ }
36
49
  export interface ServerResponseDataMessage extends BaseLayercodeMessage {
37
50
  type: 'response.data';
38
51
  content: any;
39
52
  turn_id: string;
40
53
  }
41
- export type ServerMessage = ServerTurnMessage | ServerResponseAudioMessage | ServerResponseDataMessage;
42
- export type ClientMessage = ClientAudioMessage | ClientTriggerTurnMessage | ClientTriggerResponseAudioReplayFinishedMessage | ClientVadEventsMessage | ClientReadyMessage;
54
+ export type ServerMessage = ServerTurnMessage | ServerResponseAudioMessage | ServerResponseTextMessage | ServerResponseDataMessage;
55
+ export type ClientMessage = ClientAudioMessage | ClientTriggerTurnMessage | ClientTriggerResponseAudioReplayFinishedMessage | ClientTriggerResponseAudioInterruptedMessage | ClientVadEventsMessage | ClientReadyMessage;
43
56
  export type LayercodeMessage = ClientMessage | ServerMessage;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Layercode",
3
3
  "license": "MIT",
4
4
  "name": "@layercode/js-sdk",
5
- "version": "1.0.21",
5
+ "version": "1.0.23",
6
6
  "description": "Layercode JavaScript SDK for browser usage",
7
7
  "type": "module",
8
8
  "main": "dist/layercode-js-sdk.esm.js",