@absolutejs/voice 0.0.22-beta.671 → 0.0.22-beta.673
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/core/assistantHealth.d.ts +3 -40
- package/dist/core/auditDeliveryRoutes.d.ts +5 -40
- package/dist/core/auditRoutes.d.ts +3 -27
- package/dist/core/bargeInRoutes.d.ts +3 -27
- package/dist/core/browserCallProfiles.d.ts +3 -27
- package/dist/core/browserMediaRoutes.d.ts +3 -27
- package/dist/core/callDebugger.d.ts +3 -27
- package/dist/core/campaign.d.ts +166 -143
- package/dist/core/competitiveCoverage.d.ts +3 -40
- package/dist/core/dataControl.d.ts +3 -27
- package/dist/core/deliveryRuntime.d.ts +3 -40
- package/dist/core/deliverySinkRoutes.d.ts +3 -40
- package/dist/core/demoReadyRoutes.d.ts +3 -27
- package/dist/core/diagnosticsRoutes.d.ts +3 -27
- package/dist/core/evalRoutes.d.ts +3 -27
- package/dist/core/guardrails.d.ts +3 -27
- package/dist/core/handoffHealth.d.ts +5 -40
- package/dist/core/htmxDashboardRoutes.d.ts +309 -195
- package/dist/core/incidentBundle.d.ts +3 -27
- package/dist/core/incidentTimeline.d.ts +3 -40
- package/dist/core/liveLatency.d.ts +3 -40
- package/dist/core/liveOps.d.ts +154 -44
- package/dist/core/mediaPipelineRoutes.d.ts +3 -40
- package/dist/core/monitor.d.ts +5 -19
- package/dist/core/observabilityExport.d.ts +6 -54
- package/dist/core/operationalStatus.d.ts +3 -40
- package/dist/core/operationsRecord.d.ts +3 -27
- package/dist/core/opsActionAuditRoutes.d.ts +160 -51
- package/dist/core/opsConsoleRoutes.d.ts +3 -27
- package/dist/core/opsRecovery.d.ts +3 -40
- package/dist/core/opsStatusRoutes.d.ts +3 -27
- package/dist/core/opsWebhook.d.ts +158 -49
- package/dist/core/outcomeContract.d.ts +3 -40
- package/dist/core/phoneAgentProductionSmoke.d.ts +6 -40
- package/dist/core/platformCoverage.d.ts +3 -27
- package/dist/core/plugin.d.ts +12 -40
- package/dist/core/postCallAnalysis.d.ts +3 -27
- package/dist/core/productionReadiness.d.ts +3 -27
- package/dist/core/profileSwitchRecommendation.d.ts +299 -116
- package/dist/core/proofPack.d.ts +3 -27
- package/dist/core/proofTrends.d.ts +15 -135
- package/dist/core/providerCapabilities.d.ts +3 -40
- package/dist/core/providerDecisionTraces.d.ts +3 -40
- package/dist/core/providerHealth.d.ts +3 -40
- package/dist/core/providerOrchestration.d.ts +3 -40
- package/dist/core/providerSlo.d.ts +3 -27
- package/dist/core/providerStackRecommendations.d.ts +3 -27
- package/dist/core/qualityRoutes.d.ts +3 -27
- package/dist/core/realtimeChannel.d.ts +3 -40
- package/dist/core/realtimeProviderContracts.d.ts +3 -40
- package/dist/core/reconnectContract.d.ts +153 -79
- package/dist/core/resilienceRoutes.d.ts +3 -40
- package/dist/core/routeAuth.d.ts +3 -29
- package/dist/core/sessionObservability.d.ts +3 -27
- package/dist/core/sessionReplay.d.ts +10 -79
- package/dist/core/sessionSnapshot.d.ts +148 -39
- package/dist/core/simulationSuite.d.ts +3 -40
- package/dist/core/sloCalibration.d.ts +6 -54
- package/dist/core/telephonyMediaRoutes.d.ts +3 -27
- package/dist/core/telephonyOutcome.d.ts +148 -39
- package/dist/core/toolContract.d.ts +3 -40
- package/dist/core/traceDeliveryRoutes.d.ts +5 -40
- package/dist/core/traceTimeline.d.ts +3 -27
- package/dist/core/turnLatency.d.ts +3 -40
- package/dist/core/turnQuality.d.ts +3 -40
- package/dist/core/voiceMonitoring.d.ts +164 -115
- package/dist/index.js +63 -27
- package/dist/telephony/matrix.d.ts +148 -39
- package/dist/telephony/plivo.d.ts +10 -33
- package/dist/telephony/security.d.ts +3 -40
- package/dist/telephony/telnyx.d.ts +10 -33
- package/dist/testing/index.js +19 -11
- package/package.json +7 -81
|
@@ -208,22 +208,14 @@ export declare const createVoiceTelnyxWebhookVerifier: (options: VoiceTelnyxWebh
|
|
|
208
208
|
rawBody: string;
|
|
209
209
|
headers: Headers;
|
|
210
210
|
}) => Promise<VoiceTelephonyWebhookVerificationResult>;
|
|
211
|
-
export declare const createTelnyxVoiceRoutes: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options?: TelnyxVoiceRoutesOptions<TContext, TSession, TResult>) => Elysia<"", {
|
|
211
|
+
export declare const createTelnyxVoiceRoutes: <TContext = unknown, TSession extends VoiceSessionRecord = VoiceSessionRecord, TResult = unknown>(options?: TelnyxVoiceRoutesOptions<TContext, TSession, TResult>) => Elysia<"", "local", {
|
|
212
212
|
decorator: {};
|
|
213
213
|
store: {};
|
|
214
214
|
derive: {};
|
|
215
|
-
resolve: {};
|
|
216
215
|
}, {
|
|
217
216
|
typebox: {};
|
|
218
|
-
error:
|
|
219
|
-
}, {
|
|
220
|
-
schema: {};
|
|
221
|
-
standaloneSchema: {};
|
|
222
|
-
macro: {};
|
|
223
|
-
macroFn: {};
|
|
224
|
-
parser: {};
|
|
225
|
-
response: {};
|
|
226
|
-
}, {
|
|
217
|
+
error: [];
|
|
218
|
+
}, import("elysia/types").DefaultMetadata, {
|
|
227
219
|
[x: string]: {
|
|
228
220
|
get: {
|
|
229
221
|
body: unknown;
|
|
@@ -233,6 +225,7 @@ export declare const createTelnyxVoiceRoutes: <TContext = unknown, TSession exte
|
|
|
233
225
|
response: {
|
|
234
226
|
200: Response;
|
|
235
227
|
};
|
|
228
|
+
error: never;
|
|
236
229
|
};
|
|
237
230
|
};
|
|
238
231
|
} & {
|
|
@@ -245,17 +238,12 @@ export declare const createTelnyxVoiceRoutes: <TContext = unknown, TSession exte
|
|
|
245
238
|
response: {
|
|
246
239
|
200: Response;
|
|
247
240
|
};
|
|
241
|
+
error: never;
|
|
248
242
|
};
|
|
249
243
|
};
|
|
250
244
|
} & {
|
|
251
245
|
[x: string]: {
|
|
252
|
-
subscribe: {
|
|
253
|
-
body: {};
|
|
254
|
-
params: {};
|
|
255
|
-
query: {};
|
|
256
|
-
headers: {};
|
|
257
|
-
response: {};
|
|
258
|
-
};
|
|
246
|
+
subscribe: import("elysia/types").CreateWSEdenResponse<string, import("elysia/types").IntersectIfObjectSchema<import("elysia").UnwrapRoute<import("elysia").InputSchema<never>, {}, `/${string}`>, import("elysia/types").MergeScopedSchemas<{}, {}, {}>>, {}, import("elysia/types").ComposeElysiaResponse<import("elysia/types").IntersectIfObjectSchema<import("elysia").UnwrapRoute<import("elysia").InputSchema<never>, {}, `/${string}`>, import("elysia/types").MergeScopedSchemas<{}, {}, {}>>, void, {}, [], string>>;
|
|
259
247
|
};
|
|
260
248
|
} & {
|
|
261
249
|
[x: string]: {
|
|
@@ -267,24 +255,13 @@ export declare const createTelnyxVoiceRoutes: <TContext = unknown, TSession exte
|
|
|
267
255
|
response: {
|
|
268
256
|
200: Response | import("..").VoiceTelephonyWebhookDecision<TResult>;
|
|
269
257
|
};
|
|
258
|
+
error: never;
|
|
270
259
|
};
|
|
271
260
|
};
|
|
272
|
-
}, {
|
|
273
|
-
derive: {};
|
|
274
|
-
resolve: {};
|
|
275
|
-
schema: {};
|
|
276
|
-
standaloneSchema: {};
|
|
277
|
-
response: {};
|
|
278
|
-
}, {
|
|
279
|
-
derive: {};
|
|
280
|
-
resolve: {};
|
|
281
|
-
schema: {};
|
|
282
|
-
standaloneSchema: {};
|
|
283
|
-
response: {};
|
|
284
|
-
} & {
|
|
261
|
+
}, import("elysia/types").DefaultEphemeral, {
|
|
285
262
|
derive: {};
|
|
286
|
-
resolve: {};
|
|
287
263
|
schema: {};
|
|
288
|
-
|
|
264
|
+
schemas: {};
|
|
289
265
|
response: {};
|
|
266
|
+
error: [];
|
|
290
267
|
}>;
|
package/dist/testing/index.js
CHANGED
|
@@ -7430,9 +7430,13 @@ var createVoiceSession = (options) => {
|
|
|
7430
7430
|
if (snapshot.status === "completed" || snapshot.status === "failed" || snapshot.call?.endedAt) {
|
|
7431
7431
|
return;
|
|
7432
7432
|
}
|
|
7433
|
+
const { lastSpeechAt, lastTranscriptAt } = snapshot.currentTurn;
|
|
7434
|
+
if (lastTranscriptAt !== undefined && stuckCloseAfterMs !== undefined && Date.now() - lastTranscriptAt < stuckCloseAfterMs) {
|
|
7435
|
+
kickStuckCloseWatchdog();
|
|
7436
|
+
return;
|
|
7437
|
+
}
|
|
7433
7438
|
stuckCloseFired = true;
|
|
7434
7439
|
const reason = `no caller progress for ${stuckCloseAfterMs}ms`;
|
|
7435
|
-
const { lastSpeechAt, lastTranscriptAt } = snapshot.currentTurn;
|
|
7436
7440
|
const sttDeafConfirmed = sttDeafConfirmedAt > 0 && (lastTranscriptAt === undefined || sttDeafConfirmedAt > lastTranscriptAt);
|
|
7437
7441
|
const diagnostic = {
|
|
7438
7442
|
action: "stuck-call-close",
|
|
@@ -14280,6 +14284,7 @@ var renderVoiceOperationsRecordIncidentMarkdown = (record) => {
|
|
|
14280
14284
|
// src/telephony/twilio.ts
|
|
14281
14285
|
import { Buffer as Buffer3 } from "buffer";
|
|
14282
14286
|
import { Elysia as Elysia6 } from "elysia";
|
|
14287
|
+
import { websocket } from "elysia/websocket";
|
|
14283
14288
|
|
|
14284
14289
|
// src/internal/evidence.ts
|
|
14285
14290
|
var assertVoiceEvidence = (failureMessage, assertion) => {
|
|
@@ -15056,7 +15061,9 @@ var createVoiceTelephonyWebhookRoutes = (options = {}) => {
|
|
|
15056
15061
|
const handler = createVoiceTelephonyWebhookHandler(options);
|
|
15057
15062
|
return new Elysia5({
|
|
15058
15063
|
name: options.name ?? "absolutejs-voice-telephony-webhooks"
|
|
15059
|
-
}).post(path,
|
|
15064
|
+
}).post(path, {
|
|
15065
|
+
parse: "none"
|
|
15066
|
+
}, async ({ query, request }) => {
|
|
15060
15067
|
try {
|
|
15061
15068
|
return await handler({ query, request });
|
|
15062
15069
|
} catch (error) {
|
|
@@ -15070,8 +15077,6 @@ var createVoiceTelephonyWebhookRoutes = (options = {}) => {
|
|
|
15070
15077
|
}
|
|
15071
15078
|
throw error;
|
|
15072
15079
|
}
|
|
15073
|
-
}, {
|
|
15074
|
-
parse: "none"
|
|
15075
15080
|
});
|
|
15076
15081
|
};
|
|
15077
15082
|
|
|
@@ -15110,10 +15115,12 @@ var resolveTrustedTwilioRequestUrl = (security, request) => {
|
|
|
15110
15115
|
return `${resolveTwilioPublicOrigin(security)}${requestUrl.pathname}${requestUrl.search}`;
|
|
15111
15116
|
};
|
|
15112
15117
|
var resolveTwilioSocketHeaders = (socket) => {
|
|
15113
|
-
|
|
15114
|
-
|
|
15115
|
-
|
|
15116
|
-
|
|
15118
|
+
const data = socket.data && typeof socket.data === "object" ? socket.data : {
|
|
15119
|
+
headers: socket.headers,
|
|
15120
|
+
request: socket.request && typeof socket.request === "object" ? socket.request : undefined
|
|
15121
|
+
};
|
|
15122
|
+
const candidates = [data.request?.headers, data.headers];
|
|
15123
|
+
for (const candidate of candidates) {
|
|
15117
15124
|
if (!candidate)
|
|
15118
15125
|
continue;
|
|
15119
15126
|
if (typeof candidate === "object" && "get" in candidate && typeof candidate.get === "function") {
|
|
@@ -15125,6 +15132,7 @@ var resolveTwilioSocketHeaders = (socket) => {
|
|
|
15125
15132
|
}
|
|
15126
15133
|
return new Headers;
|
|
15127
15134
|
};
|
|
15135
|
+
var socketKey = (socket) => ("raw" in socket) && socket.raw && typeof socket.raw === "object" ? socket.raw : socket;
|
|
15128
15136
|
var readTwilioVoiceForm = async (request) => {
|
|
15129
15137
|
const declaredLength = Number(request.headers.get("content-length"));
|
|
15130
15138
|
if (Number.isFinite(declaredLength) && declaredLength > MAX_TWILIO_VOICE_BODY_BYTES) {
|
|
@@ -15892,9 +15900,9 @@ var createTwilioVoiceRoutes = (options) => {
|
|
|
15892
15900
|
const streamVerificationUrl = options.security.streamVerificationUrl ?? `${resolveTwilioPublicOrigin(options.security).replace(/^https:/, "wss:")}${streamPath}`;
|
|
15893
15901
|
const app = new Elysia6({
|
|
15894
15902
|
name: options.name ?? "absolutejs-voice-twilio"
|
|
15895
|
-
}).get(twimlPath, renderTwiml).post(twimlPath,
|
|
15903
|
+
}).use(websocket()).get(twimlPath, renderTwiml).post(twimlPath, { parse: "none" }, renderTwiml).ws(streamPath, {
|
|
15896
15904
|
close: async (ws, _code, reason) => {
|
|
15897
|
-
const key = ws
|
|
15905
|
+
const key = socketKey(ws);
|
|
15898
15906
|
const bridge = bridges.get(key);
|
|
15899
15907
|
bridges.delete(key);
|
|
15900
15908
|
admittedSockets.delete(key);
|
|
@@ -15902,7 +15910,7 @@ var createTwilioVoiceRoutes = (options) => {
|
|
|
15902
15910
|
await bridge?.close(reason);
|
|
15903
15911
|
},
|
|
15904
15912
|
message: async (ws, raw) => {
|
|
15905
|
-
const key = ws
|
|
15913
|
+
const key = socketKey(ws);
|
|
15906
15914
|
if (!admittedSockets.has(key)) {
|
|
15907
15915
|
const verification = await verifyVoiceTwilioWebhookSignature({
|
|
15908
15916
|
authToken: options.security.authToken,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@absolutejs/voice",
|
|
3
|
-
"version": "0.0.22-beta.
|
|
3
|
+
"version": "0.0.22-beta.673",
|
|
4
4
|
"description": "Voice primitives and Elysia plugin for AbsoluteJS",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"test:openai": "bun test ./test/live/openai.live.test.ts",
|
|
34
34
|
"typecheck": "absolute typecheck",
|
|
35
35
|
"verify-package": "absolute-manifest verify-package",
|
|
36
|
-
"check:package": "bun run format && bun run typecheck && bun run test && bun run verify-package && bun run build
|
|
36
|
+
"check:package": "bun run format && bun run typecheck && bun run test && bun run verify-package && bun run build"
|
|
37
37
|
},
|
|
38
38
|
"exports": {
|
|
39
39
|
".": {
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
"@absolutejs/ai": ">=0.0.5",
|
|
120
120
|
"@angular/core": ">=21 <23",
|
|
121
121
|
"drizzle-orm": ">=1.0.0-rc.4 <2",
|
|
122
|
-
"elysia": ">=
|
|
122
|
+
"elysia": ">=2.0.0-beta.6 <3",
|
|
123
123
|
"react": ">=19 <20",
|
|
124
124
|
"vue": ">=3.5 <4"
|
|
125
125
|
},
|
|
@@ -141,12 +141,12 @@
|
|
|
141
141
|
}
|
|
142
142
|
},
|
|
143
143
|
"dependencies": {
|
|
144
|
-
"@absolutejs/manifest": "0.
|
|
144
|
+
"@absolutejs/manifest": "0.9.0",
|
|
145
145
|
"@absolutejs/media": "0.0.1-beta.23",
|
|
146
146
|
"@sinclair/typebox": "0.34.52"
|
|
147
147
|
},
|
|
148
148
|
"devDependencies": {
|
|
149
|
-
"@absolutejs/absolute": "0.
|
|
149
|
+
"@absolutejs/absolute": "0.20.0-beta.0",
|
|
150
150
|
"@absolutejs/ai": "0.0.47",
|
|
151
151
|
"@angular/core": "22.0.8",
|
|
152
152
|
"@electric-sql/pglite": "^0.4.5",
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
"@types/react": "19.2.0",
|
|
157
157
|
"@typescript-eslint/parser": "^8.57.2",
|
|
158
158
|
"drizzle-orm": "1.0.0-rc.4",
|
|
159
|
-
"elysia": "
|
|
159
|
+
"elysia": "2.0.0-beta.6",
|
|
160
160
|
"eslint": "^10.1.0",
|
|
161
161
|
"eslint-plugin-absolute": "0.11.0-beta.3",
|
|
162
162
|
"eslint-plugin-promise": "^7.2.1",
|
|
@@ -170,80 +170,6 @@
|
|
|
170
170
|
"vue": "3.5.40"
|
|
171
171
|
},
|
|
172
172
|
"absolutejs": {
|
|
173
|
-
"manifestContract": 2
|
|
174
|
-
"runtimePeers": {
|
|
175
|
-
"@absolutejs/ai": {
|
|
176
|
-
"artifactImports": [],
|
|
177
|
-
"buildExternals": [
|
|
178
|
-
"@absolutejs/ai",
|
|
179
|
-
"@absolutejs/ai/*"
|
|
180
|
-
],
|
|
181
|
-
"optional": true,
|
|
182
|
-
"range": ">=0.0.5",
|
|
183
|
-
"tested": "0.0.47"
|
|
184
|
-
},
|
|
185
|
-
"@angular/core": {
|
|
186
|
-
"artifactImports": [
|
|
187
|
-
"@angular/core"
|
|
188
|
-
],
|
|
189
|
-
"buildExternals": [
|
|
190
|
-
"@angular/core",
|
|
191
|
-
"@angular/core/*"
|
|
192
|
-
],
|
|
193
|
-
"optional": true,
|
|
194
|
-
"range": ">=21 <23",
|
|
195
|
-
"tested": "22.0.8"
|
|
196
|
-
},
|
|
197
|
-
"drizzle-orm": {
|
|
198
|
-
"artifactImports": [
|
|
199
|
-
"drizzle-orm",
|
|
200
|
-
"drizzle-orm/pg-core"
|
|
201
|
-
],
|
|
202
|
-
"buildExternals": [
|
|
203
|
-
"drizzle-orm",
|
|
204
|
-
"drizzle-orm/*"
|
|
205
|
-
],
|
|
206
|
-
"optional": true,
|
|
207
|
-
"range": ">=1.0.0-rc.4 <2",
|
|
208
|
-
"tested": "1.0.0-rc.4"
|
|
209
|
-
},
|
|
210
|
-
"elysia": {
|
|
211
|
-
"artifactImports": [
|
|
212
|
-
"elysia"
|
|
213
|
-
],
|
|
214
|
-
"buildExternals": [
|
|
215
|
-
"elysia",
|
|
216
|
-
"elysia/*"
|
|
217
|
-
],
|
|
218
|
-
"optional": false,
|
|
219
|
-
"range": ">=1.4.29 <2",
|
|
220
|
-
"tested": "1.4.29"
|
|
221
|
-
},
|
|
222
|
-
"react": {
|
|
223
|
-
"artifactImports": [
|
|
224
|
-
"react",
|
|
225
|
-
"react/jsx-dev-runtime"
|
|
226
|
-
],
|
|
227
|
-
"buildExternals": [
|
|
228
|
-
"react",
|
|
229
|
-
"react/*"
|
|
230
|
-
],
|
|
231
|
-
"optional": true,
|
|
232
|
-
"range": ">=19 <20",
|
|
233
|
-
"tested": "19.2.8"
|
|
234
|
-
},
|
|
235
|
-
"vue": {
|
|
236
|
-
"artifactImports": [
|
|
237
|
-
"vue"
|
|
238
|
-
],
|
|
239
|
-
"buildExternals": [
|
|
240
|
-
"vue",
|
|
241
|
-
"vue/*"
|
|
242
|
-
],
|
|
243
|
-
"optional": true,
|
|
244
|
-
"range": ">=3.5 <4",
|
|
245
|
-
"tested": "3.5.40"
|
|
246
|
-
}
|
|
247
|
-
}
|
|
173
|
+
"manifestContract": 2
|
|
248
174
|
}
|
|
249
175
|
}
|