@absolutejs/voice 0.0.22-beta.13 → 0.0.22-beta.130
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 +779 -5
- package/dist/agent.d.ts +24 -0
- package/dist/agentSquadContract.d.ts +64 -0
- package/dist/angular/index.d.ts +9 -0
- package/dist/angular/index.js +1394 -46
- package/dist/angular/voice-campaign-dialer-proof.service.d.ts +14 -0
- package/dist/angular/voice-controller.service.d.ts +1 -0
- package/dist/angular/voice-ops-status.component.d.ts +15 -0
- package/dist/angular/voice-ops-status.service.d.ts +12 -0
- package/dist/angular/voice-provider-capabilities.service.d.ts +12 -0
- package/dist/angular/voice-provider-status.service.d.ts +12 -0
- package/dist/angular/voice-routing-status.service.d.ts +11 -0
- package/dist/angular/voice-stream.service.d.ts +3 -0
- package/dist/angular/voice-trace-timeline.service.d.ts +12 -0
- package/dist/angular/voice-turn-latency.service.d.ts +13 -0
- package/dist/angular/voice-turn-quality.service.d.ts +12 -0
- package/dist/angular/voice-workflow-status.service.d.ts +12 -0
- package/dist/assistantHealth.d.ts +81 -0
- package/dist/audit.d.ts +128 -0
- package/dist/auditDeliveryRoutes.d.ts +85 -0
- package/dist/auditExport.d.ts +34 -0
- package/dist/auditRoutes.d.ts +66 -0
- package/dist/auditSinks.d.ts +133 -0
- package/dist/bargeInRoutes.d.ts +56 -0
- package/dist/campaign.d.ts +610 -0
- package/dist/campaignDialers.d.ts +90 -0
- package/dist/client/actions.d.ts +105 -0
- package/dist/client/bargeInMonitor.d.ts +7 -0
- package/dist/client/campaignDialerProof.d.ts +23 -0
- package/dist/client/connection.d.ts +3 -0
- package/dist/client/duplex.d.ts +1 -1
- package/dist/client/htmxBootstrap.js +697 -15
- package/dist/client/index.d.ts +40 -0
- package/dist/client/index.js +2138 -10
- package/dist/client/liveTurnLatency.d.ts +41 -0
- package/dist/client/opsStatus.d.ts +19 -0
- package/dist/client/opsStatusWidget.d.ts +40 -0
- package/dist/client/providerCapabilities.d.ts +19 -0
- package/dist/client/providerCapabilitiesWidget.d.ts +32 -0
- package/dist/client/providerSimulationControls.d.ts +33 -0
- package/dist/client/providerSimulationControlsWidget.d.ts +20 -0
- package/dist/client/providerStatus.d.ts +19 -0
- package/dist/client/providerStatusWidget.d.ts +32 -0
- package/dist/client/routingStatus.d.ts +19 -0
- package/dist/client/routingStatusWidget.d.ts +28 -0
- package/dist/client/traceTimeline.d.ts +19 -0
- package/dist/client/traceTimelineWidget.d.ts +32 -0
- package/dist/client/turnLatency.d.ts +22 -0
- package/dist/client/turnLatencyWidget.d.ts +33 -0
- package/dist/client/turnQuality.d.ts +19 -0
- package/dist/client/turnQualityWidget.d.ts +32 -0
- package/dist/client/workflowStatus.d.ts +19 -0
- package/dist/dataControl.d.ts +47 -0
- package/dist/demoReadyRoutes.d.ts +98 -0
- package/dist/diagnosticsRoutes.d.ts +44 -0
- package/dist/evalRoutes.d.ts +213 -0
- package/dist/fileStore.d.ts +11 -2
- package/dist/handoff.d.ts +54 -0
- package/dist/handoffHealth.d.ts +94 -0
- package/dist/index.d.ts +103 -9
- package/dist/index.js +17158 -4684
- package/dist/liveLatency.d.ts +78 -0
- package/dist/modelAdapters.d.ts +26 -2
- package/dist/openaiRealtime.d.ts +27 -0
- package/dist/openaiTTS.d.ts +18 -0
- package/dist/opsConsoleRoutes.d.ts +77 -0
- package/dist/opsStatus.d.ts +65 -0
- package/dist/opsStatusRoutes.d.ts +33 -0
- package/dist/opsWebhook.d.ts +126 -0
- package/dist/outcomeContract.d.ts +112 -0
- package/dist/phoneAgent.d.ts +62 -0
- package/dist/phoneAgentProductionSmoke.d.ts +115 -0
- package/dist/postgresStore.d.ts +13 -2
- package/dist/productionReadiness.d.ts +227 -0
- package/dist/providerAdapters.d.ts +48 -0
- package/dist/providerCapabilities.d.ts +92 -0
- package/dist/providerHealth.d.ts +79 -0
- package/dist/providerRoutingContract.d.ts +38 -0
- package/dist/qualityRoutes.d.ts +76 -0
- package/dist/queue.d.ts +61 -0
- package/dist/react/VoiceOpsStatus.d.ts +6 -0
- package/dist/react/VoiceProviderCapabilities.d.ts +6 -0
- package/dist/react/VoiceProviderSimulationControls.d.ts +5 -0
- package/dist/react/VoiceProviderStatus.d.ts +6 -0
- package/dist/react/VoiceRoutingStatus.d.ts +6 -0
- package/dist/react/VoiceTraceTimeline.d.ts +6 -0
- package/dist/react/VoiceTurnLatency.d.ts +6 -0
- package/dist/react/VoiceTurnQuality.d.ts +6 -0
- package/dist/react/index.d.ts +18 -0
- package/dist/react/index.js +2726 -14
- package/dist/react/useVoiceCampaignDialerProof.d.ts +10 -0
- package/dist/react/useVoiceController.d.ts +3 -0
- package/dist/react/useVoiceOpsStatus.d.ts +8 -0
- package/dist/react/useVoiceProviderCapabilities.d.ts +8 -0
- package/dist/react/useVoiceProviderSimulationControls.d.ts +10 -0
- package/dist/react/useVoiceProviderStatus.d.ts +8 -0
- package/dist/react/useVoiceRoutingStatus.d.ts +8 -0
- package/dist/react/useVoiceStream.d.ts +3 -0
- package/dist/react/useVoiceTraceTimeline.d.ts +8 -0
- package/dist/react/useVoiceTurnLatency.d.ts +9 -0
- package/dist/react/useVoiceTurnQuality.d.ts +8 -0
- package/dist/react/useVoiceWorkflowStatus.d.ts +8 -0
- package/dist/resilienceRoutes.d.ts +142 -0
- package/dist/sessionReplay.d.ts +175 -0
- package/dist/simulationSuite.d.ts +120 -0
- package/dist/sqliteStore.d.ts +13 -2
- package/dist/svelte/createVoiceCampaignDialerProof.d.ts +9 -0
- package/dist/svelte/createVoiceOpsStatus.d.ts +9 -0
- package/dist/svelte/createVoiceProviderCapabilities.d.ts +10 -0
- package/dist/svelte/createVoiceProviderSimulationControls.d.ts +11 -0
- package/dist/svelte/createVoiceProviderStatus.d.ts +10 -0
- package/dist/svelte/createVoiceRoutingStatus.d.ts +10 -0
- package/dist/svelte/createVoiceTraceTimeline.d.ts +10 -0
- package/dist/svelte/createVoiceTurnLatency.d.ts +11 -0
- package/dist/svelte/createVoiceTurnQuality.d.ts +10 -0
- package/dist/svelte/createVoiceWorkflowStatus.d.ts +8 -0
- package/dist/svelte/index.d.ts +10 -0
- package/dist/svelte/index.js +2152 -202
- package/dist/telephony/contract.d.ts +61 -0
- package/dist/telephony/matrix.d.ts +97 -0
- package/dist/telephony/plivo.d.ts +254 -0
- package/dist/telephony/telnyx.d.ts +247 -0
- package/dist/telephony/twilio.d.ts +135 -2
- package/dist/telephonyOutcome.d.ts +201 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.js +2830 -37
- package/dist/testing/ioProviderSimulator.d.ts +41 -0
- package/dist/testing/providerSimulator.d.ts +44 -0
- package/dist/toolContract.d.ts +130 -0
- package/dist/toolRuntime.d.ts +50 -0
- package/dist/trace.d.ts +1 -1
- package/dist/traceDeliveryRoutes.d.ts +86 -0
- package/dist/traceTimeline.d.ts +93 -0
- package/dist/turnLatency.d.ts +95 -0
- package/dist/turnQuality.d.ts +94 -0
- package/dist/types.d.ts +169 -4
- package/dist/vue/VoiceOpsStatus.d.ts +30 -0
- package/dist/vue/VoiceProviderCapabilities.d.ts +51 -0
- package/dist/vue/VoiceProviderSimulationControls.d.ts +88 -0
- package/dist/vue/VoiceProviderStatus.d.ts +51 -0
- package/dist/vue/VoiceRoutingStatus.d.ts +51 -0
- package/dist/vue/VoiceTurnLatency.d.ts +69 -0
- package/dist/vue/VoiceTurnQuality.d.ts +51 -0
- package/dist/vue/index.d.ts +17 -0
- package/dist/vue/index.js +2636 -31
- package/dist/vue/useVoiceCampaignDialerProof.d.ts +11 -0
- package/dist/vue/useVoiceController.d.ts +2 -1
- package/dist/vue/useVoiceOpsStatus.d.ts +9 -0
- package/dist/vue/useVoiceProviderCapabilities.d.ts +9 -0
- package/dist/vue/useVoiceProviderSimulationControls.d.ts +24 -0
- package/dist/vue/useVoiceProviderStatus.d.ts +9 -0
- package/dist/vue/useVoiceRoutingStatus.d.ts +8 -0
- package/dist/vue/useVoiceStream.d.ts +4 -1
- package/dist/vue/useVoiceTraceTimeline.d.ts +9 -0
- package/dist/vue/useVoiceTurnLatency.d.ts +10 -0
- package/dist/vue/useVoiceTurnQuality.d.ts +9 -0
- package/dist/vue/useVoiceWorkflowStatus.d.ts +9 -0
- package/dist/workflowContract.d.ts +91 -0
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Elysia } from 'elysia';
|
|
2
|
+
import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from './trace';
|
|
3
|
+
import type { VoiceTelephonyContractReport, VoiceTelephonyProvider } from './telephony/contract';
|
|
4
|
+
export type VoicePhoneAgentProductionSmokeRequirement = 'assistant-response' | 'carrier-contract' | 'fresh-trace' | 'lifecycle-outcome' | 'media-started' | 'no-session-error' | 'transcript';
|
|
5
|
+
export type VoicePhoneAgentProductionSmokeIssue = {
|
|
6
|
+
message: string;
|
|
7
|
+
requirement: VoicePhoneAgentProductionSmokeRequirement;
|
|
8
|
+
severity: 'error' | 'warning';
|
|
9
|
+
};
|
|
10
|
+
export type VoicePhoneAgentProductionSmokeReport<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = {
|
|
11
|
+
contract?: VoiceTelephonyContractReport<TProvider>;
|
|
12
|
+
contractId: string;
|
|
13
|
+
generatedAt: number;
|
|
14
|
+
issues: VoicePhoneAgentProductionSmokeIssue[];
|
|
15
|
+
maxAgeMs?: number;
|
|
16
|
+
observed: {
|
|
17
|
+
assistantResponses: number;
|
|
18
|
+
carrierContract?: boolean;
|
|
19
|
+
lifecycleOutcomes: string[];
|
|
20
|
+
latestEventAt?: number;
|
|
21
|
+
mediaStarts: number;
|
|
22
|
+
sessionErrors: number;
|
|
23
|
+
transcripts: number;
|
|
24
|
+
};
|
|
25
|
+
pass: boolean;
|
|
26
|
+
provider?: TProvider;
|
|
27
|
+
required: VoicePhoneAgentProductionSmokeRequirement[];
|
|
28
|
+
scenarioId?: string;
|
|
29
|
+
sessionId?: string;
|
|
30
|
+
traceId?: string;
|
|
31
|
+
};
|
|
32
|
+
export type VoicePhoneAgentProductionSmokeOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = {
|
|
33
|
+
contract?: VoiceTelephonyContractReport<TProvider>;
|
|
34
|
+
contractId?: string;
|
|
35
|
+
events?: readonly StoredVoiceTraceEvent[];
|
|
36
|
+
maxAgeMs?: number;
|
|
37
|
+
now?: number;
|
|
38
|
+
provider?: TProvider;
|
|
39
|
+
required?: readonly VoicePhoneAgentProductionSmokeRequirement[];
|
|
40
|
+
scenarioId?: string;
|
|
41
|
+
sessionId?: string;
|
|
42
|
+
store?: VoiceTraceEventStore;
|
|
43
|
+
traceId?: string;
|
|
44
|
+
};
|
|
45
|
+
export type VoicePhoneAgentProductionSmokeHandlerOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = Omit<VoicePhoneAgentProductionSmokeOptions<TProvider>, 'events' | 'scenarioId' | 'sessionId' | 'traceId'> & {
|
|
46
|
+
getContract?: (input: {
|
|
47
|
+
query: Record<string, unknown>;
|
|
48
|
+
request: Request;
|
|
49
|
+
}) => Promise<VoiceTelephonyContractReport<TProvider> | undefined> | VoiceTelephonyContractReport<TProvider> | undefined;
|
|
50
|
+
scenarioId?: string;
|
|
51
|
+
sessionId?: string;
|
|
52
|
+
traceId?: string;
|
|
53
|
+
};
|
|
54
|
+
export type VoicePhoneAgentProductionSmokeHTMLHandlerOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = VoicePhoneAgentProductionSmokeHandlerOptions<TProvider> & {
|
|
55
|
+
headers?: HeadersInit;
|
|
56
|
+
render?: (report: VoicePhoneAgentProductionSmokeReport<TProvider>) => Promise<string> | string;
|
|
57
|
+
title?: string;
|
|
58
|
+
};
|
|
59
|
+
export type VoicePhoneAgentProductionSmokeRoutesOptions<TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider> = VoicePhoneAgentProductionSmokeHTMLHandlerOptions<TProvider> & {
|
|
60
|
+
htmlPath?: false | string;
|
|
61
|
+
name?: string;
|
|
62
|
+
path?: string;
|
|
63
|
+
};
|
|
64
|
+
export declare const runVoicePhoneAgentProductionSmokeContract: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeOptions<TProvider>) => Promise<VoicePhoneAgentProductionSmokeReport<TProvider>>;
|
|
65
|
+
export declare const renderVoicePhoneAgentProductionSmokeHTML: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(report: VoicePhoneAgentProductionSmokeReport<TProvider>, options?: {
|
|
66
|
+
title?: string;
|
|
67
|
+
}) => string;
|
|
68
|
+
export declare const createVoicePhoneAgentProductionSmokeJSONHandler: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeHandlerOptions<TProvider>) => ({ query, request }: {
|
|
69
|
+
query: Record<string, unknown>;
|
|
70
|
+
request: Request;
|
|
71
|
+
}) => Promise<VoicePhoneAgentProductionSmokeReport<TProvider>>;
|
|
72
|
+
export declare const createVoicePhoneAgentProductionSmokeHTMLHandler: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeHTMLHandlerOptions<TProvider>) => ({ query, request }: {
|
|
73
|
+
query: Record<string, unknown>;
|
|
74
|
+
request: Request;
|
|
75
|
+
}) => Promise<Response>;
|
|
76
|
+
export declare const createVoicePhoneAgentProductionSmokeRoutes: <TProvider extends VoiceTelephonyProvider = VoiceTelephonyProvider>(options: VoicePhoneAgentProductionSmokeRoutesOptions<TProvider>) => Elysia<"", {
|
|
77
|
+
decorator: {};
|
|
78
|
+
store: {};
|
|
79
|
+
derive: {};
|
|
80
|
+
resolve: {};
|
|
81
|
+
}, {
|
|
82
|
+
typebox: {};
|
|
83
|
+
error: {};
|
|
84
|
+
}, {
|
|
85
|
+
schema: {};
|
|
86
|
+
standaloneSchema: {};
|
|
87
|
+
macro: {};
|
|
88
|
+
macroFn: {};
|
|
89
|
+
parser: {};
|
|
90
|
+
response: {};
|
|
91
|
+
}, {
|
|
92
|
+
[x: string]: {
|
|
93
|
+
get: {
|
|
94
|
+
body: unknown;
|
|
95
|
+
params: {};
|
|
96
|
+
query: unknown;
|
|
97
|
+
headers: unknown;
|
|
98
|
+
response: {
|
|
99
|
+
200: VoicePhoneAgentProductionSmokeReport<TProvider>;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
}, {
|
|
104
|
+
derive: {};
|
|
105
|
+
resolve: {};
|
|
106
|
+
schema: {};
|
|
107
|
+
standaloneSchema: {};
|
|
108
|
+
response: {};
|
|
109
|
+
}, {
|
|
110
|
+
derive: {};
|
|
111
|
+
resolve: {};
|
|
112
|
+
schema: {};
|
|
113
|
+
standaloneSchema: {};
|
|
114
|
+
response: {};
|
|
115
|
+
}>;
|
package/dist/postgresStore.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type StoredVoiceTraceEvent, type VoiceTraceSinkDeliveryRecord, type VoiceTraceSinkDeliveryStore, type VoiceTraceEventStore } from './trace';
|
|
2
|
+
import { type StoredVoiceAuditEvent, type VoiceAuditEventStore } from './audit';
|
|
3
|
+
import type { VoiceAuditSinkDeliveryRecord, VoiceAuditSinkDeliveryStore } from './auditSinks';
|
|
2
4
|
import type { StoredVoiceIntegrationEvent, StoredVoiceExternalObjectMap, StoredVoiceOpsTask, VoiceExternalObjectMapStore, VoiceIntegrationEventStore, VoiceOpsTaskStore } from './ops';
|
|
3
5
|
import type { StoredVoiceCallReviewArtifact, VoiceCallReviewStore } from './testing/review';
|
|
6
|
+
import type { VoiceTelephonyWebhookIdempotencyStore } from './telephonyOutcome';
|
|
7
|
+
import type { VoiceCampaignStore } from './campaign';
|
|
4
8
|
import type { VoiceSessionRecord, VoiceSessionStore } from './types';
|
|
5
9
|
export type VoicePostgresClient = {
|
|
6
10
|
unsafe: <TRow extends Record<string, unknown> = Record<string, unknown>>(query: string, parameters?: unknown[]) => Promise<TRow[]>;
|
|
@@ -12,7 +16,10 @@ export type VoicePostgresStoreOptions = {
|
|
|
12
16
|
tableName?: string;
|
|
13
17
|
tablePrefix?: string;
|
|
14
18
|
};
|
|
15
|
-
export type VoicePostgresRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord> = {
|
|
19
|
+
export type VoicePostgresRuntimeStorage<TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord> = {
|
|
20
|
+
audit: VoiceAuditEventStore<TAudit>;
|
|
21
|
+
auditDeliveries: VoiceAuditSinkDeliveryStore<TAuditDelivery>;
|
|
22
|
+
campaigns: VoiceCampaignStore;
|
|
16
23
|
events: VoiceIntegrationEventStore<TEvent>;
|
|
17
24
|
externalObjects: VoiceExternalObjectMapStore<TMapping>;
|
|
18
25
|
reviews: VoiceCallReviewStore<TReview>;
|
|
@@ -28,4 +35,8 @@ export declare const createVoicePostgresIntegrationEventStore: <TEvent extends S
|
|
|
28
35
|
export declare const createVoicePostgresExternalObjectMapStore: <TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap>(options: VoicePostgresStoreOptions) => VoiceExternalObjectMapStore<TMapping>;
|
|
29
36
|
export declare const createVoicePostgresTraceEventStore: <TEvent extends StoredVoiceTraceEvent = StoredVoiceTraceEvent>(options: VoicePostgresStoreOptions) => VoiceTraceEventStore<TEvent>;
|
|
30
37
|
export declare const createVoicePostgresTraceSinkDeliveryStore: <TDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoiceTraceSinkDeliveryStore<TDelivery>;
|
|
31
|
-
export declare const
|
|
38
|
+
export declare const createVoicePostgresAuditEventStore: <TEvent extends StoredVoiceAuditEvent = StoredVoiceAuditEvent>(options: VoicePostgresStoreOptions) => VoiceAuditEventStore<TEvent>;
|
|
39
|
+
export declare const createVoicePostgresAuditSinkDeliveryStore: <TDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoiceAuditSinkDeliveryStore<TDelivery>;
|
|
40
|
+
export declare const createVoicePostgresTelephonyWebhookIdempotencyStore: <TResult = unknown>(options: VoicePostgresStoreOptions) => VoiceTelephonyWebhookIdempotencyStore<TResult>;
|
|
41
|
+
export declare const createVoicePostgresCampaignStore: (options: VoicePostgresStoreOptions) => VoiceCampaignStore;
|
|
42
|
+
export declare const createVoicePostgresRuntimeStorage: <TSession extends VoiceSessionRecord = VoiceSessionRecord, TReview extends StoredVoiceCallReviewArtifact = StoredVoiceCallReviewArtifact, TTask extends StoredVoiceOpsTask = StoredVoiceOpsTask, TEvent extends StoredVoiceIntegrationEvent = StoredVoiceIntegrationEvent, TMapping extends StoredVoiceExternalObjectMap = StoredVoiceExternalObjectMap, TTrace extends StoredVoiceTraceEvent = StoredVoiceTraceEvent, TTraceDelivery extends VoiceTraceSinkDeliveryRecord = VoiceTraceSinkDeliveryRecord, TAudit extends StoredVoiceAuditEvent = StoredVoiceAuditEvent, TAuditDelivery extends VoiceAuditSinkDeliveryRecord = VoiceAuditSinkDeliveryRecord>(options: VoicePostgresStoreOptions) => VoicePostgresRuntimeStorage<TSession, TReview, TTask, TEvent, TMapping, TTrace, TTraceDelivery, TAudit, TAuditDelivery>;
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { Elysia } from 'elysia';
|
|
2
|
+
import { type VoiceTelephonyCarrierMatrixInput } from './telephony/matrix';
|
|
3
|
+
import type { VoiceTraceEventStore } from './trace';
|
|
4
|
+
import type { VoiceTraceSinkDeliveryStore } from './trace';
|
|
5
|
+
import type { VoiceAgentSquadContractReport } from './agentSquadContract';
|
|
6
|
+
import type { VoiceProviderRoutingContractReport } from './providerRoutingContract';
|
|
7
|
+
import type { VoicePhoneAgentProductionSmokeReport } from './phoneAgentProductionSmoke';
|
|
8
|
+
import type { VoiceAuditEventStore, VoiceAuditEventType, VoiceAuditOutcome } from './audit';
|
|
9
|
+
import { type VoiceAuditSinkDeliveryStore } from './auditSinks';
|
|
10
|
+
export type VoiceProductionReadinessStatus = 'fail' | 'pass' | 'warn';
|
|
11
|
+
export type VoiceProductionReadinessAction = {
|
|
12
|
+
description?: string;
|
|
13
|
+
href: string;
|
|
14
|
+
label: string;
|
|
15
|
+
method?: 'GET' | 'POST';
|
|
16
|
+
};
|
|
17
|
+
export type VoiceProductionReadinessCheck = {
|
|
18
|
+
actions?: VoiceProductionReadinessAction[];
|
|
19
|
+
detail?: string;
|
|
20
|
+
href?: string;
|
|
21
|
+
label: string;
|
|
22
|
+
status: VoiceProductionReadinessStatus;
|
|
23
|
+
value?: number | string;
|
|
24
|
+
};
|
|
25
|
+
export type VoiceProductionReadinessReport = {
|
|
26
|
+
checkedAt: number;
|
|
27
|
+
checks: VoiceProductionReadinessCheck[];
|
|
28
|
+
links: {
|
|
29
|
+
agentSquadContracts?: string;
|
|
30
|
+
audit?: string;
|
|
31
|
+
auditDeliveries?: string;
|
|
32
|
+
carriers?: string;
|
|
33
|
+
handoffs?: string;
|
|
34
|
+
handoffRetry?: string;
|
|
35
|
+
liveLatency?: string;
|
|
36
|
+
phoneAgentSmoke?: string;
|
|
37
|
+
providerRoutingContracts?: string;
|
|
38
|
+
quality?: string;
|
|
39
|
+
resilience?: string;
|
|
40
|
+
sessions?: string;
|
|
41
|
+
traceDeliveries?: string;
|
|
42
|
+
};
|
|
43
|
+
status: VoiceProductionReadinessStatus;
|
|
44
|
+
summary: {
|
|
45
|
+
agentSquadContracts?: {
|
|
46
|
+
failed: number;
|
|
47
|
+
passed: number;
|
|
48
|
+
status: VoiceProductionReadinessStatus;
|
|
49
|
+
total: number;
|
|
50
|
+
};
|
|
51
|
+
audit?: VoiceProductionReadinessAuditSummary;
|
|
52
|
+
auditDeliveries?: VoiceProductionReadinessAuditDeliverySummary;
|
|
53
|
+
carriers?: {
|
|
54
|
+
failing: number;
|
|
55
|
+
providers: number;
|
|
56
|
+
ready: number;
|
|
57
|
+
status: VoiceProductionReadinessStatus;
|
|
58
|
+
warnings: number;
|
|
59
|
+
};
|
|
60
|
+
handoffs: {
|
|
61
|
+
failed: number;
|
|
62
|
+
total: number;
|
|
63
|
+
};
|
|
64
|
+
liveLatency: {
|
|
65
|
+
averageLatencyMs?: number;
|
|
66
|
+
failed: number;
|
|
67
|
+
status: VoiceProductionReadinessStatus;
|
|
68
|
+
total: number;
|
|
69
|
+
warnings: number;
|
|
70
|
+
};
|
|
71
|
+
providers: {
|
|
72
|
+
degraded: number;
|
|
73
|
+
total: number;
|
|
74
|
+
};
|
|
75
|
+
phoneAgentSmokes?: {
|
|
76
|
+
failed: number;
|
|
77
|
+
passed: number;
|
|
78
|
+
status: VoiceProductionReadinessStatus;
|
|
79
|
+
total: number;
|
|
80
|
+
};
|
|
81
|
+
providerRoutingContracts?: {
|
|
82
|
+
failed: number;
|
|
83
|
+
passed: number;
|
|
84
|
+
status: VoiceProductionReadinessStatus;
|
|
85
|
+
total: number;
|
|
86
|
+
};
|
|
87
|
+
quality: {
|
|
88
|
+
status: 'fail' | 'pass';
|
|
89
|
+
};
|
|
90
|
+
routing: {
|
|
91
|
+
events: number;
|
|
92
|
+
sessions: number;
|
|
93
|
+
};
|
|
94
|
+
sessions: {
|
|
95
|
+
failed: number;
|
|
96
|
+
total: number;
|
|
97
|
+
};
|
|
98
|
+
traceDeliveries?: VoiceProductionReadinessTraceDeliverySummary;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
export type VoiceProductionReadinessAuditRequirement = {
|
|
102
|
+
label?: string;
|
|
103
|
+
maxAgeMs?: number;
|
|
104
|
+
outcomes?: VoiceAuditOutcome[];
|
|
105
|
+
status?: VoiceProductionReadinessStatus;
|
|
106
|
+
type: VoiceAuditEventType;
|
|
107
|
+
};
|
|
108
|
+
export type VoiceProductionReadinessAuditSummary = {
|
|
109
|
+
events: number;
|
|
110
|
+
missing: VoiceProductionReadinessAuditRequirement[];
|
|
111
|
+
present: Record<VoiceAuditEventType, number>;
|
|
112
|
+
required: VoiceProductionReadinessAuditRequirement[];
|
|
113
|
+
status: VoiceProductionReadinessStatus;
|
|
114
|
+
};
|
|
115
|
+
export type VoiceProductionReadinessAuditDeliverySummary = {
|
|
116
|
+
deadLettered: number;
|
|
117
|
+
delivered: number;
|
|
118
|
+
failed: number;
|
|
119
|
+
failPendingAfterMs: number;
|
|
120
|
+
pending: number;
|
|
121
|
+
retryEligible: number;
|
|
122
|
+
skipped: number;
|
|
123
|
+
staleFailing: number;
|
|
124
|
+
staleWarning: number;
|
|
125
|
+
status: VoiceProductionReadinessStatus;
|
|
126
|
+
total: number;
|
|
127
|
+
warnPendingAfterMs: number;
|
|
128
|
+
};
|
|
129
|
+
export type VoiceProductionReadinessTraceDeliverySummary = {
|
|
130
|
+
deadLettered: number;
|
|
131
|
+
delivered: number;
|
|
132
|
+
failed: number;
|
|
133
|
+
failPendingAfterMs: number;
|
|
134
|
+
pending: number;
|
|
135
|
+
retryEligible: number;
|
|
136
|
+
skipped: number;
|
|
137
|
+
staleFailing: number;
|
|
138
|
+
staleWarning: number;
|
|
139
|
+
status: VoiceProductionReadinessStatus;
|
|
140
|
+
total: number;
|
|
141
|
+
warnPendingAfterMs: number;
|
|
142
|
+
};
|
|
143
|
+
export type VoiceProductionReadinessAuditOptions = VoiceAuditEventStore | {
|
|
144
|
+
require?: readonly (VoiceAuditEventType | VoiceProductionReadinessAuditRequirement)[];
|
|
145
|
+
store: VoiceAuditEventStore;
|
|
146
|
+
};
|
|
147
|
+
export type VoiceProductionReadinessAuditDeliveryOptions = VoiceAuditSinkDeliveryStore | {
|
|
148
|
+
deadLetters?: VoiceAuditSinkDeliveryStore;
|
|
149
|
+
failPendingAfterMs?: number;
|
|
150
|
+
store: VoiceAuditSinkDeliveryStore;
|
|
151
|
+
warnPendingAfterMs?: number;
|
|
152
|
+
};
|
|
153
|
+
export type VoiceProductionReadinessTraceDeliveryOptions = VoiceTraceSinkDeliveryStore | {
|
|
154
|
+
deadLetters?: VoiceTraceSinkDeliveryStore;
|
|
155
|
+
failPendingAfterMs?: number;
|
|
156
|
+
store: VoiceTraceSinkDeliveryStore;
|
|
157
|
+
warnPendingAfterMs?: number;
|
|
158
|
+
};
|
|
159
|
+
export type VoiceProductionReadinessRoutesOptions = {
|
|
160
|
+
agentSquadContracts?: false | readonly VoiceAgentSquadContractReport[] | ((input: {
|
|
161
|
+
query: Record<string, unknown>;
|
|
162
|
+
request: Request;
|
|
163
|
+
}) => Promise<readonly VoiceAgentSquadContractReport[]> | readonly VoiceAgentSquadContractReport[]);
|
|
164
|
+
audit?: false | VoiceProductionReadinessAuditOptions;
|
|
165
|
+
auditDeliveries?: false | VoiceProductionReadinessAuditDeliveryOptions;
|
|
166
|
+
carriers?: false | readonly VoiceTelephonyCarrierMatrixInput[] | ((input: {
|
|
167
|
+
query: Record<string, unknown>;
|
|
168
|
+
request: Request;
|
|
169
|
+
}) => Promise<readonly VoiceTelephonyCarrierMatrixInput[]> | readonly VoiceTelephonyCarrierMatrixInput[]);
|
|
170
|
+
headers?: HeadersInit;
|
|
171
|
+
htmlPath?: false | string;
|
|
172
|
+
links?: VoiceProductionReadinessReport['links'];
|
|
173
|
+
llmProviders?: readonly string[];
|
|
174
|
+
name?: string;
|
|
175
|
+
path?: string;
|
|
176
|
+
phoneAgentSmokes?: false | readonly VoicePhoneAgentProductionSmokeReport[] | ((input: {
|
|
177
|
+
query: Record<string, unknown>;
|
|
178
|
+
request: Request;
|
|
179
|
+
}) => Promise<readonly VoicePhoneAgentProductionSmokeReport[]> | readonly VoicePhoneAgentProductionSmokeReport[]);
|
|
180
|
+
providerRoutingContracts?: false | readonly VoiceProviderRoutingContractReport[] | ((input: {
|
|
181
|
+
query: Record<string, unknown>;
|
|
182
|
+
request: Request;
|
|
183
|
+
}) => Promise<readonly VoiceProviderRoutingContractReport[]> | readonly VoiceProviderRoutingContractReport[]);
|
|
184
|
+
render?: (report: VoiceProductionReadinessReport) => string | Promise<string>;
|
|
185
|
+
store: VoiceTraceEventStore;
|
|
186
|
+
sttProviders?: readonly string[];
|
|
187
|
+
title?: string;
|
|
188
|
+
traceDeliveries?: false | VoiceProductionReadinessTraceDeliveryOptions;
|
|
189
|
+
ttsProviders?: readonly string[];
|
|
190
|
+
liveLatencyWarnAfterMs?: number;
|
|
191
|
+
liveLatencyFailAfterMs?: number;
|
|
192
|
+
};
|
|
193
|
+
export declare const buildVoiceProductionReadinessReport: (options: VoiceProductionReadinessRoutesOptions, input?: {
|
|
194
|
+
query?: Record<string, unknown>;
|
|
195
|
+
request?: Request;
|
|
196
|
+
}) => Promise<VoiceProductionReadinessReport>;
|
|
197
|
+
export declare const renderVoiceProductionReadinessHTML: (report: VoiceProductionReadinessReport, options?: {
|
|
198
|
+
title?: string;
|
|
199
|
+
}) => string;
|
|
200
|
+
export declare const createVoiceProductionReadinessRoutes: (options: VoiceProductionReadinessRoutesOptions) => Elysia<"", {
|
|
201
|
+
decorator: {};
|
|
202
|
+
store: {};
|
|
203
|
+
derive: {};
|
|
204
|
+
resolve: {};
|
|
205
|
+
}, {
|
|
206
|
+
typebox: {};
|
|
207
|
+
error: {};
|
|
208
|
+
}, {
|
|
209
|
+
schema: {};
|
|
210
|
+
standaloneSchema: {};
|
|
211
|
+
macro: {};
|
|
212
|
+
macroFn: {};
|
|
213
|
+
parser: {};
|
|
214
|
+
response: {};
|
|
215
|
+
}, {}, {
|
|
216
|
+
derive: {};
|
|
217
|
+
resolve: {};
|
|
218
|
+
schema: {};
|
|
219
|
+
standaloneSchema: {};
|
|
220
|
+
response: {};
|
|
221
|
+
}, {
|
|
222
|
+
derive: {};
|
|
223
|
+
resolve: {};
|
|
224
|
+
schema: {};
|
|
225
|
+
standaloneSchema: {};
|
|
226
|
+
response: {};
|
|
227
|
+
}>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { STTAdapter, STTAdapterOpenOptions, TTSAdapter, TTSAdapterOpenOptions } from './types';
|
|
2
|
+
import type { VoiceProviderRouterHealthOptions, VoiceProviderRouterProviderHealth, VoiceProviderRouterProviderProfile, VoiceProviderRouterPolicyPreset, VoiceProviderRouterPolicyWeights, VoiceProviderRouterStrategy } from './modelAdapters';
|
|
3
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
4
|
+
type VoiceIOProviderKind = 'stt' | 'tts';
|
|
5
|
+
type VoiceIOProviderStatus = 'error' | 'fallback' | 'success';
|
|
6
|
+
export type VoiceIOProviderRouterEvent<TProvider extends string = string> = {
|
|
7
|
+
at: number;
|
|
8
|
+
attempt: number;
|
|
9
|
+
elapsedMs: number;
|
|
10
|
+
error?: string;
|
|
11
|
+
fallbackProvider?: TProvider;
|
|
12
|
+
kind: VoiceIOProviderKind;
|
|
13
|
+
latencyBudgetMs?: number;
|
|
14
|
+
operation: 'open' | 'send';
|
|
15
|
+
provider: TProvider;
|
|
16
|
+
providerHealth?: VoiceProviderRouterProviderHealth<TProvider>;
|
|
17
|
+
selectedProvider: TProvider;
|
|
18
|
+
status: VoiceIOProviderStatus;
|
|
19
|
+
suppressionRemainingMs?: number;
|
|
20
|
+
suppressedUntil?: number;
|
|
21
|
+
timedOut?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export type VoiceIOProviderRouterPolicyConfig<TOpenOptions = unknown, TProvider extends string = string> = {
|
|
24
|
+
allowProviders?: readonly TProvider[] | ((input: TOpenOptions) => MaybePromise<readonly TProvider[]>);
|
|
25
|
+
maxCost?: number;
|
|
26
|
+
maxLatencyMs?: number;
|
|
27
|
+
minQuality?: number;
|
|
28
|
+
scoreProvider?: (provider: TProvider, profile: VoiceProviderRouterProviderProfile | undefined) => number;
|
|
29
|
+
strategy?: VoiceProviderRouterStrategy;
|
|
30
|
+
weights?: VoiceProviderRouterPolicyWeights;
|
|
31
|
+
};
|
|
32
|
+
export type VoiceIOProviderRouterPolicy<TOpenOptions = unknown, TProvider extends string = string> = VoiceProviderRouterStrategy | VoiceProviderRouterPolicyPreset | VoiceIOProviderRouterPolicyConfig<TOpenOptions, TProvider>;
|
|
33
|
+
export type VoiceIOProviderRouterOptions<TProvider extends string, TAdapter, TOpenOptions> = {
|
|
34
|
+
adapters: Partial<Record<TProvider, TAdapter>>;
|
|
35
|
+
fallback?: readonly TProvider[] | ((input: TOpenOptions) => MaybePromise<readonly TProvider[]>);
|
|
36
|
+
isProviderError?: (error: unknown, provider: TProvider) => boolean;
|
|
37
|
+
onProviderEvent?: (event: VoiceIOProviderRouterEvent<TProvider>, input: TOpenOptions) => Promise<void> | void;
|
|
38
|
+
policy?: VoiceIOProviderRouterPolicy<TOpenOptions, TProvider>;
|
|
39
|
+
providerHealth?: boolean | VoiceProviderRouterHealthOptions;
|
|
40
|
+
providerProfiles?: Partial<Record<TProvider, VoiceProviderRouterProviderProfile>>;
|
|
41
|
+
selectProvider?: (input: TOpenOptions) => MaybePromise<TProvider | undefined>;
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
};
|
|
44
|
+
export type VoiceSTTProviderRouterOptions<TProvider extends string = string, TOptions extends STTAdapterOpenOptions = STTAdapterOpenOptions> = VoiceIOProviderRouterOptions<TProvider, STTAdapter<TOptions>, TOptions>;
|
|
45
|
+
export type VoiceTTSProviderRouterOptions<TProvider extends string = string, TOptions extends TTSAdapterOpenOptions = TTSAdapterOpenOptions> = VoiceIOProviderRouterOptions<TProvider, TTSAdapter<TOptions>, TOptions>;
|
|
46
|
+
export declare const createVoiceSTTProviderRouter: <TProvider extends string = string, TOptions extends STTAdapterOpenOptions = STTAdapterOpenOptions>(options: VoiceSTTProviderRouterOptions<TProvider, TOptions>) => STTAdapter<TOptions>;
|
|
47
|
+
export declare const createVoiceTTSProviderRouter: <TProvider extends string = string, TOptions extends TTSAdapterOpenOptions = TTSAdapterOpenOptions>(options: VoiceTTSProviderRouterOptions<TProvider, TOptions>) => TTSAdapter<TOptions>;
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Elysia } from 'elysia';
|
|
2
|
+
import { type VoiceProviderHealthStatus, type VoiceProviderHealthSummary, type VoiceProviderHealthSummaryOptions } from './providerHealth';
|
|
3
|
+
export type VoiceProviderCapabilityKind = 'llm' | 'stt' | 'tts' | 'custom';
|
|
4
|
+
export type VoiceProviderCapabilityDefinition<TProvider extends string = string> = {
|
|
5
|
+
configured?: boolean;
|
|
6
|
+
description?: string;
|
|
7
|
+
features?: string[];
|
|
8
|
+
kind: VoiceProviderCapabilityKind;
|
|
9
|
+
label?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
provider: TProvider;
|
|
12
|
+
selected?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type VoiceProviderCapabilitySummary<TProvider extends string = string> = VoiceProviderCapabilityDefinition<TProvider> & {
|
|
15
|
+
configured: boolean;
|
|
16
|
+
health?: VoiceProviderHealthSummary<TProvider>;
|
|
17
|
+
status: VoiceProviderHealthStatus | 'selected' | 'unconfigured';
|
|
18
|
+
};
|
|
19
|
+
export type VoiceProviderCapabilityReport<TProvider extends string = string> = {
|
|
20
|
+
capabilities: VoiceProviderCapabilitySummary<TProvider>[];
|
|
21
|
+
checkedAt: number;
|
|
22
|
+
configured: number;
|
|
23
|
+
selected: number;
|
|
24
|
+
total: number;
|
|
25
|
+
unconfigured: number;
|
|
26
|
+
};
|
|
27
|
+
export type VoiceProviderCapabilityOptions<TProvider extends string = string> = VoiceProviderHealthSummaryOptions<TProvider> & {
|
|
28
|
+
features?: Partial<Record<TProvider, string[]>>;
|
|
29
|
+
llmProviders?: readonly TProvider[];
|
|
30
|
+
models?: Partial<Record<TProvider, string>>;
|
|
31
|
+
providers?: readonly VoiceProviderCapabilityDefinition<TProvider>[];
|
|
32
|
+
selected?: Partial<Record<VoiceProviderCapabilityKind, TProvider>>;
|
|
33
|
+
sttProviders?: readonly TProvider[];
|
|
34
|
+
ttsProviders?: readonly TProvider[];
|
|
35
|
+
};
|
|
36
|
+
export type VoiceProviderCapabilityHandlerOptions<TProvider extends string = string> = VoiceProviderCapabilityOptions<TProvider>;
|
|
37
|
+
export type VoiceProviderCapabilityHTMLHandlerOptions<TProvider extends string = string> = VoiceProviderCapabilityHandlerOptions<TProvider> & {
|
|
38
|
+
headers?: HeadersInit;
|
|
39
|
+
render?: (report: VoiceProviderCapabilityReport<TProvider>) => string | Promise<string>;
|
|
40
|
+
title?: string;
|
|
41
|
+
};
|
|
42
|
+
export type VoiceProviderCapabilityRoutesOptions<TProvider extends string = string> = VoiceProviderCapabilityHTMLHandlerOptions<TProvider> & {
|
|
43
|
+
htmlPath?: false | string;
|
|
44
|
+
name?: string;
|
|
45
|
+
path?: string;
|
|
46
|
+
};
|
|
47
|
+
export declare const summarizeVoiceProviderCapabilities: <TProvider extends string = string>(options: VoiceProviderCapabilityOptions<TProvider>) => Promise<VoiceProviderCapabilityReport<TProvider>>;
|
|
48
|
+
export declare const renderVoiceProviderCapabilityHTML: <TProvider extends string = string>(report: VoiceProviderCapabilityReport<TProvider>, options?: {
|
|
49
|
+
title?: string;
|
|
50
|
+
}) => string;
|
|
51
|
+
export declare const createVoiceProviderCapabilityJSONHandler: <TProvider extends string = string>(options: VoiceProviderCapabilityHandlerOptions<TProvider>) => () => Promise<VoiceProviderCapabilityReport<TProvider>>;
|
|
52
|
+
export declare const createVoiceProviderCapabilityHTMLHandler: <TProvider extends string = string>(options: VoiceProviderCapabilityHTMLHandlerOptions<TProvider>) => () => Promise<Response>;
|
|
53
|
+
export declare const createVoiceProviderCapabilityRoutes: <TProvider extends string = string>(options: VoiceProviderCapabilityRoutesOptions<TProvider>) => Elysia<"", {
|
|
54
|
+
decorator: {};
|
|
55
|
+
store: {};
|
|
56
|
+
derive: {};
|
|
57
|
+
resolve: {};
|
|
58
|
+
}, {
|
|
59
|
+
typebox: {};
|
|
60
|
+
error: {};
|
|
61
|
+
}, {
|
|
62
|
+
schema: {};
|
|
63
|
+
standaloneSchema: {};
|
|
64
|
+
macro: {};
|
|
65
|
+
macroFn: {};
|
|
66
|
+
parser: {};
|
|
67
|
+
response: {};
|
|
68
|
+
}, {
|
|
69
|
+
[x: string]: {
|
|
70
|
+
get: {
|
|
71
|
+
body: unknown;
|
|
72
|
+
params: {};
|
|
73
|
+
query: unknown;
|
|
74
|
+
headers: unknown;
|
|
75
|
+
response: {
|
|
76
|
+
200: VoiceProviderCapabilityReport<TProvider>;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
}, {
|
|
81
|
+
derive: {};
|
|
82
|
+
resolve: {};
|
|
83
|
+
schema: {};
|
|
84
|
+
standaloneSchema: {};
|
|
85
|
+
response: {};
|
|
86
|
+
}, {
|
|
87
|
+
derive: {};
|
|
88
|
+
resolve: {};
|
|
89
|
+
schema: {};
|
|
90
|
+
standaloneSchema: {};
|
|
91
|
+
response: {};
|
|
92
|
+
}>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Elysia } from 'elysia';
|
|
2
|
+
import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from './trace';
|
|
3
|
+
export type VoiceProviderHealthStatus = 'healthy' | 'idle' | 'rate-limited' | 'degraded' | 'recoverable' | 'suppressed';
|
|
4
|
+
export type VoiceProviderHealthSummary<TProvider extends string = string> = {
|
|
5
|
+
averageElapsedMs?: number;
|
|
6
|
+
errorCount: number;
|
|
7
|
+
fallbackCount: number;
|
|
8
|
+
lastError?: string;
|
|
9
|
+
lastErrorAt?: number;
|
|
10
|
+
lastSuccessAt?: number;
|
|
11
|
+
provider: TProvider;
|
|
12
|
+
rateLimited: boolean;
|
|
13
|
+
recommended: boolean;
|
|
14
|
+
runCount: number;
|
|
15
|
+
status: VoiceProviderHealthStatus;
|
|
16
|
+
suppressionRemainingMs?: number;
|
|
17
|
+
suppressedUntil?: number;
|
|
18
|
+
timeoutCount: number;
|
|
19
|
+
};
|
|
20
|
+
export type VoiceProviderHealthSummaryOptions<TProvider extends string = string> = {
|
|
21
|
+
events?: StoredVoiceTraceEvent[];
|
|
22
|
+
now?: number;
|
|
23
|
+
providers?: readonly TProvider[];
|
|
24
|
+
store?: VoiceTraceEventStore;
|
|
25
|
+
};
|
|
26
|
+
export type VoiceProviderHealthHandlerOptions<TProvider extends string = string> = VoiceProviderHealthSummaryOptions<TProvider>;
|
|
27
|
+
export type VoiceProviderHealthHTMLHandlerOptions<TProvider extends string = string> = VoiceProviderHealthHandlerOptions<TProvider> & {
|
|
28
|
+
headers?: HeadersInit;
|
|
29
|
+
render?: (providers: VoiceProviderHealthSummary<TProvider>[]) => string | Promise<string>;
|
|
30
|
+
};
|
|
31
|
+
export type VoiceProviderHealthRoutesOptions<TProvider extends string = string> = VoiceProviderHealthHTMLHandlerOptions<TProvider> & {
|
|
32
|
+
htmlPath?: false | string;
|
|
33
|
+
name?: string;
|
|
34
|
+
path?: string;
|
|
35
|
+
};
|
|
36
|
+
export declare const summarizeVoiceProviderHealth: <TProvider extends string = string>(input: StoredVoiceTraceEvent[] | VoiceProviderHealthSummaryOptions<TProvider>) => Promise<VoiceProviderHealthSummary<TProvider>[]>;
|
|
37
|
+
export declare const renderVoiceProviderHealthHTML: (providers: VoiceProviderHealthSummary[]) => string;
|
|
38
|
+
export declare const createVoiceProviderHealthJSONHandler: <TProvider extends string = string>(options: VoiceProviderHealthHandlerOptions<TProvider>) => () => Promise<VoiceProviderHealthSummary<TProvider>[]>;
|
|
39
|
+
export declare const createVoiceProviderHealthHTMLHandler: <TProvider extends string = string>(options: VoiceProviderHealthHTMLHandlerOptions<TProvider>) => () => Promise<Response>;
|
|
40
|
+
export declare const createVoiceProviderHealthRoutes: <TProvider extends string = string>(options: VoiceProviderHealthRoutesOptions<TProvider>) => Elysia<"", {
|
|
41
|
+
decorator: {};
|
|
42
|
+
store: {};
|
|
43
|
+
derive: {};
|
|
44
|
+
resolve: {};
|
|
45
|
+
}, {
|
|
46
|
+
typebox: {};
|
|
47
|
+
error: {};
|
|
48
|
+
}, {
|
|
49
|
+
schema: {};
|
|
50
|
+
standaloneSchema: {};
|
|
51
|
+
macro: {};
|
|
52
|
+
macroFn: {};
|
|
53
|
+
parser: {};
|
|
54
|
+
response: {};
|
|
55
|
+
}, {
|
|
56
|
+
[x: string]: {
|
|
57
|
+
get: {
|
|
58
|
+
body: unknown;
|
|
59
|
+
params: {};
|
|
60
|
+
query: unknown;
|
|
61
|
+
headers: unknown;
|
|
62
|
+
response: {
|
|
63
|
+
200: VoiceProviderHealthSummary<TProvider>[];
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
}, {
|
|
68
|
+
derive: {};
|
|
69
|
+
resolve: {};
|
|
70
|
+
schema: {};
|
|
71
|
+
standaloneSchema: {};
|
|
72
|
+
response: {};
|
|
73
|
+
}, {
|
|
74
|
+
derive: {};
|
|
75
|
+
resolve: {};
|
|
76
|
+
schema: {};
|
|
77
|
+
standaloneSchema: {};
|
|
78
|
+
response: {};
|
|
79
|
+
}>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type VoiceRoutingEvent, type VoiceRoutingEventKind } from './resilienceRoutes';
|
|
2
|
+
import type { StoredVoiceTraceEvent, VoiceTraceEventStore } from './trace';
|
|
3
|
+
export type VoiceProviderRoutingStatus = 'error' | 'fallback' | 'success';
|
|
4
|
+
export type VoiceProviderRoutingExpectation = {
|
|
5
|
+
fallbackProvider?: string;
|
|
6
|
+
kind?: VoiceRoutingEventKind;
|
|
7
|
+
operation?: string;
|
|
8
|
+
provider?: string;
|
|
9
|
+
selectedProvider?: string;
|
|
10
|
+
status?: VoiceProviderRoutingStatus;
|
|
11
|
+
};
|
|
12
|
+
export type VoiceProviderRoutingContractDefinition = {
|
|
13
|
+
description?: string;
|
|
14
|
+
expect: VoiceProviderRoutingExpectation[];
|
|
15
|
+
id: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
scenarioId?: string;
|
|
18
|
+
sessionId?: string;
|
|
19
|
+
};
|
|
20
|
+
export type VoiceProviderRoutingContractIssue = {
|
|
21
|
+
code: string;
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
export type VoiceProviderRoutingContractReport = {
|
|
25
|
+
contractId: string;
|
|
26
|
+
events: VoiceRoutingEvent[];
|
|
27
|
+
issues: VoiceProviderRoutingContractIssue[];
|
|
28
|
+
pass: boolean;
|
|
29
|
+
scenarioId?: string;
|
|
30
|
+
sessionId?: string;
|
|
31
|
+
};
|
|
32
|
+
export type VoiceProviderRoutingContractRunOptions = {
|
|
33
|
+
contract: VoiceProviderRoutingContractDefinition;
|
|
34
|
+
events?: StoredVoiceTraceEvent[] | VoiceRoutingEvent[];
|
|
35
|
+
store?: VoiceTraceEventStore;
|
|
36
|
+
};
|
|
37
|
+
export declare const runVoiceProviderRoutingContract: (options: VoiceProviderRoutingContractRunOptions) => Promise<VoiceProviderRoutingContractReport>;
|
|
38
|
+
export declare const assertVoiceProviderRoutingContract: (options: VoiceProviderRoutingContractRunOptions) => Promise<VoiceProviderRoutingContractReport>;
|