@anam-ai/js-sdk 4.15.0 → 4.16.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main/AnamClient.d.ts +1 -0
- package/dist/main/AnamClient.d.ts.map +1 -1
- package/dist/main/AnamClient.js +84 -24
- package/dist/main/AnamClient.js.map +1 -1
- package/dist/main/lib/ClientMetrics.d.ts +1 -0
- package/dist/main/lib/ClientMetrics.d.ts.map +1 -1
- package/dist/main/lib/ClientMetrics.js +11 -4
- package/dist/main/lib/ClientMetrics.js.map +1 -1
- package/dist/main/lib/ConnectionMilestones.d.ts +39 -0
- package/dist/main/lib/ConnectionMilestones.d.ts.map +1 -0
- package/dist/main/lib/ConnectionMilestones.js +137 -0
- package/dist/main/lib/ConnectionMilestones.js.map +1 -0
- package/dist/main/lib/constants.js +1 -1
- package/dist/main/modules/SignallingClient.d.ts +3 -1
- package/dist/main/modules/SignallingClient.d.ts.map +1 -1
- package/dist/main/modules/SignallingClient.js +31 -3
- package/dist/main/modules/SignallingClient.js.map +1 -1
- package/dist/main/modules/StreamingClient.d.ts +20 -1
- package/dist/main/modules/StreamingClient.d.ts.map +1 -1
- package/dist/main/modules/StreamingClient.js +212 -23
- package/dist/main/modules/StreamingClient.js.map +1 -1
- package/dist/main/types/AnamPublicClientOptions.d.ts +2 -1
- package/dist/main/types/AnamPublicClientOptions.d.ts.map +1 -1
- package/dist/main/types/ConnectionMilestoneMetricsOptions.d.ts +16 -0
- package/dist/main/types/ConnectionMilestoneMetricsOptions.d.ts.map +1 -0
- package/dist/main/types/ConnectionMilestoneMetricsOptions.js +3 -0
- package/dist/main/types/ConnectionMilestoneMetricsOptions.js.map +1 -0
- package/dist/main/types/coreApi/StartSessionResponse.d.ts +1 -0
- package/dist/main/types/coreApi/StartSessionResponse.d.ts.map +1 -1
- package/dist/main/types/index.d.ts +1 -0
- package/dist/main/types/index.d.ts.map +1 -1
- package/dist/main/types/index.js.map +1 -1
- package/dist/main/types/streaming/StreamingClientOptions.d.ts +1 -0
- package/dist/main/types/streaming/StreamingClientOptions.d.ts.map +1 -1
- package/dist/module/AnamClient.d.ts +1 -0
- package/dist/module/AnamClient.d.ts.map +1 -1
- package/dist/module/AnamClient.js +84 -24
- package/dist/module/AnamClient.js.map +1 -1
- package/dist/module/lib/ClientMetrics.d.ts +1 -0
- package/dist/module/lib/ClientMetrics.d.ts.map +1 -1
- package/dist/module/lib/ClientMetrics.js +11 -4
- package/dist/module/lib/ClientMetrics.js.map +1 -1
- package/dist/module/lib/ConnectionMilestones.d.ts +39 -0
- package/dist/module/lib/ConnectionMilestones.d.ts.map +1 -0
- package/dist/module/lib/ConnectionMilestones.js +133 -0
- package/dist/module/lib/ConnectionMilestones.js.map +1 -0
- package/dist/module/lib/constants.js +1 -1
- package/dist/module/modules/SignallingClient.d.ts +3 -1
- package/dist/module/modules/SignallingClient.d.ts.map +1 -1
- package/dist/module/modules/SignallingClient.js +31 -3
- package/dist/module/modules/SignallingClient.js.map +1 -1
- package/dist/module/modules/StreamingClient.d.ts +20 -1
- package/dist/module/modules/StreamingClient.d.ts.map +1 -1
- package/dist/module/modules/StreamingClient.js +212 -23
- package/dist/module/modules/StreamingClient.js.map +1 -1
- package/dist/module/types/AnamPublicClientOptions.d.ts +2 -1
- package/dist/module/types/AnamPublicClientOptions.d.ts.map +1 -1
- package/dist/module/types/ConnectionMilestoneMetricsOptions.d.ts +16 -0
- package/dist/module/types/ConnectionMilestoneMetricsOptions.d.ts.map +1 -0
- package/dist/module/types/ConnectionMilestoneMetricsOptions.js +2 -0
- package/dist/module/types/ConnectionMilestoneMetricsOptions.js.map +1 -0
- package/dist/module/types/coreApi/StartSessionResponse.d.ts +1 -0
- package/dist/module/types/coreApi/StartSessionResponse.d.ts.map +1 -1
- package/dist/module/types/index.d.ts +1 -0
- package/dist/module/types/index.d.ts.map +1 -1
- package/dist/module/types/index.js.map +1 -1
- package/dist/module/types/streaming/StreamingClientOptions.d.ts +1 -0
- package/dist/module/types/streaming/StreamingClientOptions.d.ts.map +1 -1
- package/dist/umd/anam.js +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { ClientMetricMeasurement, sendClientMetric, } from './ClientMetrics';
|
|
2
|
+
export const DEFAULT_CONNECTION_MILESTONE_SAMPLE_RATIO = 0;
|
|
3
|
+
export const DEFAULT_SLOW_CONNECTION_THRESHOLD_MS = 5000;
|
|
4
|
+
export class ClientConnectionMilestoneRecorder {
|
|
5
|
+
constructor(options = {}) {
|
|
6
|
+
var _a, _b, _c, _d;
|
|
7
|
+
this.milestones = [];
|
|
8
|
+
this.context = {
|
|
9
|
+
sessionId: null,
|
|
10
|
+
organizationId: null,
|
|
11
|
+
attemptCorrelationId: null,
|
|
12
|
+
};
|
|
13
|
+
this.published = false;
|
|
14
|
+
this.sessionSuccessful = false;
|
|
15
|
+
this.now = (_a = options.now) !== null && _a !== void 0 ? _a : getMonotonicNow;
|
|
16
|
+
this.attemptStartedAtMs = this.now();
|
|
17
|
+
this.sampleRatio = clampRatio((_b = options.connectionMilestoneSampleRatio) !== null && _b !== void 0 ? _b : DEFAULT_CONNECTION_MILESTONE_SAMPLE_RATIO);
|
|
18
|
+
this.slowConnectionThresholdMs = Math.max(0, finiteNumberOrDefault(options.slowConnectionThresholdMs, DEFAULT_SLOW_CONNECTION_THRESHOLD_MS));
|
|
19
|
+
this.sampled = ((_c = options.random) !== null && _c !== void 0 ? _c : Math.random)() < this.sampleRatio;
|
|
20
|
+
this.updateContext((_d = options.context) !== null && _d !== void 0 ? _d : {});
|
|
21
|
+
this.record('client_session_attempt');
|
|
22
|
+
}
|
|
23
|
+
updateContext(context) {
|
|
24
|
+
this.context = Object.assign(Object.assign({}, this.context), context);
|
|
25
|
+
}
|
|
26
|
+
record(name, tags) {
|
|
27
|
+
if (this.published) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const sanitizedTags = sanitizeMilestoneTags(tags);
|
|
31
|
+
const milestone = {
|
|
32
|
+
name,
|
|
33
|
+
elapsedMs: this.elapsedMs(),
|
|
34
|
+
};
|
|
35
|
+
if (Object.keys(sanitizedTags).length > 0) {
|
|
36
|
+
milestone.tags = sanitizedTags;
|
|
37
|
+
}
|
|
38
|
+
this.milestones.push(milestone);
|
|
39
|
+
}
|
|
40
|
+
recordSessionSuccess(tags) {
|
|
41
|
+
if (this.sessionSuccessful) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.sessionSuccessful = true;
|
|
45
|
+
this.record('client_session_success', tags);
|
|
46
|
+
this.publishIfNeeded();
|
|
47
|
+
// Once the success/publish decision has been made the recorder is done.
|
|
48
|
+
// Stop accumulating and release the buffer for the rest of the
|
|
49
|
+
// (potentially long-lived) session. Without this, a fast unsampled success
|
|
50
|
+
// — the default path, since connectionMilestoneSampleRatio defaults to 0 —
|
|
51
|
+
// never sets `published`, so the long-lived ICE/websocket event handlers
|
|
52
|
+
// keep appending to `milestones` for the entire call.
|
|
53
|
+
this.finalize();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Make the recorder inert and release its buffer. `published` gates
|
|
57
|
+
* record()/publish()/publishFailure(), so flipping it here stops all further
|
|
58
|
+
* recording and publishing. publish() (if it ran) already serialized the
|
|
59
|
+
* milestones synchronously, so clearing the buffer afterwards is safe.
|
|
60
|
+
*/
|
|
61
|
+
finalize() {
|
|
62
|
+
this.published = true;
|
|
63
|
+
this.milestones.length = 0;
|
|
64
|
+
}
|
|
65
|
+
publishFailure(tags) {
|
|
66
|
+
if (this.sessionSuccessful || this.published) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.record('connection_attempt_failed', tags);
|
|
70
|
+
this.publish('failed', tags);
|
|
71
|
+
}
|
|
72
|
+
publishIfNeeded() {
|
|
73
|
+
if (this.published) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (this.elapsedMs() >= this.slowConnectionThresholdMs) {
|
|
77
|
+
this.publish('slow');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (this.sampled) {
|
|
81
|
+
this.publish('sampled');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
publish(reason, tags) {
|
|
85
|
+
if (this.published || this.milestones.length === 0) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.published = true;
|
|
89
|
+
const serializedMilestones = JSON.stringify(this.milestones);
|
|
90
|
+
const metricTags = sanitizeMetricTags(Object.assign(Object.assign(Object.assign({}, tags), this.context), { publishReason: reason, attemptDurationMs: this.elapsedMs(), milestoneCount: this.milestones.length, connectionMilestoneSampleRatio: this.sampleRatio, slowConnectionThresholdMs: this.slowConnectionThresholdMs, wasSampled: this.sampled ? 1 : 0, milestones: serializedMilestones }));
|
|
91
|
+
void sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_MILESTONES, '1', metricTags);
|
|
92
|
+
}
|
|
93
|
+
elapsedMs() {
|
|
94
|
+
return Math.max(0, Math.round(this.now() - this.attemptStartedAtMs));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const getMonotonicNow = () => {
|
|
98
|
+
if (typeof performance !== 'undefined') {
|
|
99
|
+
return performance.now();
|
|
100
|
+
}
|
|
101
|
+
return Date.now();
|
|
102
|
+
};
|
|
103
|
+
const clampRatio = (value) => {
|
|
104
|
+
const finiteValue = finiteNumberOrDefault(value, DEFAULT_CONNECTION_MILESTONE_SAMPLE_RATIO);
|
|
105
|
+
return Math.min(1, Math.max(0, finiteValue));
|
|
106
|
+
};
|
|
107
|
+
const finiteNumberOrDefault = (value, fallback) => {
|
|
108
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
|
|
109
|
+
};
|
|
110
|
+
const sanitizeMilestoneTags = (tags) => {
|
|
111
|
+
if (!tags) {
|
|
112
|
+
return {};
|
|
113
|
+
}
|
|
114
|
+
const sanitizedTags = {};
|
|
115
|
+
Object.entries(tags).forEach(([key, value]) => {
|
|
116
|
+
if (value === undefined || value === null) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
sanitizedTags[key] = value;
|
|
123
|
+
});
|
|
124
|
+
return sanitizedTags;
|
|
125
|
+
};
|
|
126
|
+
const sanitizeMetricTags = (tags) => {
|
|
127
|
+
const metricTags = {};
|
|
128
|
+
Object.entries(sanitizeMilestoneTags(tags)).forEach(([key, value]) => {
|
|
129
|
+
metricTags[key] = typeof value === 'boolean' ? String(value) : value;
|
|
130
|
+
});
|
|
131
|
+
return metricTags;
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=ConnectionMilestones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionMilestones.js","sourceRoot":"","sources":["../../../src/lib/ConnectionMilestones.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export const DEFAULT_API_BASE_URL = 'https://api.anam.ai';
|
|
|
6
6
|
export const DEFAULT_API_VERSION = '/v1'; // include the leading slash
|
|
7
7
|
export const CLIENT_METADATA = {
|
|
8
8
|
client: 'js-sdk',
|
|
9
|
-
version: '
|
|
9
|
+
version: '0.0.0-automated',
|
|
10
10
|
};
|
|
11
11
|
// Retry policy for startSession. Applied to transient failures only
|
|
12
12
|
// (network errors and 5xx responses); 4xx responses are never retried.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { InternalEventEmitter, PublicEventEmitter } from '.';
|
|
2
|
+
import { ClientConnectionMilestoneRecorder } from '../lib/ConnectionMilestones';
|
|
2
3
|
import { SignallingClientOptions, ApiGatewayConfig, AgentAudioInputPayload } from '../types';
|
|
3
4
|
import { TalkMessageStreamPayload } from '../types/signalling/TalkMessageStreamPayload';
|
|
4
5
|
export declare class SignallingClient {
|
|
@@ -14,7 +15,8 @@ export declare class SignallingClient {
|
|
|
14
15
|
private socket;
|
|
15
16
|
private heartBeatIntervalRef;
|
|
16
17
|
private apiGatewayConfig;
|
|
17
|
-
|
|
18
|
+
private connectionMilestones;
|
|
19
|
+
constructor(sessionId: string, options: SignallingClientOptions, publicEventEmitter: PublicEventEmitter, internalEventEmitter: InternalEventEmitter, apiGatewayConfig?: ApiGatewayConfig, connectionMilestones?: ClientConnectionMilestoneRecorder);
|
|
18
20
|
stop(): void;
|
|
19
21
|
connect(): WebSocket;
|
|
20
22
|
sendOffer(localDescription: RTCSessionDescription): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignallingClient.d.ts","sourceRoot":"","sources":["../../../src/modules/SignallingClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,GAAG,CAAC;AAC7D,OAAO,EAKL,uBAAuB,EAEvB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAKxF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,oBAAoB,CAA+C;IAC3E,OAAO,CAAC,gBAAgB,CAA+B;
|
|
1
|
+
{"version":3,"file":"SignallingClient.d.ts","sourceRoot":"","sources":["../../../src/modules/SignallingClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,GAAG,CAAC;AAC7D,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAKL,uBAAuB,EAEvB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAKxF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,oBAAoB,CAA+C;IAC3E,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,oBAAoB,CAAgD;gBAG1E,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,oBAAoB,EAAE,oBAAoB,EAC1C,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,oBAAoB,CAAC,EAAE,iCAAiC;IAmEnD,IAAI;IAKJ,OAAO,IAAI,SAAS;IAWd,SAAS,CAAC,gBAAgB,EAAE,qBAAqB;IAajD,gBAAgB,CAAC,SAAS,EAAE,eAAe;IASxD,OAAO,CAAC,iBAAiB;IAeZ,eAAe,CAAC,OAAO,EAAE,wBAAwB;IASvD,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAS1D,sBAAsB,IAAI,IAAI;IASrC,OAAO,CAAC,WAAW;YAWL,MAAM;YAsBN,OAAO;IAoCrB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,kBAAkB;YAcZ,SAAS;IAQvB,OAAO,CAAC,sBAAsB;CA4B/B"}
|
|
@@ -11,7 +11,7 @@ import { AnamEvent, InternalEvent, SignalMessageAction, ConnectionClosedCode, }
|
|
|
11
11
|
const DEFAULT_HEARTBEAT_INTERVAL_SECONDS = 5;
|
|
12
12
|
const DEFAULT_WS_RECONNECTION_ATTEMPTS = 5;
|
|
13
13
|
export class SignallingClient {
|
|
14
|
-
constructor(sessionId, options, publicEventEmitter, internalEventEmitter, apiGatewayConfig) {
|
|
14
|
+
constructor(sessionId, options, publicEventEmitter, internalEventEmitter, apiGatewayConfig, connectionMilestones) {
|
|
15
15
|
var _a, _b, _c, _d, _e;
|
|
16
16
|
this.stopSignal = false;
|
|
17
17
|
this.sendingBuffer = [];
|
|
@@ -21,6 +21,7 @@ export class SignallingClient {
|
|
|
21
21
|
this.publicEventEmitter = publicEventEmitter;
|
|
22
22
|
this.internalEventEmitter = internalEventEmitter;
|
|
23
23
|
this.apiGatewayConfig = apiGatewayConfig;
|
|
24
|
+
this.connectionMilestones = connectionMilestones;
|
|
24
25
|
if (!sessionId) {
|
|
25
26
|
throw new Error('Signalling Client: sessionId is required');
|
|
26
27
|
}
|
|
@@ -76,6 +77,10 @@ export class SignallingClient {
|
|
|
76
77
|
this.closeSocket();
|
|
77
78
|
}
|
|
78
79
|
connect() {
|
|
80
|
+
var _a;
|
|
81
|
+
(_a = this.connectionMilestones) === null || _a === void 0 ? void 0 : _a.record('websocket_connecting', {
|
|
82
|
+
attemptNumber: this.wsConnectionAttempts + 1,
|
|
83
|
+
});
|
|
79
84
|
this.socket = new WebSocket(this.url.href);
|
|
80
85
|
this.socket.onopen = this.onOpen.bind(this);
|
|
81
86
|
this.socket.onclose = this.onClose.bind(this);
|
|
@@ -158,10 +163,14 @@ export class SignallingClient {
|
|
|
158
163
|
}
|
|
159
164
|
onOpen() {
|
|
160
165
|
return __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
var _a;
|
|
161
167
|
if (!this.socket) {
|
|
162
168
|
throw new Error('SignallingClient - onOpen: socket is null');
|
|
163
169
|
}
|
|
164
170
|
try {
|
|
171
|
+
(_a = this.connectionMilestones) === null || _a === void 0 ? void 0 : _a.record('websocket_open', {
|
|
172
|
+
attemptNumber: this.wsConnectionAttempts + 1,
|
|
173
|
+
});
|
|
165
174
|
this.wsConnectionAttempts = 0;
|
|
166
175
|
this.flushSendingBuffer();
|
|
167
176
|
this.socket.onmessage = this.onMessage.bind(this);
|
|
@@ -174,31 +183,50 @@ export class SignallingClient {
|
|
|
174
183
|
}
|
|
175
184
|
});
|
|
176
185
|
}
|
|
177
|
-
onClose() {
|
|
186
|
+
onClose(event) {
|
|
178
187
|
return __awaiter(this, void 0, void 0, function* () {
|
|
188
|
+
var _a, _b, _c;
|
|
189
|
+
(_a = this.connectionMilestones) === null || _a === void 0 ? void 0 : _a.record('websocket_closed', {
|
|
190
|
+
attemptNumber: this.wsConnectionAttempts + 1,
|
|
191
|
+
closeCode: event === null || event === void 0 ? void 0 : event.code,
|
|
192
|
+
wasClean: event === null || event === void 0 ? void 0 : event.wasClean,
|
|
193
|
+
});
|
|
179
194
|
this.wsConnectionAttempts += 1;
|
|
180
195
|
if (this.stopSignal) {
|
|
181
196
|
return;
|
|
182
197
|
}
|
|
183
198
|
if (this.wsConnectionAttempts <= this.maxWsReconnectionAttempts) {
|
|
199
|
+
const retryDelayMs = 100 * this.wsConnectionAttempts;
|
|
200
|
+
(_b = this.connectionMilestones) === null || _b === void 0 ? void 0 : _b.record('websocket_retry_scheduled', {
|
|
201
|
+
attemptNumber: this.wsConnectionAttempts + 1,
|
|
202
|
+
delayMs: retryDelayMs,
|
|
203
|
+
});
|
|
184
204
|
this.socket = null;
|
|
185
205
|
setTimeout(() => {
|
|
186
206
|
this.connect();
|
|
187
|
-
},
|
|
207
|
+
}, retryDelayMs);
|
|
188
208
|
}
|
|
189
209
|
else {
|
|
190
210
|
if (this.heartBeatIntervalRef) {
|
|
191
211
|
clearInterval(this.heartBeatIntervalRef);
|
|
192
212
|
this.heartBeatIntervalRef = null;
|
|
193
213
|
}
|
|
214
|
+
(_c = this.connectionMilestones) === null || _c === void 0 ? void 0 : _c.publishFailure({
|
|
215
|
+
failureStage: 'websocket',
|
|
216
|
+
closeCode: event === null || event === void 0 ? void 0 : event.code,
|
|
217
|
+
});
|
|
194
218
|
this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);
|
|
195
219
|
}
|
|
196
220
|
});
|
|
197
221
|
}
|
|
198
222
|
onError(event) {
|
|
223
|
+
var _a;
|
|
199
224
|
if (this.stopSignal) {
|
|
200
225
|
return;
|
|
201
226
|
}
|
|
227
|
+
(_a = this.connectionMilestones) === null || _a === void 0 ? void 0 : _a.record('websocket_error', {
|
|
228
|
+
eventType: event.type,
|
|
229
|
+
});
|
|
202
230
|
console.error('SignallingClient - onError: ', event);
|
|
203
231
|
}
|
|
204
232
|
flushSendingBuffer() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignallingClient.js","sourceRoot":"","sources":["../../../src/modules/SignallingClient.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"SignallingClient.js","sourceRoot":"","sources":["../../../src/modules/SignallingClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ClientConnectionMilestoneRecorder } from '../lib/ConnectionMilestones';
|
|
1
2
|
import { InternalEventEmitter, PublicEventEmitter } from '../modules';
|
|
2
3
|
import { AgentAudioInputConfig, InputAudioState, StreamingClientOptions } from '../types';
|
|
3
4
|
import { AgentAudioInputStream } from '../types/AgentAudioInputStream';
|
|
@@ -9,6 +10,7 @@ export declare class StreamingClient {
|
|
|
9
10
|
private signallingClient;
|
|
10
11
|
private engineApiRestClient;
|
|
11
12
|
private iceServers;
|
|
13
|
+
private iceTransportPolicy;
|
|
12
14
|
private rtcConfiguration;
|
|
13
15
|
private apiGatewayConfig;
|
|
14
16
|
private peerConnection;
|
|
@@ -29,12 +31,18 @@ export declare class StreamingClient {
|
|
|
29
31
|
private statsCollectionInterval;
|
|
30
32
|
private agentAudioInputStream;
|
|
31
33
|
private toolCallManager;
|
|
32
|
-
|
|
34
|
+
private connectionMilestones;
|
|
35
|
+
private firstLocalIceCandidateSent;
|
|
36
|
+
private firstRemoteIceCandidateReceived;
|
|
37
|
+
private firstRemoteIceCandidateApplied;
|
|
38
|
+
private connectionEstablishedMilestoneRecorded;
|
|
39
|
+
constructor(sessionId: string, options: StreamingClientOptions, publicEventEmitter: PublicEventEmitter, internalEventEmitter: InternalEventEmitter, toolCallManager: ToolCallManager, connectionMilestones?: ClientConnectionMilestoneRecorder);
|
|
33
40
|
private onInputAudioStateChange;
|
|
34
41
|
private muteAllAudioTracks;
|
|
35
42
|
private unmuteAllAudioTracks;
|
|
36
43
|
private startStatsCollection;
|
|
37
44
|
private sendClientSideMetrics;
|
|
45
|
+
private recordSessionSuccess;
|
|
38
46
|
private startSuccessMetricPolling;
|
|
39
47
|
muteInputAudio(): InputAudioState;
|
|
40
48
|
unmuteInputAudio(): InputAudioState;
|
|
@@ -48,6 +56,7 @@ export declare class StreamingClient {
|
|
|
48
56
|
sendDataMessage(message: string): void;
|
|
49
57
|
setMediaStreamTargetById(videoElementId: string): void;
|
|
50
58
|
startConnection(): void;
|
|
59
|
+
private resetAttemptScopedMilestoneState;
|
|
51
60
|
stopConnection(): Promise<void>;
|
|
52
61
|
sendTalkCommand(content: string): Promise<void>;
|
|
53
62
|
startTalkMessageStream(correlationId?: string): TalkMessageStream;
|
|
@@ -57,6 +66,16 @@ export declare class StreamingClient {
|
|
|
57
66
|
private onSignalMessage;
|
|
58
67
|
private onSignallingClientConnected;
|
|
59
68
|
private flushRemoteIceCandidateBuffer;
|
|
69
|
+
/**
|
|
70
|
+
* Add a single remote ICE candidate to the peer connection.
|
|
71
|
+
* Each candidate is added independently: a rejection on one candidate is
|
|
72
|
+
* logged and swallowed so it cannot abort the flush loop (dropping the
|
|
73
|
+
* remaining buffered candidates) or surface as an unhandled rejection from
|
|
74
|
+
* the ANSWER handler. The "first applied" milestone is only recorded after a
|
|
75
|
+
* genuine, successful add.
|
|
76
|
+
*/
|
|
77
|
+
private addRemoteIceCandidate;
|
|
78
|
+
private recordFirstRemoteIceCandidateApplied;
|
|
60
79
|
/**
|
|
61
80
|
* ICE Candidate Trickle
|
|
62
81
|
* As each ICE candidate is gathered from the STUN server it is sent to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamingClient.d.ts","sourceRoot":"","sources":["../../../src/modules/StreamingClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,qBAAqB,EAIrB,eAAe,EAIf,sBAAsB,EAIvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAO/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,qBAAa,eAAe;IAC1B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,wBAAwB,CAAyB;IACzD,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,eAAe,CAGrB;IACF,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,mBAAmB,CAA+C;IAC1E,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,6BAA6B,CAAkB;IACvD,OAAO,CAAC,qCAAqC,CAAiC;IAC9E,OAAO,CAAC,uBAAuB,CAA+C;IAC9E,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,eAAe,CAAkB;
|
|
1
|
+
{"version":3,"file":"StreamingClient.d.ts","sourceRoot":"","sources":["../../../src/modules/StreamingClient.ts"],"names":[],"mappings":"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"}
|