@eka-care/medassist-core 1.0.50 → 1.0.52

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.
package/dist/Synapse.d.ts CHANGED
@@ -6,6 +6,7 @@ import { SYNAPSE_REALTIME_EVENTS } from "./messages/types";
6
6
  import { type SessionResponse } from "./resources/session/types";
7
7
  import { type AudioMetaData } from "./media/audio/types";
8
8
  import type { AgentConfigResponse, ExistingSessionOptions, SendMessageOptions, SynapseSDKConfig, USER_FEEDBACK } from "./types";
9
+ import { VoiceAgent } from "./voice/VoiceAgent";
9
10
  export declare class SynapseSDK {
10
11
  private connection;
11
12
  private messageManager;
@@ -16,6 +17,7 @@ export declare class SynapseSDK {
16
17
  private isRefreshingSession;
17
18
  private connectionAttempts;
18
19
  private sdkEventEmitter;
20
+ private _voice;
19
21
  constructor(config: SynapseSDKConfig);
20
22
  /**
21
23
  * Start the session
@@ -62,10 +64,12 @@ export declare class SynapseSDK {
62
64
  endRecording(): void;
63
65
  getAgentConfig(): Promise<AgentConfigResponse>;
64
66
  isConnected(): boolean;
67
+ get voice(): VoiceAgent;
65
68
  /**
66
69
  * End the session
67
70
  */
68
71
  endSession(): void;
72
+ private buildVoiceConfig;
69
73
  private emitError;
70
74
  private toSessionError;
71
75
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Synapse.d.ts","sourceRoot":"","sources":["../src/Synapse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,EACL,uBAAuB,EAExB,MAAM,kBAAkB,CAAC;AAsB1B,OAAO,EACL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,kBAAkB,EAA2C,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIzK,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,eAAe,CAAoC;gBAE/C,MAAM,EAAE,gBAAgB;IAcpC;;;;;;OAMG;IACU,YAAY,CACvB,eAAe,CAAC,EAAE,sBAAsB,GACvC,OAAO,CAAC,eAAe,CAAC;IA6B3B;;OAEG;IACU,WAAW,CAAC,EACvB,OAAO,EACP,KAAK,EACL,KAAK,EACL,aAAa,EACb,OAAO,EACP,eAAe,EACf,WAAW,EACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCrC;;OAEG;IACU,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrG;;OAEG;IACI,EAAE,CACP,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAIP;;OAEG;IACI,GAAG,CACR,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACrC,IAAI;IAIP;;OAEG;IACI,gBAAgB,IAAI,eAAe;IAU1C;;OAEG;IACU,QAAQ,CACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAyDhB;;SAEK;IACQ,cAAc,CAAC,EAC1B,QAAQ,EACR,OAAO,GACR,EAAE;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;QAC1C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCjB;;OAEG;IACI,YAAY,IAAI,IAAI;IA+Bd,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIpD,WAAW,IAAI,OAAO;IAG7B;;OAEG;IACI,UAAU,IAAI,IAAI;IAMzB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAYtB;;;OAGG;YACW,oBAAoB;IA6ClC;;;OAGG;YACW,aAAa;IAqC3B;;OAEG;YACW,cAAc;IAuB5B;;OAEG;YACW,gBAAgB;IAO9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgD1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAW/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgD/B;;OAEG;YACW,mBAAmB;IA0CjC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,OAAO;CAKhB"}
1
+ {"version":3,"file":"Synapse.d.ts","sourceRoot":"","sources":["../src/Synapse.ts"],"names":[],"mappings":"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"}
package/dist/Synapse.js CHANGED
@@ -16,6 +16,7 @@ const EventEmitter_1 = require("./internal/events/EventEmitter");
16
16
  const Error_1 = require("./utils/Error");
17
17
  const Error_2 = require("./internal/Error/Error");
18
18
  const Events_1 = require("./events/Events");
19
+ const VoiceAgent_1 = require("./voice/VoiceAgent");
19
20
  //TODO: Fix issue with handling error content type ,which is comming as a connection error to the user
20
21
  class SynapseSDK {
21
22
  connection = null;
@@ -28,6 +29,7 @@ class SynapseSDK {
28
29
  isRefreshingSession = false;
29
30
  connectionAttempts = 0;
30
31
  sdkEventEmitter = new EventEmitter_1.EventEmitter();
32
+ _voice = null;
31
33
  constructor(config) {
32
34
  this.config = {
33
35
  ...config,
@@ -274,14 +276,35 @@ class SynapseSDK {
274
276
  isConnected() {
275
277
  return this.connection?.isConnected() ?? false;
276
278
  }
279
+ get voice() {
280
+ if (!this._voice) {
281
+ this._voice = new VoiceAgent_1.VoiceAgent(this.buildVoiceConfig(), () => {
282
+ const s = this.getSessionConfig();
283
+ return { sessionId: s.session_id, sessionToken: s.session_token };
284
+ });
285
+ }
286
+ return this._voice;
287
+ }
277
288
  /**
278
289
  * End the session
279
290
  */
280
291
  endSession() {
281
292
  console.log("end sesion called ");
293
+ this._voice?.destroy();
294
+ this._voice = null;
282
295
  this.closeConnection();
283
296
  this.cleanup();
284
297
  }
298
+ buildVoiceConfig() {
299
+ const base = this.config.serverUrl ||
300
+ (0, constants_1.getConfig)(this.config.environment).BASE_API_URL;
301
+ return {
302
+ offerUrl: `${base}/med-assist/voice/offer`,
303
+ handleRefresh: async () => {
304
+ await this.handleSessionExpiry();
305
+ },
306
+ };
307
+ }
285
308
  emitError(error) {
286
309
  this.config.callbacks?.onError?.(error);
287
310
  }
@@ -12,13 +12,6 @@ declare const STAGING_CONFIG: {
12
12
  };
13
13
  export type EnvironmentConfig = typeof DEVELOPMENT_CONFIG | typeof PRODUCTION_CONFIG | typeof STAGING_CONFIG;
14
14
  export declare const getConfig: (environment?: Environment) => EnvironmentConfig;
15
- export declare enum SYNAPSE_TOOL_NAME {
16
- MOBILE_VERIFICATION = "mobile_verification",
17
- AVAILABILITY_DATES = "availability_dates",
18
- AVAILABILITY_SLOTS = "availability_slots",
19
- DOCTOR_DETAILS = "doctor_details",
20
- GET_LOCATION = "get_location"
21
- }
22
15
  export type Environment = "development" | "production" | "staging";
23
16
  export {};
24
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,iBAAiB;;;CAGtB,CAAC;AAKF,QAAA,MAAM,kBAAkB;;;CAIvB,CAAC;AAEF,QAAA,MAAM,cAAc;;;CAGnB,CAAC;AACF,MAAM,MAAM,iBAAiB,GACzB,OAAO,kBAAkB,GACzB,OAAO,iBAAiB,GACxB,OAAO,cAAc,CAAC;AAE1B,eAAO,MAAM,SAAS,GACpB,cAAa,WAA0B,KACtC,iBASF,CAAC;AAEF,oBAAY,iBAAiB;IAC3B,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,iBAAiB;;;CAGtB,CAAC;AAEF,QAAA,MAAM,kBAAkB;;;CAIvB,CAAC;AAEF,QAAA,MAAM,cAAc;;;CAGnB,CAAC;AACF,MAAM,MAAM,iBAAiB,GACzB,OAAO,kBAAkB,GACzB,OAAO,iBAAiB,GACxB,OAAO,cAAc,CAAC;AAE1B,eAAO,MAAM,SAAS,GACpB,cAAa,WAA0B,KACtC,iBASF,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC"}
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SYNAPSE_TOOL_NAME = exports.getConfig = void 0;
3
+ exports.getConfig = void 0;
4
4
  const PRODUCTION_CONFIG = {
5
5
  WEBSOCKET_URL: "wss://matrix-ws.eka.care/reloaded",
6
6
  BASE_API_URL: "https://matrix.eka.care/reloaded",
7
7
  };
8
- // const PRODUCTION_CONFIG = {
9
- // WEBSOCKET_URL: "ws://87677104b49f.ngrok-free.app/reloaded",
10
- // BASE_API_URL: "https://87677104b49f.ngrok-free.app/reloaded",
11
- // }
12
8
  const DEVELOPMENT_CONFIG = {
13
9
  // can be used for local development
14
10
  WEBSOCKET_URL: "wss://matrix-ws.dev.eka.care/reloaded",
@@ -31,11 +27,3 @@ const getConfig = (environment = "production") => {
31
27
  return PRODUCTION_CONFIG;
32
28
  };
33
29
  exports.getConfig = getConfig;
34
- var SYNAPSE_TOOL_NAME;
35
- (function (SYNAPSE_TOOL_NAME) {
36
- SYNAPSE_TOOL_NAME["MOBILE_VERIFICATION"] = "mobile_verification";
37
- SYNAPSE_TOOL_NAME["AVAILABILITY_DATES"] = "availability_dates";
38
- SYNAPSE_TOOL_NAME["AVAILABILITY_SLOTS"] = "availability_slots";
39
- SYNAPSE_TOOL_NAME["DOCTOR_DETAILS"] = "doctor_details";
40
- SYNAPSE_TOOL_NAME["GET_LOCATION"] = "get_location";
41
- })(SYNAPSE_TOOL_NAME || (exports.SYNAPSE_TOOL_NAME = SYNAPSE_TOOL_NAME = {}));
@@ -0,0 +1,7 @@
1
+ export declare enum SYNAPSE_CONVERSATION {
2
+ TEXT = "text",
3
+ FILE = "file",
4
+ AUDIO = "audio",
5
+ VOICE = "voice"
6
+ }
7
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAAA,oBAAY,oBAAoB;IAC9B,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAChB"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SYNAPSE_CONVERSATION = void 0;
4
+ var SYNAPSE_CONVERSATION;
5
+ (function (SYNAPSE_CONVERSATION) {
6
+ SYNAPSE_CONVERSATION["TEXT"] = "text";
7
+ SYNAPSE_CONVERSATION["FILE"] = "file";
8
+ SYNAPSE_CONVERSATION["AUDIO"] = "audio";
9
+ SYNAPSE_CONVERSATION["VOICE"] = "voice";
10
+ })(SYNAPSE_CONVERSATION || (exports.SYNAPSE_CONVERSATION = SYNAPSE_CONVERSATION = {}));
package/dist/index.d.ts CHANGED
@@ -27,4 +27,6 @@ export { ErrorUtils } from "./utils/Error";
27
27
  export * from "./media/audio/types";
28
28
  export type { SendMessageOptions } from "./types";
29
29
  export { SYNAPSE_MESSAGE_TYPES } from "./messages/types";
30
+ export * from "./conversation";
31
+ export * from "./voice";
30
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,cAAc,6BAA6B,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,cAAc,2BAA2B,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,cAAc,6BAA6B,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,cAAc,2BAA2B,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,cAAc,kBAAkB,CAAC;AAEjC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -71,3 +71,5 @@ Object.defineProperty(exports, "ErrorUtils", { enumerable: true, get: function (
71
71
  __exportStar(require("./media/audio/types"), exports);
72
72
  var types_2 = require("./messages/types");
73
73
  Object.defineProperty(exports, "SYNAPSE_MESSAGE_TYPES", { enumerable: true, get: function () { return types_2.SYNAPSE_MESSAGE_TYPES; } });
74
+ __exportStar(require("./conversation"), exports);
75
+ __exportStar(require("./voice"), exports);
@@ -82,13 +82,11 @@ export type TDoctorAvailability = {
82
82
  availability?: TAvailability[];
83
83
  date_preference?: string;
84
84
  slot_preference?: string;
85
- } & {
86
- [key: string]: unknown;
87
85
  };
88
86
  export type TAvailability = {
89
- date?: string;
87
+ date: string;
90
88
  day?: string;
91
- slots?: string[];
89
+ slots: string[];
92
90
  selected_slot?: string;
93
91
  };
94
92
  export type THospital = {
@@ -113,7 +111,6 @@ export type TCardInput = {
113
111
  title?: string;
114
112
  tags?: string;
115
113
  icon?: string;
116
- img?: string;
117
114
  description?: string;
118
115
  banner?: {
119
116
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messages/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messages/types.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,9 @@ export declare enum SYNAPSE_COMPONENTS {
29
29
  export type SYNAPSE_TOOL_TYPES = {
30
30
  ELICITATION: "elicitation";
31
31
  };
32
+ export type TDoctorDetailsMap = {
33
+ [doctor_id: string]: TDoctorDetails;
34
+ };
32
35
  export type ToolCallbacks = {
33
36
  [key in SYNAPSE_TOOL_CALLBACK_NAME]: {
34
37
  tool_name: SYNAPSE_TOOL_NAME;
@@ -48,8 +51,8 @@ export type TGetLocationToolResponse = ResourceResponse & {
48
51
  accuracy?: number;
49
52
  };
50
53
  export type TDoctorCardInput = {
51
- doctor: TDoctorAvailability;
52
- doctor_details?: TDoctorDetails;
54
+ doctors: TDoctorAvailability[];
55
+ doctor_details?: TDoctorDetailsMap;
53
56
  };
54
57
  export type TOption = {
55
58
  id: string;
@@ -82,7 +85,7 @@ export type SynapseInputCompMap = {
82
85
  };
83
86
  export type SynapseSelectedCompMap = {
84
87
  [SYNAPSE_COMPONENTS.CARD]: TCardInput;
85
- [SYNAPSE_COMPONENTS.DOCTOR_CARD]: TDoctorAvailability;
88
+ [SYNAPSE_COMPONENTS.DOCTOR_CARD]: TDoctorCardInput;
86
89
  [SYNAPSE_COMPONENTS.MEDIA_CARD]: TMediaCard;
87
90
  [SYNAPSE_COMPONENTS.MULTI]: TOption;
88
91
  [SYNAPSE_COMPONENTS.PILL]: TOption;
@@ -120,7 +123,6 @@ type BaseToolDetails = {
120
123
  toast_message?: string;
121
124
  mcp_meta_fields?: string[];
122
125
  disp_toast_msg?: string;
123
- orientation?: "vertical" | "horizontal";
124
126
  };
125
127
  };
126
128
  type ComponentToolDetails<C extends SYNAPSE_COMPONENTS> = BaseToolDetails & {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/resources/toolCall/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/resources/toolCall/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { VOICE_AGENT_STATE, type VoiceAgentConfig, type VoiceSessionCredentials } from "./types";
2
+ export declare class VoiceAgent {
3
+ private config;
4
+ private getCredentials;
5
+ private emitter;
6
+ private remoteAnalyser;
7
+ private localAnalyser;
8
+ private pc;
9
+ private pcId;
10
+ private dataChannel;
11
+ private localStream;
12
+ private remoteAudio;
13
+ private _state;
14
+ private _isMuted;
15
+ private manuallyDisconnected;
16
+ private _hasConnectionFailureNotified;
17
+ /** true while local mic audio is above the speaking threshold */
18
+ private _userSpeaking;
19
+ /** debounce timer: fires THINKING after user goes silent */
20
+ private _silenceTimer;
21
+ constructor(config: VoiceAgentConfig, getCredentials: () => VoiceSessionCredentials);
22
+ get state(): VOICE_AGENT_STATE;
23
+ get isMuted(): boolean;
24
+ on(event: string, listener: (...args: unknown[]) => void): void;
25
+ off(event: string, listener: (...args: unknown[]) => void): void;
26
+ connect(): Promise<void>;
27
+ disconnect(): void;
28
+ toggleMute(): void;
29
+ reset(): void;
30
+ destroy(): void;
31
+ private setState;
32
+ private clearSilenceTimer;
33
+ private handleConnectionFailure;
34
+ private releaseResources;
35
+ /**
36
+ * Analyse the local microphone stream to detect when the user
37
+ * stops talking → transition LISTENING → THINKING.
38
+ */
39
+ private startLocalAudioAnalysis;
40
+ private handleRemoteTrack;
41
+ }
42
+ //# sourceMappingURL=VoiceAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceAgent.d.ts","sourceRoot":"","sources":["../../src/voice/VoiceAgent.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,iBAAiB,EAEjB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAE7B,MAAM,SAAS,CAAC;AA6BjB,qBAAa,UAAU;IAqBnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IArBxB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,cAAc,CAAgD;IACtE,OAAO,CAAC,aAAa,CAAgD;IAErE,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,oBAAoB,CAAkB;IAC9C,OAAO,CAAC,6BAA6B,CAAkB;IAEvD,iEAAiE;IACjE,OAAO,CAAC,aAAa,CAAkB;IACvC,4DAA4D;IAC5D,OAAO,CAAC,aAAa,CAA8C;gBAGzD,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,MAAM,uBAAuB;IAGvD,IAAI,KAAK,IAAI,iBAAiB,CAE7B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAI/D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAI1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAsI9B,UAAU,IAAI,IAAI;IAOlB,UAAU,IAAI,IAAI;IAclB,KAAK,IAAI,IAAI;IAIb,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,gBAAgB;IAkCxB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,iBAAiB;CAyB1B"}
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoiceAgent = void 0;
4
+ const constants_1 = require("../constants");
5
+ const EventEmitter_1 = require("../internal/events/EventEmitter");
6
+ const VoiceAudioAnalyser_1 = require("./VoiceAudioAnalyser");
7
+ const types_1 = require("./types");
8
+ const DEFAULT_ICE_SERVERS = [
9
+ { urls: "stun:stun.l.google.com:19302" },
10
+ ];
11
+ const DEFAULT_ICE_GATHERING_TIMEOUT_MS = 3000;
12
+ const DEFAULT_SPEAKING_THRESHOLD = 8;
13
+ const OFFER_PATH = "/med-assist/voice/offer";
14
+ const USER_SILENCE_DEBOUNCE_MS = 600;
15
+ function waitForIceGathering(pc, timeoutMs) {
16
+ return new Promise((resolve) => {
17
+ if (pc.iceGatheringState === "complete") {
18
+ resolve();
19
+ return;
20
+ }
21
+ const timeout = setTimeout(resolve, timeoutMs);
22
+ pc.onicegatheringstatechange = () => {
23
+ if (pc.iceGatheringState === "complete") {
24
+ clearTimeout(timeout);
25
+ resolve();
26
+ }
27
+ };
28
+ });
29
+ }
30
+ class VoiceAgent {
31
+ config;
32
+ getCredentials;
33
+ emitter = new EventEmitter_1.EventEmitter();
34
+ remoteAnalyser = new VoiceAudioAnalyser_1.VoiceAudioAnalyser();
35
+ localAnalyser = new VoiceAudioAnalyser_1.VoiceAudioAnalyser();
36
+ pc = null;
37
+ pcId = null;
38
+ dataChannel = null;
39
+ localStream = null;
40
+ remoteAudio = null;
41
+ _state = types_1.VOICE_AGENT_STATE.IDLE;
42
+ _isMuted = false;
43
+ manuallyDisconnected = false;
44
+ _hasConnectionFailureNotified = false;
45
+ /** true while local mic audio is above the speaking threshold */
46
+ _userSpeaking = false;
47
+ /** debounce timer: fires THINKING after user goes silent */
48
+ _silenceTimer = null;
49
+ constructor(config, getCredentials) {
50
+ this.config = config;
51
+ this.getCredentials = getCredentials;
52
+ }
53
+ get state() {
54
+ return this._state;
55
+ }
56
+ get isMuted() {
57
+ return this._isMuted;
58
+ }
59
+ on(event, listener) {
60
+ this.emitter.on(event, listener);
61
+ }
62
+ off(event, listener) {
63
+ this.emitter.off(event, listener);
64
+ }
65
+ async connect() {
66
+ const credentials = this.getCredentials();
67
+ this.setState(types_1.VOICE_AGENT_STATE.CONNECTING);
68
+ this._hasConnectionFailureNotified = false;
69
+ try {
70
+ if (!navigator.mediaDevices?.getUserMedia) {
71
+ throw new Error("Microphone access is not available. Please ensure you are using a secure (HTTPS) connection.");
72
+ }
73
+ const stream = await navigator.mediaDevices.getUserMedia({
74
+ audio: {
75
+ channelCount: 1,
76
+ echoCancellation: true,
77
+ noiseSuppression: true,
78
+ autoGainControl: true,
79
+ sampleRate: 16000,
80
+ },
81
+ video: false,
82
+ });
83
+ this.localStream = stream;
84
+ const iceServers = this.config.iceServers ?? DEFAULT_ICE_SERVERS;
85
+ const pc = new RTCPeerConnection({ iceServers });
86
+ this.pc = pc;
87
+ // Data channel required by SmallWebRTCTransport — without it the server
88
+ // connects ICE but drops queued greeting/audio.
89
+ this.dataChannel = pc.createDataChannel("pipecat-events", {
90
+ ordered: true,
91
+ });
92
+ this.dataChannel.onopen = () => console.log("data channel open");
93
+ this.dataChannel.onclose = () => {
94
+ this.handleConnectionFailure(new Error("Data channel closed"), "Voice connection failed");
95
+ };
96
+ this.dataChannel.onerror = () => {
97
+ this.handleConnectionFailure(new Error("Data channel error"), "Voice connection failed");
98
+ };
99
+ stream.getAudioTracks().forEach((track) => pc.addTrack(track, stream));
100
+ pc.ontrack = (event) => this.handleRemoteTrack(event);
101
+ pc.onconnectionstatechange = () => {
102
+ if (pc.connectionState === "connected") {
103
+ this.setState(types_1.VOICE_AGENT_STATE.LISTENING);
104
+ this.startLocalAudioAnalysis(stream);
105
+ }
106
+ else if (pc.connectionState === "failed" ||
107
+ pc.connectionState === "closed") {
108
+ this.releaseResources();
109
+ this.setState(types_1.VOICE_AGENT_STATE.IDLE);
110
+ }
111
+ };
112
+ pc.oniceconnectionstatechange = () => {
113
+ if ((pc.iceConnectionState === "connected" ||
114
+ pc.iceConnectionState === "completed") &&
115
+ this._state === types_1.VOICE_AGENT_STATE.CONNECTING) {
116
+ this.setState(types_1.VOICE_AGENT_STATE.LISTENING);
117
+ this.startLocalAudioAnalysis(stream);
118
+ }
119
+ else if (pc.iceConnectionState === "failed") {
120
+ this.releaseResources();
121
+ this.setState(types_1.VOICE_AGENT_STATE.IDLE);
122
+ }
123
+ };
124
+ const offer = await pc.createOffer();
125
+ await pc.setLocalDescription(offer);
126
+ const timeoutMs = this.config.iceGatheringTimeoutMs ?? DEFAULT_ICE_GATHERING_TIMEOUT_MS;
127
+ await waitForIceGathering(pc, timeoutMs);
128
+ const DEFAULT_API_ORIGIN = (0, constants_1.getConfig)(this.config?.environment || "production").BASE_API_URL;
129
+ const offerUrl = this.config.offerUrl ?? `${this.config.baseUrl ?? DEFAULT_API_ORIGIN}${OFFER_PATH}`;
130
+ const createOfferRequest = (sessionCredentials) => fetch(offerUrl, {
131
+ method: "POST",
132
+ headers: { "Content-Type": "application/json" },
133
+ body: JSON.stringify({
134
+ sdp: pc.localDescription.sdp,
135
+ type: pc.localDescription.type,
136
+ pc_id: this.pcId,
137
+ request_data: {
138
+ session_id: sessionCredentials.sessionId,
139
+ token: sessionCredentials.sessionToken,
140
+ },
141
+ }),
142
+ });
143
+ let response = await createOfferRequest(credentials);
144
+ if (response.status === 401 && this.config.handleRefresh) {
145
+ await this.config.handleRefresh();
146
+ const refreshedCredentials = this.getCredentials();
147
+ response = await createOfferRequest(refreshedCredentials);
148
+ }
149
+ if (!response.ok) {
150
+ const errBody = await response.json().catch(() => null);
151
+ console.error("error calling offer", errBody);
152
+ throw new Error(errBody?.detail || errBody?.error || `Server error: ${response.status}`);
153
+ }
154
+ const answer = await response.json();
155
+ this.pcId = answer.pc_id;
156
+ if (pc.signalingState === "closed")
157
+ return;
158
+ await pc.setRemoteDescription(new RTCSessionDescription({ sdp: answer.sdp, type: answer.type }));
159
+ }
160
+ catch (err) {
161
+ this.handleConnectionFailure(err);
162
+ }
163
+ }
164
+ disconnect() {
165
+ this.manuallyDisconnected = true;
166
+ this.setState(types_1.VOICE_AGENT_STATE.DISCONNECTING);
167
+ this.releaseResources();
168
+ this.setState(types_1.VOICE_AGENT_STATE.IDLE);
169
+ }
170
+ toggleMute() {
171
+ if (!this.localStream)
172
+ return;
173
+ const track = this.localStream.getAudioTracks()[0];
174
+ if (!track)
175
+ return;
176
+ const wasEnabled = track.enabled;
177
+ this.localStream.getAudioTracks().forEach((t) => {
178
+ t.enabled = !wasEnabled;
179
+ });
180
+ this._isMuted = wasEnabled;
181
+ this.clearSilenceTimer();
182
+ this._userSpeaking = false;
183
+ this.setState(wasEnabled ? types_1.VOICE_AGENT_STATE.MUTED : types_1.VOICE_AGENT_STATE.LISTENING);
184
+ }
185
+ reset() {
186
+ this.setState(types_1.VOICE_AGENT_STATE.IDLE);
187
+ }
188
+ destroy() {
189
+ this.releaseResources();
190
+ this.emitter.removeAllListeners();
191
+ this._state = types_1.VOICE_AGENT_STATE.IDLE;
192
+ }
193
+ // ──────────────────────────── private ────────────────────────────
194
+ setState(next) {
195
+ this._state = next;
196
+ this.emitter.emit(types_1.VOICE_AGENT_EVENTS.STATE_CHANGED, next);
197
+ }
198
+ clearSilenceTimer() {
199
+ if (this._silenceTimer !== null) {
200
+ clearTimeout(this._silenceTimer);
201
+ this._silenceTimer = null;
202
+ }
203
+ }
204
+ handleConnectionFailure(cause, message = "Voice connection failed") {
205
+ if (this._hasConnectionFailureNotified)
206
+ return;
207
+ if (this._state === types_1.VOICE_AGENT_STATE.DISCONNECTING || this.manuallyDisconnected)
208
+ return;
209
+ this._hasConnectionFailureNotified = true;
210
+ console.error("voice connection failure", cause);
211
+ this.releaseResources();
212
+ this.setState(types_1.VOICE_AGENT_STATE.ERROR);
213
+ const voiceError = { message, cause };
214
+ this.emitter.emit(types_1.VOICE_AGENT_EVENTS.ERROR, voiceError);
215
+ }
216
+ releaseResources() {
217
+ this.remoteAnalyser.stop();
218
+ this.localAnalyser.stop();
219
+ this.clearSilenceTimer();
220
+ this._userSpeaking = false;
221
+ if (this.localStream) {
222
+ this.localStream.getTracks().forEach((t) => t.stop());
223
+ this.localStream = null;
224
+ }
225
+ if (this.dataChannel) {
226
+ this.dataChannel.close();
227
+ this.dataChannel = null;
228
+ }
229
+ if (this.pc) {
230
+ this.pc.onconnectionstatechange = null;
231
+ this.pc.oniceconnectionstatechange = null;
232
+ this.pc.ontrack = null;
233
+ this.pc.onicecandidate = null;
234
+ this.pc.ondatachannel = null;
235
+ this.pc.close();
236
+ this.pc = null;
237
+ }
238
+ this.pcId = null;
239
+ this._isMuted = false;
240
+ if (this.remoteAudio) {
241
+ this.remoteAudio.srcObject = null;
242
+ }
243
+ }
244
+ /**
245
+ * Analyse the local microphone stream to detect when the user
246
+ * stops talking → transition LISTENING → THINKING.
247
+ */
248
+ startLocalAudioAnalysis(stream) {
249
+ const threshold = this.config.speakingThreshold ?? DEFAULT_SPEAKING_THRESHOLD;
250
+ this.localAnalyser.start(stream, threshold, (isUserSpeaking) => {
251
+ // Only act when the connection is live and not muted / agent speaking
252
+ if (this._state !== types_1.VOICE_AGENT_STATE.LISTENING &&
253
+ this._state !== types_1.VOICE_AGENT_STATE.THINKING) {
254
+ return;
255
+ }
256
+ if (isUserSpeaking) {
257
+ this._userSpeaking = true;
258
+ this.clearSilenceTimer();
259
+ // If we had already moved to THINKING, go back to LISTENING
260
+ if (this._state === types_1.VOICE_AGENT_STATE.THINKING) {
261
+ this.setState(types_1.VOICE_AGENT_STATE.LISTENING);
262
+ }
263
+ }
264
+ else if (this._userSpeaking && this._silenceTimer === null) {
265
+ // User just went silent — debounce before entering THINKING
266
+ this._silenceTimer = setTimeout(() => {
267
+ this._silenceTimer = null;
268
+ if (this._userSpeaking &&
269
+ this._state === types_1.VOICE_AGENT_STATE.LISTENING) {
270
+ this._userSpeaking = false;
271
+ this.setState(types_1.VOICE_AGENT_STATE.THINKING);
272
+ }
273
+ }, USER_SILENCE_DEBOUNCE_MS);
274
+ }
275
+ });
276
+ }
277
+ handleRemoteTrack(event) {
278
+ if (!this.remoteAudio) {
279
+ this.remoteAudio = new Audio();
280
+ this.remoteAudio.autoplay = true;
281
+ }
282
+ const remoteStream = event.streams[0];
283
+ this.remoteAudio.srcObject = remoteStream;
284
+ const threshold = this.config.speakingThreshold ?? DEFAULT_SPEAKING_THRESHOLD;
285
+ this.remoteAnalyser.start(remoteStream, threshold, (isSpeaking) => {
286
+ if (isSpeaking) {
287
+ // Agent started speaking — cancel any pending silence timer
288
+ this.clearSilenceTimer();
289
+ this._userSpeaking = false;
290
+ if (this._state !== types_1.VOICE_AGENT_STATE.SPEAKING) {
291
+ this.setState(types_1.VOICE_AGENT_STATE.SPEAKING);
292
+ }
293
+ }
294
+ else if (this._state === types_1.VOICE_AGENT_STATE.SPEAKING) {
295
+ // Agent stopped — go back to listening
296
+ this.setState(types_1.VOICE_AGENT_STATE.LISTENING);
297
+ }
298
+ });
299
+ }
300
+ }
301
+ exports.VoiceAgent = VoiceAgent;
@@ -0,0 +1,7 @@
1
+ export declare class VoiceAudioAnalyser {
2
+ private audioCtx;
3
+ private animFrame;
4
+ start(stream: MediaStream, threshold: number, onSpeakingChange: (isSpeaking: boolean) => void): void;
5
+ stop(): void;
6
+ }
7
+ //# sourceMappingURL=VoiceAudioAnalyser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceAudioAnalyser.d.ts","sourceRoot":"","sources":["../../src/voice/VoiceAudioAnalyser.ts"],"names":[],"mappings":"AAEA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAAuB;IAExC,KAAK,CACH,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAC9C,IAAI;IAqBP,IAAI,IAAI,IAAI;CAUb"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoiceAudioAnalyser = void 0;
4
+ const DEFAULT_FFT_SIZE = 256;
5
+ class VoiceAudioAnalyser {
6
+ audioCtx = null;
7
+ animFrame = null;
8
+ start(stream, threshold, onSpeakingChange) {
9
+ const audioCtx = new AudioContext();
10
+ this.audioCtx = audioCtx;
11
+ const analyser = audioCtx.createAnalyser();
12
+ analyser.fftSize = DEFAULT_FFT_SIZE;
13
+ audioCtx.createMediaStreamSource(stream).connect(analyser);
14
+ const data = new Uint8Array(analyser.frequencyBinCount);
15
+ const poll = () => {
16
+ if (!this.audioCtx)
17
+ return;
18
+ analyser.getByteFrequencyData(data);
19
+ const avg = data.reduce((s, v) => s + v, 0) / data.length;
20
+ onSpeakingChange(avg > threshold);
21
+ this.animFrame = requestAnimationFrame(poll);
22
+ };
23
+ poll();
24
+ }
25
+ stop() {
26
+ if (this.animFrame !== null) {
27
+ cancelAnimationFrame(this.animFrame);
28
+ this.animFrame = null;
29
+ }
30
+ if (this.audioCtx) {
31
+ this.audioCtx.close().catch(() => { });
32
+ this.audioCtx = null;
33
+ }
34
+ }
35
+ }
36
+ exports.VoiceAudioAnalyser = VoiceAudioAnalyser;
@@ -0,0 +1,3 @@
1
+ export { VoiceAgent } from "./VoiceAgent";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/voice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,cAAc,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.VoiceAgent = void 0;
18
+ var VoiceAgent_1 = require("./VoiceAgent");
19
+ Object.defineProperty(exports, "VoiceAgent", { enumerable: true, get: function () { return VoiceAgent_1.VoiceAgent; } });
20
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,36 @@
1
+ import { type Environment } from "../constants";
2
+ export declare const VOICE_AGENT_STATE: {
3
+ readonly IDLE: "idle";
4
+ readonly CONNECTING: "connecting";
5
+ readonly CONNECTED: "connected";
6
+ readonly LISTENING: "listening";
7
+ readonly THINKING: "thinking";
8
+ readonly SPEAKING: "speaking";
9
+ readonly MUTED: "muted";
10
+ readonly DISCONNECTING: "disconnecting";
11
+ readonly ERROR: "error";
12
+ };
13
+ export type VOICE_AGENT_STATE = (typeof VOICE_AGENT_STATE)[keyof typeof VOICE_AGENT_STATE];
14
+ export declare const VOICE_AGENT_EVENTS: {
15
+ readonly STATE_CHANGED: "voice:state_changed";
16
+ readonly ERROR: "voice:error";
17
+ };
18
+ export type VOICE_AGENT_EVENTS = (typeof VOICE_AGENT_EVENTS)[keyof typeof VOICE_AGENT_EVENTS];
19
+ export interface VoiceAgentConfig {
20
+ baseUrl?: string;
21
+ offerUrl?: string;
22
+ handleRefresh?: () => Promise<void>;
23
+ iceServers?: RTCIceServer[];
24
+ iceGatheringTimeoutMs?: number;
25
+ speakingThreshold?: number;
26
+ environment?: Environment;
27
+ }
28
+ export interface VoiceSessionCredentials {
29
+ sessionId: string;
30
+ sessionToken: string;
31
+ }
32
+ export interface VoiceError {
33
+ message: string;
34
+ cause?: unknown;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/voice/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,eAAO,MAAM,iBAAiB;;;;;;;;;;CAUpB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAE7D,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAC5B,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VOICE_AGENT_EVENTS = exports.VOICE_AGENT_STATE = void 0;
4
+ exports.VOICE_AGENT_STATE = {
5
+ IDLE: "idle",
6
+ CONNECTING: "connecting",
7
+ CONNECTED: "connected",
8
+ LISTENING: "listening",
9
+ THINKING: "thinking",
10
+ SPEAKING: "speaking",
11
+ MUTED: "muted",
12
+ DISCONNECTING: "disconnecting",
13
+ ERROR: "error",
14
+ };
15
+ exports.VOICE_AGENT_EVENTS = {
16
+ STATE_CHANGED: "voice:state_changed",
17
+ ERROR: "voice:error",
18
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eka-care/medassist-core",
3
- "version": "1.0.50",
3
+ "version": "1.0.52",
4
4
  "description": "TypeScript SDK for real-time medical chatbot experiences with session management, WebSocket connectivity, and media handling",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",