@ctchealth/plato-sdk 0.0.20 → 0.0.21

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
@@ -17,7 +17,7 @@ All API requests require authentication via a client token. Pass a pre-signed JW
17
17
  - Comprehensive event system for call management
18
18
  - Type-safe API with full TypeScript support
19
19
  - Medical training simulation configuration
20
- - Simulation persistence and recovery across page reloads
20
+ - Simulation persistence across page reloads
21
21
 
22
22
  ## Installation
23
23
 
@@ -599,6 +599,7 @@ const inProgress = simulations.find(
599
599
  );
600
600
  ```
601
601
 
602
+ <!--
602
603
  ## Call Recovery
603
604
 
604
605
  The SDK automatically handles call recovery in case of page refreshes or browser closures during active calls. This ensures that call data is never lost and all calls get properly processed by the backend, even if the page is refreshed while a call is in progress.
@@ -900,6 +901,7 @@ A: The `recoverAbandonedCall()` method returns `true` when a call is recovered.
900
901
  **Q: What if the backend is down during recovery?**
901
902
 
902
903
  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.
904
+ -->
903
905
 
904
906
  ## Event System
905
907
 
@@ -914,6 +916,7 @@ The SDK provides a comprehensive event system for managing voice calls:
914
916
  - `message`: Triggered when a message is received (contains transcript and metadata)
915
917
  - `volume-level`: Triggered with volume level updates (number)
916
918
  - `error`: Triggered when an error occurs
919
+ - `call-ended-reason`: Triggered just before `call-end` with the reason the call was terminated (e.g. silence timeout). Use this to show the user a contextual message immediately
917
920
  - `call-details-ready`: Triggered when post-call processing completes and call details are available (includes full `CallDTO` with transcript, summary, ratings, and evaluation)
918
921
 
919
922
  ### Event Usage
@@ -939,6 +942,29 @@ call.on('call-details-ready', callDetails => {
939
942
  });
940
943
  ```
941
944
 
945
+ ## Detecting Why a Call Ended
946
+
947
+ The `call-ended-reason` event fires **just before** `call-end`, giving you the reason the call was terminated in time to update the UI before any post-call processing begins.
948
+
949
+ ### Usage
950
+
951
+ ```typescript
952
+ call.on('call-ended-reason', ({ reason, isInactivity }) => {
953
+ // reason — raw string from the platform, e.g. "silence-timed-out"
954
+ // isInactivity — true when reason contains "silence" or "inactivity"
955
+ });
956
+ ```
957
+
958
+ ### Known Reason Values
959
+
960
+ | `reason` | `isInactivity` | When it occurs |
961
+ | --------------------- | -------------- | ------------------------------------------------------- |
962
+ | `silence-timed-out` | `true` | No speech detected within the configured silence window |
963
+ | `customer-ended-call` | `false` | The user clicked "End Call" |
964
+ | `pipeline-error` | `false` | An internal platform error terminated the call |
965
+
966
+ > **Note:** The `reason` field reflects the raw value from the underlying voice platform. New values may be introduced over time. Always handle unknown reasons gracefully by falling back to a generic message.
967
+
942
968
  ## Automatic Post-Call Feedback
943
969
 
944
970
  The SDK automatically fetches detailed call information after each call ends and completes post-call processing. This includes comprehensive feedback such as transcript, summary, evaluation metrics, strengths, weaknesses, and ratings.
