@absolutejs/voice 0.0.22-beta.126 → 0.0.22-beta.127
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 +202 -26
- package/dist/agent.d.ts +5 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +16 -16
- package/dist/angular/voice-ops-status.service.d.ts +12 -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/client/index.d.ts +2 -2
- package/dist/client/index.js +11 -11
- package/dist/client/opsStatus.d.ts +19 -0
- package/dist/client/opsStatusWidget.d.ts +7 -7
- package/dist/dataControl.d.ts +47 -0
- package/dist/demoReadyRoutes.d.ts +98 -0
- package/dist/fileStore.d.ts +8 -2
- package/dist/index.d.ts +25 -6
- package/dist/index.js +10602 -8598
- package/dist/opsStatus.d.ts +65 -0
- package/dist/opsStatusRoutes.d.ts +33 -0
- package/dist/phoneAgent.d.ts +4 -0
- package/dist/phoneAgentProductionSmoke.d.ts +115 -0
- package/dist/postgresStore.d.ts +8 -2
- package/dist/productionReadiness.d.ts +82 -0
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +16 -16
- package/dist/react/useVoiceOpsStatus.d.ts +8 -0
- package/dist/sqliteStore.d.ts +8 -2
- package/dist/svelte/createVoiceOpsStatus.d.ts +2 -2
- package/dist/svelte/index.d.ts +0 -1
- package/dist/svelte/index.js +72 -75
- package/dist/traceDeliveryRoutes.d.ts +86 -0
- package/dist/vue/index.d.ts +1 -1
- package/dist/vue/index.js +15 -15
- package/dist/vue/useVoiceOpsStatus.d.ts +9 -0
- package/package.json +1 -1
- package/dist/angular/voice-app-kit-status.service.d.ts +0 -12
- package/dist/appKit.d.ts +0 -100
- package/dist/client/appKitStatus.d.ts +0 -19
- package/dist/react/useVoiceAppKitStatus.d.ts +0 -8
- package/dist/svelte/createVoiceAppKitStatus.d.ts +0 -8
- package/dist/vue/useVoiceAppKitStatus.d.ts +0 -9
package/dist/svelte/index.js
CHANGED
|
@@ -69,16 +69,24 @@ var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
|
69
69
|
return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
-
// src/client/
|
|
73
|
-
var
|
|
72
|
+
// src/client/campaignDialerProof.ts
|
|
73
|
+
var fetchVoiceCampaignDialerProofStatus = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
|
|
74
74
|
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
75
75
|
const response = await fetchImpl(path);
|
|
76
76
|
if (!response.ok) {
|
|
77
|
-
throw new Error(`Voice
|
|
77
|
+
throw new Error(`Voice campaign dialer proof status failed: HTTP ${response.status}`);
|
|
78
78
|
}
|
|
79
79
|
return await response.json();
|
|
80
80
|
};
|
|
81
|
-
var
|
|
81
|
+
var runVoiceCampaignDialerProofAction = async (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
|
|
82
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
83
|
+
const response = await fetchImpl(path, { method: "POST" });
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
throw new Error(`Voice campaign dialer proof failed: HTTP ${response.status}`);
|
|
86
|
+
}
|
|
87
|
+
return await response.json();
|
|
88
|
+
};
|
|
89
|
+
var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
|
|
82
90
|
const listeners = new Set;
|
|
83
91
|
let closed = false;
|
|
84
92
|
let timer;
|
|
@@ -93,20 +101,50 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
|
|
|
93
101
|
};
|
|
94
102
|
const refresh = async () => {
|
|
95
103
|
if (closed) {
|
|
96
|
-
return snapshot.
|
|
104
|
+
return snapshot.status;
|
|
97
105
|
}
|
|
98
|
-
snapshot = {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
snapshot = { ...snapshot, error: null, isLoading: true };
|
|
107
|
+
emit();
|
|
108
|
+
try {
|
|
109
|
+
const status = await fetchVoiceCampaignDialerProofStatus(path, options);
|
|
110
|
+
snapshot = {
|
|
111
|
+
...snapshot,
|
|
112
|
+
error: null,
|
|
113
|
+
isLoading: false,
|
|
114
|
+
status,
|
|
115
|
+
updatedAt: Date.now()
|
|
116
|
+
};
|
|
117
|
+
emit();
|
|
118
|
+
return status;
|
|
119
|
+
} catch (error) {
|
|
120
|
+
snapshot = {
|
|
121
|
+
...snapshot,
|
|
122
|
+
error: error instanceof Error ? error.message : String(error),
|
|
123
|
+
isLoading: false
|
|
124
|
+
};
|
|
125
|
+
emit();
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const runProof = async () => {
|
|
130
|
+
const runPath = options.runPath ?? snapshot.status?.runPath ?? path;
|
|
131
|
+
snapshot = { ...snapshot, error: null, isLoading: true };
|
|
103
132
|
emit();
|
|
104
133
|
try {
|
|
105
|
-
const report = await
|
|
134
|
+
const report = await runVoiceCampaignDialerProofAction(runPath, options);
|
|
106
135
|
snapshot = {
|
|
136
|
+
...snapshot,
|
|
107
137
|
error: null,
|
|
108
138
|
isLoading: false,
|
|
109
139
|
report,
|
|
140
|
+
status: {
|
|
141
|
+
generatedAt: Date.now(),
|
|
142
|
+
mode: report.mode,
|
|
143
|
+
ok: report.ok,
|
|
144
|
+
providers: report.providers.map((provider) => provider.provider),
|
|
145
|
+
runPath,
|
|
146
|
+
safe: true
|
|
147
|
+
},
|
|
110
148
|
updatedAt: Date.now()
|
|
111
149
|
};
|
|
112
150
|
emit();
|
|
@@ -129,7 +167,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
|
|
|
129
167
|
}
|
|
130
168
|
listeners.clear();
|
|
131
169
|
};
|
|
132
|
-
if (
|
|
170
|
+
if (options.intervalMs && options.intervalMs > 0) {
|
|
133
171
|
timer = setInterval(() => {
|
|
134
172
|
refresh().catch(() => {});
|
|
135
173
|
}, options.intervalMs);
|
|
@@ -139,6 +177,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
|
|
|
139
177
|
getServerSnapshot: () => snapshot,
|
|
140
178
|
getSnapshot: () => snapshot,
|
|
141
179
|
refresh,
|
|
180
|
+
runProof,
|
|
142
181
|
subscribe: (listener) => {
|
|
143
182
|
listeners.add(listener);
|
|
144
183
|
return () => {
|
|
@@ -148,26 +187,18 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
|
|
|
148
187
|
};
|
|
149
188
|
};
|
|
150
189
|
|
|
151
|
-
// src/svelte/
|
|
152
|
-
var
|
|
153
|
-
// src/client/
|
|
154
|
-
var
|
|
190
|
+
// src/svelte/createVoiceCampaignDialerProof.ts
|
|
191
|
+
var createVoiceCampaignDialerProof = (path = "/api/voice/campaigns/dialer-proof", options = {}) => createVoiceCampaignDialerProofStore(path, options);
|
|
192
|
+
// src/client/opsStatus.ts
|
|
193
|
+
var fetchVoiceOpsStatus = async (path = "/api/voice/ops-status", options = {}) => {
|
|
155
194
|
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
156
195
|
const response = await fetchImpl(path);
|
|
157
196
|
if (!response.ok) {
|
|
158
|
-
throw new Error(`Voice
|
|
197
|
+
throw new Error(`Voice ops status failed: HTTP ${response.status}`);
|
|
159
198
|
}
|
|
160
199
|
return await response.json();
|
|
161
200
|
};
|
|
162
|
-
var
|
|
163
|
-
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
164
|
-
const response = await fetchImpl(path, { method: "POST" });
|
|
165
|
-
if (!response.ok) {
|
|
166
|
-
throw new Error(`Voice campaign dialer proof failed: HTTP ${response.status}`);
|
|
167
|
-
}
|
|
168
|
-
return await response.json();
|
|
169
|
-
};
|
|
170
|
-
var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-proof", options = {}) => {
|
|
201
|
+
var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) => {
|
|
171
202
|
const listeners = new Set;
|
|
172
203
|
let closed = false;
|
|
173
204
|
let timer;
|
|
@@ -182,50 +213,20 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
|
|
|
182
213
|
};
|
|
183
214
|
const refresh = async () => {
|
|
184
215
|
if (closed) {
|
|
185
|
-
return snapshot.
|
|
186
|
-
}
|
|
187
|
-
snapshot = { ...snapshot, error: null, isLoading: true };
|
|
188
|
-
emit();
|
|
189
|
-
try {
|
|
190
|
-
const status = await fetchVoiceCampaignDialerProofStatus(path, options);
|
|
191
|
-
snapshot = {
|
|
192
|
-
...snapshot,
|
|
193
|
-
error: null,
|
|
194
|
-
isLoading: false,
|
|
195
|
-
status,
|
|
196
|
-
updatedAt: Date.now()
|
|
197
|
-
};
|
|
198
|
-
emit();
|
|
199
|
-
return status;
|
|
200
|
-
} catch (error) {
|
|
201
|
-
snapshot = {
|
|
202
|
-
...snapshot,
|
|
203
|
-
error: error instanceof Error ? error.message : String(error),
|
|
204
|
-
isLoading: false
|
|
205
|
-
};
|
|
206
|
-
emit();
|
|
207
|
-
throw error;
|
|
216
|
+
return snapshot.report;
|
|
208
217
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
218
|
+
snapshot = {
|
|
219
|
+
...snapshot,
|
|
220
|
+
error: null,
|
|
221
|
+
isLoading: true
|
|
222
|
+
};
|
|
213
223
|
emit();
|
|
214
224
|
try {
|
|
215
|
-
const report = await
|
|
225
|
+
const report = await fetchVoiceOpsStatus(path, options);
|
|
216
226
|
snapshot = {
|
|
217
|
-
...snapshot,
|
|
218
227
|
error: null,
|
|
219
228
|
isLoading: false,
|
|
220
229
|
report,
|
|
221
|
-
status: {
|
|
222
|
-
generatedAt: Date.now(),
|
|
223
|
-
mode: report.mode,
|
|
224
|
-
ok: report.ok,
|
|
225
|
-
providers: report.providers.map((provider) => provider.provider),
|
|
226
|
-
runPath,
|
|
227
|
-
safe: true
|
|
228
|
-
},
|
|
229
230
|
updatedAt: Date.now()
|
|
230
231
|
};
|
|
231
232
|
emit();
|
|
@@ -248,7 +249,7 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
|
|
|
248
249
|
}
|
|
249
250
|
listeners.clear();
|
|
250
251
|
};
|
|
251
|
-
if (options.intervalMs && options.intervalMs > 0) {
|
|
252
|
+
if (typeof window !== "undefined" && options.intervalMs && options.intervalMs > 0) {
|
|
252
253
|
timer = setInterval(() => {
|
|
253
254
|
refresh().catch(() => {});
|
|
254
255
|
}, options.intervalMs);
|
|
@@ -258,7 +259,6 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
|
|
|
258
259
|
getServerSnapshot: () => snapshot,
|
|
259
260
|
getSnapshot: () => snapshot,
|
|
260
261
|
refresh,
|
|
261
|
-
runProof,
|
|
262
262
|
subscribe: (listener) => {
|
|
263
263
|
listeners.add(listener);
|
|
264
264
|
return () => {
|
|
@@ -268,11 +268,9 @@ var createVoiceCampaignDialerProofStore = (path = "/api/voice/campaigns/dialer-p
|
|
|
268
268
|
};
|
|
269
269
|
};
|
|
270
270
|
|
|
271
|
-
// src/svelte/createVoiceCampaignDialerProof.ts
|
|
272
|
-
var createVoiceCampaignDialerProof = (path = "/api/voice/campaigns/dialer-proof", options = {}) => createVoiceCampaignDialerProofStore(path, options);
|
|
273
271
|
// src/client/opsStatusWidget.ts
|
|
274
272
|
var DEFAULT_TITLE = "Voice Ops Status";
|
|
275
|
-
var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from
|
|
273
|
+
var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from your AbsoluteJS voice app.";
|
|
276
274
|
var SURFACE_LABELS = {
|
|
277
275
|
handoffs: "Handoffs",
|
|
278
276
|
providers: "Providers",
|
|
@@ -357,8 +355,8 @@ var renderVoiceOpsStatusHTML = (snapshot, options = {}) => {
|
|
|
357
355
|
</section>`;
|
|
358
356
|
};
|
|
359
357
|
var getVoiceOpsStatusCSS = () => `.absolute-voice-ops-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-ops-status--fail,.absolute-voice-ops-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-ops-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-ops-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-ops-status__label{font-size:28px;line-height:1}.absolute-voice-ops-status__description{color:#514733;margin:12px 0 0}.absolute-voice-ops-status__summary,.absolute-voice-ops-status__links{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.absolute-voice-ops-status__summary span,.absolute-voice-ops-status__links a{border:1px solid #e6ddca;border-radius:999px;color:inherit;padding:6px 10px;text-decoration:none}.absolute-voice-ops-status__surfaces{display:grid;gap:8px;list-style:none;margin:16px 0 0;padding:0}.absolute-voice-ops-status__surface{align-items:center;background:#fff;border:1px solid #eee4d2;border-radius:14px;display:flex;gap:12px;justify-content:space-between;padding:10px 12px}.absolute-voice-ops-status__surface--fail{border-color:#f2a7a7}.absolute-voice-ops-status__surface span{color:#655944}.absolute-voice-ops-status__error{color:#9f1239;font-weight:700}`;
|
|
360
|
-
var mountVoiceOpsStatus = (element, path = "/
|
|
361
|
-
const store =
|
|
358
|
+
var mountVoiceOpsStatus = (element, path = "/api/voice/ops-status", options = {}) => {
|
|
359
|
+
const store = createVoiceOpsStatusStore(path, options);
|
|
362
360
|
const render = () => {
|
|
363
361
|
element.innerHTML = renderVoiceOpsStatusHTML(store.getSnapshot(), options);
|
|
364
362
|
};
|
|
@@ -381,7 +379,7 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
|
|
|
381
379
|
mounted;
|
|
382
380
|
connectedCallback() {
|
|
383
381
|
const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
|
|
384
|
-
this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/
|
|
382
|
+
this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/api/voice/ops-status", {
|
|
385
383
|
description: this.getAttribute("description") ?? undefined,
|
|
386
384
|
includeLinks: this.getAttribute("include-links") !== "false",
|
|
387
385
|
intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
|
|
@@ -396,8 +394,8 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
|
|
|
396
394
|
};
|
|
397
395
|
|
|
398
396
|
// src/svelte/createVoiceOpsStatus.ts
|
|
399
|
-
var createVoiceOpsStatus = (path = "/
|
|
400
|
-
const store =
|
|
397
|
+
var createVoiceOpsStatus = (path = "/api/voice/ops-status", options = {}) => {
|
|
398
|
+
const store = createVoiceOpsStatusStore(path, options);
|
|
401
399
|
return {
|
|
402
400
|
close: store.close,
|
|
403
401
|
getHTML: () => renderVoiceOpsStatusHTML(store.getSnapshot(), options),
|
|
@@ -3017,6 +3015,5 @@ export {
|
|
|
3017
3015
|
createVoiceProviderCapabilities,
|
|
3018
3016
|
createVoiceOpsStatus,
|
|
3019
3017
|
createVoiceController,
|
|
3020
|
-
createVoiceCampaignDialerProof
|
|
3021
|
-
createVoiceAppKitStatus
|
|
3018
|
+
createVoiceCampaignDialerProof
|
|
3022
3019
|
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Elysia } from 'elysia';
|
|
2
|
+
import { type VoiceTraceSinkDeliveryQueueSummary, type VoiceTraceSinkDeliveryWorkerResult } from './queue';
|
|
3
|
+
import type { VoiceTraceSinkDeliveryQueueStatus, VoiceTraceSinkDeliveryRecord, VoiceTraceSinkDeliveryStore } from './trace';
|
|
4
|
+
export type VoiceTraceDeliveryReport = {
|
|
5
|
+
checkedAt: number;
|
|
6
|
+
deliveries: VoiceTraceSinkDeliveryRecord[];
|
|
7
|
+
filter: VoiceTraceDeliveryFilter;
|
|
8
|
+
summary: VoiceTraceSinkDeliveryQueueSummary;
|
|
9
|
+
};
|
|
10
|
+
export type VoiceTraceDeliveryDrainWorker = {
|
|
11
|
+
drain: () => Promise<VoiceTraceSinkDeliveryWorkerResult> | VoiceTraceSinkDeliveryWorkerResult;
|
|
12
|
+
};
|
|
13
|
+
export type VoiceTraceDeliveryDrainReport = VoiceTraceSinkDeliveryWorkerResult & {
|
|
14
|
+
drainedAt: number;
|
|
15
|
+
};
|
|
16
|
+
export type VoiceTraceDeliveryFilter = {
|
|
17
|
+
limit?: number;
|
|
18
|
+
q?: string;
|
|
19
|
+
status?: VoiceTraceSinkDeliveryQueueStatus | 'all';
|
|
20
|
+
};
|
|
21
|
+
export type VoiceTraceDeliveryRoutesOptions = {
|
|
22
|
+
deadLetters?: VoiceTraceSinkDeliveryStore;
|
|
23
|
+
filter?: VoiceTraceDeliveryFilter;
|
|
24
|
+
headers?: HeadersInit;
|
|
25
|
+
htmlPath?: false | string;
|
|
26
|
+
limit?: number;
|
|
27
|
+
name?: string;
|
|
28
|
+
path?: string;
|
|
29
|
+
render?: (report: VoiceTraceDeliveryReport) => string | Promise<string>;
|
|
30
|
+
store: VoiceTraceSinkDeliveryStore;
|
|
31
|
+
title?: string;
|
|
32
|
+
worker?: VoiceTraceDeliveryDrainWorker;
|
|
33
|
+
workerPath?: false | string;
|
|
34
|
+
};
|
|
35
|
+
export declare const resolveVoiceTraceDeliveryFilter: (query?: Record<string, unknown>, base?: VoiceTraceDeliveryFilter) => VoiceTraceDeliveryFilter;
|
|
36
|
+
export declare const buildVoiceTraceDeliveryReport: (options: VoiceTraceDeliveryRoutesOptions, filter?: VoiceTraceDeliveryFilter) => Promise<VoiceTraceDeliveryReport>;
|
|
37
|
+
export declare const renderVoiceTraceDeliveryHTML: (report: VoiceTraceDeliveryReport, options?: {
|
|
38
|
+
title?: string;
|
|
39
|
+
workerPath?: false | string;
|
|
40
|
+
}) => string;
|
|
41
|
+
export declare const createVoiceTraceDeliveryJSONHandler: (options: VoiceTraceDeliveryRoutesOptions) => ({ query }: {
|
|
42
|
+
query?: Record<string, string | undefined>;
|
|
43
|
+
}) => Promise<VoiceTraceDeliveryReport>;
|
|
44
|
+
export declare const createVoiceTraceDeliveryHTMLHandler: (options: VoiceTraceDeliveryRoutesOptions) => ({ query }: {
|
|
45
|
+
query?: Record<string, string | undefined>;
|
|
46
|
+
}) => Promise<Response>;
|
|
47
|
+
export declare const createVoiceTraceDeliveryRoutes: (options: VoiceTraceDeliveryRoutesOptions) => Elysia<"", {
|
|
48
|
+
decorator: {};
|
|
49
|
+
store: {};
|
|
50
|
+
derive: {};
|
|
51
|
+
resolve: {};
|
|
52
|
+
}, {
|
|
53
|
+
typebox: {};
|
|
54
|
+
error: {};
|
|
55
|
+
}, {
|
|
56
|
+
schema: {};
|
|
57
|
+
standaloneSchema: {};
|
|
58
|
+
macro: {};
|
|
59
|
+
macroFn: {};
|
|
60
|
+
parser: {};
|
|
61
|
+
response: {};
|
|
62
|
+
}, {
|
|
63
|
+
[x: string]: {
|
|
64
|
+
get: {
|
|
65
|
+
body: unknown;
|
|
66
|
+
params: {};
|
|
67
|
+
query: unknown;
|
|
68
|
+
headers: unknown;
|
|
69
|
+
response: {
|
|
70
|
+
200: VoiceTraceDeliveryReport;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
}, {
|
|
75
|
+
derive: {};
|
|
76
|
+
resolve: {};
|
|
77
|
+
schema: {};
|
|
78
|
+
standaloneSchema: {};
|
|
79
|
+
response: {};
|
|
80
|
+
}, {
|
|
81
|
+
derive: {};
|
|
82
|
+
resolve: {};
|
|
83
|
+
schema: {};
|
|
84
|
+
standaloneSchema: {};
|
|
85
|
+
response: {};
|
|
86
|
+
}>;
|
package/dist/vue/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { VoiceProviderStatus } from './VoiceProviderStatus';
|
|
|
5
5
|
export { VoiceRoutingStatus } from './VoiceRoutingStatus';
|
|
6
6
|
export { VoiceTurnLatency } from './VoiceTurnLatency';
|
|
7
7
|
export { VoiceTurnQuality } from './VoiceTurnQuality';
|
|
8
|
-
export {
|
|
8
|
+
export { useVoiceOpsStatus } from './useVoiceOpsStatus';
|
|
9
9
|
export { useVoiceCampaignDialerProof } from './useVoiceCampaignDialerProof';
|
|
10
10
|
export { useVoiceStream } from './useVoiceStream';
|
|
11
11
|
export { useVoiceController } from './useVoiceController';
|
package/dist/vue/index.js
CHANGED
|
@@ -72,16 +72,16 @@ var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
|
72
72
|
// src/vue/VoiceOpsStatus.ts
|
|
73
73
|
import { defineComponent, h } from "vue";
|
|
74
74
|
|
|
75
|
-
// src/client/
|
|
76
|
-
var
|
|
75
|
+
// src/client/opsStatus.ts
|
|
76
|
+
var fetchVoiceOpsStatus = async (path = "/api/voice/ops-status", options = {}) => {
|
|
77
77
|
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
78
78
|
const response = await fetchImpl(path);
|
|
79
79
|
if (!response.ok) {
|
|
80
|
-
throw new Error(`Voice
|
|
80
|
+
throw new Error(`Voice ops status failed: HTTP ${response.status}`);
|
|
81
81
|
}
|
|
82
82
|
return await response.json();
|
|
83
83
|
};
|
|
84
|
-
var
|
|
84
|
+
var createVoiceOpsStatusStore = (path = "/api/voice/ops-status", options = {}) => {
|
|
85
85
|
const listeners = new Set;
|
|
86
86
|
let closed = false;
|
|
87
87
|
let timer;
|
|
@@ -105,7 +105,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
|
|
|
105
105
|
};
|
|
106
106
|
emit();
|
|
107
107
|
try {
|
|
108
|
-
const report = await
|
|
108
|
+
const report = await fetchVoiceOpsStatus(path, options);
|
|
109
109
|
snapshot = {
|
|
110
110
|
error: null,
|
|
111
111
|
isLoading: false,
|
|
@@ -153,7 +153,7 @@ var createVoiceAppKitStatusStore = (path = "/app-kit/status", options = {}) => {
|
|
|
153
153
|
|
|
154
154
|
// src/client/opsStatusWidget.ts
|
|
155
155
|
var DEFAULT_TITLE = "Voice Ops Status";
|
|
156
|
-
var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from
|
|
156
|
+
var DEFAULT_DESCRIPTION = "Certified workflow, provider, and handoff readiness from your AbsoluteJS voice app.";
|
|
157
157
|
var SURFACE_LABELS = {
|
|
158
158
|
handoffs: "Handoffs",
|
|
159
159
|
providers: "Providers",
|
|
@@ -238,8 +238,8 @@ var renderVoiceOpsStatusHTML = (snapshot, options = {}) => {
|
|
|
238
238
|
</section>`;
|
|
239
239
|
};
|
|
240
240
|
var getVoiceOpsStatusCSS = () => `.absolute-voice-ops-status{border:1px solid #d8d2c4;border-radius:20px;background:#fffaf0;color:#16130d;padding:18px;box-shadow:0 18px 40px rgba(47,37,18,.12);font-family:inherit}.absolute-voice-ops-status--fail,.absolute-voice-ops-status--error{border-color:#f2a7a7;background:#fff5f3}.absolute-voice-ops-status__header{align-items:start;display:flex;gap:12px;justify-content:space-between}.absolute-voice-ops-status__eyebrow{color:#73664f;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.absolute-voice-ops-status__label{font-size:28px;line-height:1}.absolute-voice-ops-status__description{color:#514733;margin:12px 0 0}.absolute-voice-ops-status__summary,.absolute-voice-ops-status__links{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.absolute-voice-ops-status__summary span,.absolute-voice-ops-status__links a{border:1px solid #e6ddca;border-radius:999px;color:inherit;padding:6px 10px;text-decoration:none}.absolute-voice-ops-status__surfaces{display:grid;gap:8px;list-style:none;margin:16px 0 0;padding:0}.absolute-voice-ops-status__surface{align-items:center;background:#fff;border:1px solid #eee4d2;border-radius:14px;display:flex;gap:12px;justify-content:space-between;padding:10px 12px}.absolute-voice-ops-status__surface--fail{border-color:#f2a7a7}.absolute-voice-ops-status__surface span{color:#655944}.absolute-voice-ops-status__error{color:#9f1239;font-weight:700}`;
|
|
241
|
-
var mountVoiceOpsStatus = (element, path = "/
|
|
242
|
-
const store =
|
|
241
|
+
var mountVoiceOpsStatus = (element, path = "/api/voice/ops-status", options = {}) => {
|
|
242
|
+
const store = createVoiceOpsStatusStore(path, options);
|
|
243
243
|
const render = () => {
|
|
244
244
|
element.innerHTML = renderVoiceOpsStatusHTML(store.getSnapshot(), options);
|
|
245
245
|
};
|
|
@@ -262,7 +262,7 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
|
|
|
262
262
|
mounted;
|
|
263
263
|
connectedCallback() {
|
|
264
264
|
const intervalMs = Number(this.getAttribute("interval-ms") ?? 5000);
|
|
265
|
-
this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/
|
|
265
|
+
this.mounted = mountVoiceOpsStatus(this, this.getAttribute("path") ?? "/api/voice/ops-status", {
|
|
266
266
|
description: this.getAttribute("description") ?? undefined,
|
|
267
267
|
includeLinks: this.getAttribute("include-links") !== "false",
|
|
268
268
|
intervalMs: Number.isFinite(intervalMs) ? intervalMs : 5000,
|
|
@@ -276,10 +276,10 @@ var defineVoiceOpsStatusElement = (tagName = "absolute-voice-ops-status") => {
|
|
|
276
276
|
});
|
|
277
277
|
};
|
|
278
278
|
|
|
279
|
-
// src/vue/
|
|
279
|
+
// src/vue/useVoiceOpsStatus.ts
|
|
280
280
|
import { onUnmounted, ref, shallowRef } from "vue";
|
|
281
|
-
function
|
|
282
|
-
const store =
|
|
281
|
+
function useVoiceOpsStatus(path = "/api/voice/ops-status", options = {}) {
|
|
282
|
+
const store = createVoiceOpsStatusStore(path, options);
|
|
283
283
|
const error = ref(null);
|
|
284
284
|
const isLoading = ref(false);
|
|
285
285
|
const report = shallowRef(undefined);
|
|
@@ -320,7 +320,7 @@ var VoiceOpsStatus = defineComponent({
|
|
|
320
320
|
},
|
|
321
321
|
intervalMs: Number,
|
|
322
322
|
path: {
|
|
323
|
-
default: "/
|
|
323
|
+
default: "/api/voice/ops-status",
|
|
324
324
|
type: String
|
|
325
325
|
},
|
|
326
326
|
title: String
|
|
@@ -332,7 +332,7 @@ var VoiceOpsStatus = defineComponent({
|
|
|
332
332
|
intervalMs: props.intervalMs,
|
|
333
333
|
title: props.title
|
|
334
334
|
};
|
|
335
|
-
const status =
|
|
335
|
+
const status = useVoiceOpsStatus(props.path, options);
|
|
336
336
|
return () => {
|
|
337
337
|
const model = createVoiceOpsStatusViewModel({
|
|
338
338
|
error: status.error.value,
|
|
@@ -3754,9 +3754,9 @@ export {
|
|
|
3754
3754
|
useVoiceProviderStatus,
|
|
3755
3755
|
useVoiceProviderSimulationControls,
|
|
3756
3756
|
useVoiceProviderCapabilities,
|
|
3757
|
+
useVoiceOpsStatus,
|
|
3757
3758
|
useVoiceController,
|
|
3758
3759
|
useVoiceCampaignDialerProof,
|
|
3759
|
-
useVoiceAppKitStatus,
|
|
3760
3760
|
VoiceTurnQuality,
|
|
3761
3761
|
VoiceTurnLatency,
|
|
3762
3762
|
VoiceRoutingStatus,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type VoiceOpsStatusClientOptions } from '../client/opsStatus';
|
|
2
|
+
import type { VoiceOpsStatusReport } from '../opsStatus';
|
|
3
|
+
export declare function useVoiceOpsStatus(path?: string, options?: VoiceOpsStatusClientOptions): {
|
|
4
|
+
error: import("vue").Ref<string | null, string | null>;
|
|
5
|
+
isLoading: import("vue").Ref<boolean, boolean>;
|
|
6
|
+
refresh: () => Promise<VoiceOpsStatusReport | undefined>;
|
|
7
|
+
report: import("vue").ShallowRef<VoiceOpsStatusReport | undefined, VoiceOpsStatusReport | undefined>;
|
|
8
|
+
updatedAt: import("vue").Ref<number | undefined, number | undefined>;
|
|
9
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
|
|
2
|
-
import type { VoiceAppKitStatusReport } from '../appKit';
|
|
3
|
-
export declare class VoiceAppKitStatusService {
|
|
4
|
-
connect(path?: string, options?: VoiceAppKitStatusClientOptions): {
|
|
5
|
-
close: () => void;
|
|
6
|
-
error: import("@angular/core").Signal<string | null>;
|
|
7
|
-
isLoading: import("@angular/core").Signal<boolean>;
|
|
8
|
-
refresh: () => Promise<VoiceAppKitStatusReport | undefined>;
|
|
9
|
-
report: import("@angular/core").Signal<VoiceAppKitStatusReport | undefined>;
|
|
10
|
-
updatedAt: import("@angular/core").Signal<number | undefined>;
|
|
11
|
-
};
|
|
12
|
-
}
|
package/dist/appKit.d.ts
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { Elysia } from 'elysia';
|
|
2
|
-
import { type VoiceAssistantHealthRoutesOptions } from './assistantHealth';
|
|
3
|
-
import { type VoiceBargeInRoutesOptions } from './bargeInRoutes';
|
|
4
|
-
import { type VoiceDiagnosticsRoutesOptions } from './diagnosticsRoutes';
|
|
5
|
-
import { type VoiceEvalRoutesOptions, type VoiceEvalLink } from './evalRoutes';
|
|
6
|
-
import { type VoiceHandoffHealthRoutesOptions } from './handoffHealth';
|
|
7
|
-
import { type VoiceOpsConsoleRoutesOptions } from './opsConsoleRoutes';
|
|
8
|
-
import { type VoiceProviderHealthRoutesOptions } from './providerHealth';
|
|
9
|
-
import { type VoiceProviderCapabilityRoutesOptions } from './providerCapabilities';
|
|
10
|
-
import { type VoiceProductionReadinessRoutesOptions } from './productionReadiness';
|
|
11
|
-
import { type VoiceQualityRoutesOptions } from './qualityRoutes';
|
|
12
|
-
import { type VoiceResilienceRoutesOptions } from './resilienceRoutes';
|
|
13
|
-
import { type VoiceSessionListRoutesOptions, type VoiceSessionReplayRoutesOptions } from './sessionReplay';
|
|
14
|
-
import { type VoiceTraceEventStore } from './trace';
|
|
15
|
-
import { type VoiceTraceTimelineRoutesOptions } from './traceTimeline';
|
|
16
|
-
export type VoiceAppKitSurface = 'assistantHealth' | 'bargeIn' | 'diagnostics' | 'evals' | 'handoffs' | 'opsConsole' | 'providerCapabilities' | 'providerHealth' | 'productionReadiness' | 'quality' | 'resilience' | 'sessionReplay' | 'sessions' | 'traceTimeline';
|
|
17
|
-
export type VoiceAppKitLink = VoiceEvalLink & {
|
|
18
|
-
description?: string;
|
|
19
|
-
statusHref?: string;
|
|
20
|
-
};
|
|
21
|
-
export type VoiceAppKitRoutesOptions<TProvider extends string = string> = {
|
|
22
|
-
appStatus?: false | VoiceAppKitStatusOptions;
|
|
23
|
-
assistantHealth?: false | Partial<VoiceAssistantHealthRoutesOptions<TProvider>>;
|
|
24
|
-
bargeIn?: false | Partial<VoiceBargeInRoutesOptions>;
|
|
25
|
-
diagnostics?: false | Partial<Omit<VoiceDiagnosticsRoutesOptions, 'store'>>;
|
|
26
|
-
evals?: false | Partial<VoiceEvalRoutesOptions>;
|
|
27
|
-
handoffs?: false | Partial<VoiceHandoffHealthRoutesOptions>;
|
|
28
|
-
headers?: HeadersInit;
|
|
29
|
-
links?: VoiceAppKitLink[];
|
|
30
|
-
llmProviders?: readonly TProvider[];
|
|
31
|
-
name?: string;
|
|
32
|
-
opsConsole?: false | Partial<VoiceOpsConsoleRoutesOptions>;
|
|
33
|
-
providerCapabilities?: false | Partial<VoiceProviderCapabilityRoutesOptions<TProvider>>;
|
|
34
|
-
providerHealth?: false | Partial<VoiceProviderHealthRoutesOptions<TProvider>>;
|
|
35
|
-
productionReadiness?: false | Partial<VoiceProductionReadinessRoutesOptions>;
|
|
36
|
-
quality?: false | Partial<VoiceQualityRoutesOptions>;
|
|
37
|
-
resilience?: false | Partial<VoiceResilienceRoutesOptions>;
|
|
38
|
-
sessionReplay?: false | Partial<VoiceSessionReplayRoutesOptions>;
|
|
39
|
-
sessions?: false | Partial<VoiceSessionListRoutesOptions>;
|
|
40
|
-
store: VoiceTraceEventStore;
|
|
41
|
-
sttProviders?: readonly string[];
|
|
42
|
-
title?: string;
|
|
43
|
-
traceTimeline?: false | Partial<VoiceTraceTimelineRoutesOptions>;
|
|
44
|
-
ttsProviders?: readonly string[];
|
|
45
|
-
};
|
|
46
|
-
export type VoiceAppKitStatus = 'pass' | 'fail';
|
|
47
|
-
export type VoiceAppKitStatusOptions = {
|
|
48
|
-
include?: {
|
|
49
|
-
handoffs?: boolean;
|
|
50
|
-
providers?: boolean;
|
|
51
|
-
quality?: boolean;
|
|
52
|
-
sessions?: boolean;
|
|
53
|
-
workflows?: boolean;
|
|
54
|
-
};
|
|
55
|
-
path?: string;
|
|
56
|
-
preferFixtureWorkflows?: boolean;
|
|
57
|
-
};
|
|
58
|
-
export type VoiceAppKitStatusReport = {
|
|
59
|
-
checkedAt: number;
|
|
60
|
-
failed: number;
|
|
61
|
-
links: VoiceAppKitLink[];
|
|
62
|
-
passed: number;
|
|
63
|
-
status: VoiceAppKitStatus;
|
|
64
|
-
surfaces: {
|
|
65
|
-
handoffs?: {
|
|
66
|
-
failed: number;
|
|
67
|
-
status: VoiceAppKitStatus;
|
|
68
|
-
total: number;
|
|
69
|
-
};
|
|
70
|
-
providers?: {
|
|
71
|
-
degraded: number;
|
|
72
|
-
status: VoiceAppKitStatus;
|
|
73
|
-
total: number;
|
|
74
|
-
};
|
|
75
|
-
quality?: {
|
|
76
|
-
status: VoiceAppKitStatus;
|
|
77
|
-
};
|
|
78
|
-
sessions?: {
|
|
79
|
-
failed: number;
|
|
80
|
-
status: VoiceAppKitStatus;
|
|
81
|
-
total: number;
|
|
82
|
-
};
|
|
83
|
-
workflows?: {
|
|
84
|
-
failed: number;
|
|
85
|
-
source: 'fixtures' | 'live';
|
|
86
|
-
status: VoiceAppKitStatus;
|
|
87
|
-
total: number;
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
total: number;
|
|
91
|
-
};
|
|
92
|
-
export type VoiceAppKitRoutes<TProvider extends string = string> = {
|
|
93
|
-
links: VoiceAppKitLink[];
|
|
94
|
-
routes: Elysia;
|
|
95
|
-
surfaces: VoiceAppKitSurface[];
|
|
96
|
-
use: Elysia['use'];
|
|
97
|
-
};
|
|
98
|
-
export declare const summarizeVoiceAppKitStatus: <TProvider extends string = string>(options: VoiceAppKitRoutesOptions<TProvider>) => Promise<VoiceAppKitStatusReport>;
|
|
99
|
-
export declare const createVoiceAppKitRoutes: <TProvider extends string = string>(options: VoiceAppKitRoutesOptions<TProvider>) => VoiceAppKitRoutes<TProvider>;
|
|
100
|
-
export declare const createVoiceAppKit: <TProvider extends string = string>(options: VoiceAppKitRoutesOptions<TProvider>) => VoiceAppKitRoutes<TProvider>;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { VoiceAppKitStatusReport } from '../appKit';
|
|
2
|
-
export type VoiceAppKitStatusClientOptions = {
|
|
3
|
-
fetch?: typeof fetch;
|
|
4
|
-
intervalMs?: number;
|
|
5
|
-
};
|
|
6
|
-
export type VoiceAppKitStatusSnapshot = {
|
|
7
|
-
error: string | null;
|
|
8
|
-
isLoading: boolean;
|
|
9
|
-
report?: VoiceAppKitStatusReport;
|
|
10
|
-
updatedAt?: number;
|
|
11
|
-
};
|
|
12
|
-
export declare const fetchVoiceAppKitStatus: (path?: string, options?: Pick<VoiceAppKitStatusClientOptions, "fetch">) => Promise<VoiceAppKitStatusReport>;
|
|
13
|
-
export declare const createVoiceAppKitStatusStore: (path?: string, options?: VoiceAppKitStatusClientOptions) => {
|
|
14
|
-
close: () => void;
|
|
15
|
-
getServerSnapshot: () => VoiceAppKitStatusSnapshot;
|
|
16
|
-
getSnapshot: () => VoiceAppKitStatusSnapshot;
|
|
17
|
-
refresh: () => Promise<VoiceAppKitStatusReport | undefined>;
|
|
18
|
-
subscribe: (listener: () => void) => () => void;
|
|
19
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
|
|
2
|
-
export declare const useVoiceAppKitStatus: (path?: string, options?: VoiceAppKitStatusClientOptions) => {
|
|
3
|
-
refresh: () => Promise<import("..").VoiceAppKitStatusReport | undefined>;
|
|
4
|
-
error: string | null;
|
|
5
|
-
isLoading: boolean;
|
|
6
|
-
report?: import("..").VoiceAppKitStatusReport;
|
|
7
|
-
updatedAt?: number;
|
|
8
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
|
|
2
|
-
export declare const createVoiceAppKitStatus: (path?: string, options?: VoiceAppKitStatusClientOptions) => {
|
|
3
|
-
close: () => void;
|
|
4
|
-
getServerSnapshot: () => import("../client").VoiceAppKitStatusSnapshot;
|
|
5
|
-
getSnapshot: () => import("../client").VoiceAppKitStatusSnapshot;
|
|
6
|
-
refresh: () => Promise<import("..").VoiceAppKitStatusReport | undefined>;
|
|
7
|
-
subscribe: (listener: () => void) => () => void;
|
|
8
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type VoiceAppKitStatusClientOptions } from '../client/appKitStatus';
|
|
2
|
-
import type { VoiceAppKitStatusReport } from '../appKit';
|
|
3
|
-
export declare function useVoiceAppKitStatus(path?: string, options?: VoiceAppKitStatusClientOptions): {
|
|
4
|
-
error: import("vue").Ref<string | null, string | null>;
|
|
5
|
-
isLoading: import("vue").Ref<boolean, boolean>;
|
|
6
|
-
refresh: () => Promise<VoiceAppKitStatusReport | undefined>;
|
|
7
|
-
report: import("vue").ShallowRef<VoiceAppKitStatusReport | undefined, VoiceAppKitStatusReport | undefined>;
|
|
8
|
-
updatedAt: import("vue").Ref<number | undefined, number | undefined>;
|
|
9
|
-
};
|