@eka-care/medassist-core 1.0.0
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 +32 -0
- package/dist/Synapse.d.ts +131 -0
- package/dist/Synapse.d.ts.map +1 -0
- package/dist/Synapse.js +479 -0
- package/dist/connection/ConnectionFactory.d.ts +17 -0
- package/dist/connection/ConnectionFactory.d.ts.map +1 -0
- package/dist/connection/ConnectionFactory.js +28 -0
- package/dist/connection/Websocket.d.ts +61 -0
- package/dist/connection/Websocket.d.ts.map +1 -0
- package/dist/connection/Websocket.js +184 -0
- package/dist/constants/index.d.ts +17 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +28 -0
- package/dist/constants/types.d.ts +2 -0
- package/dist/constants/types.d.ts.map +1 -0
- package/dist/constants/types.js +2 -0
- package/dist/events/Events.d.ts +47 -0
- package/dist/events/Events.d.ts.map +1 -0
- package/dist/events/Events.js +46 -0
- package/dist/events/Incoming.d.ts +2 -0
- package/dist/events/Incoming.d.ts.map +1 -0
- package/dist/events/Incoming.js +2 -0
- package/dist/events/Outgoing.d.ts +2 -0
- package/dist/events/Outgoing.d.ts.map +1 -0
- package/dist/events/Outgoing.js +2 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +38 -0
- package/dist/events/types.d.ts +86 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +6 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/internal/Api/BaseResource.d.ts +35 -0
- package/dist/internal/Api/BaseResource.d.ts.map +1 -0
- package/dist/internal/Api/BaseResource.js +54 -0
- package/dist/internal/Api/HttpClient.d.ts +25 -0
- package/dist/internal/Api/HttpClient.d.ts.map +1 -0
- package/dist/internal/Api/HttpClient.js +131 -0
- package/dist/internal/Api/types.d.ts +7 -0
- package/dist/internal/Api/types.d.ts.map +1 -0
- package/dist/internal/Api/types.js +2 -0
- package/dist/internal/Error/Error.d.ts +97 -0
- package/dist/internal/Error/Error.d.ts.map +1 -0
- package/dist/internal/Error/Error.js +243 -0
- package/dist/internal/Error/types.d.ts +17 -0
- package/dist/internal/Error/types.d.ts.map +1 -0
- package/dist/internal/Error/types.js +12 -0
- package/dist/internal/connection/BaseConnection.d.ts +100 -0
- package/dist/internal/connection/BaseConnection.d.ts.map +1 -0
- package/dist/internal/connection/BaseConnection.js +138 -0
- package/dist/internal/connection/types.d.ts +43 -0
- package/dist/internal/connection/types.d.ts.map +1 -0
- package/dist/internal/connection/types.js +20 -0
- package/dist/internal/events/EventEmitter.d.ts +7 -0
- package/dist/internal/events/EventEmitter.d.ts.map +1 -0
- package/dist/internal/events/EventEmitter.js +27 -0
- package/dist/internal/store/index.d.ts +10 -0
- package/dist/internal/store/index.d.ts.map +1 -0
- package/dist/internal/store/index.js +9 -0
- package/dist/media/audio/Audio.d.ts +37 -0
- package/dist/media/audio/Audio.d.ts.map +1 -0
- package/dist/media/audio/Audio.js +310 -0
- package/dist/media/audio/types.d.ts +25 -0
- package/dist/media/audio/types.d.ts.map +1 -0
- package/dist/media/audio/types.js +10 -0
- package/dist/media/file/File.d.ts +54 -0
- package/dist/media/file/File.d.ts.map +1 -0
- package/dist/media/file/File.js +159 -0
- package/dist/messages/MessageManager.d.ts +79 -0
- package/dist/messages/MessageManager.d.ts.map +1 -0
- package/dist/messages/MessageManager.js +420 -0
- package/dist/messages/types.d.ts +74 -0
- package/dist/messages/types.d.ts.map +1 -0
- package/dist/messages/types.js +34 -0
- package/dist/resources/config/Config.d.ts +5 -0
- package/dist/resources/config/Config.d.ts.map +1 -0
- package/dist/resources/config/Config.js +5 -0
- package/dist/resources/index.d.ts +34 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +108 -0
- package/dist/resources/session/Session.d.ts +21 -0
- package/dist/resources/session/Session.d.ts.map +1 -0
- package/dist/resources/session/Session.js +39 -0
- package/dist/resources/session/types.d.ts +17 -0
- package/dist/resources/session/types.d.ts.map +1 -0
- package/dist/resources/session/types.js +8 -0
- package/dist/resources/types.d.ts +22 -0
- package/dist/resources/types.d.ts.map +1 -0
- package/dist/resources/types.js +5 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +24 -0
- package/dist/utils/Error.d.ts +45 -0
- package/dist/utils/Error.d.ts.map +1 -0
- package/dist/utils/Error.js +114 -0
- package/package.json +41 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationError = exports.ConfigurationError = exports.StoreError = exports.MessageError = exports.SessionError = exports.FileError = exports.RecordingError = exports.ConnectionError = exports.InternalServerError = exports.RateLimitError = exports.MethodNotAllowedError = exports.NotFoundError = exports.PermissionDeniedError = exports.UnauthorizedError = exports.BadRequestError = exports.APIConnectionTimeoutError = exports.APIUserAbortError = exports.APIError = exports.SynapseError = exports.SynapseErrorCode = void 0;
|
|
4
|
+
exports.normalizeError = normalizeError;
|
|
5
|
+
exports.SynapseErrorCode = {
|
|
6
|
+
API: "API_ERROR",
|
|
7
|
+
CONNECTION: "CONNECTION_ERROR",
|
|
8
|
+
RECORDING: "RECORDING_ERROR",
|
|
9
|
+
FILE: "FILE_ERROR",
|
|
10
|
+
SESSION: "SESSION_ERROR",
|
|
11
|
+
MESSAGE: "MESSAGE_ERROR",
|
|
12
|
+
STORE: "STORE_ERROR",
|
|
13
|
+
CONFIGURATION: "CONFIGURATION_ERROR",
|
|
14
|
+
VALIDATION: "VALIDATION_ERROR",
|
|
15
|
+
AUTH: "AUTH_ERROR",
|
|
16
|
+
UNKNOWN: "UNKNOWN_ERROR",
|
|
17
|
+
};
|
|
18
|
+
class SynapseError extends Error {
|
|
19
|
+
code;
|
|
20
|
+
timestamp;
|
|
21
|
+
cause;
|
|
22
|
+
context;
|
|
23
|
+
hint;
|
|
24
|
+
constructor(message, code = exports.SynapseErrorCode.UNKNOWN, options = {}) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = "SynapseError";
|
|
27
|
+
this.code = code;
|
|
28
|
+
this.timestamp = new Date();
|
|
29
|
+
this.cause = options.cause;
|
|
30
|
+
this.context = options.context;
|
|
31
|
+
this.hint = options.hint;
|
|
32
|
+
if (Error.captureStackTrace) {
|
|
33
|
+
Error.captureStackTrace(this, this.constructor);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.SynapseError = SynapseError;
|
|
38
|
+
class APIError extends SynapseError {
|
|
39
|
+
/** HTTP status code */
|
|
40
|
+
status;
|
|
41
|
+
/** JSON body of the error response or custom error object */
|
|
42
|
+
error;
|
|
43
|
+
/** HTTP response headers */
|
|
44
|
+
headers;
|
|
45
|
+
constructor(message, status, error, headers) {
|
|
46
|
+
const errorMessage = APIError.makeMessage(status, error, message);
|
|
47
|
+
super(errorMessage, exports.SynapseErrorCode.API, {
|
|
48
|
+
cause: error,
|
|
49
|
+
context: {
|
|
50
|
+
status,
|
|
51
|
+
hasBody: Boolean(error),
|
|
52
|
+
},
|
|
53
|
+
hint: status && status >= 500
|
|
54
|
+
? "Retry the request or contact support if the issue persists."
|
|
55
|
+
: undefined,
|
|
56
|
+
});
|
|
57
|
+
this.name = "APIError";
|
|
58
|
+
this.status = status;
|
|
59
|
+
this.error = error;
|
|
60
|
+
this.headers = headers;
|
|
61
|
+
}
|
|
62
|
+
static makeMessage(status, error, message) {
|
|
63
|
+
const msg = error instanceof Error ? error.message : message;
|
|
64
|
+
if (status && msg) {
|
|
65
|
+
return `HTTP ${status}: ${msg}`;
|
|
66
|
+
}
|
|
67
|
+
if (status) {
|
|
68
|
+
return `${status} status code (no body)`;
|
|
69
|
+
}
|
|
70
|
+
if (msg) {
|
|
71
|
+
return msg;
|
|
72
|
+
}
|
|
73
|
+
return "(no status code or body)";
|
|
74
|
+
}
|
|
75
|
+
static generate(status, errorResponse, message, headers) {
|
|
76
|
+
if (!status) {
|
|
77
|
+
return new APIUserAbortError({ message });
|
|
78
|
+
}
|
|
79
|
+
const extractedError = errorResponse?.["error"];
|
|
80
|
+
const error = extractedError &&
|
|
81
|
+
typeof extractedError === "object" &&
|
|
82
|
+
!Array.isArray(extractedError)
|
|
83
|
+
? extractedError
|
|
84
|
+
: undefined;
|
|
85
|
+
switch (status) {
|
|
86
|
+
case 400:
|
|
87
|
+
return new BadRequestError(message || "Bad Request", status, error, headers);
|
|
88
|
+
case 401:
|
|
89
|
+
return new UnauthorizedError(message || "Unauthorized", status, error, headers);
|
|
90
|
+
case 403:
|
|
91
|
+
return new PermissionDeniedError(message || "Permission Denied", status, error, headers);
|
|
92
|
+
case 404:
|
|
93
|
+
return new NotFoundError(message || "Not Found", status, error, headers);
|
|
94
|
+
case 405:
|
|
95
|
+
return new MethodNotAllowedError(message || "Method Not Allowed", status, error, headers);
|
|
96
|
+
case 429:
|
|
97
|
+
return new RateLimitError(message || "Rate Limit Exceeded", status, error, headers);
|
|
98
|
+
case 500:
|
|
99
|
+
return new InternalServerError(message || "Internal Server Error", status, error, headers);
|
|
100
|
+
default:
|
|
101
|
+
return new APIError(message || "API Error", status, error, headers);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.APIError = APIError;
|
|
106
|
+
class APIUserAbortError extends APIError {
|
|
107
|
+
constructor({ message } = {}) {
|
|
108
|
+
super(message || "Request was aborted.", undefined, undefined, undefined);
|
|
109
|
+
this.name = "APIUserAbortError";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.APIUserAbortError = APIUserAbortError;
|
|
113
|
+
class APIConnectionTimeoutError extends APIError {
|
|
114
|
+
constructor({ message } = {}) {
|
|
115
|
+
super(message || "Request timed out.", undefined, undefined, undefined);
|
|
116
|
+
this.name = "APIConnectionTimeoutError";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.APIConnectionTimeoutError = APIConnectionTimeoutError;
|
|
120
|
+
class BadRequestError extends APIError {
|
|
121
|
+
constructor(message, status, error, headers) {
|
|
122
|
+
super(message, status, error, headers);
|
|
123
|
+
this.name = "BadRequestError";
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.BadRequestError = BadRequestError;
|
|
127
|
+
class UnauthorizedError extends APIError {
|
|
128
|
+
constructor(message, status, error, headers) {
|
|
129
|
+
super(message, status, error, headers);
|
|
130
|
+
this.name = "UnauthorizedError";
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.UnauthorizedError = UnauthorizedError;
|
|
134
|
+
class PermissionDeniedError extends APIError {
|
|
135
|
+
constructor(message, status, error, headers) {
|
|
136
|
+
super(message, status, error, headers);
|
|
137
|
+
this.name = "PermissionDeniedError";
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.PermissionDeniedError = PermissionDeniedError;
|
|
141
|
+
class NotFoundError extends APIError {
|
|
142
|
+
constructor(message, status, error, headers) {
|
|
143
|
+
super(message, status, error, headers);
|
|
144
|
+
this.name = "NotFoundError";
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.NotFoundError = NotFoundError;
|
|
148
|
+
class MethodNotAllowedError extends APIError {
|
|
149
|
+
constructor(message, status, error, headers) {
|
|
150
|
+
super(message, status, error, headers);
|
|
151
|
+
this.name = "MethodNotAllowedError";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.MethodNotAllowedError = MethodNotAllowedError;
|
|
155
|
+
class RateLimitError extends APIError {
|
|
156
|
+
constructor(message, status, error, headers) {
|
|
157
|
+
super(message, status, error, headers);
|
|
158
|
+
this.name = "RateLimitError";
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.RateLimitError = RateLimitError;
|
|
162
|
+
class InternalServerError extends APIError {
|
|
163
|
+
constructor(message, status, error, headers) {
|
|
164
|
+
super(message, status, error, headers);
|
|
165
|
+
this.name = "InternalServerError";
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.InternalServerError = InternalServerError;
|
|
169
|
+
class ConnectionError extends SynapseError {
|
|
170
|
+
constructor(message, options = {}) {
|
|
171
|
+
super(message, exports.SynapseErrorCode.CONNECTION, options);
|
|
172
|
+
this.name = "ConnectionError";
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.ConnectionError = ConnectionError;
|
|
176
|
+
class RecordingError extends SynapseError {
|
|
177
|
+
constructor(message, options = {}) {
|
|
178
|
+
super(message, exports.SynapseErrorCode.RECORDING, options);
|
|
179
|
+
this.name = "RecordingError";
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.RecordingError = RecordingError;
|
|
183
|
+
class FileError extends SynapseError {
|
|
184
|
+
constructor(message, options = {}) {
|
|
185
|
+
super(message, exports.SynapseErrorCode.FILE, options);
|
|
186
|
+
this.name = "FileError";
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.FileError = FileError;
|
|
190
|
+
class SessionError extends SynapseError {
|
|
191
|
+
constructor(message, options = {}) {
|
|
192
|
+
super(message, exports.SynapseErrorCode.SESSION, options);
|
|
193
|
+
this.name = "SessionError";
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.SessionError = SessionError;
|
|
197
|
+
class MessageError extends SynapseError {
|
|
198
|
+
constructor(message, options = {}) {
|
|
199
|
+
super(message, exports.SynapseErrorCode.MESSAGE, options);
|
|
200
|
+
this.name = "MessageError";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.MessageError = MessageError;
|
|
204
|
+
class StoreError extends SynapseError {
|
|
205
|
+
constructor(message, options = {}) {
|
|
206
|
+
super(message, exports.SynapseErrorCode.STORE, options);
|
|
207
|
+
this.name = "StoreError";
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.StoreError = StoreError;
|
|
211
|
+
class ConfigurationError extends SynapseError {
|
|
212
|
+
constructor(message, options = {}) {
|
|
213
|
+
super(message, exports.SynapseErrorCode.CONFIGURATION, options);
|
|
214
|
+
this.name = "ConfigurationError";
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.ConfigurationError = ConfigurationError;
|
|
218
|
+
class ValidationError extends SynapseError {
|
|
219
|
+
constructor(message, options = {}) {
|
|
220
|
+
super(message, exports.SynapseErrorCode.VALIDATION, options);
|
|
221
|
+
this.name = "ValidationError";
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
exports.ValidationError = ValidationError;
|
|
225
|
+
function normalizeError(error, ctor, fallbackMessage, options = {}) {
|
|
226
|
+
if (error instanceof ctor) {
|
|
227
|
+
return error;
|
|
228
|
+
}
|
|
229
|
+
const baseOptions = {
|
|
230
|
+
...options,
|
|
231
|
+
context: {
|
|
232
|
+
...(error instanceof SynapseError ? error.context : undefined),
|
|
233
|
+
...options.context,
|
|
234
|
+
},
|
|
235
|
+
hint: options.hint ?? (error instanceof SynapseError ? error.hint : undefined),
|
|
236
|
+
cause: options.cause ?? error,
|
|
237
|
+
};
|
|
238
|
+
if (error instanceof SynapseError) {
|
|
239
|
+
return new ctor(error.message, baseOptions);
|
|
240
|
+
}
|
|
241
|
+
const message = error instanceof Error && error.message ? error.message : fallbackMessage;
|
|
242
|
+
return new ctor(message, baseOptions);
|
|
243
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const ErrorType: {
|
|
2
|
+
readonly NETWORK_ERROR: "NETWORK_ERROR";
|
|
3
|
+
readonly TIMEOUT_ERROR: "TIMEOUT_ERROR";
|
|
4
|
+
readonly API_ERROR: "API_ERROR";
|
|
5
|
+
readonly RATE_LIMIT_ERROR: "RATE_LIMIT_ERROR";
|
|
6
|
+
readonly SERVER_ERROR: "SERVER_ERROR";
|
|
7
|
+
readonly PARSE_ERROR: "PARSE_ERROR";
|
|
8
|
+
readonly UNKNOWN_ERROR: "UNKNOWN_ERROR";
|
|
9
|
+
};
|
|
10
|
+
export type ErrorType = (typeof ErrorType)[keyof typeof ErrorType];
|
|
11
|
+
export interface ErrorContext {
|
|
12
|
+
operation: string;
|
|
13
|
+
agentId: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/internal/Error/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;CAQZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorType = void 0;
|
|
4
|
+
exports.ErrorType = {
|
|
5
|
+
NETWORK_ERROR: "NETWORK_ERROR",
|
|
6
|
+
TIMEOUT_ERROR: "TIMEOUT_ERROR",
|
|
7
|
+
API_ERROR: "API_ERROR",
|
|
8
|
+
RATE_LIMIT_ERROR: "RATE_LIMIT_ERROR",
|
|
9
|
+
SERVER_ERROR: "SERVER_ERROR",
|
|
10
|
+
PARSE_ERROR: "PARSE_ERROR",
|
|
11
|
+
UNKNOWN_ERROR: "UNKNOWN_ERROR",
|
|
12
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for all connection types
|
|
3
|
+
*/
|
|
4
|
+
import { type IncomingMessage, type OutgoingMessage } from "../../messages/types";
|
|
5
|
+
import { ConnectionStatus, type DisconnectionDetails, type OnDisconnectCallback, type OnMessageCallback, type OnStatusChangeCallback, type OnOpenCallback, type OnErrorCallback } from "./types";
|
|
6
|
+
export declare abstract class BaseConnection {
|
|
7
|
+
/**
|
|
8
|
+
* Unique identifier for the current conversation
|
|
9
|
+
*/
|
|
10
|
+
abstract readonly conversationId: string;
|
|
11
|
+
/**
|
|
12
|
+
* Current connection status
|
|
13
|
+
*/
|
|
14
|
+
protected status: ConnectionStatus;
|
|
15
|
+
/**
|
|
16
|
+
* Queue to store messages received before callback is registered
|
|
17
|
+
*/
|
|
18
|
+
protected queue: IncomingMessage[];
|
|
19
|
+
/**
|
|
20
|
+
* Event emitter to handle events
|
|
21
|
+
*/
|
|
22
|
+
private eventEmitter;
|
|
23
|
+
/**
|
|
24
|
+
* Disconnection details (null if still connected)
|
|
25
|
+
*/
|
|
26
|
+
protected disconnectionDetails: DisconnectionDetails | null;
|
|
27
|
+
protected onErrorCallback: OnErrorCallback | null;
|
|
28
|
+
protected onDisconnectCallback: OnDisconnectCallback | null;
|
|
29
|
+
protected onMessageCallback: OnMessageCallback | null;
|
|
30
|
+
protected onOpenCallback: OnOpenCallback | null;
|
|
31
|
+
protected onStatusChangeCallback: OnStatusChangeCallback | null;
|
|
32
|
+
/**
|
|
33
|
+
* Close the connection
|
|
34
|
+
*/
|
|
35
|
+
abstract close(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Send a message through the connection
|
|
38
|
+
*/
|
|
39
|
+
abstract sendMessage(message: OutgoingMessage): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get current connection status
|
|
42
|
+
*/
|
|
43
|
+
getStatus(): ConnectionStatus;
|
|
44
|
+
/**
|
|
45
|
+
* Register callback for connection open events
|
|
46
|
+
*/
|
|
47
|
+
onOpen(callback: OnOpenCallback): void;
|
|
48
|
+
/**
|
|
49
|
+
* Register callback for incoming messages
|
|
50
|
+
*/
|
|
51
|
+
onMessage(callback: OnMessageCallback): void;
|
|
52
|
+
/**
|
|
53
|
+
* Register callback for disconnection events
|
|
54
|
+
*/
|
|
55
|
+
onDisconnect(callback: OnDisconnectCallback): void;
|
|
56
|
+
/**
|
|
57
|
+
* Register callback for error events
|
|
58
|
+
*/
|
|
59
|
+
onError(callback: OnErrorCallback): void;
|
|
60
|
+
/**
|
|
61
|
+
* Register a listener for a specific event
|
|
62
|
+
*/
|
|
63
|
+
on(event: string, listener: (...args: unknown[]) => void): void;
|
|
64
|
+
/**
|
|
65
|
+
* Remove a listener for a specific event
|
|
66
|
+
*/
|
|
67
|
+
off(event: string, listener: (...args: unknown[]) => void): void;
|
|
68
|
+
/**
|
|
69
|
+
* Emit an event
|
|
70
|
+
*/
|
|
71
|
+
emit(event: string, ...args: unknown[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Register callback for status changes
|
|
74
|
+
*/
|
|
75
|
+
onStatusChange(callback: OnStatusChangeCallback): void;
|
|
76
|
+
/**
|
|
77
|
+
* Protected method to handle disconnection
|
|
78
|
+
* Ensures disconnect callback is only invoked once
|
|
79
|
+
*/
|
|
80
|
+
protected disconnect(details: DisconnectionDetails): void;
|
|
81
|
+
/**
|
|
82
|
+
* Protected method to handle incoming messages
|
|
83
|
+
* Queues messages if no callback is registered yet
|
|
84
|
+
* message type can be extended to include more types of messages
|
|
85
|
+
*/
|
|
86
|
+
protected handleMessage(message: IncomingMessage): void;
|
|
87
|
+
/**
|
|
88
|
+
* Protected method to update connection status
|
|
89
|
+
*/
|
|
90
|
+
protected updateStatus(status: ConnectionStatus): void;
|
|
91
|
+
/**
|
|
92
|
+
* Check if the connection is connected
|
|
93
|
+
*/
|
|
94
|
+
abstract isConnected(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* handle connection established event
|
|
97
|
+
*/
|
|
98
|
+
abstract handleConnected(): void;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=BaseConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseConnection.d.ts","sourceRoot":"","sources":["../../../src/internal/connection/BaseConnection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAElF,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EAEtB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,SAAS,CAAC;AAEjB,8BAAsB,cAAc;IAClC;;OAEG;IACH,kBAAyB,cAAc,EAAE,MAAM,CAAC;IAEhD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAA+B;IAEjE;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,CAAM;IAExC;;OAEG;IACH,OAAO,CAAC,YAAY,CAAoC;IACxD;;OAEG;IACH,SAAS,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACnE,SAAS,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAQ;IACzD,SAAS,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAQ;IACnE,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAC7D,SAAS,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAQ;IACvD,SAAS,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,IAAI,CAAQ;IACvE;;OAEG;aACa,KAAK,IAAI,IAAI;IAE7B;;OAEG;aACa,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAE3D;;OAEG;IACI,SAAS,IAAI,gBAAgB;IAIpC;;OAEG;IACI,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAI7C;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAYnD;;OAEG;IACI,YAAY,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IASzD;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAG/C;;OAEG;IACI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAItE;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAIvE;;OAEG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIpD;;OAEG;IACI,cAAc,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAS7D;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAQzD;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAQvD;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAOtD;;OAEG;aACa,WAAW,IAAI,OAAO;IACtC;;OAEG;aACa,eAAe,IAAI,IAAI;CACxC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base class for all connection types
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BaseConnection = void 0;
|
|
7
|
+
const EventEmitter_1 = require("../events/EventEmitter");
|
|
8
|
+
const types_1 = require("./types");
|
|
9
|
+
class BaseConnection {
|
|
10
|
+
/**
|
|
11
|
+
* Current connection status
|
|
12
|
+
*/
|
|
13
|
+
status = types_1.ConnectionStatus.CONNECTING;
|
|
14
|
+
/**
|
|
15
|
+
* Queue to store messages received before callback is registered
|
|
16
|
+
*/
|
|
17
|
+
queue = [];
|
|
18
|
+
/**
|
|
19
|
+
* Event emitter to handle events
|
|
20
|
+
*/
|
|
21
|
+
eventEmitter = new EventEmitter_1.EventEmitter();
|
|
22
|
+
/**
|
|
23
|
+
* Disconnection details (null if still connected)
|
|
24
|
+
*/
|
|
25
|
+
disconnectionDetails = null;
|
|
26
|
+
onErrorCallback = null;
|
|
27
|
+
onDisconnectCallback = null;
|
|
28
|
+
onMessageCallback = null;
|
|
29
|
+
onOpenCallback = null;
|
|
30
|
+
onStatusChangeCallback = null;
|
|
31
|
+
/**
|
|
32
|
+
* Get current connection status
|
|
33
|
+
*/
|
|
34
|
+
getStatus() {
|
|
35
|
+
return this.status;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Register callback for connection open events
|
|
39
|
+
*/
|
|
40
|
+
onOpen(callback) {
|
|
41
|
+
this.onOpenCallback = callback;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Register callback for incoming messages
|
|
45
|
+
*/
|
|
46
|
+
onMessage(callback) {
|
|
47
|
+
this.onMessageCallback = callback;
|
|
48
|
+
if (this.queue.length > 0) {
|
|
49
|
+
const pendingMessages = [...this.queue];
|
|
50
|
+
this.queue.length = 0;
|
|
51
|
+
queueMicrotask(() => {
|
|
52
|
+
pendingMessages.forEach((message) => {
|
|
53
|
+
this.onMessageCallback?.(message);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Register callback for disconnection events
|
|
60
|
+
*/
|
|
61
|
+
onDisconnect(callback) {
|
|
62
|
+
this.onDisconnectCallback = callback;
|
|
63
|
+
const details = this.disconnectionDetails;
|
|
64
|
+
if (details) {
|
|
65
|
+
queueMicrotask(() => {
|
|
66
|
+
this.onDisconnectCallback?.(details);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Register callback for error events
|
|
72
|
+
*/
|
|
73
|
+
onError(callback) {
|
|
74
|
+
this.onErrorCallback = callback;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Register a listener for a specific event
|
|
78
|
+
*/
|
|
79
|
+
on(event, listener) {
|
|
80
|
+
this.eventEmitter.on(event, listener);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove a listener for a specific event
|
|
84
|
+
*/
|
|
85
|
+
off(event, listener) {
|
|
86
|
+
this.eventEmitter.off(event, listener);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Emit an event
|
|
90
|
+
*/
|
|
91
|
+
emit(event, ...args) {
|
|
92
|
+
this.eventEmitter.emit(event, ...args);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Register callback for status changes
|
|
96
|
+
*/
|
|
97
|
+
onStatusChange(callback) {
|
|
98
|
+
this.onStatusChangeCallback = callback;
|
|
99
|
+
// Immediately invoke with current status
|
|
100
|
+
queueMicrotask(() => {
|
|
101
|
+
callback(this.status);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Protected method to handle disconnection
|
|
106
|
+
* Ensures disconnect callback is only invoked once
|
|
107
|
+
*/
|
|
108
|
+
disconnect(details) {
|
|
109
|
+
if (!this.disconnectionDetails) {
|
|
110
|
+
this.disconnectionDetails = details;
|
|
111
|
+
this.updateStatus(types_1.ConnectionStatus.NOT_CONNECTED);
|
|
112
|
+
this.onDisconnectCallback?.(details);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Protected method to handle incoming messages
|
|
117
|
+
* Queues messages if no callback is registered yet
|
|
118
|
+
* message type can be extended to include more types of messages
|
|
119
|
+
*/
|
|
120
|
+
handleMessage(message) {
|
|
121
|
+
if (this.onMessageCallback) {
|
|
122
|
+
this.onMessageCallback(message);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.queue.push(message);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Protected method to update connection status
|
|
130
|
+
*/
|
|
131
|
+
updateStatus(status) {
|
|
132
|
+
if (this.status !== status) {
|
|
133
|
+
this.status = status;
|
|
134
|
+
this.onStatusChangeCallback?.(status);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.BaseConnection = BaseConnection;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection types and interfaces for the Synapse SDK
|
|
3
|
+
*/
|
|
4
|
+
import { type IncomingMessage } from "../../messages/types";
|
|
5
|
+
export declare const ConnectionStatus: {
|
|
6
|
+
readonly CONNECTING: "connecting";
|
|
7
|
+
readonly CONNECTED: "connected";
|
|
8
|
+
readonly NOT_CONNECTED: "not_connected";
|
|
9
|
+
};
|
|
10
|
+
export type ConnectionStatus = (typeof ConnectionStatus)[keyof typeof ConnectionStatus];
|
|
11
|
+
export declare const DisconnectionReason: {
|
|
12
|
+
readonly CLIENT_CLOSED: "client_closed";
|
|
13
|
+
readonly SERVER_CLOSED: "server_closed";
|
|
14
|
+
readonly CONNECTION_ERROR: "connection_error";
|
|
15
|
+
readonly AUTHENTICATION_ERROR: "authentication_error";
|
|
16
|
+
readonly MAX_RECONNECT_ATTEMPTS: "max_reconnect_attempts";
|
|
17
|
+
readonly TIMEOUT: "timeout";
|
|
18
|
+
readonly NETWORK_ERROR: "network_error";
|
|
19
|
+
};
|
|
20
|
+
export type DisconnectionReason = (typeof DisconnectionReason)[keyof typeof DisconnectionReason];
|
|
21
|
+
export interface DisconnectionDetails {
|
|
22
|
+
reason: DisconnectionReason;
|
|
23
|
+
message?: string;
|
|
24
|
+
code?: number;
|
|
25
|
+
timestamp: Date;
|
|
26
|
+
}
|
|
27
|
+
export interface SessionConfig {
|
|
28
|
+
agentId: string;
|
|
29
|
+
authorization?: string;
|
|
30
|
+
overrides?: {
|
|
31
|
+
prompt?: string;
|
|
32
|
+
firstMessage?: string;
|
|
33
|
+
language?: string;
|
|
34
|
+
voiceId?: string;
|
|
35
|
+
};
|
|
36
|
+
userId?: string;
|
|
37
|
+
}
|
|
38
|
+
export type OnDisconnectCallback = (details: DisconnectionDetails) => void;
|
|
39
|
+
export type OnMessageCallback = (event: IncomingMessage) => void;
|
|
40
|
+
export type OnStatusChangeCallback = (status: ConnectionStatus) => void;
|
|
41
|
+
export type OnOpenCallback = () => void;
|
|
42
|
+
export type OnErrorCallback = (error: Error) => void;
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/internal/connection/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D,eAAO,MAAM,mBAAmB;;;;;;;;CAQtB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAeD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAC3E,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AACjE,MAAM,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Connection types and interfaces for the Synapse SDK
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DisconnectionReason = exports.ConnectionStatus = void 0;
|
|
7
|
+
exports.ConnectionStatus = {
|
|
8
|
+
CONNECTING: "connecting",
|
|
9
|
+
CONNECTED: "connected",
|
|
10
|
+
NOT_CONNECTED: "not_connected",
|
|
11
|
+
};
|
|
12
|
+
exports.DisconnectionReason = {
|
|
13
|
+
CLIENT_CLOSED: "client_closed",
|
|
14
|
+
SERVER_CLOSED: "server_closed",
|
|
15
|
+
CONNECTION_ERROR: "connection_error",
|
|
16
|
+
AUTHENTICATION_ERROR: "authentication_error",
|
|
17
|
+
MAX_RECONNECT_ATTEMPTS: "max_reconnect_attempts",
|
|
18
|
+
TIMEOUT: "timeout",
|
|
19
|
+
NETWORK_ERROR: "network_error",
|
|
20
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class EventEmitter {
|
|
2
|
+
private eventListeners;
|
|
3
|
+
on(event: string, listener: (...args: unknown[]) => void): void;
|
|
4
|
+
off(event: string, listener: (...args: unknown[]) => void): void;
|
|
5
|
+
emit(event: string, ...args: unknown[]): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=EventEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../../src/internal/events/EventEmitter.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,cAAc,CACV;IAEL,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAM/D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAUhE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAMrD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventEmitter = void 0;
|
|
4
|
+
class EventEmitter {
|
|
5
|
+
eventListeners = new Map();
|
|
6
|
+
on(event, listener) {
|
|
7
|
+
const listeners = this.eventListeners.get(event) || new Set();
|
|
8
|
+
listeners.add(listener);
|
|
9
|
+
this.eventListeners.set(event, listeners);
|
|
10
|
+
}
|
|
11
|
+
off(event, listener) {
|
|
12
|
+
const listeners = this.eventListeners.get(event);
|
|
13
|
+
if (listeners) {
|
|
14
|
+
listeners.delete(listener);
|
|
15
|
+
if (listeners.size === 0) {
|
|
16
|
+
this.eventListeners.delete(event);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
emit(event, ...args) {
|
|
21
|
+
const listeners = this.eventListeners.get(event);
|
|
22
|
+
if (listeners) {
|
|
23
|
+
listeners.forEach((listener) => listener(...args));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.EventEmitter = EventEmitter;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* make an abstract class for all types of storage (localStorage, sessionStorage, etc.)
|
|
3
|
+
*/
|
|
4
|
+
export declare abstract class Storage {
|
|
5
|
+
abstract write(key: string): string | null;
|
|
6
|
+
abstract read(key: string): string | null;
|
|
7
|
+
abstract delete(key: string): void;
|
|
8
|
+
abstract clear(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8BAAsB,OAAO;IAC3B,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IACzC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAClC,QAAQ,CAAC,KAAK,IAAI,IAAI;CACvB"}
|