@absolutejs/voice 0.0.22-beta.241 → 0.0.22-beta.243

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/index.js CHANGED
@@ -12292,6 +12292,7 @@ var createVoicePlatformCoverageRoutes = (options) => {
12292
12292
  return routes;
12293
12293
  };
12294
12294
  // src/proofTrends.ts
12295
+ import { Elysia as Elysia14 } from "elysia";
12295
12296
  var DEFAULT_VOICE_PROOF_TRENDS_MAX_AGE_MS = 24 * 60 * 60 * 1000;
12296
12297
  var normalizeMaxAgeMs = (value) => typeof value === "number" && Number.isFinite(value) && value > 0 ? value : DEFAULT_VOICE_PROOF_TRENDS_MAX_AGE_MS;
12297
12298
  var toTimeMs = (value) => {
@@ -12334,6 +12335,50 @@ var buildEmptyVoiceProofTrendReport = (source = "", maxAgeMs) => buildVoiceProof
12334
12335
  source,
12335
12336
  status: "empty"
12336
12337
  });
12338
+ var normalizeVoiceProofTrendReport = (value, options = {}) => {
12339
+ if ("status" in value && value.status === "empty") {
12340
+ return buildEmptyVoiceProofTrendReport(value.source || options.source || "", options.maxAgeMs ?? value.maxAgeMs);
12341
+ }
12342
+ return buildVoiceProofTrendReport({
12343
+ ...value,
12344
+ maxAgeMs: options.maxAgeMs ?? value.maxAgeMs,
12345
+ source: value.source ?? options.source
12346
+ });
12347
+ };
12348
+ var readVoiceProofTrendReportFile = async (path, options = {}) => {
12349
+ const file = Bun.file(path);
12350
+ if (!await file.exists()) {
12351
+ return buildEmptyVoiceProofTrendReport(path, options.maxAgeMs);
12352
+ }
12353
+ try {
12354
+ const parsed = await file.json();
12355
+ return normalizeVoiceProofTrendReport(parsed, {
12356
+ maxAgeMs: options.maxAgeMs,
12357
+ source: path
12358
+ });
12359
+ } catch {
12360
+ return buildVoiceProofTrendReport({
12361
+ maxAgeMs: options.maxAgeMs,
12362
+ source: path
12363
+ });
12364
+ }
12365
+ };
12366
+ var createVoiceProofTrendRoutes = (options) => {
12367
+ const path = options.path ?? "/api/voice/proof-trends";
12368
+ const routes = new Elysia14({
12369
+ name: options.name ?? "absolutejs-voice-proof-trends"
12370
+ });
12371
+ routes.get(path, async () => {
12372
+ const value = options.source !== undefined ? typeof options.source === "function" ? await options.source() : options.source : options.jsonPath ? await readVoiceProofTrendReportFile(options.jsonPath, {
12373
+ maxAgeMs: options.maxAgeMs
12374
+ }) : buildEmptyVoiceProofTrendReport("", options.maxAgeMs);
12375
+ return Response.json(normalizeVoiceProofTrendReport(value, {
12376
+ maxAgeMs: options.maxAgeMs,
12377
+ source: options.jsonPath
12378
+ }), { headers: options.headers });
12379
+ });
12380
+ return routes;
12381
+ };
12337
12382
  var formatVoiceProofTrendAge = (ageMs) => {
12338
12383
  if (typeof ageMs !== "number" || !Number.isFinite(ageMs)) {
12339
12384
  return "unknown";
@@ -12353,7 +12398,7 @@ var formatVoiceProofTrendAge = (ageMs) => {
12353
12398
  return `${days}d ${hours % 24}h`;
12354
12399
  };
12355
12400
  // src/liveOps.ts
12356
- import { Elysia as Elysia14 } from "elysia";
12401
+ import { Elysia as Elysia15 } from "elysia";
12357
12402
  var VOICE_LIVE_OPS_ACTIONS = [
12358
12403
  "assign",
12359
12404
  "create-task",
@@ -12518,7 +12563,7 @@ var createVoiceLiveOpsRoutes = (options = {}) => {
12518
12563
  const controller = createVoiceLiveOpsController(options);
12519
12564
  const path = options.path ?? "/api/voice/live-ops/action";
12520
12565
  const controlPath = options.controlPath ?? "/api/voice/live-ops/control/:sessionId";
12521
- return new Elysia14({
12566
+ return new Elysia15({
12522
12567
  name: options.name ?? "absolutejs-voice-live-ops"
12523
12568
  }).post(path, async ({ request, set }) => {
12524
12569
  try {
@@ -12540,7 +12585,7 @@ var createVoiceLiveOpsRoutes = (options = {}) => {
12540
12585
  });
12541
12586
  };
12542
12587
  // src/deliveryRuntime.ts
12543
- import { Elysia as Elysia15 } from "elysia";
12588
+ import { Elysia as Elysia16 } from "elysia";
12544
12589
  import { mkdir } from "fs/promises";
12545
12590
  import { dirname, join } from "path";
12546
12591
  var escapeHtml16 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
@@ -12794,7 +12839,7 @@ var createVoiceDeliveryRuntimeRoutes = (options) => {
12794
12839
  const htmlPath = options.htmlPath === undefined ? "/delivery-runtime" : options.htmlPath;
12795
12840
  const tickPath = options.tickPath === undefined ? "/api/voice-delivery-runtime/tick" : options.tickPath;
12796
12841
  const requeueDeadLettersPath = options.requeueDeadLettersPath === undefined ? "/api/voice-delivery-runtime/requeue-dead-letters" : options.requeueDeadLettersPath;
12797
- const routes = new Elysia15({
12842
+ const routes = new Elysia16({
12798
12843
  name: options.name ?? "absolutejs-voice-delivery-runtime"
12799
12844
  }).get(path, () => buildVoiceDeliveryRuntimeReport(options.runtime));
12800
12845
  if (tickPath !== false) {
@@ -12830,7 +12875,7 @@ var createVoiceDeliveryRuntimeRoutes = (options) => {
12830
12875
  return routes;
12831
12876
  };
12832
12877
  // src/dataControl.ts
12833
- import { Elysia as Elysia16 } from "elysia";
12878
+ import { Elysia as Elysia17 } from "elysia";
12834
12879
  var voiceComplianceRedactionDefaults = {
12835
12880
  keys: [
12836
12881
  "apiKey",
@@ -13237,7 +13282,7 @@ var parseRetentionPolicyBody = (body, options, dryRun) => {
13237
13282
  var createVoiceDataControlRoutes = (options) => {
13238
13283
  const path = options.path ?? "/data-control";
13239
13284
  const title = options.title ?? "AbsoluteJS Voice Data Control";
13240
- const routes = new Elysia16({
13285
+ const routes = new Elysia17({
13241
13286
  name: options.name ?? "absolutejs-voice-data-control"
13242
13287
  });
13243
13288
  routes.get(path, async ({ query }) => {
@@ -13310,15 +13355,15 @@ var createVoiceDataControlRoutes = (options) => {
13310
13355
  return routes;
13311
13356
  };
13312
13357
  // src/evalRoutes.ts
13313
- import { Elysia as Elysia19 } from "elysia";
13358
+ import { Elysia as Elysia20 } from "elysia";
13314
13359
  import { mkdir as mkdir2 } from "fs/promises";
13315
13360
  import { dirname as dirname2 } from "path";
13316
13361
 
13317
13362
  // src/qualityRoutes.ts
13318
- import { Elysia as Elysia18 } from "elysia";
13363
+ import { Elysia as Elysia19 } from "elysia";
13319
13364
 
13320
13365
  // src/handoffHealth.ts
13321
- import { Elysia as Elysia17 } from "elysia";
13366
+ import { Elysia as Elysia18 } from "elysia";
13322
13367
  var escapeHtml18 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
13323
13368
  var getString7 = (value) => typeof value === "string" && value.length > 0 ? value : undefined;
13324
13369
  var isStatus = (value) => value === "delivered" || value === "failed" || value === "skipped";
@@ -13501,7 +13546,7 @@ var createVoiceHandoffHealthHTMLHandler = (options = {}) => async ({ query }) =>
13501
13546
  var createVoiceHandoffHealthRoutes = (options = {}) => {
13502
13547
  const path = options.path ?? "/api/voice-handoffs";
13503
13548
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
13504
- const routes = new Elysia17({
13549
+ const routes = new Elysia18({
13505
13550
  name: options.name ?? "absolutejs-voice-handoff-health"
13506
13551
  }).get(path, createVoiceHandoffHealthJSONHandler(options));
13507
13552
  if (htmlPath) {
@@ -13632,7 +13677,7 @@ var renderVoiceQualityHTML = (report, options = {}) => {
13632
13677
  };
13633
13678
  var createVoiceQualityRoutes = (options) => {
13634
13679
  const path = options.path ?? "/quality";
13635
- const routes = new Elysia18({
13680
+ const routes = new Elysia19({
13636
13681
  name: options.name ?? "absolutejs-voice-quality"
13637
13682
  });
13638
13683
  const getReport = () => evaluateVoiceQuality({
@@ -14045,7 +14090,7 @@ var renderVoiceScenarioFixtureEvalHTML = (report, options = {}) => {
14045
14090
  };
14046
14091
  var createVoiceEvalRoutes = (options) => {
14047
14092
  const path = options.path ?? "/evals";
14048
- const routes = new Elysia19({
14093
+ const routes = new Elysia20({
14049
14094
  name: options.name ?? "absolutejs-voice-evals"
14050
14095
  });
14051
14096
  const getReport = () => runVoiceSessionEvals({
@@ -14182,10 +14227,10 @@ var createVoiceEvalRoutes = (options) => {
14182
14227
  return routes;
14183
14228
  };
14184
14229
  // src/simulationSuite.ts
14185
- import { Elysia as Elysia22 } from "elysia";
14230
+ import { Elysia as Elysia23 } from "elysia";
14186
14231
 
14187
14232
  // src/outcomeContract.ts
14188
- import { Elysia as Elysia20 } from "elysia";
14233
+ import { Elysia as Elysia21 } from "elysia";
14189
14234
  var escapeHtml21 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
14190
14235
  var resolveSessionHref2 = (value, sessionId) => {
14191
14236
  if (value === false) {
@@ -14351,7 +14396,7 @@ var createVoiceOutcomeContractHTMLHandler = (options) => async () => {
14351
14396
  var createVoiceOutcomeContractRoutes = (options) => {
14352
14397
  const path = options.path ?? "/api/outcome-contracts";
14353
14398
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
14354
- const routes = new Elysia20({
14399
+ const routes = new Elysia21({
14355
14400
  name: options.name ?? "absolutejs-voice-outcome-contracts"
14356
14401
  }).get(path, createVoiceOutcomeContractJSONHandler(options));
14357
14402
  if (htmlPath) {
@@ -14361,7 +14406,7 @@ var createVoiceOutcomeContractRoutes = (options) => {
14361
14406
  };
14362
14407
 
14363
14408
  // src/toolContract.ts
14364
- import { Elysia as Elysia21 } from "elysia";
14409
+ import { Elysia as Elysia22 } from "elysia";
14365
14410
 
14366
14411
  // src/toolRuntime.ts
14367
14412
  var toErrorMessage4 = (error) => error instanceof Error ? error.message : String(error);
@@ -14813,7 +14858,7 @@ var createVoiceToolContractHTMLHandler = (options) => async () => {
14813
14858
  var createVoiceToolContractRoutes = (options) => {
14814
14859
  const path = options.path ?? "/api/tool-contracts";
14815
14860
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
14816
- const routes = new Elysia21({
14861
+ const routes = new Elysia22({
14817
14862
  name: options.name ?? "absolutejs-voice-tool-contracts"
14818
14863
  }).get(path, createVoiceToolContractJSONHandler(options));
14819
14864
  if (htmlPath) {
@@ -15010,7 +15055,7 @@ app.use(
15010
15055
  var createVoiceSimulationSuiteRoutes = (options) => {
15011
15056
  const path = options.path ?? "/api/voice/simulations";
15012
15057
  const htmlPath = options.htmlPath === undefined ? "/voice/simulations" : options.htmlPath;
15013
- const app = new Elysia22({
15058
+ const app = new Elysia23({
15014
15059
  name: options.name ?? "absolutejs-voice-simulation-suite"
15015
15060
  }).get(path, () => runVoiceSimulationSuite(options));
15016
15061
  if (htmlPath) {
@@ -15322,7 +15367,7 @@ var createVoiceWorkflowContractHandler = (input) => {
15322
15367
  };
15323
15368
  };
15324
15369
  // src/sessionReplay.ts
15325
- import { Elysia as Elysia23 } from "elysia";
15370
+ import { Elysia as Elysia24 } from "elysia";
15326
15371
  var getString10 = (value) => typeof value === "string" ? value : undefined;
15327
15372
  var escapeHtml24 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
15328
15373
  var increment4 = (record, key) => {
@@ -15562,7 +15607,7 @@ var createVoiceSessionsHTMLHandler = (options = {}) => async ({ query }) => {
15562
15607
  var createVoiceSessionListRoutes = (options = {}) => {
15563
15608
  const path = options.path ?? "/api/voice-sessions";
15564
15609
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
15565
- const routes = new Elysia23({
15610
+ const routes = new Elysia24({
15566
15611
  name: options.name ?? "absolutejs-voice-session-list"
15567
15612
  }).get(path, createVoiceSessionsJSONHandler(options));
15568
15613
  if (htmlPath) {
@@ -15590,7 +15635,7 @@ var createVoiceSessionReplayHTMLHandler = (options) => async ({ params }) => {
15590
15635
  var createVoiceSessionReplayRoutes = (options) => {
15591
15636
  const path = options.path ?? "/api/voice-sessions/:sessionId/replay";
15592
15637
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
15593
- const routes = new Elysia23({
15638
+ const routes = new Elysia24({
15594
15639
  name: options.name ?? "absolutejs-voice-session-replay"
15595
15640
  }).get(path, createVoiceSessionReplayJSONHandler(options));
15596
15641
  if (htmlPath) {
@@ -15819,7 +15864,7 @@ var assertVoiceAgentSquadContract = async (options) => {
15819
15864
  return report;
15820
15865
  };
15821
15866
  // src/turnLatency.ts
15822
- import { Elysia as Elysia24 } from "elysia";
15867
+ import { Elysia as Elysia25 } from "elysia";
15823
15868
  var DEFAULT_WARN_AFTER_MS = 1800;
15824
15869
  var DEFAULT_FAIL_AFTER_MS = 3200;
15825
15870
  var escapeHtml25 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
@@ -15975,7 +16020,7 @@ var createVoiceTurnLatencyHTMLHandler = (options) => async () => {
15975
16020
  var createVoiceTurnLatencyRoutes = (options) => {
15976
16021
  const path = options.path ?? "/api/turn-latency";
15977
16022
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
15978
- const routes = new Elysia24({
16023
+ const routes = new Elysia25({
15979
16024
  name: options.name ?? "absolutejs-voice-turn-latency"
15980
16025
  }).get(path, createVoiceTurnLatencyJSONHandler(options));
15981
16026
  if (htmlPath) {
@@ -15984,7 +16029,7 @@ var createVoiceTurnLatencyRoutes = (options) => {
15984
16029
  return routes;
15985
16030
  };
15986
16031
  // src/liveLatency.ts
15987
- import { Elysia as Elysia25 } from "elysia";
16032
+ import { Elysia as Elysia26 } from "elysia";
15988
16033
  var escapeHtml26 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
15989
16034
  var percentile = (values, percentileValue) => {
15990
16035
  if (values.length === 0) {
@@ -16058,7 +16103,7 @@ await traceStore.append({
16058
16103
  var createVoiceLiveLatencyRoutes = (options) => {
16059
16104
  const path = options.path ?? "/api/live-latency";
16060
16105
  const htmlPath = options.htmlPath === undefined ? "/live-latency" : options.htmlPath;
16061
- const routes = new Elysia25({
16106
+ const routes = new Elysia26({
16062
16107
  name: options.name ?? "absolutejs-voice-live-latency"
16063
16108
  }).get(path, () => summarizeVoiceLiveLatency(options));
16064
16109
  if (htmlPath) {
@@ -16377,7 +16422,7 @@ None.
16377
16422
  `}`;
16378
16423
  };
16379
16424
  // src/turnQuality.ts
16380
- import { Elysia as Elysia26 } from "elysia";
16425
+ import { Elysia as Elysia27 } from "elysia";
16381
16426
  var DEFAULT_CONFIDENCE_WARN_THRESHOLD = 0.72;
16382
16427
  var escapeHtml27 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
16383
16428
  var getTurnLatencyMs = (turn) => {
@@ -16484,7 +16529,7 @@ var createVoiceTurnQualityHTMLHandler = (options) => async () => {
16484
16529
  var createVoiceTurnQualityRoutes = (options) => {
16485
16530
  const path = options.path ?? "/api/turn-quality";
16486
16531
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
16487
- const routes = new Elysia26({
16532
+ const routes = new Elysia27({
16488
16533
  name: options.name ?? "absolutejs-voice-turn-quality"
16489
16534
  }).get(path, createVoiceTurnQualityJSONHandler(options));
16490
16535
  if (htmlPath) {
@@ -16493,7 +16538,7 @@ var createVoiceTurnQualityRoutes = (options) => {
16493
16538
  return routes;
16494
16539
  };
16495
16540
  // src/telephonyOutcome.ts
16496
- import { Elysia as Elysia27 } from "elysia";
16541
+ import { Elysia as Elysia28 } from "elysia";
16497
16542
  var DEFAULT_COMPLETED_STATUSES = [
16498
16543
  "answered",
16499
16544
  "completed",
@@ -17143,7 +17188,7 @@ var createVoiceTelephonyWebhookHandler = (options = {}) => async (input) => {
17143
17188
  var createVoiceTelephonyWebhookRoutes = (options = {}) => {
17144
17189
  const path = options.path ?? "/api/voice/telephony/webhook";
17145
17190
  const handler = createVoiceTelephonyWebhookHandler(options);
17146
- return new Elysia27({
17191
+ return new Elysia28({
17147
17192
  name: options.name ?? "absolutejs-voice-telephony-webhooks"
17148
17193
  }).post(path, async ({ query, request }) => {
17149
17194
  try {
@@ -17164,11 +17209,11 @@ var createVoiceTelephonyWebhookRoutes = (options = {}) => {
17164
17209
  });
17165
17210
  };
17166
17211
  // src/phoneAgent.ts
17167
- import { Elysia as Elysia33 } from "elysia";
17212
+ import { Elysia as Elysia34 } from "elysia";
17168
17213
 
17169
17214
  // src/telephony/plivo.ts
17170
17215
  import { Buffer as Buffer5 } from "buffer";
17171
- import { Elysia as Elysia29 } from "elysia";
17216
+ import { Elysia as Elysia30 } from "elysia";
17172
17217
 
17173
17218
  // src/telephony/contract.ts
17174
17219
  var DEFAULT_REQUIREMENTS = [
@@ -17252,7 +17297,7 @@ var evaluateVoiceTelephonyContract = (input) => {
17252
17297
 
17253
17298
  // src/telephony/twilio.ts
17254
17299
  import { Buffer as Buffer4 } from "buffer";
17255
- import { Elysia as Elysia28 } from "elysia";
17300
+ import { Elysia as Elysia29 } from "elysia";
17256
17301
  var TWILIO_MULAW_SAMPLE_RATE = 8000;
17257
17302
  var VOICE_PCM_SAMPLE_RATE = 16000;
17258
17303
  var escapeXml2 = (value) => value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("'", "&apos;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
@@ -17825,7 +17870,7 @@ var createTwilioVoiceRoutes = (options) => {
17825
17870
  const smokePath = options.smoke?.path === false ? false : options.smoke?.path ?? "/api/voice/twilio/smoke";
17826
17871
  const bridges = new WeakMap;
17827
17872
  const webhookPolicy = options.webhook?.policy ?? options.outcomePolicy ?? createVoiceTelephonyOutcomePolicy();
17828
- const app = new Elysia28({
17873
+ const app = new Elysia29({
17829
17874
  name: options.name ?? "absolutejs-voice-twilio"
17830
17875
  }).get(twimlPath, async ({ query, request }) => {
17831
17876
  const streamUrl = await resolveTwilioStreamUrl(options, {
@@ -18322,7 +18367,7 @@ var createPlivoVoiceRoutes = (options = {}) => {
18322
18367
  request: input.request
18323
18368
  }) : verificationUrl ?? input.request.url
18324
18369
  }) : undefined);
18325
- const app = new Elysia29({
18370
+ const app = new Elysia30({
18326
18371
  name: options.name ?? "absolutejs-voice-plivo"
18327
18372
  }).get(answerPath, async ({ query, request }) => {
18328
18373
  const streamUrl = await resolvePlivoStreamUrl(options, {
@@ -18433,7 +18478,7 @@ var createPlivoVoiceRoutes = (options = {}) => {
18433
18478
 
18434
18479
  // src/telephony/telnyx.ts
18435
18480
  import { Buffer as Buffer6 } from "buffer";
18436
- import { Elysia as Elysia30 } from "elysia";
18481
+ import { Elysia as Elysia31 } from "elysia";
18437
18482
  var escapeXml4 = (value) => value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("'", "&apos;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
18438
18483
  var escapeHtml30 = (value) => value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("'", "&#39;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
18439
18484
  var joinUrlPath4 = (origin, path) => `${origin.replace(/\/$/, "")}${path.startsWith("/") ? path : `/${path}`}`;
@@ -18744,7 +18789,7 @@ var createTelnyxVoiceRoutes = (options = {}) => {
18744
18789
  publicKey: options.webhook?.publicKey,
18745
18790
  toleranceSeconds: options.webhook?.toleranceSeconds
18746
18791
  }) : undefined);
18747
- const app = new Elysia30({
18792
+ const app = new Elysia31({
18748
18793
  name: options.name ?? "absolutejs-voice-telnyx"
18749
18794
  }).get(texmlPath, async ({ query, request }) => {
18750
18795
  const streamUrl = await resolveTelnyxStreamUrl(options, {
@@ -18854,7 +18899,7 @@ var createTelnyxVoiceRoutes = (options = {}) => {
18854
18899
  };
18855
18900
 
18856
18901
  // src/telephony/matrix.ts
18857
- import { Elysia as Elysia31 } from "elysia";
18902
+ import { Elysia as Elysia32 } from "elysia";
18858
18903
  var escapeHtml31 = (value) => value.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("'", "&#39;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
18859
18904
  var labelForProvider = (provider) => provider.split("-").map((part) => `${part.slice(0, 1).toUpperCase()}${part.slice(1)}`).join(" ");
18860
18905
  var resolveEntryStatus = (contract, setup, smoke) => {
@@ -18938,7 +18983,7 @@ ${entry.issues.length ? `<ul style="margin:12px 0 0; padding-left:18px;">${entry
18938
18983
  </main>`;
18939
18984
  var createVoiceTelephonyCarrierMatrixRoutes = (options) => {
18940
18985
  const path = options.path ?? "/api/voice/telephony/carriers";
18941
- return new Elysia31({
18986
+ return new Elysia32({
18942
18987
  name: options.name ?? "absolutejs-voice-telephony-carrier-matrix"
18943
18988
  }).get(path, async ({ query, request }) => {
18944
18989
  const providers = await options.load({ query, request });
@@ -18960,7 +19005,7 @@ var createVoiceTelephonyCarrierMatrixRoutes = (options) => {
18960
19005
  };
18961
19006
 
18962
19007
  // src/phoneAgentProductionSmoke.ts
18963
- import { Elysia as Elysia32 } from "elysia";
19008
+ import { Elysia as Elysia33 } from "elysia";
18964
19009
  var defaultRequirements = [
18965
19010
  "media-started",
18966
19011
  "transcript",
@@ -19103,7 +19148,7 @@ var createVoicePhoneAgentProductionSmokeHTMLHandler = (options) => async ({
19103
19148
  var createVoicePhoneAgentProductionSmokeRoutes = (options) => {
19104
19149
  const path = options.path ?? "/api/voice/phone/smoke-contract";
19105
19150
  const htmlPath = options.htmlPath === undefined ? "/voice/phone/smoke-contract" : options.htmlPath;
19106
- const routes = new Elysia32({
19151
+ const routes = new Elysia33({
19107
19152
  name: options.name ?? "absolutejs-voice-phone-smoke-contract"
19108
19153
  }).get(path, createVoicePhoneAgentProductionSmokeJSONHandler(options));
19109
19154
  if (htmlPath) {
@@ -19291,7 +19336,7 @@ var createVoicePhoneAgent = (options) => {
19291
19336
  setupPath: resolveSetupPath(carrier),
19292
19337
  smokePath: resolveSmokePath(carrier)
19293
19338
  }));
19294
- const app = new Elysia33({
19339
+ const app = new Elysia34({
19295
19340
  name: options.name ?? "absolutejs-voice-phone-agent"
19296
19341
  });
19297
19342
  for (const carrier of options.carriers) {
@@ -21350,7 +21395,7 @@ var createOpenAIVoiceTTS = (options) => {
21350
21395
  };
21351
21396
  };
21352
21397
  // src/providerCapabilities.ts
21353
- import { Elysia as Elysia34 } from "elysia";
21398
+ import { Elysia as Elysia35 } from "elysia";
21354
21399
  var escapeHtml34 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
21355
21400
  var fromProviderList = (kind, providers, options) => (providers ?? []).map((provider) => ({
21356
21401
  configured: true,
@@ -21451,7 +21496,7 @@ var createVoiceProviderCapabilityHTMLHandler = (options) => async () => {
21451
21496
  var createVoiceProviderCapabilityRoutes = (options) => {
21452
21497
  const path = options.path ?? "/api/provider-capabilities";
21453
21498
  const htmlPath = options.htmlPath === undefined ? `${path}/htmx` : options.htmlPath;
21454
- const routes = new Elysia34({
21499
+ const routes = new Elysia35({
21455
21500
  name: options.name ?? "absolutejs-voice-provider-capabilities"
21456
21501
  }).get(path, createVoiceProviderCapabilityJSONHandler(options));
21457
21502
  if (htmlPath) {
@@ -21460,7 +21505,7 @@ var createVoiceProviderCapabilityRoutes = (options) => {
21460
21505
  return routes;
21461
21506
  };
21462
21507
  // src/resilienceRoutes.ts
21463
- import { Elysia as Elysia35 } from "elysia";
21508
+ import { Elysia as Elysia36 } from "elysia";
21464
21509
  var escapeHtml35 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
21465
21510
  var getString13 = (value) => typeof value === "string" ? value : undefined;
21466
21511
  var getNumber7 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
@@ -21904,7 +21949,7 @@ var registerSimulationRoutes = (routes, simulation, defaultPathPrefix) => {
21904
21949
  };
21905
21950
  var createVoiceResilienceRoutes = (options) => {
21906
21951
  const path = options.path ?? "/resilience";
21907
- const routes = new Elysia35({
21952
+ const routes = new Elysia36({
21908
21953
  name: options.name ?? "absolutejs-voice-resilience"
21909
21954
  }).get(path, async () => {
21910
21955
  const events = await options.store.list();
@@ -21982,7 +22027,7 @@ var assertVoiceProviderRoutingContract = async (options) => {
21982
22027
  return report;
21983
22028
  };
21984
22029
  // src/providerSlo.ts
21985
- import { Elysia as Elysia36 } from "elysia";
22030
+ import { Elysia as Elysia37 } from "elysia";
21986
22031
  var defaultThresholds = {
21987
22032
  llm: {
21988
22033
  maxAverageElapsedMs: 2500,
@@ -22249,7 +22294,7 @@ var createVoiceProviderSloRoutes = (options) => {
22249
22294
  ...options.headers ?? {}
22250
22295
  };
22251
22296
  const buildReport = () => buildVoiceProviderSloReport(options);
22252
- const app = new Elysia36({ name: options.name ?? "absolute-voice-provider-slos" });
22297
+ const app = new Elysia37({ name: options.name ?? "absolute-voice-provider-slos" });
22253
22298
  app.get(path, async () => Response.json(await buildReport(), { headers }));
22254
22299
  if (markdownPath !== false) {
22255
22300
  app.get(markdownPath, async () => {
@@ -22279,10 +22324,10 @@ var createVoiceProviderSloRoutes = (options) => {
22279
22324
  return app;
22280
22325
  };
22281
22326
  // src/productionReadiness.ts
22282
- import { Elysia as Elysia41 } from "elysia";
22327
+ import { Elysia as Elysia42 } from "elysia";
22283
22328
 
22284
22329
  // src/opsRecovery.ts
22285
- import { Elysia as Elysia37 } from "elysia";
22330
+ import { Elysia as Elysia38 } from "elysia";
22286
22331
  var escapeHtml37 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
22287
22332
  var getString14 = (value) => typeof value === "string" && value.trim() ? value.trim() : undefined;
22288
22333
  var hrefForSession = (value, sessionId) => {
@@ -22509,7 +22554,7 @@ var createVoiceOpsRecoveryRoutes = (options = {}) => {
22509
22554
  const path = options.path ?? "/api/voice/ops-recovery";
22510
22555
  const htmlPath = options.htmlPath === undefined ? "/ops-recovery" : options.htmlPath;
22511
22556
  const markdownPath = options.markdownPath === undefined ? `${path}.md` : options.markdownPath;
22512
- const routes = new Elysia37({
22557
+ const routes = new Elysia38({
22513
22558
  name: options.name ?? "absolutejs-voice-ops-recovery"
22514
22559
  }).get(path, async () => buildVoiceOpsRecoveryReport(options));
22515
22560
  if (htmlPath) {
@@ -22539,17 +22584,17 @@ var createVoiceOpsRecoveryRoutes = (options = {}) => {
22539
22584
  };
22540
22585
 
22541
22586
  // src/observabilityExport.ts
22542
- import { Elysia as Elysia40 } from "elysia";
22587
+ import { Elysia as Elysia41 } from "elysia";
22543
22588
  import { Database } from "bun:sqlite";
22544
22589
  import { createHash } from "crypto";
22545
22590
  import { mkdir as mkdir4, readFile as readFile2, stat, unlink } from "fs/promises";
22546
22591
  import { join as join3 } from "path";
22547
22592
 
22548
22593
  // src/operationsRecord.ts
22549
- import { Elysia as Elysia39 } from "elysia";
22594
+ import { Elysia as Elysia40 } from "elysia";
22550
22595
 
22551
22596
  // src/traceTimeline.ts
22552
- import { Elysia as Elysia38 } from "elysia";
22597
+ import { Elysia as Elysia39 } from "elysia";
22553
22598
  var escapeHtml38 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
22554
22599
  var getString15 = (value) => typeof value === "string" && value.trim() ? value : undefined;
22555
22600
  var getNumber8 = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
@@ -22775,7 +22820,7 @@ var createVoiceTraceTimelineRoutes = (options) => {
22775
22820
  const path = options.path ?? "/api/voice-traces";
22776
22821
  const htmlPath = options.htmlPath ?? "/traces";
22777
22822
  const title = options.title ?? "AbsoluteJS Voice Trace Timelines";
22778
- const routes = new Elysia38({
22823
+ const routes = new Elysia39({
22779
22824
  name: options.name ?? "absolutejs-voice-trace-timelines"
22780
22825
  });
22781
22826
  const buildReport = async () => summarizeVoiceTraceTimeline(await options.store.list(), {
@@ -23026,7 +23071,7 @@ var createVoiceOperationsRecordRoutes = (options) => {
23026
23071
  const htmlPath = options.htmlPath === undefined ? "/voice-operations/:sessionId" : options.htmlPath;
23027
23072
  const incidentPath = options.incidentPath === undefined ? `${path}/incident.md` : options.incidentPath;
23028
23073
  const incidentHtmlPath = options.incidentHtmlPath === undefined && htmlPath ? `${htmlPath}/incident.md` : options.incidentHtmlPath;
23029
- const routes = new Elysia39({
23074
+ const routes = new Elysia40({
23030
23075
  name: options.name ?? "absolutejs-voice-operations-record"
23031
23076
  });
23032
23077
  const buildRecord = (sessionId) => buildVoiceOperationsRecord({
@@ -23621,7 +23666,7 @@ var createVoiceObservabilityExportReplayRoutes = (options) => {
23621
23666
  ...options.headers ?? {}
23622
23667
  };
23623
23668
  const buildReport = () => resolveVoiceObservabilityExportReplayReport(options.source);
23624
- const app = new Elysia40({
23669
+ const app = new Elysia41({
23625
23670
  name: options.name ?? "absolute-voice-observability-export-replay"
23626
23671
  });
23627
23672
  app.get(path, async () => Response.json(await buildReport(), { headers }));
@@ -24347,7 +24392,7 @@ var createVoiceObservabilityExportRoutes = (options = {}) => {
24347
24392
  artifactDownload: options.links?.artifactDownload ?? (artifactDownloadPath ? (artifact) => `${artifactDownloadPath}/${encodeURIComponent(artifact.id)}` : undefined)
24348
24393
  }
24349
24394
  });
24350
- const app = new Elysia40({
24395
+ const app = new Elysia41({
24351
24396
  name: options.name ?? "absolute-voice-observability-export"
24352
24397
  });
24353
24398
  app.get(path, async () => Response.json(await buildReport(), { headers }));
@@ -25652,7 +25697,7 @@ var createVoiceProductionReadinessRoutes = (options) => {
25652
25697
  const path = options.path ?? "/api/production-readiness";
25653
25698
  const gatePath = options.gatePath === undefined ? "/api/production-readiness/gate" : options.gatePath;
25654
25699
  const htmlPath = options.htmlPath ?? "/production-readiness";
25655
- const routes = new Elysia41({
25700
+ const routes = new Elysia42({
25656
25701
  name: options.name ?? "absolutejs-voice-production-readiness"
25657
25702
  });
25658
25703
  routes.get(path, async ({ query, request }) => buildVoiceProductionReadinessReport(options, { query, request }));
@@ -26037,7 +26082,7 @@ var recommendVoiceReadinessProfile = (options) => {
26037
26082
  };
26038
26083
  };
26039
26084
  // src/providerStackRecommendations.ts
26040
- import { Elysia as Elysia42 } from "elysia";
26085
+ import { Elysia as Elysia43 } from "elysia";
26041
26086
  var escapeHtml41 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
26042
26087
  var profileProviderPriorities = {
26043
26088
  "meeting-recorder": {
@@ -26327,7 +26372,7 @@ var createVoiceProviderContractMatrixHTMLHandler = (options) => async () => {
26327
26372
  var createVoiceProviderContractMatrixRoutes = (options) => {
26328
26373
  const path = options.path ?? "/api/provider-contracts";
26329
26374
  const htmlPath = options.htmlPath ?? "/provider-contracts";
26330
- const routes = new Elysia42({
26375
+ const routes = new Elysia43({
26331
26376
  name: options.name ?? "absolutejs-voice-provider-contract-matrix"
26332
26377
  });
26333
26378
  const jsonHandler = createVoiceProviderContractMatrixJSONHandler(options.matrix);
@@ -26386,7 +26431,7 @@ var evaluateVoiceProviderStackGaps = (input) => {
26386
26431
  };
26387
26432
  };
26388
26433
  // src/opsConsoleRoutes.ts
26389
- import { Elysia as Elysia43 } from "elysia";
26434
+ import { Elysia as Elysia44 } from "elysia";
26390
26435
  var DEFAULT_LINKS = [
26391
26436
  {
26392
26437
  description: "Quality gates for CI, deploy checks, and production readiness.",
@@ -26503,7 +26548,7 @@ var renderVoiceOpsConsoleHTML = (report, options = {}) => {
26503
26548
  };
26504
26549
  var createVoiceOpsConsoleRoutes = (options) => {
26505
26550
  const path = options.path ?? "/ops-console";
26506
- const routes = new Elysia43({
26551
+ const routes = new Elysia44({
26507
26552
  name: options.name ?? "absolutejs-voice-ops-console"
26508
26553
  });
26509
26554
  const getReport = () => buildVoiceOpsConsoleReport(options);
@@ -26520,7 +26565,7 @@ var createVoiceOpsConsoleRoutes = (options) => {
26520
26565
  return routes;
26521
26566
  };
26522
26567
  // src/incidentBundle.ts
26523
- import { Elysia as Elysia44 } from "elysia";
26568
+ import { Elysia as Elysia45 } from "elysia";
26524
26569
  var filterIncidentBundleArtifacts = (artifacts, filter = {}) => artifacts.filter((artifact) => {
26525
26570
  if (filter.sessionId && artifact.sessionId !== filter.sessionId) {
26526
26571
  return false;
@@ -26719,7 +26764,7 @@ var buildVoiceIncidentBundle = async (options) => {
26719
26764
  var createVoiceIncidentBundleRoutes = (options) => {
26720
26765
  const path = options.path ?? "/api/voice-incidents/:sessionId";
26721
26766
  const markdownPath = options.markdownPath === undefined ? "/voice-incidents/:sessionId/markdown" : options.markdownPath;
26722
- const routes = new Elysia44({
26767
+ const routes = new Elysia45({
26723
26768
  name: options.name ?? "absolutejs-voice-incident-bundle"
26724
26769
  });
26725
26770
  const getSessionId = (params) => params.sessionId ?? "";
@@ -26920,7 +26965,7 @@ var summarizeVoiceOpsStatus = async (options) => {
26920
26965
  };
26921
26966
  };
26922
26967
  // src/opsStatusRoutes.ts
26923
- import { Elysia as Elysia45 } from "elysia";
26968
+ import { Elysia as Elysia46 } from "elysia";
26924
26969
  var escapeHtml43 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
26925
26970
  var renderVoiceOpsStatusHTML = (report, options = {}) => {
26926
26971
  const title = options.title ?? "AbsoluteJS Voice Ops Status";
@@ -26932,7 +26977,7 @@ var renderVoiceOpsStatusHTML = (report, options = {}) => {
26932
26977
  };
26933
26978
  var createVoiceOpsStatusRoutes = (options) => {
26934
26979
  const path = options.path ?? "/api/voice/ops-status";
26935
- const routes = new Elysia45({
26980
+ const routes = new Elysia46({
26936
26981
  name: options.name ?? "absolutejs-voice-ops-status"
26937
26982
  });
26938
26983
  routes.get(path, async () => summarizeVoiceOpsStatus(options));
@@ -27365,7 +27410,7 @@ var createVoiceTTSProviderRouter = (options) => {
27365
27410
  };
27366
27411
  };
27367
27412
  // src/traceDeliveryRoutes.ts
27368
- import { Elysia as Elysia46 } from "elysia";
27413
+ import { Elysia as Elysia47 } from "elysia";
27369
27414
  var escapeHtml44 = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&#39;");
27370
27415
  var getString19 = (value) => typeof value === "string" && value.trim() ? value.trim() : undefined;
27371
27416
  var getNumber11 = (value) => {
@@ -27474,7 +27519,7 @@ var createVoiceTraceDeliveryRoutes = (options) => {
27474
27519
  const path = options.path ?? "/api/voice-trace-deliveries";
27475
27520
  const htmlPath = options.htmlPath === undefined ? "/traces/deliveries" : options.htmlPath;
27476
27521
  const workerPath = options.workerPath === undefined ? `${path}/drain` : options.workerPath;
27477
- const routes = new Elysia46({
27522
+ const routes = new Elysia47({
27478
27523
  name: options.name ?? "absolutejs-voice-trace-deliveries"
27479
27524
  }).get(path, createVoiceTraceDeliveryJSONHandler(options));
27480
27525
  if (htmlPath !== false) {
@@ -28098,7 +28143,7 @@ var createVoiceMemoryStore = () => {
28098
28143
  return { get, getOrCreate, list, remove, set };
28099
28144
  };
28100
28145
  // src/opsWebhook.ts
28101
- import { Elysia as Elysia47 } from "elysia";
28146
+ import { Elysia as Elysia48 } from "elysia";
28102
28147
  var toHex6 = (bytes) => Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
28103
28148
  var signVoiceOpsWebhookBody = async (input) => {
28104
28149
  const encoder = new TextEncoder;
@@ -28228,7 +28273,7 @@ var verifyVoiceOpsWebhookSignature = async (input) => {
28228
28273
  };
28229
28274
  var createVoiceOpsWebhookReceiverRoutes = (options = {}) => {
28230
28275
  const path = options.path ?? "/api/voice-ops/webhook";
28231
- return new Elysia47().post(path, async ({ body, request, set }) => {
28276
+ return new Elysia48().post(path, async ({ body, request, set }) => {
28232
28277
  const bodyText = typeof body === "string" ? body : JSON.stringify(body);
28233
28278
  if (options.signingSecret) {
28234
28279
  const verification = await verifyVoiceOpsWebhookSignature({
@@ -29221,9 +29266,11 @@ export {
29221
29266
  recordVoiceAuditEvent,
29222
29267
  recommendVoiceReadinessProfile,
29223
29268
  recommendVoiceProviderStack,
29269
+ readVoiceProofTrendReportFile,
29224
29270
  pruneVoiceTraceEvents,
29225
29271
  pruneVoiceIncidentBundleArtifacts,
29226
29272
  parseVoiceTelephonyWebhookEvent,
29273
+ normalizeVoiceProofTrendReport,
29227
29274
  matchesVoiceOpsTaskAssignmentRule,
29228
29275
  markVoiceOpsTaskSLABreached,
29229
29276
  loadVoiceObservabilityExportReplaySource,
@@ -29352,6 +29399,7 @@ export {
29352
29399
  createVoiceProviderCapabilityRoutes,
29353
29400
  createVoiceProviderCapabilityJSONHandler,
29354
29401
  createVoiceProviderCapabilityHTMLHandler,
29402
+ createVoiceProofTrendRoutes,
29355
29403
  createVoiceProductionReadinessRoutes,
29356
29404
  createVoicePostgresTraceSinkDeliveryStore,
29357
29405
  createVoicePostgresTraceEventStore,