@absolutejs/voice 0.0.22-beta.236 → 0.0.22-beta.238
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 +20 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +103 -70
- package/dist/platformCoverage.d.ts +73 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -924,6 +924,26 @@ Use operations records instead of hosted call logs. A proof failure should link
|
|
|
924
924
|
|
|
925
925
|
Use simulation and contracts before live traffic. The simulation suite, tool contracts, outcome contracts, provider routing contracts, phone-agent smoke contracts, and production-readiness gates turn dashboard-only confidence into code-owned deploy evidence.
|
|
926
926
|
|
|
927
|
+
### Vapi Migration Checklist
|
|
928
|
+
|
|
929
|
+
Use this checklist when a buyer asks whether AbsoluteJS Voice covers the practical Vapi surface area without becoming a hosted platform:
|
|
930
|
+
|
|
931
|
+
| Vapi evaluation question | AbsoluteJS proof to show |
|
|
932
|
+
| --- | --- |
|
|
933
|
+
| Can I make a web voice assistant? | Framework page using `voice(...)`, then `/traces` and `/production-readiness` |
|
|
934
|
+
| Can I make phone calls? | `/phone-agent`, `/api/voice/phone/setup`, carrier matrix, and phone smoke proof |
|
|
935
|
+
| Can I use multiple assistants? | `createVoiceAgentSquad(...)`, `/agent-squad-contract`, current-specialist framework helpers, and handoff traces |
|
|
936
|
+
| Can I call tools/functions? | Tool definitions, `/tool-contracts`, audit events, integration events, and operations records |
|
|
937
|
+
| Can I debug a bad call? | `/voice-operations/:sessionId`, session replay, trace timeline, incident Markdown, delivery attempts, and provider decisions |
|
|
938
|
+
| Can I monitor production health? | `/production-readiness`, `/ops-recovery`, `/api/production-readiness/gate`, provider SLOs, and delivery runtime proof |
|
|
939
|
+
| Can I test before live traffic? | `/voice/simulations`, scenario fixtures, tool contracts, outcome contracts, provider routing contracts, and eval baselines |
|
|
940
|
+
| Can I run outbound campaigns? | `createVoiceCampaignRoutes(...)`, campaign readiness proof, carrier dry-run proof, retry/quiet-hours/rate-limit evidence |
|
|
941
|
+
| Can operators intervene? | Live-ops routes, action-center helpers, pause/resume/takeover runtime controls, and operator action audit history |
|
|
942
|
+
| Can I own compliance evidence? | `/data-control`, redacted audit export, retention dry-run/apply routes, provider-key recommendations, and customer-owned storage |
|
|
943
|
+
| Can I export logs to my infrastructure? | `/voice/observability-export`, delivery receipts, artifact index, replay proof, S3/SQLite/Postgres/file/webhook destinations |
|
|
944
|
+
|
|
945
|
+
The migration path should start by replacing hosted-dashboard concepts with mounted primitives and proof routes. Do not start by copying a hosted dashboard. Start with the voice route, operations record, readiness gate, provider contracts, and customer-owned observability export; then add campaigns, live-ops, or compliance controls only when the app needs those surfaces.
|
|
946
|
+
|
|
927
947
|
## Install
|
|
928
948
|
|
|
929
949
|
```bash
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export { buildVoiceDiagnosticsMarkdown, createVoiceDiagnosticsRoutes, resolveVoi
|
|
|
14
14
|
export { buildVoiceDemoReadyReport, createVoiceDemoReadyRoutes, renderVoiceDemoReadyHTML } from './demoReadyRoutes';
|
|
15
15
|
export { buildVoiceDeliverySinkReport, createVoiceDeliverySinkDescriptor, createVoiceDeliverySinkPair, createVoiceDeliverySinkRoutes, createVoiceFileDeliverySink, createVoicePostgresDeliverySink, createVoiceS3DeliverySink, createVoiceSQLiteDeliverySink, createVoiceWebhookDeliverySink, renderVoiceDeliverySinkHTML } from './deliverySinkRoutes';
|
|
16
16
|
export { buildVoiceOpsActionHistoryReport, createVoiceOpsActionAuditRoutes, recordVoiceOpsActionAudit, renderVoiceOpsActionHistoryHTML } from './opsActionAuditRoutes';
|
|
17
|
+
export { buildVoicePlatformCoverageSummary, createVoicePlatformCoverageRoutes } from './platformCoverage';
|
|
18
|
+
export type { VoicePlatformCoverageEvidence, VoicePlatformCoverageRoutesOptions, VoicePlatformCoverageStatus, VoicePlatformCoverageSummary, VoicePlatformCoverageSummaryInput, VoicePlatformCoverageSurface } from './platformCoverage';
|
|
17
19
|
export { buildVoiceLiveOpsControlState, createVoiceLiveOpsController, createVoiceLiveOpsRoutes, createVoiceMemoryLiveOpsControlStore, getVoiceLiveOpsControlStatus, VOICE_LIVE_OPS_ACTIONS } from './liveOps';
|
|
18
20
|
export type { VoiceLiveOpsAction, VoiceLiveOpsActionInput, VoiceLiveOpsActionResult, VoiceLiveOpsControllerOptions, VoiceLiveOpsControlState, VoiceLiveOpsControlStatus, VoiceLiveOpsControlStore, VoiceLiveOpsRoutesOptions } from './liveOps';
|
|
19
21
|
export { buildVoiceDeliveryRuntimeReport, createVoiceDeliveryRuntime, createVoiceDeliveryRuntimePresetConfig, createVoiceDeliveryRuntimeRoutes, renderVoiceDeliveryRuntimeHTML } from './deliveryRuntime';
|
package/dist/index.js
CHANGED
|
@@ -12260,8 +12260,39 @@ var renderVoiceOpsActionHistoryHTML = (report) => {
|
|
|
12260
12260
|
const rows = report.entries.map((entry) => `<article class="${entry.ok ? "ok" : "fail"}"><span>${escapeHtml15(entry.ok ? "success" : "error")}</span><strong>${escapeHtml15(entry.actionId)}</strong><p>${escapeHtml15(new Date(entry.at).toLocaleString())}${entry.status ? ` \xB7 HTTP ${String(entry.status)}` : ""}</p>${entry.error ? `<p>${escapeHtml15(entry.error)}</p>` : ""}</article>`).join("");
|
|
12261
12261
|
return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>Voice Ops Action History</title><style>body{background:#11140f;color:#f7f1df;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{margin:auto;max-width:980px;padding:32px}.hero,article{background:#181d15;border:1px solid #2c3327;border-radius:24px;padding:20px}.hero{margin-bottom:16px}h1{font-size:clamp(2rem,6vw,4rem);line-height:.95}section{display:grid;gap:12px}article.ok{border-color:rgba(34,197,94,.55)}article.fail{border-color:rgba(239,68,68,.75)}span{color:#facc15;font-weight:900;text-transform:uppercase}p{color:#c8ccb8}</style></head><body><main><section class="hero"><span>Operator proof</span><h1>Voice Ops Action History</h1><p>${String(report.total)} action(s), ${String(report.failed)} failed.</p></section><section>${rows || "<p>No operator actions have been recorded.</p>"}</section></main></body></html>`;
|
|
12262
12262
|
};
|
|
12263
|
-
// src/
|
|
12263
|
+
// src/platformCoverage.ts
|
|
12264
12264
|
import { Elysia as Elysia13 } from "elysia";
|
|
12265
|
+
var buildVoicePlatformCoverageSummary = (input) => {
|
|
12266
|
+
const coverage = input.coverage ?? [];
|
|
12267
|
+
const ok = input.ok ?? (coverage.length > 0 && coverage.every((surface) => surface.status === "pass"));
|
|
12268
|
+
const status = coverage.length === 0 ? "missing" : ok ? "pass" : "stale";
|
|
12269
|
+
return {
|
|
12270
|
+
coverage,
|
|
12271
|
+
generatedAt: input.generatedAt,
|
|
12272
|
+
ok,
|
|
12273
|
+
outputDir: input.outputDir,
|
|
12274
|
+
runId: input.runId,
|
|
12275
|
+
source: input.source,
|
|
12276
|
+
status,
|
|
12277
|
+
total: coverage.length
|
|
12278
|
+
};
|
|
12279
|
+
};
|
|
12280
|
+
var normalizeCoverageSummary = (value) => ("status" in value) && ("total" in value) && ("coverage" in value) ? value : buildVoicePlatformCoverageSummary(value);
|
|
12281
|
+
var createVoicePlatformCoverageRoutes = (options) => {
|
|
12282
|
+
const path = options.path ?? "/api/voice/platform-coverage";
|
|
12283
|
+
const routes = new Elysia13({
|
|
12284
|
+
name: options.name ?? "absolutejs-voice-platform-coverage"
|
|
12285
|
+
});
|
|
12286
|
+
routes.get(path, async () => {
|
|
12287
|
+
const value = typeof options.source === "function" ? await options.source() : options.source;
|
|
12288
|
+
return Response.json(normalizeCoverageSummary(value), {
|
|
12289
|
+
headers: options.headers
|
|
12290
|
+
});
|
|
12291
|
+
});
|
|
12292
|
+
return routes;
|
|
12293
|
+
};
|
|
12294
|
+
// src/liveOps.ts
|
|
12295
|
+
import { Elysia as Elysia14 } from "elysia";
|
|
12265
12296
|
var VOICE_LIVE_OPS_ACTIONS = [
|
|
12266
12297
|
"assign",
|
|
12267
12298
|
"create-task",
|
|
@@ -12426,7 +12457,7 @@ var createVoiceLiveOpsRoutes = (options = {}) => {
|
|
|
12426
12457
|
const controller = createVoiceLiveOpsController(options);
|
|
12427
12458
|
const path = options.path ?? "/api/voice/live-ops/action";
|
|
12428
12459
|
const controlPath = options.controlPath ?? "/api/voice/live-ops/control/:sessionId";
|
|
12429
|
-
return new
|
|
12460
|
+
return new Elysia14({
|
|
12430
12461
|
name: options.name ?? "absolutejs-voice-live-ops"
|
|
12431
12462
|
}).post(path, async ({ request, set }) => {
|
|
12432
12463
|
try {
|
|
@@ -12448,7 +12479,7 @@ var createVoiceLiveOpsRoutes = (options = {}) => {
|
|
|
12448
12479
|
});
|
|
12449
12480
|
};
|
|
12450
12481
|
// src/deliveryRuntime.ts
|
|
12451
|
-
import { Elysia as
|
|
12482
|
+
import { Elysia as Elysia15 } from "elysia";
|
|
12452
12483
|
import { mkdir } from "fs/promises";
|
|
12453
12484
|
import { dirname, join } from "path";
|
|
12454
12485
|
var escapeHtml16 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
@@ -12702,7 +12733,7 @@ var createVoiceDeliveryRuntimeRoutes = (options) => {
|
|
|
12702
12733
|
const htmlPath = options.htmlPath === undefined ? "/delivery-runtime" : options.htmlPath;
|
|
12703
12734
|
const tickPath = options.tickPath === undefined ? "/api/voice-delivery-runtime/tick" : options.tickPath;
|
|
12704
12735
|
const requeueDeadLettersPath = options.requeueDeadLettersPath === undefined ? "/api/voice-delivery-runtime/requeue-dead-letters" : options.requeueDeadLettersPath;
|
|
12705
|
-
const routes = new
|
|
12736
|
+
const routes = new Elysia15({
|
|
12706
12737
|
name: options.name ?? "absolutejs-voice-delivery-runtime"
|
|
12707
12738
|
}).get(path, () => buildVoiceDeliveryRuntimeReport(options.runtime));
|
|
12708
12739
|
if (tickPath !== false) {
|
|
@@ -12738,7 +12769,7 @@ var createVoiceDeliveryRuntimeRoutes = (options) => {
|
|
|
12738
12769
|
return routes;
|
|
12739
12770
|
};
|
|
12740
12771
|
// src/dataControl.ts
|
|
12741
|
-
import { Elysia as
|
|
12772
|
+
import { Elysia as Elysia16 } from "elysia";
|
|
12742
12773
|
var voiceComplianceRedactionDefaults = {
|
|
12743
12774
|
keys: [
|
|
12744
12775
|
"apiKey",
|
|
@@ -13145,7 +13176,7 @@ var parseRetentionPolicyBody = (body, options, dryRun) => {
|
|
|
13145
13176
|
var createVoiceDataControlRoutes = (options) => {
|
|
13146
13177
|
const path = options.path ?? "/data-control";
|
|
13147
13178
|
const title = options.title ?? "AbsoluteJS Voice Data Control";
|
|
13148
|
-
const routes = new
|
|
13179
|
+
const routes = new Elysia16({
|
|
13149
13180
|
name: options.name ?? "absolutejs-voice-data-control"
|
|
13150
13181
|
});
|
|
13151
13182
|
routes.get(path, async ({ query }) => {
|
|
@@ -13218,15 +13249,15 @@ var createVoiceDataControlRoutes = (options) => {
|
|
|
13218
13249
|
return routes;
|
|
13219
13250
|
};
|
|
13220
13251
|
// src/evalRoutes.ts
|
|
13221
|
-
import { Elysia as
|
|
13252
|
+
import { Elysia as Elysia19 } from "elysia";
|
|
13222
13253
|
import { mkdir as mkdir2 } from "fs/promises";
|
|
13223
13254
|
import { dirname as dirname2 } from "path";
|
|
13224
13255
|
|
|
13225
13256
|
// src/qualityRoutes.ts
|
|
13226
|
-
import { Elysia as
|
|
13257
|
+
import { Elysia as Elysia18 } from "elysia";
|
|
13227
13258
|
|
|
13228
13259
|
// src/handoffHealth.ts
|
|
13229
|
-
import { Elysia as
|
|
13260
|
+
import { Elysia as Elysia17 } from "elysia";
|
|
13230
13261
|
var escapeHtml18 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
13231
13262
|
var getString7 = (value) => typeof value === "string" && value.length > 0 ? value : undefined;
|
|
13232
13263
|
var isStatus = (value) => value === "delivered" || value === "failed" || value === "skipped";
|
|
@@ -13409,7 +13440,7 @@ var createVoiceHandoffHealthHTMLHandler = (options = {}) => async ({ query }) =>
|
|
|
13409
13440
|
var createVoiceHandoffHealthRoutes = (options = {}) => {
|
|
13410
13441
|
const path = options.path ?? "/api/voice-handoffs";
|
|
13411
13442
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
13412
|
-
const routes = new
|
|
13443
|
+
const routes = new Elysia17({
|
|
13413
13444
|
name: options.name ?? "absolutejs-voice-handoff-health"
|
|
13414
13445
|
}).get(path, createVoiceHandoffHealthJSONHandler(options));
|
|
13415
13446
|
if (htmlPath) {
|
|
@@ -13540,7 +13571,7 @@ var renderVoiceQualityHTML = (report, options = {}) => {
|
|
|
13540
13571
|
};
|
|
13541
13572
|
var createVoiceQualityRoutes = (options) => {
|
|
13542
13573
|
const path = options.path ?? "/quality";
|
|
13543
|
-
const routes = new
|
|
13574
|
+
const routes = new Elysia18({
|
|
13544
13575
|
name: options.name ?? "absolutejs-voice-quality"
|
|
13545
13576
|
});
|
|
13546
13577
|
const getReport = () => evaluateVoiceQuality({
|
|
@@ -13953,7 +13984,7 @@ var renderVoiceScenarioFixtureEvalHTML = (report, options = {}) => {
|
|
|
13953
13984
|
};
|
|
13954
13985
|
var createVoiceEvalRoutes = (options) => {
|
|
13955
13986
|
const path = options.path ?? "/evals";
|
|
13956
|
-
const routes = new
|
|
13987
|
+
const routes = new Elysia19({
|
|
13957
13988
|
name: options.name ?? "absolutejs-voice-evals"
|
|
13958
13989
|
});
|
|
13959
13990
|
const getReport = () => runVoiceSessionEvals({
|
|
@@ -14090,10 +14121,10 @@ var createVoiceEvalRoutes = (options) => {
|
|
|
14090
14121
|
return routes;
|
|
14091
14122
|
};
|
|
14092
14123
|
// src/simulationSuite.ts
|
|
14093
|
-
import { Elysia as
|
|
14124
|
+
import { Elysia as Elysia22 } from "elysia";
|
|
14094
14125
|
|
|
14095
14126
|
// src/outcomeContract.ts
|
|
14096
|
-
import { Elysia as
|
|
14127
|
+
import { Elysia as Elysia20 } from "elysia";
|
|
14097
14128
|
var escapeHtml21 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
14098
14129
|
var resolveSessionHref2 = (value, sessionId) => {
|
|
14099
14130
|
if (value === false) {
|
|
@@ -14259,7 +14290,7 @@ var createVoiceOutcomeContractHTMLHandler = (options) => async () => {
|
|
|
14259
14290
|
var createVoiceOutcomeContractRoutes = (options) => {
|
|
14260
14291
|
const path = options.path ?? "/api/outcome-contracts";
|
|
14261
14292
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
14262
|
-
const routes = new
|
|
14293
|
+
const routes = new Elysia20({
|
|
14263
14294
|
name: options.name ?? "absolutejs-voice-outcome-contracts"
|
|
14264
14295
|
}).get(path, createVoiceOutcomeContractJSONHandler(options));
|
|
14265
14296
|
if (htmlPath) {
|
|
@@ -14269,7 +14300,7 @@ var createVoiceOutcomeContractRoutes = (options) => {
|
|
|
14269
14300
|
};
|
|
14270
14301
|
|
|
14271
14302
|
// src/toolContract.ts
|
|
14272
|
-
import { Elysia as
|
|
14303
|
+
import { Elysia as Elysia21 } from "elysia";
|
|
14273
14304
|
|
|
14274
14305
|
// src/toolRuntime.ts
|
|
14275
14306
|
var toErrorMessage4 = (error) => error instanceof Error ? error.message : String(error);
|
|
@@ -14721,7 +14752,7 @@ var createVoiceToolContractHTMLHandler = (options) => async () => {
|
|
|
14721
14752
|
var createVoiceToolContractRoutes = (options) => {
|
|
14722
14753
|
const path = options.path ?? "/api/tool-contracts";
|
|
14723
14754
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
14724
|
-
const routes = new
|
|
14755
|
+
const routes = new Elysia21({
|
|
14725
14756
|
name: options.name ?? "absolutejs-voice-tool-contracts"
|
|
14726
14757
|
}).get(path, createVoiceToolContractJSONHandler(options));
|
|
14727
14758
|
if (htmlPath) {
|
|
@@ -14918,7 +14949,7 @@ app.use(
|
|
|
14918
14949
|
var createVoiceSimulationSuiteRoutes = (options) => {
|
|
14919
14950
|
const path = options.path ?? "/api/voice/simulations";
|
|
14920
14951
|
const htmlPath = options.htmlPath === undefined ? "/voice/simulations" : options.htmlPath;
|
|
14921
|
-
const app = new
|
|
14952
|
+
const app = new Elysia22({
|
|
14922
14953
|
name: options.name ?? "absolutejs-voice-simulation-suite"
|
|
14923
14954
|
}).get(path, () => runVoiceSimulationSuite(options));
|
|
14924
14955
|
if (htmlPath) {
|
|
@@ -15230,7 +15261,7 @@ var createVoiceWorkflowContractHandler = (input) => {
|
|
|
15230
15261
|
};
|
|
15231
15262
|
};
|
|
15232
15263
|
// src/sessionReplay.ts
|
|
15233
|
-
import { Elysia as
|
|
15264
|
+
import { Elysia as Elysia23 } from "elysia";
|
|
15234
15265
|
var getString10 = (value) => typeof value === "string" ? value : undefined;
|
|
15235
15266
|
var escapeHtml24 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
15236
15267
|
var increment4 = (record, key) => {
|
|
@@ -15470,7 +15501,7 @@ var createVoiceSessionsHTMLHandler = (options = {}) => async ({ query }) => {
|
|
|
15470
15501
|
var createVoiceSessionListRoutes = (options = {}) => {
|
|
15471
15502
|
const path = options.path ?? "/api/voice-sessions";
|
|
15472
15503
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
15473
|
-
const routes = new
|
|
15504
|
+
const routes = new Elysia23({
|
|
15474
15505
|
name: options.name ?? "absolutejs-voice-session-list"
|
|
15475
15506
|
}).get(path, createVoiceSessionsJSONHandler(options));
|
|
15476
15507
|
if (htmlPath) {
|
|
@@ -15498,7 +15529,7 @@ var createVoiceSessionReplayHTMLHandler = (options) => async ({ params }) => {
|
|
|
15498
15529
|
var createVoiceSessionReplayRoutes = (options) => {
|
|
15499
15530
|
const path = options.path ?? "/api/voice-sessions/:sessionId/replay";
|
|
15500
15531
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
15501
|
-
const routes = new
|
|
15532
|
+
const routes = new Elysia23({
|
|
15502
15533
|
name: options.name ?? "absolutejs-voice-session-replay"
|
|
15503
15534
|
}).get(path, createVoiceSessionReplayJSONHandler(options));
|
|
15504
15535
|
if (htmlPath) {
|
|
@@ -15727,7 +15758,7 @@ var assertVoiceAgentSquadContract = async (options) => {
|
|
|
15727
15758
|
return report;
|
|
15728
15759
|
};
|
|
15729
15760
|
// src/turnLatency.ts
|
|
15730
|
-
import { Elysia as
|
|
15761
|
+
import { Elysia as Elysia24 } from "elysia";
|
|
15731
15762
|
var DEFAULT_WARN_AFTER_MS = 1800;
|
|
15732
15763
|
var DEFAULT_FAIL_AFTER_MS = 3200;
|
|
15733
15764
|
var escapeHtml25 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
@@ -15883,7 +15914,7 @@ var createVoiceTurnLatencyHTMLHandler = (options) => async () => {
|
|
|
15883
15914
|
var createVoiceTurnLatencyRoutes = (options) => {
|
|
15884
15915
|
const path = options.path ?? "/api/turn-latency";
|
|
15885
15916
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
15886
|
-
const routes = new
|
|
15917
|
+
const routes = new Elysia24({
|
|
15887
15918
|
name: options.name ?? "absolutejs-voice-turn-latency"
|
|
15888
15919
|
}).get(path, createVoiceTurnLatencyJSONHandler(options));
|
|
15889
15920
|
if (htmlPath) {
|
|
@@ -15892,7 +15923,7 @@ var createVoiceTurnLatencyRoutes = (options) => {
|
|
|
15892
15923
|
return routes;
|
|
15893
15924
|
};
|
|
15894
15925
|
// src/liveLatency.ts
|
|
15895
|
-
import { Elysia as
|
|
15926
|
+
import { Elysia as Elysia25 } from "elysia";
|
|
15896
15927
|
var escapeHtml26 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
15897
15928
|
var percentile = (values, percentileValue) => {
|
|
15898
15929
|
if (values.length === 0) {
|
|
@@ -15966,7 +15997,7 @@ await traceStore.append({
|
|
|
15966
15997
|
var createVoiceLiveLatencyRoutes = (options) => {
|
|
15967
15998
|
const path = options.path ?? "/api/live-latency";
|
|
15968
15999
|
const htmlPath = options.htmlPath === undefined ? "/live-latency" : options.htmlPath;
|
|
15969
|
-
const routes = new
|
|
16000
|
+
const routes = new Elysia25({
|
|
15970
16001
|
name: options.name ?? "absolutejs-voice-live-latency"
|
|
15971
16002
|
}).get(path, () => summarizeVoiceLiveLatency(options));
|
|
15972
16003
|
if (htmlPath) {
|
|
@@ -16285,7 +16316,7 @@ None.
|
|
|
16285
16316
|
`}`;
|
|
16286
16317
|
};
|
|
16287
16318
|
// src/turnQuality.ts
|
|
16288
|
-
import { Elysia as
|
|
16319
|
+
import { Elysia as Elysia26 } from "elysia";
|
|
16289
16320
|
var DEFAULT_CONFIDENCE_WARN_THRESHOLD = 0.72;
|
|
16290
16321
|
var escapeHtml27 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
16291
16322
|
var getTurnLatencyMs = (turn) => {
|
|
@@ -16392,7 +16423,7 @@ var createVoiceTurnQualityHTMLHandler = (options) => async () => {
|
|
|
16392
16423
|
var createVoiceTurnQualityRoutes = (options) => {
|
|
16393
16424
|
const path = options.path ?? "/api/turn-quality";
|
|
16394
16425
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
16395
|
-
const routes = new
|
|
16426
|
+
const routes = new Elysia26({
|
|
16396
16427
|
name: options.name ?? "absolutejs-voice-turn-quality"
|
|
16397
16428
|
}).get(path, createVoiceTurnQualityJSONHandler(options));
|
|
16398
16429
|
if (htmlPath) {
|
|
@@ -16401,7 +16432,7 @@ var createVoiceTurnQualityRoutes = (options) => {
|
|
|
16401
16432
|
return routes;
|
|
16402
16433
|
};
|
|
16403
16434
|
// src/telephonyOutcome.ts
|
|
16404
|
-
import { Elysia as
|
|
16435
|
+
import { Elysia as Elysia27 } from "elysia";
|
|
16405
16436
|
var DEFAULT_COMPLETED_STATUSES = [
|
|
16406
16437
|
"answered",
|
|
16407
16438
|
"completed",
|
|
@@ -17051,7 +17082,7 @@ var createVoiceTelephonyWebhookHandler = (options = {}) => async (input) => {
|
|
|
17051
17082
|
var createVoiceTelephonyWebhookRoutes = (options = {}) => {
|
|
17052
17083
|
const path = options.path ?? "/api/voice/telephony/webhook";
|
|
17053
17084
|
const handler = createVoiceTelephonyWebhookHandler(options);
|
|
17054
|
-
return new
|
|
17085
|
+
return new Elysia27({
|
|
17055
17086
|
name: options.name ?? "absolutejs-voice-telephony-webhooks"
|
|
17056
17087
|
}).post(path, async ({ query, request }) => {
|
|
17057
17088
|
try {
|
|
@@ -17072,11 +17103,11 @@ var createVoiceTelephonyWebhookRoutes = (options = {}) => {
|
|
|
17072
17103
|
});
|
|
17073
17104
|
};
|
|
17074
17105
|
// src/phoneAgent.ts
|
|
17075
|
-
import { Elysia as
|
|
17106
|
+
import { Elysia as Elysia33 } from "elysia";
|
|
17076
17107
|
|
|
17077
17108
|
// src/telephony/plivo.ts
|
|
17078
17109
|
import { Buffer as Buffer5 } from "buffer";
|
|
17079
|
-
import { Elysia as
|
|
17110
|
+
import { Elysia as Elysia29 } from "elysia";
|
|
17080
17111
|
|
|
17081
17112
|
// src/telephony/contract.ts
|
|
17082
17113
|
var DEFAULT_REQUIREMENTS = [
|
|
@@ -17160,7 +17191,7 @@ var evaluateVoiceTelephonyContract = (input) => {
|
|
|
17160
17191
|
|
|
17161
17192
|
// src/telephony/twilio.ts
|
|
17162
17193
|
import { Buffer as Buffer4 } from "buffer";
|
|
17163
|
-
import { Elysia as
|
|
17194
|
+
import { Elysia as Elysia28 } from "elysia";
|
|
17164
17195
|
var TWILIO_MULAW_SAMPLE_RATE = 8000;
|
|
17165
17196
|
var VOICE_PCM_SAMPLE_RATE = 16000;
|
|
17166
17197
|
var escapeXml2 = (value) => value.replaceAll("&", "&").replaceAll('"', """).replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">");
|
|
@@ -17733,7 +17764,7 @@ var createTwilioVoiceRoutes = (options) => {
|
|
|
17733
17764
|
const smokePath = options.smoke?.path === false ? false : options.smoke?.path ?? "/api/voice/twilio/smoke";
|
|
17734
17765
|
const bridges = new WeakMap;
|
|
17735
17766
|
const webhookPolicy = options.webhook?.policy ?? options.outcomePolicy ?? createVoiceTelephonyOutcomePolicy();
|
|
17736
|
-
const app = new
|
|
17767
|
+
const app = new Elysia28({
|
|
17737
17768
|
name: options.name ?? "absolutejs-voice-twilio"
|
|
17738
17769
|
}).get(twimlPath, async ({ query, request }) => {
|
|
17739
17770
|
const streamUrl = await resolveTwilioStreamUrl(options, {
|
|
@@ -18230,7 +18261,7 @@ var createPlivoVoiceRoutes = (options = {}) => {
|
|
|
18230
18261
|
request: input.request
|
|
18231
18262
|
}) : verificationUrl ?? input.request.url
|
|
18232
18263
|
}) : undefined);
|
|
18233
|
-
const app = new
|
|
18264
|
+
const app = new Elysia29({
|
|
18234
18265
|
name: options.name ?? "absolutejs-voice-plivo"
|
|
18235
18266
|
}).get(answerPath, async ({ query, request }) => {
|
|
18236
18267
|
const streamUrl = await resolvePlivoStreamUrl(options, {
|
|
@@ -18341,7 +18372,7 @@ var createPlivoVoiceRoutes = (options = {}) => {
|
|
|
18341
18372
|
|
|
18342
18373
|
// src/telephony/telnyx.ts
|
|
18343
18374
|
import { Buffer as Buffer6 } from "buffer";
|
|
18344
|
-
import { Elysia as
|
|
18375
|
+
import { Elysia as Elysia30 } from "elysia";
|
|
18345
18376
|
var escapeXml4 = (value) => value.replaceAll("&", "&").replaceAll('"', """).replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">");
|
|
18346
18377
|
var escapeHtml30 = (value) => value.replaceAll("&", "&").replaceAll('"', """).replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">");
|
|
18347
18378
|
var joinUrlPath4 = (origin, path) => `${origin.replace(/\/$/, "")}${path.startsWith("/") ? path : `/${path}`}`;
|
|
@@ -18652,7 +18683,7 @@ var createTelnyxVoiceRoutes = (options = {}) => {
|
|
|
18652
18683
|
publicKey: options.webhook?.publicKey,
|
|
18653
18684
|
toleranceSeconds: options.webhook?.toleranceSeconds
|
|
18654
18685
|
}) : undefined);
|
|
18655
|
-
const app = new
|
|
18686
|
+
const app = new Elysia30({
|
|
18656
18687
|
name: options.name ?? "absolutejs-voice-telnyx"
|
|
18657
18688
|
}).get(texmlPath, async ({ query, request }) => {
|
|
18658
18689
|
const streamUrl = await resolveTelnyxStreamUrl(options, {
|
|
@@ -18762,7 +18793,7 @@ var createTelnyxVoiceRoutes = (options = {}) => {
|
|
|
18762
18793
|
};
|
|
18763
18794
|
|
|
18764
18795
|
// src/telephony/matrix.ts
|
|
18765
|
-
import { Elysia as
|
|
18796
|
+
import { Elysia as Elysia31 } from "elysia";
|
|
18766
18797
|
var escapeHtml31 = (value) => value.replaceAll("&", "&").replaceAll('"', """).replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">");
|
|
18767
18798
|
var labelForProvider = (provider) => provider.split("-").map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`).join(" ");
|
|
18768
18799
|
var resolveEntryStatus = (contract, setup, smoke) => {
|
|
@@ -18846,7 +18877,7 @@ ${entry.issues.length ? `<ul style="margin:12px 0 0; padding-left:18px;">${entry
|
|
|
18846
18877
|
</main>`;
|
|
18847
18878
|
var createVoiceTelephonyCarrierMatrixRoutes = (options) => {
|
|
18848
18879
|
const path = options.path ?? "/api/voice/telephony/carriers";
|
|
18849
|
-
return new
|
|
18880
|
+
return new Elysia31({
|
|
18850
18881
|
name: options.name ?? "absolutejs-voice-telephony-carrier-matrix"
|
|
18851
18882
|
}).get(path, async ({ query, request }) => {
|
|
18852
18883
|
const providers = await options.load({ query, request });
|
|
@@ -18868,7 +18899,7 @@ var createVoiceTelephonyCarrierMatrixRoutes = (options) => {
|
|
|
18868
18899
|
};
|
|
18869
18900
|
|
|
18870
18901
|
// src/phoneAgentProductionSmoke.ts
|
|
18871
|
-
import { Elysia as
|
|
18902
|
+
import { Elysia as Elysia32 } from "elysia";
|
|
18872
18903
|
var defaultRequirements = [
|
|
18873
18904
|
"media-started",
|
|
18874
18905
|
"transcript",
|
|
@@ -19011,7 +19042,7 @@ var createVoicePhoneAgentProductionSmokeHTMLHandler = (options) => async ({
|
|
|
19011
19042
|
var createVoicePhoneAgentProductionSmokeRoutes = (options) => {
|
|
19012
19043
|
const path = options.path ?? "/api/voice/phone/smoke-contract";
|
|
19013
19044
|
const htmlPath = options.htmlPath === undefined ? "/voice/phone/smoke-contract" : options.htmlPath;
|
|
19014
|
-
const routes = new
|
|
19045
|
+
const routes = new Elysia32({
|
|
19015
19046
|
name: options.name ?? "absolutejs-voice-phone-smoke-contract"
|
|
19016
19047
|
}).get(path, createVoicePhoneAgentProductionSmokeJSONHandler(options));
|
|
19017
19048
|
if (htmlPath) {
|
|
@@ -19199,7 +19230,7 @@ var createVoicePhoneAgent = (options) => {
|
|
|
19199
19230
|
setupPath: resolveSetupPath(carrier),
|
|
19200
19231
|
smokePath: resolveSmokePath(carrier)
|
|
19201
19232
|
}));
|
|
19202
|
-
const app = new
|
|
19233
|
+
const app = new Elysia33({
|
|
19203
19234
|
name: options.name ?? "absolutejs-voice-phone-agent"
|
|
19204
19235
|
});
|
|
19205
19236
|
for (const carrier of options.carriers) {
|
|
@@ -21258,7 +21289,7 @@ var createOpenAIVoiceTTS = (options) => {
|
|
|
21258
21289
|
};
|
|
21259
21290
|
};
|
|
21260
21291
|
// src/providerCapabilities.ts
|
|
21261
|
-
import { Elysia as
|
|
21292
|
+
import { Elysia as Elysia34 } from "elysia";
|
|
21262
21293
|
var escapeHtml34 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
21263
21294
|
var fromProviderList = (kind, providers, options) => (providers ?? []).map((provider) => ({
|
|
21264
21295
|
configured: true,
|
|
@@ -21359,7 +21390,7 @@ var createVoiceProviderCapabilityHTMLHandler = (options) => async () => {
|
|
|
21359
21390
|
var createVoiceProviderCapabilityRoutes = (options) => {
|
|
21360
21391
|
const path = options.path ?? "/api/provider-capabilities";
|
|
21361
21392
|
const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
|
|
21362
|
-
const routes = new
|
|
21393
|
+
const routes = new Elysia34({
|
|
21363
21394
|
name: options.name ?? "absolutejs-voice-provider-capabilities"
|
|
21364
21395
|
}).get(path, createVoiceProviderCapabilityJSONHandler(options));
|
|
21365
21396
|
if (htmlPath) {
|
|
@@ -21368,7 +21399,7 @@ var createVoiceProviderCapabilityRoutes = (options) => {
|
|
|
21368
21399
|
return routes;
|
|
21369
21400
|
};
|
|
21370
21401
|
// src/resilienceRoutes.ts
|
|
21371
|
-
import { Elysia as
|
|
21402
|
+
import { Elysia as Elysia35 } from "elysia";
|
|
21372
21403
|
var escapeHtml35 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
21373
21404
|
var getString13 = (value) => typeof value === "string" ? value : undefined;
|
|
21374
21405
|
var getNumber7 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
@@ -21812,7 +21843,7 @@ var registerSimulationRoutes = (routes, simulation, defaultPathPrefix) => {
|
|
|
21812
21843
|
};
|
|
21813
21844
|
var createVoiceResilienceRoutes = (options) => {
|
|
21814
21845
|
const path = options.path ?? "/resilience";
|
|
21815
|
-
const routes = new
|
|
21846
|
+
const routes = new Elysia35({
|
|
21816
21847
|
name: options.name ?? "absolutejs-voice-resilience"
|
|
21817
21848
|
}).get(path, async () => {
|
|
21818
21849
|
const events = await options.store.list();
|
|
@@ -21890,7 +21921,7 @@ var assertVoiceProviderRoutingContract = async (options) => {
|
|
|
21890
21921
|
return report;
|
|
21891
21922
|
};
|
|
21892
21923
|
// src/providerSlo.ts
|
|
21893
|
-
import { Elysia as
|
|
21924
|
+
import { Elysia as Elysia36 } from "elysia";
|
|
21894
21925
|
var defaultThresholds = {
|
|
21895
21926
|
llm: {
|
|
21896
21927
|
maxAverageElapsedMs: 2500,
|
|
@@ -22157,7 +22188,7 @@ var createVoiceProviderSloRoutes = (options) => {
|
|
|
22157
22188
|
...options.headers ?? {}
|
|
22158
22189
|
};
|
|
22159
22190
|
const buildReport = () => buildVoiceProviderSloReport(options);
|
|
22160
|
-
const app = new
|
|
22191
|
+
const app = new Elysia36({ name: options.name ?? "absolute-voice-provider-slos" });
|
|
22161
22192
|
app.get(path, async () => Response.json(await buildReport(), { headers }));
|
|
22162
22193
|
if (markdownPath !== false) {
|
|
22163
22194
|
app.get(markdownPath, async () => {
|
|
@@ -22187,10 +22218,10 @@ var createVoiceProviderSloRoutes = (options) => {
|
|
|
22187
22218
|
return app;
|
|
22188
22219
|
};
|
|
22189
22220
|
// src/productionReadiness.ts
|
|
22190
|
-
import { Elysia as
|
|
22221
|
+
import { Elysia as Elysia41 } from "elysia";
|
|
22191
22222
|
|
|
22192
22223
|
// src/opsRecovery.ts
|
|
22193
|
-
import { Elysia as
|
|
22224
|
+
import { Elysia as Elysia37 } from "elysia";
|
|
22194
22225
|
var escapeHtml37 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
22195
22226
|
var getString14 = (value) => typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
22196
22227
|
var hrefForSession = (value, sessionId) => {
|
|
@@ -22417,7 +22448,7 @@ var createVoiceOpsRecoveryRoutes = (options = {}) => {
|
|
|
22417
22448
|
const path = options.path ?? "/api/voice/ops-recovery";
|
|
22418
22449
|
const htmlPath = options.htmlPath === undefined ? "/ops-recovery" : options.htmlPath;
|
|
22419
22450
|
const markdownPath = options.markdownPath === undefined ? `${path}.md` : options.markdownPath;
|
|
22420
|
-
const routes = new
|
|
22451
|
+
const routes = new Elysia37({
|
|
22421
22452
|
name: options.name ?? "absolutejs-voice-ops-recovery"
|
|
22422
22453
|
}).get(path, async () => buildVoiceOpsRecoveryReport(options));
|
|
22423
22454
|
if (htmlPath) {
|
|
@@ -22447,17 +22478,17 @@ var createVoiceOpsRecoveryRoutes = (options = {}) => {
|
|
|
22447
22478
|
};
|
|
22448
22479
|
|
|
22449
22480
|
// src/observabilityExport.ts
|
|
22450
|
-
import { Elysia as
|
|
22481
|
+
import { Elysia as Elysia40 } from "elysia";
|
|
22451
22482
|
import { Database } from "bun:sqlite";
|
|
22452
22483
|
import { createHash } from "crypto";
|
|
22453
22484
|
import { mkdir as mkdir4, readFile as readFile2, stat, unlink } from "fs/promises";
|
|
22454
22485
|
import { join as join3 } from "path";
|
|
22455
22486
|
|
|
22456
22487
|
// src/operationsRecord.ts
|
|
22457
|
-
import { Elysia as
|
|
22488
|
+
import { Elysia as Elysia39 } from "elysia";
|
|
22458
22489
|
|
|
22459
22490
|
// src/traceTimeline.ts
|
|
22460
|
-
import { Elysia as
|
|
22491
|
+
import { Elysia as Elysia38 } from "elysia";
|
|
22461
22492
|
var escapeHtml38 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
22462
22493
|
var getString15 = (value) => typeof value === "string" && value.trim() ? value : undefined;
|
|
22463
22494
|
var getNumber8 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
@@ -22683,7 +22714,7 @@ var createVoiceTraceTimelineRoutes = (options) => {
|
|
|
22683
22714
|
const path = options.path ?? "/api/voice-traces";
|
|
22684
22715
|
const htmlPath = options.htmlPath ?? "/traces";
|
|
22685
22716
|
const title = options.title ?? "AbsoluteJS Voice Trace Timelines";
|
|
22686
|
-
const routes = new
|
|
22717
|
+
const routes = new Elysia38({
|
|
22687
22718
|
name: options.name ?? "absolutejs-voice-trace-timelines"
|
|
22688
22719
|
});
|
|
22689
22720
|
const buildReport = async () => summarizeVoiceTraceTimeline(await options.store.list(), {
|
|
@@ -22934,7 +22965,7 @@ var createVoiceOperationsRecordRoutes = (options) => {
|
|
|
22934
22965
|
const htmlPath = options.htmlPath === undefined ? "/voice-operations/:sessionId" : options.htmlPath;
|
|
22935
22966
|
const incidentPath = options.incidentPath === undefined ? `${path}/incident.md` : options.incidentPath;
|
|
22936
22967
|
const incidentHtmlPath = options.incidentHtmlPath === undefined && htmlPath ? `${htmlPath}/incident.md` : options.incidentHtmlPath;
|
|
22937
|
-
const routes = new
|
|
22968
|
+
const routes = new Elysia39({
|
|
22938
22969
|
name: options.name ?? "absolutejs-voice-operations-record"
|
|
22939
22970
|
});
|
|
22940
22971
|
const buildRecord = (sessionId) => buildVoiceOperationsRecord({
|
|
@@ -23529,7 +23560,7 @@ var createVoiceObservabilityExportReplayRoutes = (options) => {
|
|
|
23529
23560
|
...options.headers ?? {}
|
|
23530
23561
|
};
|
|
23531
23562
|
const buildReport = () => resolveVoiceObservabilityExportReplayReport(options.source);
|
|
23532
|
-
const app = new
|
|
23563
|
+
const app = new Elysia40({
|
|
23533
23564
|
name: options.name ?? "absolute-voice-observability-export-replay"
|
|
23534
23565
|
});
|
|
23535
23566
|
app.get(path, async () => Response.json(await buildReport(), { headers }));
|
|
@@ -24255,7 +24286,7 @@ var createVoiceObservabilityExportRoutes = (options = {}) => {
|
|
|
24255
24286
|
artifactDownload: options.links?.artifactDownload ?? (artifactDownloadPath ? (artifact) => `${artifactDownloadPath}/${encodeURIComponent(artifact.id)}` : undefined)
|
|
24256
24287
|
}
|
|
24257
24288
|
});
|
|
24258
|
-
const app = new
|
|
24289
|
+
const app = new Elysia40({
|
|
24259
24290
|
name: options.name ?? "absolute-voice-observability-export"
|
|
24260
24291
|
});
|
|
24261
24292
|
app.get(path, async () => Response.json(await buildReport(), { headers }));
|
|
@@ -25560,7 +25591,7 @@ var createVoiceProductionReadinessRoutes = (options) => {
|
|
|
25560
25591
|
const path = options.path ?? "/api/production-readiness";
|
|
25561
25592
|
const gatePath = options.gatePath === undefined ? "/api/production-readiness/gate" : options.gatePath;
|
|
25562
25593
|
const htmlPath = options.htmlPath ?? "/production-readiness";
|
|
25563
|
-
const routes = new
|
|
25594
|
+
const routes = new Elysia41({
|
|
25564
25595
|
name: options.name ?? "absolutejs-voice-production-readiness"
|
|
25565
25596
|
});
|
|
25566
25597
|
routes.get(path, async ({ query, request }) => buildVoiceProductionReadinessReport(options, { query, request }));
|
|
@@ -25945,7 +25976,7 @@ var recommendVoiceReadinessProfile = (options) => {
|
|
|
25945
25976
|
};
|
|
25946
25977
|
};
|
|
25947
25978
|
// src/providerStackRecommendations.ts
|
|
25948
|
-
import { Elysia as
|
|
25979
|
+
import { Elysia as Elysia42 } from "elysia";
|
|
25949
25980
|
var escapeHtml41 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
25950
25981
|
var profileProviderPriorities = {
|
|
25951
25982
|
"meeting-recorder": {
|
|
@@ -26235,7 +26266,7 @@ var createVoiceProviderContractMatrixHTMLHandler = (options) => async () => {
|
|
|
26235
26266
|
var createVoiceProviderContractMatrixRoutes = (options) => {
|
|
26236
26267
|
const path = options.path ?? "/api/provider-contracts";
|
|
26237
26268
|
const htmlPath = options.htmlPath ?? "/provider-contracts";
|
|
26238
|
-
const routes = new
|
|
26269
|
+
const routes = new Elysia42({
|
|
26239
26270
|
name: options.name ?? "absolutejs-voice-provider-contract-matrix"
|
|
26240
26271
|
});
|
|
26241
26272
|
const jsonHandler = createVoiceProviderContractMatrixJSONHandler(options.matrix);
|
|
@@ -26294,7 +26325,7 @@ var evaluateVoiceProviderStackGaps = (input) => {
|
|
|
26294
26325
|
};
|
|
26295
26326
|
};
|
|
26296
26327
|
// src/opsConsoleRoutes.ts
|
|
26297
|
-
import { Elysia as
|
|
26328
|
+
import { Elysia as Elysia43 } from "elysia";
|
|
26298
26329
|
var DEFAULT_LINKS = [
|
|
26299
26330
|
{
|
|
26300
26331
|
description: "Quality gates for CI, deploy checks, and production readiness.",
|
|
@@ -26411,7 +26442,7 @@ var renderVoiceOpsConsoleHTML = (report, options = {}) => {
|
|
|
26411
26442
|
};
|
|
26412
26443
|
var createVoiceOpsConsoleRoutes = (options) => {
|
|
26413
26444
|
const path = options.path ?? "/ops-console";
|
|
26414
|
-
const routes = new
|
|
26445
|
+
const routes = new Elysia43({
|
|
26415
26446
|
name: options.name ?? "absolutejs-voice-ops-console"
|
|
26416
26447
|
});
|
|
26417
26448
|
const getReport = () => buildVoiceOpsConsoleReport(options);
|
|
@@ -26428,7 +26459,7 @@ var createVoiceOpsConsoleRoutes = (options) => {
|
|
|
26428
26459
|
return routes;
|
|
26429
26460
|
};
|
|
26430
26461
|
// src/incidentBundle.ts
|
|
26431
|
-
import { Elysia as
|
|
26462
|
+
import { Elysia as Elysia44 } from "elysia";
|
|
26432
26463
|
var filterIncidentBundleArtifacts = (artifacts, filter = {}) => artifacts.filter((artifact) => {
|
|
26433
26464
|
if (filter.sessionId && artifact.sessionId !== filter.sessionId) {
|
|
26434
26465
|
return false;
|
|
@@ -26627,7 +26658,7 @@ var buildVoiceIncidentBundle = async (options) => {
|
|
|
26627
26658
|
var createVoiceIncidentBundleRoutes = (options) => {
|
|
26628
26659
|
const path = options.path ?? "/api/voice-incidents/:sessionId";
|
|
26629
26660
|
const markdownPath = options.markdownPath === undefined ? "/voice-incidents/:sessionId/markdown" : options.markdownPath;
|
|
26630
|
-
const routes = new
|
|
26661
|
+
const routes = new Elysia44({
|
|
26631
26662
|
name: options.name ?? "absolutejs-voice-incident-bundle"
|
|
26632
26663
|
});
|
|
26633
26664
|
const getSessionId = (params) => params.sessionId ?? "";
|
|
@@ -26828,7 +26859,7 @@ var summarizeVoiceOpsStatus = async (options) => {
|
|
|
26828
26859
|
};
|
|
26829
26860
|
};
|
|
26830
26861
|
// src/opsStatusRoutes.ts
|
|
26831
|
-
import { Elysia as
|
|
26862
|
+
import { Elysia as Elysia45 } from "elysia";
|
|
26832
26863
|
var escapeHtml43 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
26833
26864
|
var renderVoiceOpsStatusHTML = (report, options = {}) => {
|
|
26834
26865
|
const title = options.title ?? "AbsoluteJS Voice Ops Status";
|
|
@@ -26840,7 +26871,7 @@ var renderVoiceOpsStatusHTML = (report, options = {}) => {
|
|
|
26840
26871
|
};
|
|
26841
26872
|
var createVoiceOpsStatusRoutes = (options) => {
|
|
26842
26873
|
const path = options.path ?? "/api/voice/ops-status";
|
|
26843
|
-
const routes = new
|
|
26874
|
+
const routes = new Elysia45({
|
|
26844
26875
|
name: options.name ?? "absolutejs-voice-ops-status"
|
|
26845
26876
|
});
|
|
26846
26877
|
routes.get(path, async () => summarizeVoiceOpsStatus(options));
|
|
@@ -27273,7 +27304,7 @@ var createVoiceTTSProviderRouter = (options) => {
|
|
|
27273
27304
|
};
|
|
27274
27305
|
};
|
|
27275
27306
|
// src/traceDeliveryRoutes.ts
|
|
27276
|
-
import { Elysia as
|
|
27307
|
+
import { Elysia as Elysia46 } from "elysia";
|
|
27277
27308
|
var escapeHtml44 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
27278
27309
|
var getString19 = (value) => typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
27279
27310
|
var getNumber11 = (value) => {
|
|
@@ -27382,7 +27413,7 @@ var createVoiceTraceDeliveryRoutes = (options) => {
|
|
|
27382
27413
|
const path = options.path ?? "/api/voice-trace-deliveries";
|
|
27383
27414
|
const htmlPath = options.htmlPath === undefined ? "/traces/deliveries" : options.htmlPath;
|
|
27384
27415
|
const workerPath = options.workerPath === undefined ? `${path}/drain` : options.workerPath;
|
|
27385
|
-
const routes = new
|
|
27416
|
+
const routes = new Elysia46({
|
|
27386
27417
|
name: options.name ?? "absolutejs-voice-trace-deliveries"
|
|
27387
27418
|
}).get(path, createVoiceTraceDeliveryJSONHandler(options));
|
|
27388
27419
|
if (htmlPath !== false) {
|
|
@@ -28006,7 +28037,7 @@ var createVoiceMemoryStore = () => {
|
|
|
28006
28037
|
return { get, getOrCreate, list, remove, set };
|
|
28007
28038
|
};
|
|
28008
28039
|
// src/opsWebhook.ts
|
|
28009
|
-
import { Elysia as
|
|
28040
|
+
import { Elysia as Elysia47 } from "elysia";
|
|
28010
28041
|
var toHex6 = (bytes) => Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
28011
28042
|
var signVoiceOpsWebhookBody = async (input) => {
|
|
28012
28043
|
const encoder = new TextEncoder;
|
|
@@ -28136,7 +28167,7 @@ var verifyVoiceOpsWebhookSignature = async (input) => {
|
|
|
28136
28167
|
};
|
|
28137
28168
|
var createVoiceOpsWebhookReceiverRoutes = (options = {}) => {
|
|
28138
28169
|
const path = options.path ?? "/api/voice-ops/webhook";
|
|
28139
|
-
return new
|
|
28170
|
+
return new Elysia47().post(path, async ({ body, request, set }) => {
|
|
28140
28171
|
const bodyText = typeof body === "string" ? body : JSON.stringify(body);
|
|
28141
28172
|
if (options.signingSecret) {
|
|
28142
28173
|
const verification = await verifyVoiceOpsWebhookSignature({
|
|
@@ -29274,6 +29305,7 @@ export {
|
|
|
29274
29305
|
createVoicePostgresAuditSinkDeliveryStore,
|
|
29275
29306
|
createVoicePostgresAuditEventStore,
|
|
29276
29307
|
createVoicePlivoCampaignDialer,
|
|
29308
|
+
createVoicePlatformCoverageRoutes,
|
|
29277
29309
|
createVoicePhoneAgentProductionSmokeRoutes,
|
|
29278
29310
|
createVoicePhoneAgentProductionSmokeJSONHandler,
|
|
29279
29311
|
createVoicePhoneAgentProductionSmokeHTMLHandler,
|
|
@@ -29427,6 +29459,7 @@ export {
|
|
|
29427
29459
|
buildVoiceProviderContractMatrix,
|
|
29428
29460
|
buildVoiceProductionReadinessReport,
|
|
29429
29461
|
buildVoiceProductionReadinessGate,
|
|
29462
|
+
buildVoicePlatformCoverageSummary,
|
|
29430
29463
|
buildVoiceOpsTaskFromSLABreach,
|
|
29431
29464
|
buildVoiceOpsTaskFromReview,
|
|
29432
29465
|
buildVoiceOpsRecoveryReport,
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Elysia } from 'elysia';
|
|
2
|
+
export type VoicePlatformCoverageStatus = 'fail' | 'missing' | 'pass' | 'stale';
|
|
3
|
+
export type VoicePlatformCoverageEvidence = {
|
|
4
|
+
method?: string;
|
|
5
|
+
name: string;
|
|
6
|
+
ok?: boolean;
|
|
7
|
+
path?: string;
|
|
8
|
+
status?: number;
|
|
9
|
+
url?: string;
|
|
10
|
+
};
|
|
11
|
+
export type VoicePlatformCoverageSurface = {
|
|
12
|
+
evidence: VoicePlatformCoverageEvidence[];
|
|
13
|
+
failed?: number;
|
|
14
|
+
gap?: string;
|
|
15
|
+
missing?: number;
|
|
16
|
+
missingEvidence?: string[];
|
|
17
|
+
replacement: string;
|
|
18
|
+
status: 'fail' | 'pass' | string;
|
|
19
|
+
surface: string;
|
|
20
|
+
};
|
|
21
|
+
export type VoicePlatformCoverageSummary = {
|
|
22
|
+
generatedAt?: string;
|
|
23
|
+
ok: boolean;
|
|
24
|
+
outputDir?: string;
|
|
25
|
+
runId?: string;
|
|
26
|
+
source?: string;
|
|
27
|
+
status: VoicePlatformCoverageStatus;
|
|
28
|
+
total: number;
|
|
29
|
+
coverage: VoicePlatformCoverageSurface[];
|
|
30
|
+
};
|
|
31
|
+
export type VoicePlatformCoverageSummaryInput = {
|
|
32
|
+
coverage?: VoicePlatformCoverageSurface[];
|
|
33
|
+
generatedAt?: string;
|
|
34
|
+
ok?: boolean;
|
|
35
|
+
outputDir?: string;
|
|
36
|
+
runId?: string;
|
|
37
|
+
source?: string;
|
|
38
|
+
};
|
|
39
|
+
export type VoicePlatformCoverageRoutesOptions = {
|
|
40
|
+
headers?: HeadersInit;
|
|
41
|
+
name?: string;
|
|
42
|
+
path?: string;
|
|
43
|
+
source: (() => Promise<VoicePlatformCoverageSummary | VoicePlatformCoverageSummaryInput> | VoicePlatformCoverageSummary | VoicePlatformCoverageSummaryInput) | VoicePlatformCoverageSummary | VoicePlatformCoverageSummaryInput;
|
|
44
|
+
};
|
|
45
|
+
export declare const buildVoicePlatformCoverageSummary: (input: VoicePlatformCoverageSummaryInput) => VoicePlatformCoverageSummary;
|
|
46
|
+
export declare const createVoicePlatformCoverageRoutes: (options: VoicePlatformCoverageRoutesOptions) => Elysia<"", {
|
|
47
|
+
decorator: {};
|
|
48
|
+
store: {};
|
|
49
|
+
derive: {};
|
|
50
|
+
resolve: {};
|
|
51
|
+
}, {
|
|
52
|
+
typebox: {};
|
|
53
|
+
error: {};
|
|
54
|
+
}, {
|
|
55
|
+
schema: {};
|
|
56
|
+
standaloneSchema: {};
|
|
57
|
+
macro: {};
|
|
58
|
+
macroFn: {};
|
|
59
|
+
parser: {};
|
|
60
|
+
response: {};
|
|
61
|
+
}, {}, {
|
|
62
|
+
derive: {};
|
|
63
|
+
resolve: {};
|
|
64
|
+
schema: {};
|
|
65
|
+
standaloneSchema: {};
|
|
66
|
+
response: {};
|
|
67
|
+
}, {
|
|
68
|
+
derive: {};
|
|
69
|
+
resolve: {};
|
|
70
|
+
schema: {};
|
|
71
|
+
standaloneSchema: {};
|
|
72
|
+
response: {};
|
|
73
|
+
}>;
|