@absolutejs/voice 0.0.22-beta.144 → 0.0.22-beta.145

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.
@@ -9,6 +9,29 @@ export type VoiceDeliverySinkDescriptor = {
9
9
  id: string;
10
10
  kind: VoiceDeliverySinkKind;
11
11
  label: string;
12
+ mode?: string;
13
+ target?: string;
14
+ };
15
+ export type VoiceDeliverySinkDescriptorInput = {
16
+ description?: string;
17
+ href?: string;
18
+ id?: string;
19
+ kind: VoiceDeliverySinkKind;
20
+ label?: string;
21
+ mode?: string;
22
+ target?: string;
23
+ };
24
+ export type VoiceDeliverySinkPairOptions = {
25
+ auditHref?: string;
26
+ auditId?: string;
27
+ auditLabel?: string;
28
+ description?: string;
29
+ kind: VoiceDeliverySinkKind;
30
+ mode?: string;
31
+ target?: string;
32
+ traceHref?: string;
33
+ traceId?: string;
34
+ traceLabel?: string;
12
35
  };
13
36
  export type VoiceDeliverySinkReport = {
14
37
  auditDeliveries?: VoiceTraceDeliverySinkSurface<VoiceAuditSinkDeliveryQueueSummary>;
@@ -41,6 +64,13 @@ export type VoiceDeliverySinkRoutesOptions = {
41
64
  store: VoiceTraceSinkDeliveryStore;
42
65
  };
43
66
  };
67
+ export declare const createVoiceDeliverySinkDescriptor: (input: VoiceDeliverySinkDescriptorInput) => VoiceDeliverySinkDescriptor;
68
+ export declare const createVoiceFileDeliverySink: (input?: Omit<VoiceDeliverySinkDescriptorInput, "kind">) => VoiceDeliverySinkDescriptor;
69
+ export declare const createVoiceWebhookDeliverySink: (input?: Omit<VoiceDeliverySinkDescriptorInput, "kind">) => VoiceDeliverySinkDescriptor;
70
+ export declare const createVoiceS3DeliverySink: (input?: Omit<VoiceDeliverySinkDescriptorInput, "kind">) => VoiceDeliverySinkDescriptor;
71
+ export declare const createVoicePostgresDeliverySink: (input?: Omit<VoiceDeliverySinkDescriptorInput, "kind">) => VoiceDeliverySinkDescriptor;
72
+ export declare const createVoiceSQLiteDeliverySink: (input?: Omit<VoiceDeliverySinkDescriptorInput, "kind">) => VoiceDeliverySinkDescriptor;
73
+ export declare const createVoiceDeliverySinkPair: (options: VoiceDeliverySinkPairOptions) => VoiceDeliverySinkDescriptor[];
44
74
  export declare const buildVoiceDeliverySinkReport: (options: VoiceDeliverySinkRoutesOptions) => Promise<VoiceDeliverySinkReport>;
