@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 +43 -0
- package/package.json +1 -1
- package/src/lib/call-helpers.d.ts +23 -0
- package/src/lib/call-helpers.js +94 -0
- package/src/lib/call-helpers.js.map +1 -0
- package/src/lib/plato-intefaces.d.ts +37 -1
- package/src/lib/plato-intefaces.js +1 -0
- package/src/lib/plato-intefaces.js.map +1 -1
- package/src/lib/plato-sdk.d.ts +8 -45
- package/src/lib/plato-sdk.js +62 -412
- package/src/lib/plato-sdk.js.map +1 -1
- package/src/lib/utils.d.ts +1 -0
- package/src/lib/utils.js +22 -0
- package/src/lib/utils.js.map +1 -1
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
|
@@ -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":";;;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,
|
|
1
|
+
{"version":3,"file":"plato-intefaces.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/plato-intefaces.ts"],"names":[],"mappings":"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"}
|
package/src/lib/plato-sdk.d.ts
CHANGED
|
@@ -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>;
|
package/src/lib/plato-sdk.js
CHANGED
|
@@ -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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
506
|
-
|
|
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
|
-
|
|
522
|
-
|
|
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
|
|
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
|
-
|
|
694
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/src/lib/plato-sdk.js.map
CHANGED
|
@@ -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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"}
|
package/src/lib/utils.d.ts
CHANGED
|
@@ -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;
|
package/src/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/plato-sdk/src/lib/utils.ts"],"names":[],"mappings":"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"}
|