@@ -1118,10 +1144,22 @@ call.on('call-details-ready', callDetails => {
1118
1144
 
1119
1145
  ### Timing Considerations
1120
1146
 
1147
+ - `call-ended-reason`: Fires immediately before `call-end`, with the reason the call stopped
1121
1148
  - `call-end`: Fires immediately when the call stops
1122
1149
  - `call-details-ready`: Fires after backend processing completes (typically 2-5 seconds after call ends)
1123
1150
 
1124
- Plan your UX accordingly—show a loading/processing state between these two events.
1151
+ Plan your UX accordingly—show a contextual end message on `call-ended-reason`, then a loading/processing state until `call-details-ready` arrives.
1152
+
1153
+ ### Call Duration and Data Availability
1154
+
1155
+ The quality of data returned in `call-details-ready` depends on the duration of the call:
1156
+
1157
+ | Call duration | Behaviour |
1158
+ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1159
+ | **< ~15 seconds** | `call-details-ready` fires immediately after `call-end` with whatever the database currently holds. Fields like `transcript`, `summary`, `score`, `strengths`, and `weaknesses` will typically be empty or zero — the call was too short to generate a meaningful analysis. |
1160
+ | **≥ ~15 seconds** | The SDK polls the backend until Vapi's post-call analysis is ready (transcript present), then emits `call-details-ready` with the fully populated `CallDTO`. |
1161
+
1162
+ > **Note:** The ~15 second threshold accounts for the Vapi connection handshake (typically 1–5 seconds) plus a minimum amount of conversation time required for analysis to be generated. Always handle empty fields gracefully regardless of call length.
1125
1163
 
1126
1164
  ## Data Types
1127
1165
 
@@ -1429,6 +1467,31 @@ try {
1429
1467
  }
1430
1468
  ```
1431
1469
 
1470
+ ### Concurrency Limit Error
1471
+
1472
+ When the platform has reached its maximum number of simultaneous active calls, `startCall()` throws a `CallConcurrencyLimitError`. This is a platform-wide limit, not user-specific. You should catch this specifically and show the user a clear message rather than a generic error.
1473
+
1474
+ ```typescript
1475
+ import { CallConcurrencyLimitError } from 'plato-sdk';
1476
+
1477
+ const handleStartCall = async (simulationId: string) => {
1478
+ try {
1479
+ const call = await platoClient.startCall(simulationId);
1480
+
1481
+ call.on('call-start', () => setCallActive(true));
1482
+ call.on('call-end', () => setCallActive(false));
1483
+ } catch (error) {
1484
+ if (error instanceof CallConcurrencyLimitError) {
1485
+ setErrorMessage(
1486
+ 'The platform has reached its maximum number of simultaneous calls. Please try again in a moment.'
1487
+ );
1488
+ } else {
1489
+ setErrorMessage('Failed to start call. Please try again.');
1490
+ }
1491
+ }
1492
+ };
1493
+ ```
1494
+
1432
1495
  ## Support
1433
1496
 
1434
1497
  For support and questions, please contact the development team.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ctchealth/plato-sdk",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0",
6
6
  "@vapi-ai/web": "2.1.8",
@@ -125,10 +125,6 @@ export interface CallDTO {
125
125
  * call ID obtained
126
126
  */
127
127
  callId: string;
128
- /**
129
- * call User ID
130
- */
131
- platoUserId: string;
132
128
  /**
133
129
  * call Assistant ID
134
130
  */
@@ -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":"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"}
@@ -36,17 +36,19 @@ export interface CallEventMap {
36
36
  };
37
37
  'volume-level': number;
38
38
  'call-details-ready': CallDTO;
39
+ 'call-ended-reason': {
40
+ reason: string;
41
+ isInactivity: boolean;
42
+ };
39
43
  }
40
44
  export type CallEventNames = keyof CallEventMap;
41
45
  export type CallEventListener<K extends CallEventNames> = (payload: CallEventMap[K]) => void;
42
46
  export declare class PlatoApiClient {
43
47
  private config;
44
- private static readonly ACTIVE_CALL_STORAGE_KEY;
45
48
  private http;
46
49
  private eventListeners;
47
50
  private callControllerInstance?;
48
51
  private eventsAttached;
49
- private currentCallId?;
50
52
  private vapiEventNames;
51
53
  eventNames: CallEventNames[];
52
54
  constructor(config: ApiClientConfig);
@@ -79,66 +81,6 @@ export declare class PlatoApiClient {
79
81
  * Internal: Emit SDK-specific events that are not part of Vapi.
80
82
  */
81
83
  private emit;
82
- /**
83
- * Store active call state in localStorage for recovery purposes.
84
- * @private
85
- */
86
- private storeCallState;
87
- /**
88
- * Retrieve active call state from localStorage.
89
- * Validates the stored data and clears it if invalid.
90
- * @private
91
- * @returns The stored call state or null if not found or invalid
92
- */
93
- private getStoredCallState;
94
- /**
95
- * Clear active call state from localStorage.
96
- * @private
97
- */
98
- private clearCallState;
99
- /**
100
- * Check if a stored call is considered abandoned based on age.
101
- * Calls older than 5 minutes are considered abandoned.
102
- * @private
103
- * @param state The call state to check
104
- * @returns true if the call is abandoned, false otherwise
105
- */
106
- private isCallAbandoned;
107
- /**
108
- * Recover and clean up any abandoned calls from previous sessions.
109
- *
110
- * This method should be called during application initialization,
111
- * typically in ngOnInit() or useEffect(). It detects calls that were
112
- * active when the page was last refreshed and notifies the backend
113
- * to process them if they're older than 5 minutes.
114
- *
115
- * The backend endpoint is idempotent, so calling this method multiple
116
- * times for the same call is safe.
117
- *
118
- * @returns Promise<boolean> - true if an abandoned call was recovered and processed
119
- *
120
- * @example
121
- * // In Angular component
122
- * async ngOnInit(): Promise<void> {
123
- * const recovered = await this.platoClient.recoverAbandonedCall();
124
- * if (recovered) {
125
- * console.log('Recovered abandoned call from previous session');
126
- * }
127
- * }
128
- *
129
- * @example
130
- * // In React component
131
- * useEffect(() => {
132
- * platoClient.recoverAbandonedCall()
133
- * .then(recovered => {
134
- * if (recovered) {
135
- * console.log('Recovered abandoned call');
136
- * }
137
- * })
138
- * .catch(console.error);
139
- * }, []);
140
- */
141
- recoverAbandonedCall(): Promise<boolean>;
142
84
  createSimulation(createSimulationParams: CreateSimulationDto): Promise<{
143
85
  simulationId: string;
144
86
  phase: CreationPhase;
@@ -164,23 +106,16 @@ export declare class PlatoApiClient {
164
106
  * Remove all listeners for all call events.
165
107
  */
166
108
  private removeAllEventListeners;
109
+ /**
110
+ * Starts a call for the given simulation.
111
+ * Polls the backend after call-end until the call is finalized, then emits 'call-details-ready'.
112
+ */
167
113
  startCall(simulationId: string): Promise<{
168
114
  stopCall: () => void;
169
115
  callId: string;
170
- /**
171
- * Subscribe to call events for this call with strict typing.
172
- * @param event Event name
173
- * @param listener Listener function
174
- */
175
116
  on: <K extends CallEventNames>(event: K, listener: CallEventListener<K>) => void;
176
- /**
177
- * Unsubscribe from call events for this call with strict typing.
178
- * @param event Event name
179
- * @param listener Listener function
180
- */
181
117
  off: <K extends CallEventNames>(event: K, listener: CallEventListener<K>) => void;
182
118
  }>;
183
- private onCallEnded;
184
119
  private createCall;
185
120
  uploadPdfSlides(file: File | Blob): Promise<string>;
186
121
  getRecommendations(): Promise<RecommendationsResponseDto>;
@@ -21,13 +21,14 @@ const utils_1 = require("./utils");
21
21
  const constants_1 = require("./constants");
22
22
  class PlatoApiClient {
23
23
  config;
24
- static ACTIVE_CALL_STORAGE_KEY = 'plato_active_call';
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
- currentCallId;
30
+ // private currentCallId?: string;
31
+ // private receivedAnyTranscript = false;
31
32
  // Vapi-native events (events that Vapi SDK supports)
32
33
  // Exclude our custom SDK events from this list
33
34
  vapiEventNames = [
@@ -49,6 +50,7 @@ class PlatoApiClient {
49
50
  'message',
50
51
  'volume-level',
51
52
  'call-details-ready',
53
+ 'call-ended-reason',
52
54
  ];
53
55
  constructor(config) {
54
56
  this.config = config;
@@ -130,132 +132,125 @@ class PlatoApiClient {
130
132
  listeners.forEach(listener => listener(payload));
131
133
  }
132
134
  }
133
- /**
134
- * Store active call state in localStorage for recovery purposes.
135
- * @private
136
- */
137
- storeCallState(state) {
138
- try {
139
- localStorage.setItem(PlatoApiClient.ACTIVE_CALL_STORAGE_KEY, JSON.stringify(state));
140
- }
141
- catch (error) {
142
- console.warn('Failed to store call state:', error);
143
- }
144
- }
145
- /**
146
- * Retrieve active call state from localStorage.
147
- * Validates the stored data and clears it if invalid.
148
- * @private
149
- * @returns The stored call state or null if not found or invalid
150
- */
151
- getStoredCallState() {
152
- try {
153
- const stored = localStorage.getItem(PlatoApiClient.ACTIVE_CALL_STORAGE_KEY);
154
- if (!stored) {
155
- return null;
156
- }
157
- const parsed = JSON.parse(stored);
158
- // Validate required fields
159
- if (!parsed.callId || !parsed.externalCallId || !parsed.simulationId || !parsed.startedAt) {
160
- console.warn('Invalid stored call state, clearing');
161
- this.clearCallState();
162
- return null;
163
- }
164
- return parsed;
165
- }
166
- catch (error) {
167
- console.warn('Failed to retrieve call state:', error);
168
- return null;
169
- }
170
- }
171
- /**
172
- * Clear active call state from localStorage.
173
- * @private
174
- */
175
- clearCallState() {
176
- try {
177
- localStorage.removeItem(PlatoApiClient.ACTIVE_CALL_STORAGE_KEY);
178
- }
179
- catch (error) {
180
- console.warn('Failed to clear call state:', error);
181
- }
182
- }
183
- /**
184
- * Check if a stored call is considered abandoned based on age.
185
- * Calls older than 5 minutes are considered abandoned.
186
- * @private
187
- * @param state The call state to check
188
- * @returns true if the call is abandoned, false otherwise
189
- */
190
- isCallAbandoned(state) {
191
- const ABANDONMENT_THRESHOLD_MS = 5 * 60 * 1000; // 5 minutes
192
- const startedAt = new Date(state.startedAt).getTime();
193
- const now = Date.now();
194
- const age = now - startedAt;
195
- return age > ABANDONMENT_THRESHOLD_MS;
196
- }
197
- /**
198
- * Recover and clean up any abandoned calls from previous sessions.
199
- *
200
- * This method should be called during application initialization,
201
- * typically in ngOnInit() or useEffect(). It detects calls that were
202
- * active when the page was last refreshed and notifies the backend
203
- * to process them if they're older than 5 minutes.
204
- *
205
- * The backend endpoint is idempotent, so calling this method multiple
206
- * times for the same call is safe.
207
- *
208
- * @returns Promise<boolean> - true if an abandoned call was recovered and processed
209
- *
210
- * @example
211
- * // In Angular component
212
- * async ngOnInit(): Promise<void> {
213
- * const recovered = await this.platoClient.recoverAbandonedCall();
214
- * if (recovered) {
215
- * console.log('Recovered abandoned call from previous session');
216
- * }
217
- * }
218
- *
219
- * @example
220
- * // In React component
221
- * useEffect(() => {
222
- * platoClient.recoverAbandonedCall()
223
- * .then(recovered => {
224
- * if (recovered) {
225
- * console.log('Recovered abandoned call');
226
- * }
227
- * })
228
- * .catch(console.error);
229
- * }, []);
230
- */
231
- async recoverAbandonedCall() {
232
- try {
233
- const storedState = this.getStoredCallState();
234
- if (!storedState) {
235
- return false;
236
- }
237
- if (!this.isCallAbandoned(storedState)) {
238
- return false;
239
- }
240
- console.log('Detected abandoned call, notifying backend:', storedState.callId);
241
- try {
242
- const response = await this.http.post('/api/v1/postcall/call-ended', {
243
- callId: storedState.callId,
244
- });
245
- console.log('Backend notified of abandoned call:', response.data);
246
- }
247
- catch (error) {
248
- console.error('Failed to notify backend of abandoned call:', error);
249
- }
250
- this.clearCallState();
251
- return true;
252
- }
253
- catch (error) {
254
- console.error('Error during call recovery:', error);
255
- this.clearCallState();
256
- return false;
257
- }
258
- }
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
+ // }
259
254
  async createSimulation(createSimulationParams) {
260
255
  try {
261
256
  const res = await this.http.post('/api/v1/simulation', {
@@ -267,9 +262,9 @@ class PlatoApiClient {
267
262
  };
268
263
  }
269
264
  catch (e) {
270
- if (axios_1.default.isAxiosError(e)) {
271
- console.error('Error creating simulation:', e.response?.data.message);
272
- }
265
+ // if (axios.isAxiosError(e)) {
266
+ // console.error('Error creating simulation:', e.response?.data.message);
267
+ // }
273
268
  throw e;
274
269
  }
275
270
  }
@@ -283,9 +278,9 @@ class PlatoApiClient {
283
278
  return res.data;
284
279
  }
285
280
  catch (e) {
286
- if (axios_1.default.isAxiosError(e)) {
287
- console.error('Error getting user simulations:', e.response?.data.message);
288
- }
281
+ // if (axios.isAxiosError(e)) {
282
+ // console.error('Error getting user simulations:', e.response?.data.message);
283
+ // }
289
284
  throw e;
290
285
  }
291
286
  }
@@ -295,9 +290,9 @@ class PlatoApiClient {
295
290
  return res.data;
296
291
  }
297
292
  catch (e) {
298
- if (axios_1.default.isAxiosError(e)) {
299
- console.error('Error getting simulation details:', e.response?.data.message);
300
- }
293
+ // if (axios.isAxiosError(e)) {
294
+ // console.error('Error getting simulation details:', e.response?.data.message);
295
+ // }
301
296
  throw e;
302
297
  }
303
298
  }
@@ -311,9 +306,9 @@ class PlatoApiClient {
311
306
  await this.http.delete(`/api/v1/simulation/${simulationId}`);
312
307
  }
313
308
  catch (e) {
314
- if (axios_1.default.isAxiosError(e)) {
315
- console.error('Error deleting simulation:', e.response?.data.message);
316
- }
309
+ // if (axios.isAxiosError(e)) {
310
+ // console.error('Error deleting simulation:', e.response?.data.message);
311
+ // }
317
312
  throw e;
318
313
  }
319
314
  }
@@ -323,9 +318,9 @@ class PlatoApiClient {
323
318
  return res.data;
324
319
  }
325
320
  catch (e) {
326
- if (axios_1.default.isAxiosError(e)) {
327
- console.error('Error getting call details:', e.response?.data.message);
328
- }
321
+ // if (axios.isAxiosError(e)) {
322
+ // console.error('Error getting call details:', e.response?.data.message);
323
+ // }
329
324
  throw e;
330
325
  }
331
326
  }
@@ -337,9 +332,9 @@ class PlatoApiClient {
337
332
  return res.data;
338
333
  }
339
334
  catch (e) {
340
- if (axios_1.default.isAxiosError(e)) {
341
- console.error('Error getting call recordings:', e.response?.data.message);
342
- }
335
+ // if (axios.isAxiosError(e)) {
336
+ // console.error('Error getting call recordings:', e.response?.data.message);
337
+ // }
343
338
  throw e;
344
339
  }
345
340
  }
@@ -349,9 +344,9 @@ class PlatoApiClient {
349
344
  return res.data;
350
345
  }
351
346
  catch (e) {
352
- if (axios_1.default.isAxiosError(e)) {
353
- console.error('Error getting call recording:', e.response?.data.message);
354
- }
347
+ // if (axios.isAxiosError(e)) {
348
+ // console.error('Error getting call recording:', e.response?.data.message);
349
+ // }
355
350
  throw e;
356
351
  }
357
352
  }
@@ -371,39 +366,218 @@ class PlatoApiClient {
371
366
  });
372
367
  this.eventsAttached = false;
373
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
+ /**
481
+ * Starts a call for the given simulation.
482
+ * Polls the backend after call-end until the call is finalized, then emits 'call-details-ready'.
483
+ */
374
484
  async startCall(simulationId) {
375
- // Check for any previous call state before starting new call
376
- // If found, notify backend to ensure it gets processed
377
- const storedState = this.getStoredCallState();
378
- if (storedState) {
379
- console.log('Found previous call state, notifying backend before starting new call:', storedState.callId);
380
- try {
381
- await this.http.post('/api/v1/postcall/call-ended', {
382
- callId: storedState.callId,
383
- });
384
- console.log('Backend notified of previous call');
385
- }
386
- catch (error) {
387
- console.error('Failed to notify backend of previous call:', error);
388
- }
389
- }
390
- // Now clear the state before starting new call
391
- this.clearCallState();
392
- this.callControllerInstance = new web_1.default(this.config.publicKey, 'https://db41aykk1gw9e.cloudfront.net' // base url
393
- );
485
+ this.callControllerInstance = new web_1.default(this.config.publicKey, 'https://db41aykk1gw9e.cloudfront.net');
394
486
  if (!this.eventsAttached) {
395
487
  this.attachEvents();
396
488
  }
397
- // Internal call-end listener
489
+ this.callControllerInstance.on('message', (msg) => {
490
+ if (msg.type === 'status-update' && msg.status === 'ended' && msg.endedReason) {
491
+ const reason = msg.endedReason;
492
+ const isInactivity = /silence|inactivity/i.test(reason);
493
+ this.emit('call-ended-reason', { reason, isInactivity });
494
+ }
495
+ });
496
+ let callId;
497
+ let stopPolling;
398
498
  this.callControllerInstance.on('call-end', () => {
399
- this.onCallEnded().catch(error => {
400
- console.error('Error in onCallEnded: ', error);
401
- });
499
+ if (!callId)
500
+ return;
501
+ const callAge = Date.now() - callStartedAt;
502
+ // console.log(`[PlatoSDK] Call ended. Age: ${callAge}ms (${(callAge / 1000).toFixed(2)}s)`);
503
+ if (callAge < 20000) {
504
+ // 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();
519
+ return;
520
+ }
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
+ };
402
554
  });
403
555
  const { data } = await this.http.get(`/api/v1/simulation/${simulationId}`);
404
556
  const assistantId = data;
405
- const call = await this.callControllerInstance.start(assistantId);
557
+ let capturedVapiError;
558
+ const vapiErrorCapture = (error) => {
559
+ capturedVapiError = error;
560
+ };
561
+ this.callControllerInstance.on('error', vapiErrorCapture);
562
+ const callStartedAt = Date.now();
563
+ // console.log('[PlatoSDK] Call start initiated at:', new Date(callStartedAt).toISOString());
564
+ let call;
565
+ try {
566
+ call = await this.callControllerInstance.start(assistantId);
567
+ }
568
+ catch (e) {
569
+ this.callControllerInstance.off('error', vapiErrorCapture);
570
+ this.callControllerInstance.stop();
571
+ this.removeAllEventListeners();
572
+ throw e;
573
+ }
574
+ this.callControllerInstance.off('error', vapiErrorCapture);
406
575
  if (!call || !call.assistantId) {
576
+ this.callControllerInstance.stop();
577
+ this.removeAllEventListeners();
578
+ if ((0, utils_1.isCallConcurrencyError)(capturedVapiError)) {
579
+ throw new utils_1.CallConcurrencyLimitError();
580
+ }
407
581
  throw new Error('Cannot start a call, please try again later');
408
582
  }
409
583
  try {
@@ -411,82 +585,62 @@ class PlatoApiClient {
411
585
  callId: call.id,
412
586
  assistantId: call.assistantId,
413
587
  });
414
- // Store the callId for use in onCallEnded
415
- this.currentCallId = apiCall._id;
416
- // Store call state in localStorage for recovery
417
- this.storeCallState({
418
- callId: apiCall._id,
419
- externalCallId: call.id,
420
- simulationId: simulationId,
421
- startedAt: new Date().toISOString(),
422
- version: 1,
423
- });
424
- // Return stopCall, callId, and event subscription methods with strict typing
588
+ callId = apiCall._id;
425
589
  return {
426
590
  stopCall: () => {
427
591
  this.callControllerInstance?.stop();
428
- this.removeAllEventListeners();
429
- this.clearCallState();
592
+ stopPolling?.();
430
593
  },
431
594
  callId: apiCall._id,
432
- /**
433
- * Subscribe to call events for this call with strict typing.
434
- * @param event Event name
435
- * @param listener Listener function
436
- */
437
595
  on: (event, listener) => this.on(event, listener),
438
- /**
439
- * Unsubscribe from call events for this call with strict typing.
440
- * @param event Event name
441
- * @param listener Listener function
442
- */
443
596
  off: (event, listener) => this.off(event, listener),
444
597
  };
445
598
  }
446
599
  catch (e) {
447
600
  this.callControllerInstance?.stop();
448
601
  this.removeAllEventListeners();
449
- this.clearCallState();
450
602
  throw e;
451
603
  }
452
604
  }
453
- async onCallEnded() {
454
- let callIdForRetry;
455
- try {
456
- if (!this.currentCallId) {
457
- return;
458
- }
459
- callIdForRetry = this.currentCallId;
460
- // First attempt
461
- let response = await this.http.post('/api/v1/postcall/call-ended', {
462
- callId: callIdForRetry,
463
- });
464
- // If status is "processing", retry once immediately
465
- if (response.data?.status === 'processing') {
466
- response = await this.http.post('/api/v1/postcall/call-ended', {
467
- callId: callIdForRetry,
468
- });
469
- }
470
- // After onCallEnded completes successfully, fetch and emit call details
471
- try {
472
- const callDetails = await this.getCallDetails(callIdForRetry);
473
- this.emit('call-details-ready', callDetails);
474
- }
475
- catch (error) {
476
- console.error('Error fetching call details after call ended:', error);
477
- // Don't throw - we don't want to break the onCallEnded flow
478
- }
479
- }
480
- catch {
481
- // Silently handle errors in post-call processing
482
- }
483
- finally {
484
- // Clean up the callId after processing (success or failure)
485
- this.currentCallId = undefined;
486
- // Clear stored call state after normal call end
487
- this.clearCallState();
488
- }
489
- }
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
+ // }
490
644
  async createCall(payload) {
491
645
  const response = await this.http.post('/api/v1/simulation/call', {
492
646
  ...payload,
@@ -533,8 +687,8 @@ class PlatoApiClient {
533
687
  try {
534
688
  await this.deleteSlideAnalysis(pdfId);
535
689
  }
536
- catch (deleteError) {
537
- console.error('Failed to clean up PDF record after upload failure:', deleteError);
690
+ catch {
691
+ // console.error('Failed to clean up PDF record after upload failure:', deleteError);
538
692
  }
539
693
  throw uploadError;
540
694
  }
@@ -548,12 +702,14 @@ class PlatoApiClient {
548
702
  return pdfId;
549
703
  }
550
704
  catch (e) {
551
- if (axios_1.default.isAxiosError(e)) {
552
- console.error('Error uploading PDF slides:', e.response?.data?.message || e.message);
553
- }
554
- else {
555
- console.error('Error uploading PDF slides:', e instanceof Error ? e.message : 'Unknown error');
556
- }
705
+ // if (axios.isAxiosError(e)) {
706
+ // console.error('Error uploading PDF slides:', e.response?.data?.message || e.message);
707
+ // } else {
708
+ // console.error(
709
+ // 'Error uploading PDF slides:',
710
+ // e instanceof Error ? e.message : 'Unknown error'
711
+ // );
712
+ // }
557
713
  throw e;
558
714
  }
559
715
  }
@@ -563,9 +719,9 @@ class PlatoApiClient {
563
719
  return res.data;
564
720
  }
565
721
  catch (e) {
566
- if (axios_1.default.isAxiosError(e)) {
567
- console.error('Error getting recommendations:', e.response?.data.message);
568
- }
722
+ // if (axios.isAxiosError(e)) {
723
+ // console.error('Error getting recommendations:', e.response?.data.message);
724
+ // }
569
725
  throw e;
570
726
  }
571
727
  }
@@ -577,9 +733,9 @@ class PlatoApiClient {
577
733
  return res.data;
578
734
  }
579
735
  catch (e) {
580
- if (axios_1.default.isAxiosError(e)) {
581
- console.error('Error getting PDF slides analysis:', e.response?.data.message);
582
- }
736
+ // if (axios.isAxiosError(e)) {
737
+ // console.error('Error getting PDF slides analysis:', e.response?.data.message);
738
+ // }
583
739
  throw e;
584
740
  }
585
741
  }
@@ -589,9 +745,9 @@ class PlatoApiClient {
589
745
  return res.data;
590
746
  }
591
747
  catch (e) {
592
- if (axios_1.default.isAxiosError(e)) {
593
- console.error('Error getting PDF slide analysis by ID:', e.response?.data.message);
594
- }
748
+ // if (axios.isAxiosError(e)) {
749
+ // console.error('Error getting PDF slide analysis by ID:', e.response?.data.message);
750
+ // }
595
751
  throw e;
596
752
  }
597
753
  }
@@ -600,9 +756,9 @@ class PlatoApiClient {
600
756
  await this.http.delete(`/api/v1/pdfSlides/${id}`);
601
757
  }
602
758
  catch (e) {
603
- if (axios_1.default.isAxiosError(e)) {
604
- console.error('Error deleting PDF slide analysis:', e.response?.data.message);
605
- }
759
+ // if (axios.isAxiosError(e)) {
760
+ // console.error('Error deleting PDF slide analysis:', e.response?.data.message);
761
+ // }
606
762
  throw e;
607
763
  }
608
764
  }
@@ -612,9 +768,9 @@ class PlatoApiClient {
612
768
  return res.data;
613
769
  }
614
770
  catch (e) {
615
- if (axios_1.default.isAxiosError(e)) {
616
- console.error('Error checking PDF status:', e.response?.data.message);
617
- }
771
+ // if (axios.isAxiosError(e)) {
772
+ // console.error('Error checking PDF status:', e.response?.data.message);
773
+ // }
618
774
  throw e;
619
775
  }
620
776
  }
@@ -624,9 +780,9 @@ class PlatoApiClient {
624
780
  return res.data;
625
781
  }
626
782
  catch (e) {
627
- if (axios_1.default.isAxiosError(e)) {
628
- console.error('Error getting assistant images:', e.response?.data.message);
629
- }
783
+ // if (axios.isAxiosError(e)) {
784
+ // console.error('Error getting assistant images:', e.response?.data.message);
785
+ // }
630
786
  throw e;
631
787
  }
632
788
  }
@@ -642,9 +798,9 @@ class PlatoApiClient {
642
798
  await this.http.delete(`/api/v1/simulation/call/${callId}`);
643
799
  }
644
800
  catch (e) {
645
- if (axios_1.default.isAxiosError(e)) {
646
- console.error('Error deleting call:', e.response?.data.message);
647
- }
801
+ // if (axios.isAxiosError(e)) {
802
+ // console.error('Error deleting call:', e.response?.data.message);
803
+ // }
648
804
  throw e;
649
805
  }
650
806
  }
@@ -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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"}
@@ -1,3 +1,7 @@
1
+ export declare class CallConcurrencyLimitError extends Error {
2
+ constructor();
3
+ }
4
+ export declare function isCallConcurrencyError(err: unknown): boolean;
1
5
  /**
2
6
  * Validates a file against size and type constraints.
3
7
  *
package/src/lib/utils.js CHANGED
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CallConcurrencyLimitError = void 0;
4
+ exports.isCallConcurrencyError = isCallConcurrencyError;
3
5
  exports.checkFile = checkFile;
4
6
  exports.calculateHash = calculateHash;
5
7
  exports.getPdfPageCount = getPdfPageCount;
@@ -17,6 +19,28 @@ exports.getPdfPageCount = getPdfPageCount;
17
19
  * For internal use only.
18
20
  */
19
21
  const pdf_lib_1 = require("pdf-lib");
22
+ class CallConcurrencyLimitError extends Error {
23
+ constructor() {
24
+ super('Over Concurrency Limit');
25
+ this.name = 'CallConcurrencyLimitError';
26
+ }
27
+ }
28
+ exports.CallConcurrencyLimitError = CallConcurrencyLimitError;
29
+ function isCallConcurrencyError(err) {
30
+ if (!err || typeof err !== 'object')
31
+ return false;
32
+ const obj = err;
33
+ if (typeof obj['message'] === 'string' && obj['message'].includes('Over Concurrency Limit'))
34
+ return true;
35
+ // Vapi Response-like shape: { error: { message: "Over Concurrency Limit." } }
36
+ const nested = obj['error'];
37
+ if (nested && typeof nested === 'object') {
38
+ const nestedMsg = nested['message'];
39
+ if (typeof nestedMsg === 'string' && nestedMsg.includes('Over Concurrency Limit'))
40
+ return true;
41
+ }
42
+ return false;
43
+ }
20
44
  /**
21
45
  * Validates a file against size and type constraints.
22
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/utils.ts"],"names":[],"mappings":";;AAuBA,8BAgBC;AAQD,sCAMC;AASD,0CASC;AAvED;;;;;;;;;;;;GAYG;AACH,qCAAsC;AAEtC;;;;;;;GAOG;AACH,SAAgB,SAAS,CACvB,IAAiB,EACjB,WAAmB,EACnB,gBAA0B;IAE1B,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,cAAc,cAAc,4CAA4C,SAAS,MAAM,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,sBAAsB,IAAI,CAAC,IAAI,wBAAwB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC/F,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CAAC,IAAiB;IACnD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,eAAe,CAAC,IAAiB;IACrD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,qBAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/utils.ts"],"names":[],"mappings":"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"}