@absolutejs/voice 0.0.22-beta.316 → 0.0.22-beta.318

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
@@ -11914,6 +11914,9 @@ var buildVoiceMediaPipelineReport = (options = {}) => {
11914
11914
  processorGraph: options.processorGraph,
11915
11915
  quality,
11916
11916
  resampling,
11917
+ sessionIds: [
11918
+ ...new Set(frames.map((frame) => frame.sessionId).filter((sessionId) => typeof sessionId === "string"))
11919
+ ].sort(),
11917
11920
  status,
11918
11921
  surface: options.surface ?? "voice-media-pipeline",
11919
11922
  transport: options.transport,
@@ -29033,11 +29036,13 @@ var readinessGateCodes = {
29033
29036
  "Audit evidence": "voice.readiness.audit_evidence",
29034
29037
  "Audit sink delivery": "voice.readiness.audit_sink_delivery",
29035
29038
  "Barge-in interruption proof": "voice.readiness.barge_in_interruption",
29039
+ "Browser media transport": "voice.readiness.browser_media_transport",
29036
29040
  "Campaign readiness proof": "voice.readiness.campaign_readiness",
29037
29041
  "Carrier readiness": "voice.readiness.carrier_readiness",
29038
29042
  "Delivery runtime": "voice.readiness.delivery_runtime",
29039
29043
  "Handoff delivery": "voice.readiness.handoff_delivery",
29040
29044
  "Live latency proof": "voice.readiness.live_latency",
29045
+ "Media pipeline quality": "voice.readiness.media_pipeline_quality",
29041
29046
  "Operations records": "voice.readiness.operations_records",
29042
29047
  "Operator action history": "voice.readiness.operator_action_history",
29043
29048
  "Ops recovery": "voice.readiness.ops_recovery",
@@ -29211,6 +29216,18 @@ var resolveMonitoringNotifierDelivery = async (options, input) => {
29211
29216
  }
29212
29217
  return typeof options.monitoringNotifierDelivery === "function" ? await options.monitoringNotifierDelivery(input) : options.monitoringNotifierDelivery;
29213
29218
  };
29219
+ var resolveMediaPipeline = async (options, input) => {
29220
+ if (options.mediaPipeline === false || options.mediaPipeline === undefined) {
29221
+ return;
29222
+ }
29223
+ return typeof options.mediaPipeline === "function" ? await options.mediaPipeline(input) : options.mediaPipeline;
29224
+ };
29225
+ var resolveBrowserMedia = async (options, input) => {
29226
+ if (options.browserMedia === false || options.browserMedia === undefined) {
29227
+ return;
29228
+ }
29229
+ return typeof options.browserMedia === "function" ? await options.browserMedia(input) : options.browserMedia;
29230
+ };
29214
29231
  var isVoiceTelephonyWebhookSecurityReport = (value) => typeof value.generatedAt === "number" && Array.isArray(value.providers) && typeof value.status === "string";
29215
29232
  var resolveTelephonyWebhookSecurity = async (options, input) => {
29216
29233
  if (options.telephonyWebhookSecurity === false || options.telephonyWebhookSecurity === undefined) {
@@ -29546,6 +29563,13 @@ var buildOperationsRecordLinks = (input) => {
29546
29563
  sessionId: event.sessionId,
29547
29564
  status: latencyMs > input.liveLatencyFailAfterMs ? "fail" : "warn"
29548
29565
  }));
29566
+ const mediaQuality = input.mediaPipeline && input.mediaPipeline.status !== "pass" ? input.mediaPipeline.sessionIds.map((sessionId) => ({
29567
+ detail: `${input.mediaPipeline?.quality.issues.length ?? 0} media quality issue(s)`,
29568
+ href: voiceOperationsRecordHref(input.base, sessionId),
29569
+ label: "Open media quality operations record",
29570
+ sessionId,
29571
+ status: "fail"
29572
+ })) : [];
29549
29573
  return {
29550
29574
  failedSessions: input.failedSessionIds.map((sessionId) => ({
29551
29575
  href: voiceOperationsRecordHref(input.base, sessionId),
@@ -29554,6 +29578,7 @@ var buildOperationsRecordLinks = (input) => {
29554
29578
  status: failedSessionSet.has(sessionId) ? "fail" : "warn"
29555
29579
  })),
29556
29580
  failingLatency,
29581
+ mediaQuality,
29557
29582
  providerErrors
29558
29583
  };
29559
29584
  };
@@ -29586,6 +29611,8 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
29586
29611
  phoneAgentSmokes,
29587
29612
  monitoring,
29588
29613
  monitoringNotifierDelivery,
29614
+ mediaPipeline,
29615
+ browserMedia,
29589
29616
  telephonyWebhookSecurity,
29590
29617
  reconnectContracts,
29591
29618
  bargeInReports,
@@ -29628,6 +29655,8 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
29628
29655
  resolvePhoneAgentSmokes(options, { query, request }),
29629
29656
  resolveMonitoring(options, { query, request }),
29630
29657
  resolveMonitoringNotifierDelivery(options, { query, request }),
29658
+ resolveMediaPipeline(options, { query, request }),
29659
+ resolveBrowserMedia(options, { query, request }),
29631
29660
  resolveTelephonyWebhookSecurity(options, { query, request }),
29632
29661
  resolveReconnectContracts(options, { query, request }),
29633
29662
  resolveBargeInReports(options, { query, request }),
@@ -29648,7 +29677,8 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
29648
29677
  failedSessionIds: failedSessionItems.map((session) => session.sessionId),
29649
29678
  liveLatencyFailAfterMs: options.liveLatencyFailAfterMs ?? 3200,
29650
29679
  liveLatencyMaxAgeMs: options.liveLatencyMaxAgeMs,
29651
- liveLatencyWarnAfterMs: options.liveLatencyWarnAfterMs ?? 1800
29680
+ liveLatencyWarnAfterMs: options.liveLatencyWarnAfterMs ?? 1800,
29681
+ mediaPipeline
29652
29682
  });
