@ctchealth/plato-sdk 0.0.22 → 0.0.24

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/README.md CHANGED
@@ -175,6 +175,7 @@ Starts a voice call with the AI persona for the specified simulation.
175
175
 
176
176
  - `stopCall()`: Function to end the call
177
177
  - `callId`: Unique identifier for the call
178
+ - `notifySlideChange(slideNumber: number)`: Inform the assistant which PDF slide the user is currently viewing (see [Slide-Aware Conversations](#slide-aware-conversations))
178
179
  - `on<K>(event: K, listener: CallEventListener<K>)`: Subscribe to call events
179
180
  - `off<K>(event: K, listener: CallEventListener<K>)`: Unsubscribe from call events
180
181
 
@@ -913,6 +914,47 @@ A: The `recoverAbandonedCall()` method returns `true` when a call is recovered.
913
914
  A: The recovery attempt is logged and the stored state is cleared to prevent infinite retries. The SDK continues working normally. Recovery failures are graceful and don't break the app.
914
915
  -->
915
916
 
917
+ ## Slide-Aware Conversations
918
+
919
+ When a simulation is linked to a PDF (`pdfSlideId`), the user navigates through slides while talking to the assistant. `notifySlideChange` lets you push the current slide number to the assistant so it always has up-to-date context — without requiring the user to say "I'm on slide 3" out loud.
920
+
921
+ ### How It Works
922
+
923
+ The method sends a silent system message to the voice session. The assistant reads it as background context and never reads it aloud or reacts to it directly.
924
+
925
+ ```typescript
926
+ call.notifySlideChange(3); // tell the assistant the user is now on slide 3
927
+ ```
928
+
929
+ ### Recommended Pattern: Defer Until the User Speaks
930
+
931
+ Sending `notifySlideChange` the moment the user clicks "Next" works, but can cause the assistant to receive mid-conversation context updates while it is already responding. A better approach is to **hold the slide number in a pending state and flush it only when the user next starts talking**. This way the assistant always receives the update at a natural boundary, and multiple rapid navigations collapse into a single notification (the last pending slide wins).
932
+
933
+ ```typescript
934
+ let pendingSlideNumber: number | undefined;
935
+
936
+ const call = await client.startCall(simulationId);
937
+
938
+ // Load and sort slides
939
+ const slideData = await client.getSlideAnalysis(pdfSlideId);
940
+ const slides = slideData.slideAnalysis?.sort((a, b) => a.slideNumber - b.slideNumber) ?? [];
941
+ let currentSlideIndex = 0;
942
+
943
+ // Flush the pending slide the moment the user starts speaking
944
+ call.on('message', event => {
945
+ if (event.type === 'transcript' && event.role === 'user' && pendingSlideNumber !== undefined) {
946
+ call.notifySlideChange(pendingSlideNumber);
947
+ pendingSlideNumber = undefined;
948
+ }
949
+ });
950
+
951
+ // When the user navigates, store the slide number — don't send it yet
952
+ function goToSlide(index: number): void {
953
+ currentSlideIndex = index;
954
+ pendingSlideNumber = slides[currentSlideIndex].slideNumber;
955
+ }
956
+ ```
957
+
916
958
  ## Event System
917
959
 
918
960
  The SDK provides a comprehensive event system for managing voice calls:
@@ -1455,6 +1497,7 @@ enum AvatarLanguage {
1455
1497
  French = 'fr',
1456
1498
  Arabic = 'ar',
1457
1499
  Russian = 'ru',
1500
+ Ukrainian = 'uk',
1458
1501
  }
1459
1502
  ```
1460
1503
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ctchealth/plato-sdk",
3
- "version": "0.0.22",
3
+ "version": "0.0.24",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0",
6
6
  "@vapi-ai/web": "2.1.8",
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) 2025 ctcHealth. All rights reserved.
3
+ *
4
+ * This file is part of the ctcHealth Plato Platform, a proprietary software system developed by ctcHealth.
5
+ *
6
+ * This source code and all related materials are confidential and proprietary to ctcHealth.
7
+ * Unauthorized access, use, copying, modification, distribution, or disclosure is strictly prohibited
8
+ * and may result in disciplinary action and civil and/or criminal penalties.
9
+ *
10
+ * This software is intended solely for authorized use within ctcHealth and its designated partners.
11
+ *
12
+ * For internal use only.
13
+ */
14
+ import { AxiosInstance } from 'axios';
15
+ import { CallCreateDto, CallDTO, CallEventMap, CallEventNames } from './plato-intefaces';
16
+ export type EmitFn = <K extends CallEventNames>(event: K, payload: CallEventMap[K]) => void;
17
+ export declare function createCall(http: AxiosInstance, payload: CallCreateDto): Promise<CallDTO>;
18
+ export declare function setPostCallEligibility(http: AxiosInstance, callId: string, eligible: boolean): Promise<void>;
19
+ export declare function triggerPostcallFallback(http: AxiosInstance, callId: string, emit: EmitFn, removeAllEventListeners: () => void): Promise<void>;
20
+ export declare function fetchAndEmitCallDetails(http: AxiosInstance, callId: string, emit: EmitFn, removeAllEventListeners: () => void): Promise<void>;
21
+ export declare function startPolling(http: AxiosInstance, callId: string, emit: EmitFn, removeAllEventListeners: () => void): {
22
+ stopPolling: () => void;
23
+ };
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCall = createCall;
4
+ exports.setPostCallEligibility = setPostCallEligibility;
5
+ exports.triggerPostcallFallback = triggerPostcallFallback;
6
+ exports.fetchAndEmitCallDetails = fetchAndEmitCallDetails;
7
+ exports.startPolling = startPolling;
8
+ async function createCall(http, payload) {
9
+ const response = await http.post('/api/v1/simulation/call', { ...payload });
10
+ return response.data;
11
+ }
12
+ async function setPostCallEligibility(http, callId, eligible) {
13
+ try {
14
+ await http.patch(`/api/v1/simulation/call/${callId}/eligibility`, {
15
+ postCallEligibility: eligible,
16
+ });
17
+ }
18
+ catch {
19
+ // ignore — eligibility flag is best-effort
20
+ }
21
+ }
22
+ async function triggerPostcallFallback(http, callId, emit, removeAllEventListeners) {
23
+ const maxAttempts = 2;
24
+ const retryDelayMs = 4000;
25
+ let lastError;
26
+ try {
27
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
28
+ try {
29
+ await http.post('/api/v1/postcall/call-ended', { callId });
30
+ const { data } = await http.get(`/api/v1/simulation/call/${callId}`);
31
+ emit('call-details-ready', data);
32
+ return;
33
+ }
34
+ catch (e) {
35
+ lastError = e;
36
+ if (attempt < maxAttempts) {
37
+ await new Promise(resolve => setTimeout(resolve, retryDelayMs));
38
+ }
39
+ }
40
+ }
41
+ emit('error', lastError instanceof Error ? lastError : new Error('Failed to process call details'));
42
+ }
43
+ finally {
44
+ removeAllEventListeners();
45
+ }
46
+ }
47
+ async function fetchAndEmitCallDetails(http, callId, emit, removeAllEventListeners) {
48
+ try {
49
+ const { data } = await http.get(`/api/v1/simulation/call/${callId}`);
50
+ emit('call-details-ready', data);
51
+ }
52
+ catch (e) {
53
+ emit('error', e instanceof Error ? e : new Error('Failed to fetch call details'));
54
+ }
55
+ finally {
56
+ removeAllEventListeners();
57
+ }
58
+ }
59
+ function startPolling(http, callId, emit, removeAllEventListeners) {
60
+ let stopped = false;
61
+ let nextPollTimer;
62
+ const poll = async () => {
63
+ if (stopped)
64
+ return;
65
+ try {
66
+ const { data } = await http.get(`/api/v1/simulation/call/${callId}`);
67
+ if (data.transcript) {
68
+ stopped = true;
69
+ clearTimeout(globalTimer);
70
+ emit('call-details-ready', data);
71
+ removeAllEventListeners();
72
+ return;
73
+ }
74
+ }
75
+ catch {
76
+ // ignore transient errors, keep polling
77
+ }
78
+ nextPollTimer = setTimeout(() => void poll(), 3000);
79
+ };
80
+ nextPollTimer = setTimeout(() => void poll(), 3000);
81
+ const globalTimer = setTimeout(() => {
82
+ stopped = true;
83
+ clearTimeout(nextPollTimer);
84
+ void triggerPostcallFallback(http, callId, emit, removeAllEventListeners);
85
+ }, 60000);
86
+ return {
87
+ stopPolling: () => {
88
+ stopped = true;
89
+ clearTimeout(nextPollTimer);
90
+ clearTimeout(globalTimer);
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=call-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-helpers.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/call-helpers.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,8 @@ export declare enum AvatarLanguage {
42
42
  Italian = "it",
43
43
  French = "fr",
44
44
  Arabic = "ar",
45
- Russian = "ru"
45
+ Russian = "ru",
46
+ Ukrainian = "uk"
46
47
  }
47
48
  export declare class PersonalityAndBehaviourDto {
48
49
  riskTolerance: number;
@@ -353,6 +354,41 @@ export interface AssistantImageDto {
353
354
  _id: string;
354
355
  imageUrl: string;
355
356
  }
357
+ export interface ToolCall {
358
+ function: {
359
+ name: string;
360
+ arguments: {
361
+ slideNumber?: number;
362
+ progressObjectiveNumber?: number;
363
+ [key: string]: unknown;
364
+ };
365
+ };
366
+ id: string;
367
+ }
368
+ export interface CallEventMap {
369
+ 'call-start': undefined;
370
+ 'call-end': undefined;
371
+ 'speech-start': undefined;
372
+ 'speech-end': undefined;
373
+ error: Error;
374
+ message: {
375
+ type: string;
376
+ role: string;
377
+ transcript?: string;
378
+ transcriptType: 'final' | 'partial';
379
+ toolCallList?: ToolCall[];
380
+ toolCalls?: ToolCall[];
381
+ [key: string]: unknown;
382
+ };
383
+ 'volume-level': number;
384
+ 'call-details-ready': CallDTO;
385
+ 'call-ended-reason': {
386
+ reason: string;
387
+ isInactivity: boolean;
388
+ };
389
+ }
390
+ export type CallEventNames = keyof CallEventMap;
391
+ export type CallEventListener<K extends CallEventNames> = (payload: CallEventMap[K]) => void;
356
392
  /**
357
393
  * Represents the state of an active call stored in localStorage for recovery purposes.
358
394
  * Used to detect and recover abandoned calls after page refresh.
@@ -51,6 +51,7 @@ var AvatarLanguage;
51
51
  AvatarLanguage["French"] = "fr";
52
52
  AvatarLanguage["Arabic"] = "ar";
53
53
  AvatarLanguage["Russian"] = "ru";
54
+ AvatarLanguage["Ukrainian"] = "uk";
54
55
  })(AvatarLanguage || (exports.AvatarLanguage = AvatarLanguage = {}));
55
56
  class PersonalityAndBehaviourDto {
56
57
  riskTolerance;
@@ -1 +1 @@
1
- {"version":3,"file":"plato-intefaces.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/plato-intefaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plato-intefaces.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/plato-intefaces.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;GAYG;AACH,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,qCAAmB,CAAA;IACnB,uCAAqB,CAAA;IACrB,yCAAuB,CAAA;IACvB,qCAAmB,CAAA;AACrB,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B;AAED,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,4CAA4B,CAAA;IAC5B,qCAAqB,CAAA;IACrB,iEAAiD,CAAA;IACjD,iCAAiB,CAAA;AACnB,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AACD,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,oDAAqC,CAAA;IACrC,0CAA2B,CAAA;IAC3B,0EAA2D,CAAA;IAC3D,gFAAiE,CAAA;IACjE,qDAAsC,CAAA;IACtC,wEAAyD,CAAA;AAC3D,CAAC,EAPW,WAAW,2BAAX,WAAW,QAOtB;AAED,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,yCAAiB,CAAA;AACnB,CAAC,EAHW,oBAAoB,oCAApB,oBAAoB,QAG/B;AAED,IAAY,cASX;AATD,WAAY,cAAc;IACxB,gCAAc,CAAA;IACd,+BAAa,CAAA;IACb,gCAAc,CAAA;IACd,gCAAc,CAAA;IACd,+BAAa,CAAA;IACb,+BAAa,CAAA;IACb,gCAAc,CAAA;IACd,kCAAgB,CAAA;AAClB,CAAC,EATW,cAAc,8BAAd,cAAc,QASzB;AAED,MAAa,0BAA0B;IACrC,aAAa,CAAU;IACvB,mBAAmB,CAAU;IAC7B,eAAe,CAAU;IACzB,YAAY,CAAU;IACtB,cAAc,CAAU;CACzB;AAND,gEAMC;AAED,MAAa,sBAAsB;IACjC,gBAAgB,CAAU;IAC1B,gBAAgB,CAAU;IAC1B,uBAAuB,CAAU;IACjC,QAAQ,CAAU;CACnB;AALD,wDAKC;AAED,MAAa,UAAU;IACrB,2BAA2B,CAAU;IACrC,iBAAiB,CAAU;IAC3B,kBAAkB,CAAU;CAC7B;AAJD,gCAIC;AAED,MAAa,kBAAkB;IAC7B,IAAI,CAAU;IACd,mBAAmB,CAA0B;IAC7C,OAAO,CAAe;IACtB,uBAAuB,CAA8B;IACrD,OAAO,CAAc;IACrB,eAAe,CAAwB;CACxC;AAPD,gDAOC;AAED,MAAa,aAAa;IACxB,IAAI,CAAU;IACd,WAAW,CAAU;CACtB;AAHD,sCAGC;AAED,MAAa,mBAAmB;IAC9B,OAAO,CAAsB;IAC7B,OAAO,CAAiB;IACxB,QAAQ,CAAU;IAClB,UAAU,CAAU;IACpB,qBAAqB,CAAU;IAC/B,OAAO,CAAU;IACjB,cAAc,CAAkB;IAChC,UAAU,CAAU;IACpB,UAAU,CAAW;CACtB;AAVD,kDAUC;AAID,MAAa,4BAA4B;IACvC,KAAK,CAAmB;IACxB,IAAI,CAAU;IACd,IAAI,CAAa;CAClB;AAJD,oEAIC;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;AACnB,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B;AAED,MAAa,uBAAuB;IAClC,GAAG,CAAU;IACb,SAAS,CAAQ;IACjB,eAAe,CAAmB;CACnC;AAJD,0DAIC;AA6GD,IAAY,aAmBX;AAnBD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;IACrB,8CAA6B,CAAA;IAC7B,sDAAqC,CAAA;IACrC,gDAA+B,CAAA;IAC/B,8DAA6C,CAAA;IAC7C,sDAAqC,CAAA;IACrC,wDAAuC,CAAA;IACvC,8BAAa,CAAA;IACb,0CAAyB,CAAA;IACzB,0DAAyC,CAAA;IACzC,kEAAiD,CAAA;IACjD,kCAAiB,CAAA;IACjB,0DAAyC,CAAA;IACzC,kEAAiD,CAAA;IACjD,gEAA+C,CAAA;IAC/C,sCAAqB,CAAA;IACrB,gCAAe,CAAA;AACjB,CAAC,EAnBW,aAAa,6BAAb,aAAa,QAmBxB;AAgED,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,uCAAa,CAAA;IACb,2CAAiB,CAAA;IACjB,qCAAW,CAAA;AACb,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC;AA2BD,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,wCAAqB,CAAA;IACrB,0CAAuB,CAAA;IACvB,oCAAiB,CAAA;AACnB,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B"}
@@ -1,48 +1,11 @@
1
- import { CallDTO, CreateSimulationDto, CreationPhase, SimulationRecordingsDto, SimulationRecordingsQueryDto, SimulationDetailsDto, RecommendationsResponseDto, PdfSlideDto, CheckPdfStatusResponse, AssistantImageDto } from './plato-intefaces';
1
+ import { CallDTO, CreateSimulationDto, CreationPhase, SimulationRecordingsDto, SimulationRecordingsQueryDto, SimulationDetailsDto, RecommendationsResponseDto, PdfSlideDto, CheckPdfStatusResponse, AssistantImageDto, CallEventMap, CallEventNames, CallEventListener } from './plato-intefaces';
2
+ export type { CallEventMap, CallEventNames, CallEventListener };
3
+ export type { ToolCall } from './plato-intefaces';
2
4
  export interface ApiClientConfig {
3
5
  baseUrl: string;
4
6
  jwtToken: string;
5
7
  publicKey: string;
6
8
  }
7
- export interface ToolCall {
8
- function: {
9
- name: string;
10
- arguments: {
11
- slideNumber?: number;
12
- progressObjectiveNumber?: number;
13
- [key: string]: unknown;
14
- };
15
- };
16
- id: string;
17
- }
18
- /**
19
- * Event map for call events, providing strict typing for each event's payload.
20
- * There are no inputs for the events and all of them return void.
21
- */
22
- export interface CallEventMap {
23
- 'call-start': undefined;
24
- 'call-end': undefined;
25
- 'speech-start': undefined;
26
- 'speech-end': undefined;
27
- error: Error;
28
- message: {
29
- type: string;
30
- role: string;
31
- transcript?: string;
32
- transcriptType: 'final' | 'partial';
33
- toolCallList?: ToolCall[];
34
- toolCalls?: ToolCall[];
35
- [key: string]: unknown;
36
- };
37
- 'volume-level': number;
38
- 'call-details-ready': CallDTO;
39
- 'call-ended-reason': {
40
- reason: string;
41
- isInactivity: boolean;
42
- };
43
- }
44
- export type CallEventNames = keyof CallEventMap;
45
- export type CallEventListener<K extends CallEventNames> = (payload: CallEventMap[K]) => void;
46
9
  export declare class PlatoApiClient {
47
10
  private config;
48
11
  private http;
@@ -81,6 +44,10 @@ export declare class PlatoApiClient {
81
44
  * Internal: Emit SDK-specific events that are not part of Vapi.
82
45
  */
83
46
  private emit;
47
+ /**
48
+ * Remove all listeners for all call events.
49
+ */
50
+ private removeAllEventListeners;
84
51
  createSimulation(createSimulationParams: CreateSimulationDto): Promise<{
85
52
  simulationId: string;
86
53
  phase: CreationPhase;
@@ -102,10 +69,6 @@ export declare class PlatoApiClient {
102
69
  getCallDetails(callId: string): Promise<CallDTO>;
103
70
  getCallRecordings(queryParams: SimulationRecordingsQueryDto): Promise<SimulationRecordingsDto[]>;
104
71
  getCallRecording(callId: string): Promise<string>;
105
- /**
106
- * Remove all listeners for all call events.
107
- */
108
- private removeAllEventListeners;
109
72
  /**
110
73
  * Starts a call for the given simulation.
111
74
  * Polls the backend after call-end until the call is finalized, then emits 'call-details-ready'.
@@ -113,10 +76,10 @@ export declare class PlatoApiClient {
113
76
  startCall(simulationId: string): Promise<{
114
77
  stopCall: () => void;
115
78
  callId: string;
79
+ notifySlideChange: (slideNumber: number) => void;
116
80
  on: <K extends CallEventNames>(event: K, listener: CallEventListener<K>) => void;
117
81
  off: <K extends CallEventNames>(event: K, listener: CallEventListener<K>) => void;
118
82
  }>;
119
- private createCall;
120
83
  uploadPdfSlides(file: File | Blob): Promise<string>;
121
84
  getRecommendations(): Promise<RecommendationsResponseDto>;
122
85
  getSlideAnalysis(id: string): Promise<PdfSlideDto>;
@@ -19,16 +19,14 @@ const axios_1 = tslib_1.__importDefault(require("axios"));
19
19
  const web_1 = tslib_1.__importDefault(require("@vapi-ai/web"));
20
20
  const utils_1 = require("./utils");
21
21
  const constants_1 = require("./constants");
22
+ const call_helpers_1 = require("./call-helpers");
22
23
  class PlatoApiClient {
23
24
  config;
24
- // private static readonly ACTIVE_CALL_STORAGE_KEY = 'plato_active_call';
25
25
  http;
26
26
  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
27
27
  eventListeners = {};
28
28
  callControllerInstance;
29
29
  eventsAttached = false;
30
- // private currentCallId?: string;
31
- // private receivedAnyTranscript = false;
32
30
  // Vapi-native events (events that Vapi SDK supports)
33
31
  // Exclude our custom SDK events from this list
34
32
  vapiEventNames = [
@@ -132,125 +130,22 @@ class PlatoApiClient {
132
130
  listeners.forEach(listener => listener(payload));
133
131
  }
134
132
  }
135
- // /**
136
- // * Store active call state in localStorage for recovery purposes.
137
- // * @private
138
- // */
139
- // private storeCallState(state: ActiveCallState): void {
140
- // try {
141
- // localStorage.setItem(PlatoApiClient.ACTIVE_CALL_STORAGE_KEY, JSON.stringify(state));
142
- // } catch (error) {
143
- // console.warn('Failed to store call state:', error);
144
- // }
145
- // }
146
- // /**
147
- // * Retrieve active call state from localStorage.
148
- // * Validates the stored data and clears it if invalid.
149
- // * @private
150
- // * @returns The stored call state or null if not found or invalid
151
- // */
152
- // private getStoredCallState(): ActiveCallState | null {
153
- // try {
154
- // const stored = localStorage.getItem(PlatoApiClient.ACTIVE_CALL_STORAGE_KEY);
155
- // if (!stored) {
156
- // return null;
157
- // }
158
- // const parsed = JSON.parse(stored) as ActiveCallState;
159
- // // Validate required fields
160
- // if (!parsed.callId || !parsed.externalCallId || !parsed.simulationId || !parsed.startedAt) {
161
- // this.clearCallState();
162
- // return null;
163
- // }
164
- // return parsed;
165
- // } catch {
166
- // return null;
167
- // }
168
- // }
169
- // /**
170
- // * Clear active call state from localStorage.
171
- // * @private
172
- // */
173
- // private clearCallState(): void {
174
- // try {
175
- // localStorage.removeItem(PlatoApiClient.ACTIVE_CALL_STORAGE_KEY);
176
- // } catch {
177
- // // ignore
178
- // }
179
- // }
180
- // /**
181
- // * Check if a stored call is considered abandoned based on age.
182
- // * Calls older than 5 minutes are considered abandoned.
183
- // * @private
184
- // * @param state The call state to check
185
- // * @returns true if the call is abandoned, false otherwise
186
- // */
187
- // private isCallAbandoned(state: ActiveCallState): boolean {
188
- // const ABANDONMENT_THRESHOLD_MS = 5 * 60 * 1000; // 5 minutes
189
- // const startedAt = new Date(state.startedAt).getTime();
190
- // const now = Date.now();
191
- // const age = now - startedAt;
192
- // return age > ABANDONMENT_THRESHOLD_MS;
193
- // }
194
- // /**
195
- // * Recover and clean up any abandoned calls from previous sessions.
196
- // *
197
- // * This method should be called during application initialization,
198
- // * typically in ngOnInit() or useEffect(). It detects calls that were
199
- // * active when the page was last refreshed and notifies the backend
200
- // * to process them if they're older than 5 minutes.
201
- // *
202
- // * The backend endpoint is idempotent, so calling this method multiple
203
- // * times for the same call is safe.
204
- // *
205
- // * @returns Promise<boolean> - true if an abandoned call was recovered and processed
206
- // *
207
- // * @example
208
- // * // In Angular component
209
- // * async ngOnInit(): Promise<void> {
210
- // * const recovered = await this.platoClient.recoverAbandonedCall();
211
- // * if (recovered) {
212
- // * console.log('Recovered abandoned call from previous session');
213
- // * }
214
- // * }
215
- // *
216
- // * @example
217
- // * // In React component
218
- // * useEffect(() => {
219
- // * platoClient.recoverAbandonedCall()
220
- // * .then(recovered => {
221
- // * if (recovered) {
222
- // * console.log('Recovered abandoned call');
223
- // * }
224
- // * })
225
- // * .catch(console.error);
226
- // * }, []);
227
- // */
228
- // async recoverAbandonedCall(): Promise<boolean> {
229
- // try {
230
- // const storedState = this.getStoredCallState();
231
- // if (!storedState) {
232
- // return false;
233
- // }
234
- // if (!this.isCallAbandoned(storedState)) {
235
- // return false;
236
- // }
237
- // console.log('Detected abandoned call, notifying backend:', storedState.callId);
238
- // try {
239
- // const response = await this.http.post('/api/v1/postcall/call-ended', {
240
- // callId: storedState.callId,
241
- // });
242
- // console.log('Backend notified of abandoned call:', response.data);
243
- // } catch (error) {
244
- // console.error('Failed to notify backend of abandoned call:', error);
245
- // }
246
- // this.clearCallState();
247
- // return true;
248
- // } catch (error) {
249
- // console.error('Error during call recovery:', error);
250
- // this.clearCallState();
251
- // return false;
252
- // }
253
- // }
133
+ /**
134
+ * Remove all listeners for all call events.
135
+ */
136
+ removeAllEventListeners() {
137
+ if (!this.callControllerInstance)
138
+ return;
139
+ this.eventNames.forEach(event => {
140
+ (this.eventListeners[event] || []).forEach(listener => {
141
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
142
+ // @ts-expect-error
143
+ this.callControllerInstance?.off(event, listener);
144
+ });
145
+ this.eventListeners[event] = [];
146
+ });
147
+ this.eventsAttached = false;
148
+ }
254
149
  async createSimulation(createSimulationParams) {
255
150
  try {
256
151
  const res = await this.http.post('/api/v1/simulation', {
@@ -262,10 +157,7 @@ class PlatoApiClient {
262
157
  };
263
158
  }
264
159
  catch (e) {
265
- // if (axios.isAxiosError(e)) {
266
- // console.error('Error creating simulation:', e.response?.data.message);
267
- // }
268
- throw e;
160
+ (0, utils_1.wrapApiError)(e, 'Failed to create simulation');
269
161
  }
270
162
  }
271
163
  async checkSimulationStatus(simulationId) {
@@ -278,10 +170,7 @@ class PlatoApiClient {
278
170
  return res.data;
279
171
  }
280
172
  catch (e) {
281
- // if (axios.isAxiosError(e)) {
282
- // console.error('Error getting user simulations:', e.response?.data.message);
283
- // }
284
- throw e;
173
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch simulations');
285
174
  }
286
175
  }
287
176
  async getSimulationDetails(simulationId) {
@@ -290,10 +179,7 @@ class PlatoApiClient {
290
179
  return res.data;
291
180
  }
292
181
  catch (e) {
293
- // if (axios.isAxiosError(e)) {
294
- // console.error('Error getting simulation details:', e.response?.data.message);
295
- // }
296
- throw e;
182
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch simulation details');
297
183
  }
298
184
  }
299
185
  /**
@@ -306,10 +192,7 @@ class PlatoApiClient {
306
192
  await this.http.delete(`/api/v1/simulation/${simulationId}`);
307
193
  }
308
194
  catch (e) {
309
- // if (axios.isAxiosError(e)) {
310
- // console.error('Error deleting simulation:', e.response?.data.message);
311
- // }
312
- throw e;
195
+ (0, utils_1.wrapApiError)(e, 'Failed to delete simulation');
313
196
  }
314
197
  }
315
198
  async getCallDetails(callId) {
@@ -318,10 +201,7 @@ class PlatoApiClient {
318
201
  return res.data;
319
202
  }
320
203
  catch (e) {
321
- // if (axios.isAxiosError(e)) {
322
- // console.error('Error getting call details:', e.response?.data.message);
323
- // }
324
- throw e;
204
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch call details');
325
205
  }
326
206
  }
327
207
  async getCallRecordings(queryParams) {
@@ -332,10 +212,7 @@ class PlatoApiClient {
332
212
  return res.data;
333
213
  }
334
214
  catch (e) {
335
- // if (axios.isAxiosError(e)) {
336
- // console.error('Error getting call recordings:', e.response?.data.message);
337
- // }
338
- throw e;
215
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch call recordings');
339
216
  }
340
217
  }
341
218
  async getCallRecording(callId) {
@@ -344,139 +221,9 @@ class PlatoApiClient {
344
221
  return res.data;
345
222
  }
346
223
  catch (e) {
347
- // if (axios.isAxiosError(e)) {
348
- // console.error('Error getting call recording:', e.response?.data.message);
349
- // }
350
- throw e;
224
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch call recording');
351
225
  }
352
226
  }
353
- /**
354
- * Remove all listeners for all call events.
355
- */
356
- removeAllEventListeners() {
357
- if (!this.callControllerInstance)
358
- return;
359
- this.eventNames.forEach(event => {
360
- (this.eventListeners[event] || []).forEach(listener => {
361
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
362
- // @ts-expect-error
363
- this.callControllerInstance?.off(event, listener);
364
- });
365
- this.eventListeners[event] = [];
366
- });
367
- this.eventsAttached = false;
368
- }
369
- // async startCall(simulationId: string) {
370
- // // Check for any previous call state before starting new call
371
- // // If found, notify backend to ensure it gets processed
372
- // const storedState = this.getStoredCallState();
373
- // if (storedState) {
374
- // try {
375
- // await this.http.post('/api/v1/postcall/call-ended', {
376
- // callId: storedState.callId,
377
- // });
378
- // } catch {
379
- // // ignore
380
- // }
381
- // }
382
- //
383
- // // Now clear the state before starting new call
384
- // this.clearCallState();
385
- //
386
- // this.callControllerInstance = new Vapi(
387
- // this.config.publicKey,
388
- // 'https://db41aykk1gw9e.cloudfront.net' // base url
389
- // );
390
- // if (!this.eventsAttached) {
391
- // this.attachEvents();
392
- // }
393
- //
394
- // this.receivedAnyTranscript = false;
395
- // this.callControllerInstance.on(
396
- // 'message',
397
- // (msg: { transcript?: string; type?: string; status?: string; endedReason?: string }) => {
398
- // if (msg.transcript && msg.transcript.trim().length > 0) {
399
- // this.receivedAnyTranscript = true;
400
- // }
401
- // if (msg.type === 'status-update' && msg.status === 'ended' && msg.endedReason) {
402
- // const reason = msg.endedReason;
403
- // const isInactivity = /silence|inactivity/i.test(reason);
404
- // this.emit('call-ended-reason', { reason, isInactivity });
405
- // }
406
- // }
407
- // );
408
- //
409
- // // Internal call-end listener
410
- // this.callControllerInstance.on('call-end', () => {
411
- // this.onCallEnded().catch(() => {
412
- // // ignore
413
- // });
414
- // });
415
- //
416
- // const { data } = await this.http.get(`/api/v1/simulation/${simulationId}`);
417
- // const assistantId = data as string;
418
- //
419
- // let capturedVapiError: unknown;
420
- // const vapiErrorCapture = (error: unknown) => {
421
- // capturedVapiError = error;
422
- // };
423
- // this.callControllerInstance.on('error', vapiErrorCapture);
424
- //
425
- // let call: Call | null;
426
- // try {
427
- // call = await this.callControllerInstance.start(assistantId);
428
- // } catch (e) {
429
- // this.callControllerInstance.off('error', vapiErrorCapture);
430
- // this.callControllerInstance?.stop();
431
- // this.removeAllEventListeners();
432
- // this.clearCallState();
433
- // throw e;
434
- // }
435
- //
436
- // this.callControllerInstance.off('error', vapiErrorCapture);
437
- //
438
- // if (!call || !call.assistantId) {
439
- // this.callControllerInstance?.stop();
440
- // this.removeAllEventListeners();
441
- // this.clearCallState();
442
- // if (isCallConcurrencyError(capturedVapiError)) {
443
- // throw new CallConcurrencyLimitError();
444
- // }
445
- // throw new Error('Cannot start a call, please try again later');
446
- // }
447
- // try {
448
- // const apiCall = await this.createCall({
449
- // callId: call.id,
450
- // assistantId: call.assistantId,
451
- // });
452
- //
453
- // this.currentCallId = apiCall._id;
454
- //
455
- // this.storeCallState({
456
- // callId: apiCall._id,
457
- // externalCallId: call.id,
458
- // simulationId: simulationId,
459
- // startedAt: new Date().toISOString(),
460
- // version: 1,
461
- // });
462
- //
463
- // return {
464
- // stopCall: () => {
465
- // this.callControllerInstance?.stop();
466
- // },
467
- // callId: apiCall._id,
468
- // on: <K extends CallEventNames>(event: K, listener: CallEventListener<K>) =>
469
- // this.on(event, listener),
470
- // off: <K extends CallEventNames>(event: K, listener: CallEventListener<K>) =>
471
- // this.off(event, listener),
472
- // };
473
- // } catch (e) {
474
- // this.callControllerInstance?.stop();
475
- // this.removeAllEventListeners();
476
- // this.clearCallState();
477
- // throw e;
478
- // }
479
- // }
480
227
  /**
481
228
  * Starts a call for the given simulation.
482
229
  * Polls the backend after call-end until the call is finalized, then emits 'call-details-ready'.
@@ -499,58 +246,17 @@ class PlatoApiClient {
499
246
  if (!callId)
500
247
  return;
501
248
  const callAge = Date.now() - callStartedAt;
502
- // console.log(`[PlatoSDK] Call ended. Age: ${callAge}ms (${(callAge / 1000).toFixed(2)}s)`);
249
+ const resolvedCallId = callId;
250
+ const emit = (event, payload) => this.emit(event, payload);
251
+ const removeAll = () => this.removeAllEventListeners();
503
252
  if (callAge < 20000) {
504
253
  // Call ended within 20s — return whatever is in the DB without requiring a transcript
505
- const fetchAndEmit = async () => {
506
- try {
507
- // console.log('[PlatoSDK] Early end (<20s) — fetching call details immediately (no transcript check)');
508
- const { data } = await this.http.get(`/api/v1/simulation/call/${callId}`);
509
- this.emit('call-details-ready', data);
510
- }
511
- catch (e) {
512
- this.emit('error', e instanceof Error ? e : new Error('Failed to fetch call details'));
513
- }
514
- finally {
515
- this.removeAllEventListeners();
516
- }
517
- };
518
- void fetchAndEmit();
254
+ void (0, call_helpers_1.setPostCallEligibility)(this.http, resolvedCallId, false);
255
+ void (0, call_helpers_1.fetchAndEmitCallDetails)(this.http, resolvedCallId, emit, removeAll);
519
256
  return;
520
257
  }
521
- let stopped = false;
522
- let nextPollTimer;
523
- const poll = async () => {
524
- if (stopped)
525
- return;
526
- try {
527
- // console.log('[PlatoSDK] Polling for call details (waiting for transcript)...');
528
- const { data } = await this.http.get(`/api/v1/simulation/call/${callId}`);
529
- if (data.transcript) {
530
- stopped = true;
531
- clearTimeout(globalTimer);
532
- // console.log('[PlatoSDK] Transcript ready — emitting call-details-ready');
533
- this.emit('call-details-ready', data);
534
- this.removeAllEventListeners();
535
- return;
536
- }
537
- }
538
- catch {
539
- // ignore transient errors, keep polling
540
- }
541
- nextPollTimer = setTimeout(() => void poll(), 3000);
542
- };
543
- nextPollTimer = setTimeout(() => void poll(), 3000);
544
- const globalTimer = setTimeout(() => {
545
- stopped = true;
546
- clearTimeout(nextPollTimer);
547
- this.removeAllEventListeners();
548
- }, 60000);
549
- stopPolling = () => {
550
- stopped = true;
551
- clearTimeout(nextPollTimer);
552
- clearTimeout(globalTimer);
553
- };
258
+ void (0, call_helpers_1.setPostCallEligibility)(this.http, resolvedCallId, true);
259
+ ({ stopPolling } = (0, call_helpers_1.startPolling)(this.http, resolvedCallId, emit, removeAll));
554
260
  });
555
261
  const { data } = await this.http.get(`/api/v1/simulation/${simulationId}`);
556
262
  const assistantId = data;
@@ -560,7 +266,6 @@ class PlatoApiClient {
560
266
  };
561
267
  this.callControllerInstance.on('error', vapiErrorCapture);
562
268
  const callStartedAt = Date.now();
563
- // console.log('[PlatoSDK] Call start initiated at:', new Date(callStartedAt).toISOString());
564
269
  let call;
565
270
  try {
566
271
  call = await this.callControllerInstance.start(assistantId);
@@ -581,7 +286,7 @@ class PlatoApiClient {
581
286
  throw new Error('Cannot start a call, please try again later');
582
287
  }
583
288
  try {
584
- const apiCall = await this.createCall({
289
+ const apiCall = await (0, call_helpers_1.createCall)(this.http, {
585
290
  callId: call.id,
586
291
  assistantId: call.assistantId,
587
292
  });
@@ -592,6 +297,27 @@ class PlatoApiClient {
592
297
  stopPolling?.();
593
298
  },
594
299
  callId: apiCall._id,
300
+ /**
301
+ * Notify the assistant about the current slide the user is viewing.
302
+ * Call this whenever the user navigates to a new slide so the assistant
303
+ * has up-to-date context without requiring the user to say it aloud.
304
+ */
305
+ notifySlideChange: (slideNumber) => {
306
+ if (!this.callControllerInstance)
307
+ return;
308
+ this.callControllerInstance.send({
309
+ type: 'add-message',
310
+ message: {
311
+ role: 'system',
312
+ content: `BACKGROUND MEMORY UPDATE — IGNORE THIS COMPLETELY IN YOUR RESPONSE. Do not react, do not speak, do not acknowledge, do not change what you were saying. This is invisible to the conversation. Internal note only: user is on slide ${slideNumber}.`,
313
+ },
314
+ });
315
+ },
316
+ /**
317
+ * Subscribe to call events for this call with strict typing.
318
+ * @param event Event name
319
+ * @param listener Listener function
320
+ */
595
321
  on: (event, listener) => this.on(event, listener),
596
322
  off: (event, listener) => this.off(event, listener),
597
323
  };
@@ -602,51 +328,6 @@ class PlatoApiClient {
602
328
  throw e;
603
329
  }
604
330
  }
605
- // private async onCallEnded(): Promise<void> {
606
- // let callIdForRetry: string | undefined;
607
- // try {
608
- // if (!this.currentCallId) {
609
- // return;
610
- // }
611
- //
612
- // if (!this.receivedAnyTranscript) {
613
- // return;
614
- // }
615
- //
616
- // callIdForRetry = this.currentCallId;
617
- //
618
- // // First attempt
619
- // let response = await this.http.post('/api/v1/postcall/call-ended', {
620
- // callId: callIdForRetry,
621
- // });
622
- //
623
- // // If status is "processing", retry once immediately
624
- // if (response.data?.status === 'processing') {
625
- // response = await this.http.post('/api/v1/postcall/call-ended', {
626
- // callId: callIdForRetry,
627
- // });
628
- // }
629
- //
630
- // try {
631
- // const callDetails = await this.getCallDetails(callIdForRetry);
632
- // this.emit('call-details-ready', callDetails);
633
- // } catch {
634
- // // ignore
635
- // }
636
- // } catch {
637
- // // ignore
638
- // } finally {
639
- // this.currentCallId = undefined;
640
- // this.clearCallState();
641
- // this.removeAllEventListeners();
642
- // }
643
- // }
644
- async createCall(payload) {
645
- const response = await this.http.post('/api/v1/simulation/call', {
646
- ...payload,
647
- });
648
- return response.data;
649
- }
650
331
  async uploadPdfSlides(file) {
651
332
  try {
652
333
  const checkResult = (0, utils_1.checkFile)(file, constants_1.MAX_PDF_FILE_SIZE, constants_1.ALLOWED_PDF_MIME_TYPES);
@@ -690,13 +371,8 @@ class PlatoApiClient {
690
371
  }
691
372
  catch (uploadError) {
692
373
  // S3 upload failed - clean up the MongoDB record created during request-upload
693
- try {
694
- await this.deleteSlideAnalysis(pdfId);
695
- }
696
- catch {
697
- // console.error('Failed to clean up PDF record after upload failure:', deleteError);
698
- }
699
- throw uploadError;
374
+ await this.deleteSlideAnalysis(pdfId).catch(() => undefined);
375
+ (0, utils_1.wrapApiError)(uploadError, 'Failed to upload PDF to storage');
700
376
  }
701
377
  /*
702
378
  // replace const { presignedPost, pdfId } with const { presignedPost, objectKey, pdfId }
@@ -708,15 +384,7 @@ class PlatoApiClient {
708
384
  return pdfId;
709
385
  }
710
386
  catch (e) {
711
- // if (axios.isAxiosError(e)) {
712
- // console.error('Error uploading PDF slides:', e.response?.data?.message || e.message);
713
- // } else {
714
- // console.error(
715
- // 'Error uploading PDF slides:',
716
- // e instanceof Error ? e.message : 'Unknown error'
717
- // );
718
- // }
719
- throw e;
387
+ (0, utils_1.wrapApiError)(e, 'Failed to upload PDF');
720
388
  }
721
389
  }
722
390
  async getRecommendations() {
@@ -725,10 +393,7 @@ class PlatoApiClient {
725
393
  return res.data;
726
394
  }
727
395
  catch (e) {
728
- // if (axios.isAxiosError(e)) {
729
- // console.error('Error getting recommendations:', e.response?.data.message);
730
- // }
731
- throw e;
396
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch recommendations');
732
397
  }
733
398
  }
734
399
  async getSlideAnalysis(id) {
@@ -737,10 +402,7 @@ class PlatoApiClient {
737
402
  return res.data;
738
403
  }
739
404
  catch (e) {
740
- // if (axios.isAxiosError(e)) {
741
- // console.error('Error getting PDF slide analysis by ID:', e.response?.data.message);
742
- // }
743
- throw e;
405
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch slide analysis');
744
406
  }
745
407
  }
746
408
  async deleteSlideAnalysis(id) {
@@ -748,10 +410,7 @@ class PlatoApiClient {
748
410
  await this.http.delete(`/api/v1/pdfSlides/${id}`);
749
411
  }
750
412
  catch (e) {
751
- // if (axios.isAxiosError(e)) {
752
- // console.error('Error deleting PDF slide analysis:', e.response?.data.message);
753
- // }
754
- throw e;
413
+ (0, utils_1.wrapApiError)(e, 'Failed to delete slide analysis');
755
414
  }
756
415
  }
757
416
  async checkPdfStatus(id) {
@@ -760,10 +419,7 @@ class PlatoApiClient {
760
419
  return res.data;
761
420
  }
762
421
  catch (e) {
763
- // if (axios.isAxiosError(e)) {
764
- // console.error('Error checking PDF status:', e.response?.data.message);
765
- // }
766
- throw e;
422
+ (0, utils_1.wrapApiError)(e, 'Failed to check PDF status');
767
423
  }
768
424
  }
769
425
  async getAssistantImages() {
@@ -772,10 +428,7 @@ class PlatoApiClient {
772
428
  return res.data;
773
429
  }
774
430
  catch (e) {
775
- // if (axios.isAxiosError(e)) {
776
- // console.error('Error getting assistant images:', e.response?.data.message);
777
- // }
778
- throw e;
431
+ (0, utils_1.wrapApiError)(e, 'Failed to fetch assistant images');
779
432
  }
780
433
  }
781
434
  /**
@@ -790,10 +443,7 @@ class PlatoApiClient {
790
443
  await this.http.delete(`/api/v1/simulation/call/${callId}`);
791
444
  }
792
445
  catch (e) {
793
- // if (axios.isAxiosError(e)) {
794
- // console.error('Error deleting call:', e.response?.data.message);
795
- // }
796
- throw e;
446
+ (0, utils_1.wrapApiError)(e, 'Failed to delete call');
797
447
  }
798
448
  }
799
449
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plato-sdk.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/plato-sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plato-sdk.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/plato-sdk.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare class PdfAlreadyExistsError extends Error {
5
5
  readonly pdfId: string;
6
6
  constructor(pdfId: string);
7
7
  }
8
+ export declare function wrapApiError(e: unknown, operation: string): never;
8
9
  export declare function isCallConcurrencyError(err: unknown): boolean;
9
10
  /**
10
11
  * Validates a file against size and type constraints.
package/src/lib/utils.js CHANGED
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PdfAlreadyExistsError = exports.CallConcurrencyLimitError = void 0;
4
+ exports.wrapApiError = wrapApiError;
4
5
  exports.isCallConcurrencyError = isCallConcurrencyError;
5
6
  exports.checkFile = checkFile;
6
7
  exports.calculateHash = calculateHash;
7
8
  exports.getPdfPageCount = getPdfPageCount;
9
+ const tslib_1 = require("tslib");
8
10
  /**
9
11
  * Copyright (c) 2025 ctcHealth. All rights reserved.
10
12
  *
@@ -18,6 +20,7 @@ exports.getPdfPageCount = getPdfPageCount;
18
20
  *
19
21
  * For internal use only.
20
22
  */
23
+ const axios_1 = tslib_1.__importDefault(require("axios"));
21
24
  const pdf_lib_1 = require("pdf-lib");
22
25
  class CallConcurrencyLimitError extends Error {
23
26
  constructor() {
@@ -35,6 +38,25 @@ class PdfAlreadyExistsError extends Error {
35
38
  }
36
39
  }
37
40
  exports.PdfAlreadyExistsError = PdfAlreadyExistsError;
41
+ const HTTP_STATUS_REASONS = {
42
+ 401: 'authentication required',
43
+ 403: 'permission denied',
44
+ 404: 'not found',
45
+ 409: 'conflict',
46
+ };
47
+ function wrapApiError(e, operation) {
48
+ if (axios_1.default.isAxiosError(e)) {
49
+ const status = e.response?.status;
50
+ const reason = !e.response
51
+ ? 'network error, please check your connection'
52
+ : (status && HTTP_STATUS_REASONS[status]) ??
53
+ (status && status >= 500 ? 'server error, please try again' : 'request failed');
54
+ throw new Error(`${operation}: ${reason}.`, { cause: e });
55
+ }
56
+ if (e instanceof Error)
57
+ throw e;
58
+ throw new Error(`${operation}: unexpected error.`);
59
+ }
38
60
  function isCallConcurrencyError(err) {
39
61
  if (!err || typeof err !== 'object')
40
62
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/utils.ts"],"names":[],"mappings":"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"}