45
75
  export declare const renderVoiceDeliverySinkHTML: (report: VoiceDeliverySinkReport, options?: {
46
76
  title?: string;
package/dist/index.d.ts CHANGED
@@ -12,11 +12,11 @@ export { createVoiceBargeInRoutes, renderVoiceBargeInHTML, summarizeVoiceBargeIn
12
12
  export { createVoiceReconnectContractRoutes, renderVoiceReconnectContractHTML, summarizeVoiceReconnectContractSnapshots, runVoiceReconnectContract } from './reconnectContract';
13
13
  export { buildVoiceDiagnosticsMarkdown, createVoiceDiagnosticsRoutes, resolveVoiceDiagnosticsTraceFilter } from './diagnosticsRoutes';
14
14
  export { buildVoiceDemoReadyReport, createVoiceDemoReadyRoutes, renderVoiceDemoReadyHTML } from './demoReadyRoutes';
15
- export { buildVoiceDeliverySinkReport, createVoiceDeliverySinkRoutes, renderVoiceDeliverySinkHTML } from './deliverySinkRoutes';
15
+ export { buildVoiceDeliverySinkReport, createVoiceDeliverySinkDescriptor, createVoiceDeliverySinkPair, createVoiceDeliverySinkRoutes, createVoiceFileDeliverySink, createVoicePostgresDeliverySink, createVoiceS3DeliverySink, createVoiceSQLiteDeliverySink, createVoiceWebhookDeliverySink, renderVoiceDeliverySinkHTML } from './deliverySinkRoutes';
16
16
  export { applyVoiceDataRetentionPolicy, buildVoiceDataRetentionPlan } from './dataControl';
17
17
  export type { VoiceDataRetentionPolicy, VoiceDataRetentionReport, VoiceDataRetentionScope, VoiceDataRetentionScopeReport, VoiceDataRetentionStores } from './dataControl';
18
18
  export type { VoiceDemoReadyReport, VoiceDemoReadyRoutesOptions, VoiceDemoReadySection, VoiceDemoReadyStatus } from './demoReadyRoutes';
19
- export type { VoiceDeliverySinkDescriptor, VoiceDeliverySinkKind, VoiceDeliverySinkReport, VoiceDeliverySinkRoutesOptions, VoiceTraceDeliverySinkSurface } from './deliverySinkRoutes';
19
+ export type { VoiceDeliverySinkDescriptor, VoiceDeliverySinkDescriptorInput, VoiceDeliverySinkKind, VoiceDeliverySinkPairOptions, VoiceDeliverySinkReport, VoiceDeliverySinkRoutesOptions, VoiceTraceDeliverySinkSurface } from './deliverySinkRoutes';
20
20
  export { compareVoiceEvalBaseline, createVoiceFileEvalBaselineStore, createVoiceFileScenarioFixtureStore, createVoiceEvalRoutes, renderVoiceEvalBaselineHTML, renderVoiceEvalHTML, renderVoiceScenarioEvalHTML, renderVoiceScenarioFixtureEvalHTML, runVoiceScenarioEvals, runVoiceScenarioFixtureEvals, runVoiceSessionEvals } from './evalRoutes';
21
21
  export { createVoiceSimulationSuiteRoutes, renderVoiceSimulationSuiteHTML, runVoiceSimulationSuite } from './simulationSuite';
22
22
  export { createVoiceWorkflowContract, createVoiceWorkflowContractHandler, createVoiceWorkflowContractPreset, createVoiceWorkflowScenario, recordVoiceWorkflowContractTrace, validateVoiceWorkflowRouteResult } from './workflowContract';
package/dist/index.js CHANGED
@@ -11348,6 +11348,56 @@ var rollupDeliverySinkStatus = (report) => {
11348
11348
  ];
11349
11349
  return statuses.includes("fail") ? "fail" : statuses.includes("warn") ? "warn" : "pass";
11350
11350
  };
11351
+ var deliverySinkLabel = (kind) => `${String(kind).replaceAll(/[-_]+/g, " ")} sink`;
11352
+ var createVoiceDeliverySinkDescriptor = (input) => ({
11353
+ description: input.description,
11354
+ href: input.href,
11355
+ id: input.id ?? `${input.kind}-sink`,
11356
+ kind: input.kind,
11357
+ label: input.label ?? deliverySinkLabel(input.kind),
11358
+ mode: input.mode,
11359
+ target: input.target
11360
+ });
11361
+ var createVoiceFileDeliverySink = (input = {}) => createVoiceDeliverySinkDescriptor({
11362
+ ...input,
11363
+ kind: "file"
11364
+ });
11365
+ var createVoiceWebhookDeliverySink = (input = {}) => createVoiceDeliverySinkDescriptor({
11366
+ ...input,
11367
+ kind: "webhook"
11368
+ });
11369
+ var createVoiceS3DeliverySink = (input = {}) => createVoiceDeliverySinkDescriptor({
11370
+ ...input,
11371
+ kind: "s3"
11372
+ });
11373
+ var createVoicePostgresDeliverySink = (input = {}) => createVoiceDeliverySinkDescriptor({
11374
+ ...input,
11375
+ kind: "postgres"
11376
+ });
11377
+ var createVoiceSQLiteDeliverySink = (input = {}) => createVoiceDeliverySinkDescriptor({
11378
+ ...input,
11379
+ kind: "sqlite"
11380
+ });
11381
+ var createVoiceDeliverySinkPair = (options) => [
11382
+ createVoiceDeliverySinkDescriptor({
11383
+ description: options.description,
11384
+ href: options.auditHref,
11385
+ id: options.auditId ?? `${options.kind}-audit-sink`,
11386
+ kind: options.kind,
11387
+ label: options.auditLabel ?? `${deliverySinkLabel(options.kind)} audit`,
11388
+ mode: options.mode,
11389
+ target: options.target
11390
+ }),
11391
+ createVoiceDeliverySinkDescriptor({
11392
+ description: options.description,
11393
+ href: options.traceHref,
11394
+ id: options.traceId ?? `${options.kind}-trace-sink`,
11395
+ kind: options.kind,
11396
+ label: options.traceLabel ?? `${deliverySinkLabel(options.kind)} trace`,
11397
+ mode: options.mode,
11398
+ target: options.target
11399
+ })
11400
+ ];
11351
11401
  var buildVoiceDeliverySinkReport = async (options) => {
11352
11402
  const [auditSummary, traceSummary] = await Promise.all([
11353
11403
  options.auditDeliveries ? Promise.resolve(options.auditDeliveries.store.list()).then((deliveries) => summarizeVoiceAuditSinkDeliveries(deliveries)) : undefined,
@@ -11382,11 +11432,14 @@ var renderSurfaceCard = (surface) => {
11382
11432
  };
11383
11433
  var renderVoiceDeliverySinkHTML = (report, options = {}) => {
11384
11434
  const title = options.title ?? "AbsoluteJS Voice Delivery Sinks";
11385
- const sinks = report.sinks.length ? report.sinks.map((sink) => `<article><span>${escapeHtml14(sink.kind)}</span><strong style="font-size:1.5rem">${escapeHtml14(sink.label)}</strong>${sink.description ? `<p class="muted">${escapeHtml14(sink.description)}</p>` : ""}${sink.href ? `<p><a href="${escapeHtml14(sink.href)}">Open sink</a></p>` : ""}</article>`).join("") : '<article><span>Sink</span><strong style="font-size:1.5rem">Not described</strong><p class="muted">Pass sink descriptors to document your file, webhook, S3, SQLite, or Postgres targets.</p></article>';
11435
+ const sinks = report.sinks.length ? report.sinks.map((sink) => `<article><span>${escapeHtml14(sink.kind)}</span><strong style="font-size:1.5rem">${escapeHtml14(sink.label)}</strong>${sink.description ? `<p class="muted">${escapeHtml14(sink.description)}</p>` : ""}${sink.mode ? `<p class="muted">Mode: ${escapeHtml14(sink.mode)}</p>` : ""}${sink.target ? `<p class="muted">Target: <code>${escapeHtml14(sink.target)}</code></p>` : ""}${sink.href ? `<p><a href="${escapeHtml14(sink.href)}">Open sink</a></p>` : ""}</article>`).join("") : '<article><span>Sink</span><strong style="font-size:1.5rem">Not described</strong><p class="muted">Pass sink descriptors to document your file, webhook, S3, SQLite, or Postgres targets.</p></article>';
11386
11436
  return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>${escapeHtml14(title)}</title><style>body{background:#11120d;color:#fbf7e8;font-family:ui-sans-serif,system-ui,sans-serif;margin:0}main{max-width:1120px;margin:auto;padding:32px}a{color:#fde68a;text-decoration:none}.hero{background:linear-gradient(135deg,rgba(253,230,138,.2),rgba(34,197,94,.14));border:1px solid #3a3420;border-radius:30px;margin-bottom:18px;padding:28px}.eyebrow{color:#fde68a;font-weight:900;letter-spacing:.12em;text-transform:uppercase}h1{font-size:clamp(2.4rem,6vw,4.8rem);line-height:.9;margin:.2rem 0 1rem}.status{border:1px solid #575030;border-radius:999px;display:inline-flex;font-weight:900;padding:8px 12px}.status.pass{border-color:rgba(34,197,94,.65)}.status.warn{border-color:rgba(245,158,11,.65)}.status.fail{border-color:rgba(239,68,68,.75)}.muted{color:#b8b093}.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));margin:18px 0}article,.card{background:#191a13;border:1px solid #33311f;border-radius:22px;padding:18px}article span{color:#b8b093;display:block;font-weight:800}article strong{display:block;font-size:2.4rem;margin-top:8px}pre{background:#0c0d09;border:1px solid #33311f;border-radius:18px;color:#fef3c7;overflow:auto;padding:16px}code{color:#fef3c7}</style></head><body><main><p><a href="/production-readiness">Production readiness</a></p><section class="hero"><p class="eyebrow">Composable sink primitive</p><h1>${escapeHtml14(title)}</h1><p class="muted">Delivery queues prove audit and trace exports without owning your infrastructure. Swap file, webhook, S3, SQLite, or Postgres sinks behind the same readiness surface.</p><p class="status ${escapeHtml14(report.status)}">Overall: ${escapeHtml14(report.status.toUpperCase())}</p><p class="muted">Checked ${escapeHtml14(new Date(report.checkedAt).toLocaleString())}</p></section><section class="grid">${renderSurfaceCard(report.auditDeliveries)}${renderSurfaceCard(report.traceDeliveries)}${sinks}</section><section class="card"><h2>Primitive shape</h2><p class="muted">Mount delivery sink routes beside audit and trace delivery queues. Production readiness can consume the same stores for pass/fail evidence.</p><pre>createVoiceDeliverySinkRoutes({
11387
11437
  auditDeliveries: { store: runtimeStorage.auditDeliveries },
11388
11438
  traceDeliveries: { store: runtimeStorage.traceDeliveries },
11389
- sinks: [{ id: "audit-file", kind: "file", label: "Audit file sink" }]
11439
+ sinks: createVoiceDeliverySinkPair({
11440
+ kind: "file",
11441
+ target: "file://.voice-runtime/voice-demo"
11442
+ })
11390
11443
  })</pre></section></main></body></html>`;
11391
11444
  };
11392
11445
  var createVoiceDeliverySinkRoutes = (options) => {
@@ -23062,6 +23115,7 @@ export {
23062
23115
  createVoiceWebhookHandoffAdapter,
23063
23116
  createVoiceWebhookDeliveryWorkerLoop,
23064
23117
  createVoiceWebhookDeliveryWorker,
23118
+ createVoiceWebhookDeliverySink,
23065
23119
  createVoiceTwilioRedirectHandoffAdapter,
23066
23120
  createVoiceTwilioCampaignDialer,
23067
23121
  createVoiceTurnQualityRoutes,
@@ -23119,10 +23173,12 @@ export {
23119
23173
  createVoiceSQLiteReviewStore,
23120
23174
  createVoiceSQLiteIntegrationEventStore,
23121
23175
  createVoiceSQLiteExternalObjectMapStore,
23176
+ createVoiceSQLiteDeliverySink,
23122
23177
  createVoiceSQLiteCampaignStore,
23123
23178
  createVoiceSQLiteAuditSinkDeliveryStore,
23124
23179
  createVoiceSQLiteAuditEventStore,
23125
23180
  createVoiceS3ReviewStore,
23181
+ createVoiceS3DeliverySink,
23126
23182
  createVoiceRoutingDecisionSummary,
23127
23183
  createVoiceReviewSavedEvent,
23128
23184
  createVoiceResilienceRoutes,
@@ -23148,6 +23204,7 @@ export {
23148
23204
  createVoicePostgresReviewStore,
23149
23205
  createVoicePostgresIntegrationEventStore,
23150
23206
  createVoicePostgresExternalObjectMapStore,
23207
+ createVoicePostgresDeliverySink,
23151
23208
  createVoicePostgresCampaignStore,
23152
23209
  createVoicePostgresAuditSinkDeliveryStore,
23153
23210
  createVoicePostgresAuditEventStore,
@@ -23204,6 +23261,7 @@ export {
23204
23261
  createVoiceFileIntegrationEventStore,
23205
23262
  createVoiceFileExternalObjectMapStore,
23206
23263
  createVoiceFileEvalBaselineStore,
23264
+ createVoiceFileDeliverySink,
23207
23265
  createVoiceFileCampaignStore,
23208
23266
  createVoiceFileAuditSinkDeliveryStore,
23209
23267
  createVoiceFileAuditEventStore,
@@ -23215,6 +23273,8 @@ export {
23215
23273
  createVoiceDiagnosticsRoutes,
23216
23274
  createVoiceDemoReadyRoutes,
23217
23275
  createVoiceDeliverySinkRoutes,
23276
+ createVoiceDeliverySinkPair,
23277
+ createVoiceDeliverySinkDescriptor,
23218
23278
  createVoiceCampaignWorkerLoop,
23219
23279
  createVoiceCampaignWorker,
23220
23280
  createVoiceCampaignTelephonyOutcomeHandler,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.144",
3
+ "version": "0.0.22-beta.145",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",