29653
29683
  const checks = [
29654
29684
  {
@@ -29803,6 +29833,28 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
29803
29833
  const metrics = providerSlo?.kinds[issue.kind]?.metrics;
29804
29834
  return Object.values(metrics ?? {}).find((metric) => metric.label === issue.label || issue.code.endsWith(metric.label.toLowerCase().replace(/[^a-z0-9]+/g, "_")));
29805
29835
  };
29836
+ const mediaPipelineSummary = mediaPipeline ? {
29837
+ assistantAudioFrames: mediaPipeline.quality.assistantAudioFrames,
29838
+ backpressureEvents: mediaPipeline.quality.backpressureEvents,
29839
+ gapCount: mediaPipeline.quality.gapCount,
29840
+ inputAudioFrames: mediaPipeline.quality.inputAudioFrames,
29841
+ issues: mediaPipeline.calibration.issues.length + mediaPipeline.interruption.issues.length + mediaPipeline.quality.issues.length,
29842
+ jitterMs: mediaPipeline.quality.jitterMs,
29843
+ speechRatio: mediaPipeline.quality.speechRatio,
29844
+ status: mediaPipeline.status === "pass" ? "pass" : "fail",
29845
+ timestampDriftMs: mediaPipeline.quality.timestampDriftMs
29846
+ } : undefined;
29847
+ const browserMediaSummary = browserMedia ? {
29848
+ activeCandidatePairs: browserMedia.activeCandidatePairs,
29849
+ bytesReceived: browserMedia.bytesReceived,
29850
+ bytesSent: browserMedia.bytesSent,
29851
+ issues: browserMedia.issues.length,
29852
+ jitterMs: browserMedia.jitterMs,
29853
+ liveAudioTracks: browserMedia.liveAudioTracks,
29854
+ packetLossRatio: browserMedia.packetLossRatio,
29855
+ roundTripTimeMs: browserMedia.roundTripTimeMs,
29856
+ status: browserMedia.status === "pass" ? "pass" : "fail"
29857
+ } : undefined;
29806
29858
  checks.push({
29807
29859
  detail: liveLatency.total === 0 ? "No browser live-latency measurements are recorded yet." : liveLatency.status === "pass" ? `Live browser turn latency averages ${liveLatency.averageLatencyMs}ms.` : `${liveLatency.failed} failed and ${liveLatency.warnings} warned live-latency measurement(s).`,
29808
29860
  href: firstOperationsRecordHref(operationsRecords.failingLatency) ?? options.links?.liveLatency ?? "/traces",
@@ -29834,6 +29886,67 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
29834
29886
  ...calibratedThresholdActions()
29835
29887
  ]
29836
29888
  });
29889
+ if (mediaPipeline && mediaPipelineSummary) {
29890
+ const firstIssue = [
29891
+ ...mediaPipeline.quality.issues,
29892
+ ...mediaPipeline.calibration.issues,
29893
+ ...mediaPipeline.interruption.issues
29894
+ ][0];
29895
+ checks.push({
29896
+ detail: mediaPipelineSummary.status === "pass" ? `Media pipeline quality is passing with ${mediaPipelineSummary.inputAudioFrames} input frame(s), ${mediaPipelineSummary.assistantAudioFrames} assistant frame(s), ${mediaPipelineSummary.gapCount} gap(s), ${String(mediaPipelineSummary.jitterMs ?? "n/a")}ms jitter, and ${mediaPipelineSummary.speechRatio} speech ratio.` : firstIssue?.message ?? `${mediaPipelineSummary.issues} media pipeline issue(s) need review.`,
29897
+ href: firstOperationsRecordHref(operationsRecords.mediaQuality) ?? options.links?.mediaPipeline ?? "/voice/media-pipeline",
29898
+ label: "Media pipeline quality",
29899
+ proofSource: proofSource("mediaPipeline", "mediaQuality"),
29900
+ gateExplanation: mediaPipelineSummary.status === "pass" ? undefined : {
29901
+ evidenceHref: firstOperationsRecordHref(operationsRecords.mediaQuality) ?? options.links?.mediaPipeline ?? "/voice/media-pipeline",
29902
+ observed: firstIssue?.code ?? `${mediaPipelineSummary.issues} issue(s)`,
29903
+ remediation: "Inspect media pipeline quality, fix excessive gaps, jitter, drift, speech-ratio, or backpressure issues, then rerun readiness proof.",
29904
+ thresholdLabel: "Media quality report status",
29905
+ unit: "status"
29906
+ },
29907
+ status: mediaPipelineSummary.status,
29908
+ value: mediaPipelineSummary.status === "pass" ? `${mediaPipelineSummary.gapCount} gaps` : `${mediaPipelineSummary.issues} issue(s)`,
29909
+ actions: mediaPipelineSummary.status === "pass" ? [] : [
29910
+ ...firstOperationsRecordHref(operationsRecords.mediaQuality) ? [
29911
+ {
29912
+ description: "Open the exact call/session operations record for the first media quality issue.",
29913
+ href: firstOperationsRecordHref(operationsRecords.mediaQuality),
29914
+ label: "Open media operations record"
29915
+ }
29916
+ ] : [],
29917
+ {
29918
+ description: "Open media pipeline proof and inspect quality, calibration, VAD, interruption, transport, and processor-graph evidence.",
29919
+ href: options.links?.mediaPipeline ?? "/voice/media-pipeline",
29920
+ label: "Open media pipeline proof"
29921
+ }
29922
+ ]
29923
+ });
29924
+ }
29925
+ if (browserMedia && browserMediaSummary) {
29926
+ const firstIssue = browserMedia.issues[0];
29927
+ checks.push({
29928
+ detail: browserMediaSummary.status === "pass" ? `Browser media transport is passing with ${browserMediaSummary.activeCandidatePairs} active candidate pair(s), ${browserMediaSummary.liveAudioTracks} live audio track(s), ${String(browserMediaSummary.roundTripTimeMs ?? "n/a")}ms RTT, ${String(browserMediaSummary.jitterMs ?? "n/a")}ms jitter, and ${browserMediaSummary.packetLossRatio} packet loss ratio.` : firstIssue?.message ?? `${browserMediaSummary.issues} browser media transport issue(s) need review.`,
29929
+ href: options.links?.browserMedia ?? "/voice/browser-media",
29930
+ label: "Browser media transport",
29931
+ proofSource: proofSource("browserMedia", "webrtcStats"),
29932
+ gateExplanation: browserMediaSummary.status === "pass" ? undefined : {
29933
+ evidenceHref: options.links?.browserMedia ?? "/voice/browser-media",
29934
+ observed: firstIssue?.code ?? `${browserMediaSummary.issues} issue(s)`,
29935
+ remediation: "Inspect browser WebRTC media stats, fix packet loss, RTT, jitter, candidate-pair, or audio-track issues, then rerun readiness proof.",
29936
+ thresholdLabel: "Browser media transport status",
29937
+ unit: "status"
29938
+ },
29939
+ status: browserMediaSummary.status,
29940
+ value: browserMediaSummary.status === "pass" ? `${browserMediaSummary.packetLossRatio} loss` : `${browserMediaSummary.issues} issue(s)`,
29941
+ actions: browserMediaSummary.status === "pass" ? [] : [
29942
+ {
29943
+ description: "Open browser media transport proof and inspect WebRTC packet loss, RTT, jitter, bytes, candidate-pair, and audio-track evidence.",
29944
+ href: options.links?.browserMedia ?? "/voice/browser-media",
29945
+ label: "Open browser media proof"
29946
+ }
29947
+ ]
29948
+ });
29949
+ }
29837
29950
  const carrierSummary = carriers ? {
29838
29951
  failing: carriers.summary.failing,
29839
29952
  providers: carriers.summary.providers,
@@ -30394,6 +30507,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
30394
30507
  audit: "/audit",
30395
30508
  auditDeliveries: "/audit",
30396
30509
  bargeIn: "/barge-in",
30510
+ browserMedia: "/voice/browser-media",
30397
30511
  campaignReadiness: "/api/voice/campaigns/readiness-proof",
30398
30512
  carriers: "/carriers",
30399
30513
  deliveryRuntime: "/delivery-runtime",
@@ -30405,6 +30519,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
30405
30519
  observabilityExportDeliveries: "/api/voice/observability-export/deliveries",
30406
30520
  monitoring: "/voice/monitors",
30407
30521
  monitoringNotifierDelivery: "/api/voice/monitor-issues/notifications",
30522
+ mediaPipeline: "/voice/media-pipeline",
30408
30523
  opsActions: "/voice/ops-actions",
30409
30524
  opsRecovery: "/ops-recovery",
30410
30525
  phoneAgentSmoke: "/sessions",
@@ -30430,6 +30545,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
30430
30545
  audit,
30431
30546
  auditDeliveries,
30432
30547
  bargeIn: bargeInSummary,
30548
+ browserMedia: browserMediaSummary,
30433
30549
  campaignReadiness: campaignReadinessSummary,
30434
30550
  carriers: carrierSummary,
30435
30551
  deliveryRuntime,
@@ -30438,6 +30554,7 @@ var buildVoiceProductionReadinessReport = async (options, input = {}) => {
30438
30554
  total: handoffs.total
30439
30555
  },
30440
30556
  liveLatency,
30557
+ mediaPipeline: mediaPipelineSummary,
30441
30558
  monitoring: monitoringSummary,
30442
30559
  monitoringNotifierDelivery: monitoringNotifierDeliverySummary,
30443
30560
  opsActionHistory,
@@ -24,6 +24,7 @@ export type VoiceMediaPipelineReport = {
24
24
  quality: MediaQualityReport;
25
25
  resampling?: MediaResamplingPlan;
26
26
  processorGraph?: MediaProcessorGraphReport;
27
+ sessionIds: string[];
27
28
  status: MediaPipelineStatus;
28
29
  surface: string;
29
30
  transport?: MediaTransportReport;
@@ -19,6 +19,8 @@ import type { VoiceProviderOrchestrationReport } from './providerOrchestration';
19
19
  import type { VoiceCampaignReadinessProofReport } from './campaign';
20
20
  import { type VoiceOpsRecoveryReport } from './opsRecovery';
21
21
  import { type VoiceObservabilityExportDeliveryHistory, type VoiceObservabilityExportDeliveryReceiptStore, type VoiceObservabilityExportReplayReport, type VoiceObservabilityExportReplaySource, type VoiceObservabilityExportReport } from './observabilityExport';
22
+ import type { VoiceMediaPipelineReport } from './mediaPipelineRoutes';
23
+ import type { MediaWebRTCStatsReport } from '@absolutejs/media';
22
24
  export type VoiceProductionReadinessObservabilityExportDeliveryHistoryOptions = {
23
25
  failOnMissing?: boolean;
24
26
  failOnStale?: boolean;
@@ -132,6 +134,8 @@ export type VoiceProductionReadinessReport = {
132
134
  observabilityExportDeliveries?: string;
133
135
  monitoring?: string;
134
136
  monitoringNotifierDelivery?: string;
137
+ browserMedia?: string;
138
+ mediaPipeline?: string;
135
139
  opsActions?: string;
136
140
  opsRecovery?: string;
137
141
  phoneAgentSmoke?: string;
@@ -207,6 +211,28 @@ export type VoiceProductionReadinessReport = {
207
211
  status: VoiceProductionReadinessStatus;
208
212
  total: number;
209
213
  };
214
+ mediaPipeline?: {
215
+ assistantAudioFrames: number;
216
+ backpressureEvents: number;
217
+ gapCount: number;
218
+ inputAudioFrames: number;
219
+ issues: number;
220
+ jitterMs?: number;
221
+ speechRatio: number;
222
+ status: VoiceProductionReadinessStatus;
223
+ timestampDriftMs?: number;
224
+ };
225
+ browserMedia?: {
226
+ activeCandidatePairs: number;
227
+ bytesReceived: number;
228
+ bytesSent: number;
229
+ issues: number;
230
+ jitterMs?: number;
231
+ liveAudioTracks: number;
232
+ packetLossRatio: number;
233
+ roundTripTimeMs?: number;
234
+ status: VoiceProductionReadinessStatus;
235
+ };
210
236
  opsActionHistory?: VoiceProductionReadinessOpsActionHistorySummary;
211
237
  opsRecovery?: {
212
238
  issues: number;
@@ -311,6 +337,7 @@ export type VoiceProductionReadinessOperationsRecordLink = {
311
337
  export type VoiceProductionReadinessOperationsRecordLinks = {
312
338
  failedSessions: VoiceProductionReadinessOperationsRecordLink[];
313
339
  failingLatency: VoiceProductionReadinessOperationsRecordLink[];
340
+ mediaQuality: VoiceProductionReadinessOperationsRecordLink[];
314
341
  providerErrors: VoiceProductionReadinessOperationsRecordLink[];
315
342
  };
316
343
  export type VoiceProductionReadinessAuditRequirement = {
@@ -446,6 +473,14 @@ export type VoiceProductionReadinessRoutesOptions = {
446
473
  query: Record<string, unknown>;
447
474
  request: Request;
448
475
  }) => Promise<VoiceMonitorNotifierDeliveryReport> | VoiceMonitorNotifierDeliveryReport);
476
+ mediaPipeline?: false | VoiceMediaPipelineReport | ((input: {
477
+ query: Record<string, unknown>;
478
+ request: Request;
479
+ }) => Promise<VoiceMediaPipelineReport> | VoiceMediaPipelineReport);
480
+ browserMedia?: false | MediaWebRTCStatsReport | ((input: {
481
+ query: Record<string, unknown>;
482
+ request: Request;
483
+ }) => Promise<MediaWebRTCStatsReport> | MediaWebRTCStatsReport);
449
484
  opsActionHistory?: false | VoiceProductionReadinessOpsActionHistoryOptions;
450
485
  opsRecovery?: false | VoiceOpsRecoveryReport | ((input: {
451
486
  query: Record<string, unknown>;
@@ -51,6 +51,8 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
51
51
  readonly observabilityExportDeliveries?: string | undefined;
52
52
  readonly monitoring?: string | undefined;
53
53
  readonly monitoringNotifierDelivery?: string | undefined;
54
+ readonly browserMedia?: string | undefined;
55
+ readonly mediaPipeline?: string | undefined;
54
56
  readonly opsActions?: string | undefined;
55
57
  readonly opsRecovery?: string | undefined;
56
58
  readonly phoneAgentSmoke?: string | undefined;
@@ -101,6 +103,13 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
101
103
  readonly sessionId: string;
102
104
  readonly status: import("..").VoiceProductionReadinessStatus;
103
105
  }[];
106
+ readonly mediaQuality: readonly {
107
+ readonly detail?: string | undefined;
108
+ readonly href: string;
109
+ readonly label: string;
110
+ readonly sessionId: string;
111
+ readonly status: import("..").VoiceProductionReadinessStatus;
112
+ }[];
104
113
  readonly providerErrors: readonly {
105
114
  readonly detail?: string | undefined;
106
115
  readonly href: string;
@@ -230,6 +239,28 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
230
239
  readonly status: import("..").VoiceProductionReadinessStatus;
231
240
  readonly total: number;
232
241
  } | undefined;
242
+ readonly mediaPipeline?: {
243
+ readonly assistantAudioFrames: number;
244
+ readonly backpressureEvents: number;
245
+ readonly gapCount: number;
246
+ readonly inputAudioFrames: number;
247
+ readonly issues: number;
248
+ readonly jitterMs?: number | undefined;
249
+ readonly speechRatio: number;
250
+ readonly status: import("..").VoiceProductionReadinessStatus;
251
+ readonly timestampDriftMs?: number | undefined;
252
+ } | undefined;
253
+ readonly browserMedia?: {
254
+ readonly activeCandidatePairs: number;
255
+ readonly bytesReceived: number;
256
+ readonly bytesSent: number;
257
+ readonly issues: number;
258
+ readonly jitterMs?: number | undefined;
259
+ readonly liveAudioTracks: number;
260
+ readonly packetLossRatio: number;
261
+ readonly roundTripTimeMs?: number | undefined;
262
+ readonly status: import("..").VoiceProductionReadinessStatus;
263
+ } | undefined;
233
264
  readonly opsActionHistory?: {
234
265
  readonly failed: number;
235
266
  readonly passed: number;
@@ -434,6 +465,8 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
434
465
  readonly observabilityExportDeliveries?: string | undefined;
435
466
  readonly monitoring?: string | undefined;
436
467
  readonly monitoringNotifierDelivery?: string | undefined;
468
+ readonly browserMedia?: string | undefined;
469
+ readonly mediaPipeline?: string | undefined;
437
470
  readonly opsActions?: string | undefined;
438
471
  readonly opsRecovery?: string | undefined;
439
472
  readonly phoneAgentSmoke?: string | undefined;
@@ -484,6 +517,13 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
484
517
  readonly sessionId: string;
485
518
  readonly status: import("..").VoiceProductionReadinessStatus;
486
519
  }[];
520
+ readonly mediaQuality: readonly {
521
+ readonly detail?: string | undefined;
522
+ readonly href: string;
523
+ readonly label: string;
524
+ readonly sessionId: string;
525
+ readonly status: import("..").VoiceProductionReadinessStatus;
526
+ }[];
487
527
  readonly providerErrors: readonly {
488
528
  readonly detail?: string | undefined;
489
529
  readonly href: string;
@@ -613,6 +653,28 @@ export declare const useVoiceReadinessFailures: (path?: string, options?: VoiceR
613
653
  readonly status: import("..").VoiceProductionReadinessStatus;
614
654
  readonly total: number;
615
655
  } | undefined;
656
+ readonly mediaPipeline?: {
657
+ readonly assistantAudioFrames: number;
658
+ readonly backpressureEvents: number;
659
+ readonly gapCount: number;
660
+ readonly inputAudioFrames: number;
661
+ readonly issues: number;
662
+ readonly jitterMs?: number | undefined;
663
+ readonly speechRatio: number;
664
+ readonly status: import("..").VoiceProductionReadinessStatus;
665
+ readonly timestampDriftMs?: number | undefined;
666
+ } | undefined;
667
+ readonly browserMedia?: {
668
+ readonly activeCandidatePairs: number;
669
+ readonly bytesReceived: number;
670
+ readonly bytesSent: number;
671
+ readonly issues: number;
672
+ readonly jitterMs?: number | undefined;
673
+ readonly liveAudioTracks: number;
674
+ readonly packetLossRatio: number;
675
+ readonly roundTripTimeMs?: number | undefined;
676
+ readonly status: import("..").VoiceProductionReadinessStatus;
677
+ } | undefined;
616
678
  readonly opsActionHistory?: {
617
679
  readonly failed: number;
618
680
  readonly passed: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.316",
3
+ "version": "0.0.22-beta.318",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -246,7 +246,7 @@
246
246
  }
247
247
  },
248
248
  "dependencies": {
249
- "@absolutejs/media": "0.0.1-beta.2"
249
+ "@absolutejs/media": "0.0.1-beta.3"
250
250
  },
251
251
  "devDependencies": {
252
252
  "@absolutejs/absolute": "0.19.0-beta.646",