@absolutejs/voice 0.0.22-beta.257 → 0.0.22-beta.258
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/campaign.d.ts +22 -0
- package/dist/campaignDialers.d.ts +21 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +108 -0
- package/package.json +1 -1
package/dist/campaign.d.ts
CHANGED
|
@@ -190,6 +190,26 @@ export type VoiceCampaignReadinessProofReport = {
|
|
|
190
190
|
windowBlocked: VoiceCampaignTickResult;
|
|
191
191
|
};
|
|
192
192
|
};
|
|
193
|
+
export type VoiceCampaignReadinessAssertionInput = {
|
|
194
|
+
maxFailedChecks?: number;
|
|
195
|
+
minAcceptedImports?: number;
|
|
196
|
+
minRejectedImports?: number;
|
|
197
|
+
minTotalImports?: number;
|
|
198
|
+
requiredBlockedReasons?: VoiceCampaignTickResult['blocked'][number]['reason'][];
|
|
199
|
+
requiredChecks?: string[];
|
|
200
|
+
requireOk?: boolean;
|
|
201
|
+
};
|
|
202
|
+
export type VoiceCampaignReadinessAssertionReport = {
|
|
203
|
+
acceptedImports: number;
|
|
204
|
+
blockedReasons: VoiceCampaignTickResult['blocked'][number]['reason'][];
|
|
205
|
+
failed: number;
|
|
206
|
+
issues: string[];
|
|
207
|
+
ok: boolean;
|
|
208
|
+
passed: number;
|
|
209
|
+
rejectedImports: number;
|
|
210
|
+
total: number;
|
|
211
|
+
totalImports: number;
|
|
212
|
+
};
|
|
193
213
|
export type VoiceCampaignSummary = {
|
|
194
214
|
attempts: {
|
|
195
215
|
failed: number;
|
|
@@ -381,6 +401,8 @@ export declare const applyVoiceCampaignTelephonyOutcome: <TResult = unknown>(inp
|
|
|
381
401
|
export declare const createVoiceCampaignTelephonyOutcomeHandler: <TResult = unknown>(options: VoiceCampaignTelephonyOutcomeOptions<TResult>) => (input: VoiceTelephonyWebhookDecision<TResult>) => Promise<VoiceCampaignTelephonyOutcomeResult>;
|
|
382
402
|
export declare const runVoiceCampaignProof: (options?: VoiceCampaignProofOptions) => Promise<VoiceCampaignProofReport>;
|
|
383
403
|
export declare const runVoiceCampaignReadinessProof: (options?: VoiceCampaignReadinessProofOptions) => Promise<VoiceCampaignReadinessProofReport>;
|
|
404
|
+
export declare const evaluateVoiceCampaignReadinessEvidence: (report: VoiceCampaignReadinessProofReport, input?: VoiceCampaignReadinessAssertionInput) => VoiceCampaignReadinessAssertionReport;
|
|
405
|
+
export declare const assertVoiceCampaignReadinessEvidence: (report: VoiceCampaignReadinessProofReport, input?: VoiceCampaignReadinessAssertionInput) => VoiceCampaignReadinessAssertionReport;
|
|
384
406
|
export declare const renderVoiceCampaignsHTML: (records: VoiceCampaignRecord[], options?: Pick<VoiceCampaignRoutesOptions, "operationsRecordHref" | "title">) => string;
|
|
385
407
|
export declare const renderVoiceCampaignObservabilityHTML: (report: VoiceCampaignObservabilityReport, options?: {
|
|
386
408
|
title?: string;
|
|
@@ -82,9 +82,30 @@ export type VoiceCampaignDialerProofOptions = {
|
|
|
82
82
|
runPath?: string;
|
|
83
83
|
store?: VoiceCampaignStore;
|
|
84
84
|
};
|
|
85
|
+
export type VoiceCampaignDialerProofAssertionInput = {
|
|
86
|
+
maxFailedProviders?: number;
|
|
87
|
+
minCarrierRequests?: number;
|
|
88
|
+
minProviders?: number;
|
|
89
|
+
minSuccessfulOutcomes?: number;
|
|
90
|
+
requiredProviders?: VoiceCampaignDialerProofProvider[];
|
|
91
|
+
requireDryRun?: boolean;
|
|
92
|
+
requireOk?: boolean;
|
|
93
|
+
};
|
|
94
|
+
export type VoiceCampaignDialerProofAssertionReport = {
|
|
95
|
+
carrierRequests: number;
|
|
96
|
+
failedProviders: number;
|
|
97
|
+
issues: string[];
|
|
98
|
+
mode: VoiceCampaignDialerProofReport['mode'];
|
|
99
|
+
ok: boolean;
|
|
100
|
+
providers: VoiceCampaignDialerProofProvider[];
|
|
101
|
+
successfulOutcomes: number;
|
|
102
|
+
totalProviders: number;
|
|
103
|
+
};
|
|
85
104
|
export declare const createVoiceTwilioCampaignDialer: (options: VoiceTwilioCampaignDialerOptions) => VoiceCampaignDialer;
|
|
86
105
|
export declare const createVoiceTelnyxCampaignDialer: (options: VoiceTelnyxCampaignDialerOptions) => VoiceCampaignDialer;
|
|
87
106
|
export declare const createVoicePlivoCampaignDialer: (options: VoicePlivoCampaignDialerOptions) => VoiceCampaignDialer;
|
|
88
107
|
export declare const getVoiceCampaignDialerProofStatus: (options?: Pick<VoiceCampaignDialerProofOptions, "providers" | "runPath">) => VoiceCampaignDialerProofStatus;
|
|
89
108
|
export declare const runVoiceCampaignDialerProof: (options?: VoiceCampaignDialerProofOptions) => Promise<VoiceCampaignDialerProofReport>;
|
|
109
|
+
export declare const evaluateVoiceCampaignDialerProofEvidence: (report: VoiceCampaignDialerProofReport, input?: VoiceCampaignDialerProofAssertionInput) => VoiceCampaignDialerProofAssertionReport;
|
|
110
|
+
export declare const assertVoiceCampaignDialerProofEvidence: (report: VoiceCampaignDialerProofReport, input?: VoiceCampaignDialerProofAssertionInput) => VoiceCampaignDialerProofAssertionReport;
|
|
90
111
|
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { voice } from './plugin';
|
|
2
|
-
export { applyVoiceCampaignTelephonyOutcome, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
|
|
3
|
-
export { createVoicePlivoCampaignDialer, createVoiceTelnyxCampaignDialer, createVoiceTwilioCampaignDialer, getVoiceCampaignDialerProofStatus, runVoiceCampaignDialerProof } from './campaignDialers';
|
|
2
|
+
export { applyVoiceCampaignTelephonyOutcome, assertVoiceCampaignReadinessEvidence, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, evaluateVoiceCampaignReadinessEvidence, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
|
|
3
|
+
export { assertVoiceCampaignDialerProofEvidence, createVoicePlivoCampaignDialer, createVoiceTelnyxCampaignDialer, createVoiceTwilioCampaignDialer, evaluateVoiceCampaignDialerProofEvidence, getVoiceCampaignDialerProofStatus, runVoiceCampaignDialerProof } from './campaignDialers';
|
|
4
4
|
export { createVoiceAssistant, createVoiceExperiment, summarizeVoiceAssistantRuns } from './assistant';
|
|
5
5
|
export { createVoiceAssistantHealthHTMLHandler, createVoiceAssistantHealthJSONHandler, createVoiceAssistantHealthRoutes, renderVoiceAssistantHealthHTML, summarizeVoiceAssistantHealth } from './assistantHealth';
|
|
6
6
|
export { createVoiceAuditEvent, createVoiceAuditLogger, createVoiceMemoryAuditEventStore, filterVoiceAuditEvents, recordVoiceAuditEvent, recordVoiceHandoffAuditEvent, recordVoiceOperatorAuditEvent, recordVoiceProviderAuditEvent, recordVoiceRetentionAuditEvent, recordVoiceToolAuditEvent } from './audit';
|
|
@@ -92,8 +92,8 @@ export { conditionAudioChunk, resolveAudioConditioningConfig } from './audioCond
|
|
|
92
92
|
export { resolveVoiceRuntimePreset } from './presets';
|
|
93
93
|
export { resolveTurnDetectionConfig, TURN_PROFILE_DEFAULTS } from './turnProfiles';
|
|
94
94
|
export { createVoiceCallReviewFromLiveTelephonyReport, createVoiceCallReviewRecorder, renderVoiceCallReviewHTML, renderVoiceCallReviewMarkdown } from './testing/review';
|
|
95
|
-
export type { VoiceCampaign, VoiceCampaignAttempt, VoiceCampaignAttemptResultInput, VoiceCampaignAttemptStatus, VoiceCampaignCreateInput, VoiceCampaignDialer, VoiceCampaignDialerInput, VoiceCampaignDialerResult, VoiceCampaignProofOptions, VoiceCampaignProofReport, VoiceCampaignReadinessCheck, VoiceCampaignReadinessProofOptions, VoiceCampaignReadinessProofReport, VoiceCampaignRecipient, VoiceCampaignRecipientImportIssue, VoiceCampaignRecipientImportIssueCode, VoiceCampaignRecipientImportOptions, VoiceCampaignRecipientImportResult, VoiceCampaignRecipientImportRow, VoiceCampaignRecipientInput, VoiceCampaignRecipientStatus, VoiceCampaignRecord, VoiceCampaignRoutesOptions, VoiceCampaignRuntime, VoiceCampaignRuntimeOptions, VoiceCampaignRateLimit, VoiceCampaignRetryPolicy, VoiceCampaignSchedule, VoiceCampaignStatus, VoiceCampaignStore, VoiceCampaignSummary, VoiceCampaignTimeWindow, VoiceCampaignTickResult } from './campaign';
|
|
96
|
-
export type { VoiceCampaignDialerProofCarrierRequest, VoiceCampaignDialerProofOptions, VoiceCampaignDialerProofProvider, VoiceCampaignDialerProofProviderResult, VoiceCampaignDialerProofReport, VoiceCampaignDialerProofStatus, VoicePlivoCampaignDialerOptions, VoiceTelnyxCampaignDialerOptions, VoiceTwilioCampaignDialerOptions } from './campaignDialers';
|
|
95
|
+
export type { VoiceCampaign, VoiceCampaignAttempt, VoiceCampaignAttemptResultInput, VoiceCampaignAttemptStatus, VoiceCampaignCreateInput, VoiceCampaignDialer, VoiceCampaignDialerInput, VoiceCampaignDialerResult, VoiceCampaignProofOptions, VoiceCampaignProofReport, VoiceCampaignReadinessAssertionInput, VoiceCampaignReadinessAssertionReport, VoiceCampaignReadinessCheck, VoiceCampaignReadinessProofOptions, VoiceCampaignReadinessProofReport, VoiceCampaignRecipient, VoiceCampaignRecipientImportIssue, VoiceCampaignRecipientImportIssueCode, VoiceCampaignRecipientImportOptions, VoiceCampaignRecipientImportResult, VoiceCampaignRecipientImportRow, VoiceCampaignRecipientInput, VoiceCampaignRecipientStatus, VoiceCampaignRecord, VoiceCampaignRoutesOptions, VoiceCampaignRuntime, VoiceCampaignRuntimeOptions, VoiceCampaignRateLimit, VoiceCampaignRetryPolicy, VoiceCampaignSchedule, VoiceCampaignStatus, VoiceCampaignStore, VoiceCampaignSummary, VoiceCampaignTimeWindow, VoiceCampaignTickResult } from './campaign';
|
|
96
|
+
export type { VoiceCampaignDialerProofAssertionInput, VoiceCampaignDialerProofAssertionReport, VoiceCampaignDialerProofCarrierRequest, VoiceCampaignDialerProofOptions, VoiceCampaignDialerProofProvider, VoiceCampaignDialerProofProviderResult, VoiceCampaignDialerProofReport, VoiceCampaignDialerProofStatus, VoicePlivoCampaignDialerOptions, VoiceTelnyxCampaignDialerOptions, VoiceTwilioCampaignDialerOptions } from './campaignDialers';
|
|
97
97
|
export type { VoiceBargeInReport, VoiceBargeInRoutesOptions } from './bargeInRoutes';
|
|
98
98
|
export type { VoiceAssistant, VoiceAssistantArtifactPlan, VoiceAssistantExperiment, VoiceAssistantExperimentOptions, VoiceAssistantGuardrailInput, VoiceAssistantGuardrails, VoiceAssistantMemoryLifecycle, VoiceAssistantMemoryLifecycleInput, VoiceAssistantOptions, VoiceAssistantOutputGuardrailInput, VoiceAssistantPreset, VoiceAssistantRunsSummary, VoiceAssistantRunSummary, VoiceAssistantVariant } from './assistant';
|
|
99
99
|
export type { VoiceAssistantHealthFailure, VoiceAssistantHealthHTMLHandlerOptions, VoiceAssistantHealthRoutesOptions, VoiceAssistantHealthSummary, VoiceAssistantHealthSummaryOptions } from './assistantHealth';
|
package/dist/index.js
CHANGED
|
@@ -6661,6 +6661,60 @@ recipient-no-consent,Barbara,+15550001004,no,delta`,
|
|
|
6661
6661
|
}
|
|
6662
6662
|
};
|
|
6663
6663
|
};
|
|
6664
|
+
var evaluateVoiceCampaignReadinessEvidence = (report, input = {}) => {
|
|
6665
|
+
const issues = [];
|
|
6666
|
+
const maxFailedChecks = input.maxFailedChecks ?? 0;
|
|
6667
|
+
const requireOk = input.requireOk ?? true;
|
|
6668
|
+
const failed = report.checks.filter((check) => check.status === "fail").length;
|
|
6669
|
+
const passed = report.checks.length - failed;
|
|
6670
|
+
const checkNames = new Set(report.checks.map((check) => check.name));
|
|
6671
|
+
const blockedReasons = [
|
|
6672
|
+
...new Set(Object.values(report.ticks).flatMap((tick) => tick.blocked.map((block) => block.reason)))
|
|
6673
|
+
].sort();
|
|
6674
|
+
if (requireOk && !report.ok) {
|
|
6675
|
+
issues.push("Expected campaign readiness proof to pass.");
|
|
6676
|
+
}
|
|
6677
|
+
if (failed > maxFailedChecks) {
|
|
6678
|
+
issues.push(`Expected at most ${String(maxFailedChecks)} failing campaign readiness check(s), found ${String(failed)}.`);
|
|
6679
|
+
}
|
|
6680
|
+
if (input.minTotalImports !== undefined && report.import.total < input.minTotalImports) {
|
|
6681
|
+
issues.push(`Expected at least ${String(input.minTotalImports)} campaign import row(s), found ${String(report.import.total)}.`);
|
|
6682
|
+
}
|
|
6683
|
+
if (input.minAcceptedImports !== undefined && report.import.accepted.length < input.minAcceptedImports) {
|
|
6684
|
+
issues.push(`Expected at least ${String(input.minAcceptedImports)} accepted campaign import(s), found ${String(report.import.accepted.length)}.`);
|
|
6685
|
+
}
|
|
6686
|
+
if (input.minRejectedImports !== undefined && report.import.rejected.length < input.minRejectedImports) {
|
|
6687
|
+
issues.push(`Expected at least ${String(input.minRejectedImports)} rejected campaign import(s), found ${String(report.import.rejected.length)}.`);
|
|
6688
|
+
}
|
|
6689
|
+
for (const check of input.requiredChecks ?? []) {
|
|
6690
|
+
if (!checkNames.has(check)) {
|
|
6691
|
+
issues.push(`Missing campaign readiness check: ${check}.`);
|
|
6692
|
+
}
|
|
6693
|
+
}
|
|
6694
|
+
for (const reason of input.requiredBlockedReasons ?? []) {
|
|
6695
|
+
if (!blockedReasons.includes(reason)) {
|
|
6696
|
+
issues.push(`Missing campaign readiness blocked reason: ${reason}.`);
|
|
6697
|
+
}
|
|
6698
|
+
}
|
|
6699
|
+
return {
|
|
6700
|
+
acceptedImports: report.import.accepted.length,
|
|
6701
|
+
blockedReasons,
|
|
6702
|
+
failed,
|
|
6703
|
+
issues,
|
|
6704
|
+
ok: issues.length === 0,
|
|
6705
|
+
passed,
|
|
6706
|
+
rejectedImports: report.import.rejected.length,
|
|
6707
|
+
total: report.checks.length,
|
|
6708
|
+
totalImports: report.import.total
|
|
6709
|
+
};
|
|
6710
|
+
};
|
|
6711
|
+
var assertVoiceCampaignReadinessEvidence = (report, input = {}) => {
|
|
6712
|
+
const assertion = evaluateVoiceCampaignReadinessEvidence(report, input);
|
|
6713
|
+
if (!assertion.ok) {
|
|
6714
|
+
throw new Error(`Voice campaign readiness evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
6715
|
+
}
|
|
6716
|
+
return assertion;
|
|
6717
|
+
};
|
|
6664
6718
|
var escapeHtml3 = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
6665
6719
|
var getString = (value) => typeof value === "string" && value.length > 0 ? value : undefined;
|
|
6666
6720
|
var campaignAttemptSessionId = (attempt) => getString(attempt.metadata?.sessionId) ?? getString(attempt.metadata?.voiceSessionId) ?? getString(attempt.metadata?.callSessionId);
|
|
@@ -7094,6 +7148,56 @@ var runVoiceCampaignDialerProof = async (options = {}) => {
|
|
|
7094
7148
|
providers: results
|
|
7095
7149
|
};
|
|
7096
7150
|
};
|
|
7151
|
+
var evaluateVoiceCampaignDialerProofEvidence = (report, input = {}) => {
|
|
7152
|
+
const issues = [];
|
|
7153
|
+
const maxFailedProviders = input.maxFailedProviders ?? 0;
|
|
7154
|
+
const requireOk = input.requireOk ?? true;
|
|
7155
|
+
const requireDryRun = input.requireDryRun ?? true;
|
|
7156
|
+
const providers = report.providers.map((provider) => provider.provider).sort();
|
|
7157
|
+
const carrierRequests = report.providers.reduce((total, provider) => total + provider.carrierRequests.length, 0);
|
|
7158
|
+
const successfulOutcomes = report.providers.reduce((total, provider) => total + provider.outcomes.filter((outcome) => outcome.applied).length, 0);
|
|
7159
|
+
const failedProviders = report.providers.filter((provider) => provider.carrierRequests.length === 0 || provider.outcomes.some((outcome) => !outcome.applied)).length;
|
|
7160
|
+
if (requireOk && !report.ok) {
|
|
7161
|
+
issues.push("Expected campaign dialer proof to pass.");
|
|
7162
|
+
}
|
|
7163
|
+
if (requireDryRun && report.mode !== "dry-run") {
|
|
7164
|
+
issues.push(`Expected campaign dialer proof mode dry-run, found ${report.mode}.`);
|
|
7165
|
+
}
|
|
7166
|
+
if (failedProviders > maxFailedProviders) {
|
|
7167
|
+
issues.push(`Expected at most ${String(maxFailedProviders)} failing campaign dialer provider(s), found ${String(failedProviders)}.`);
|
|
7168
|
+
}
|
|
7169
|
+
if (input.minProviders !== undefined && report.providers.length < input.minProviders) {
|
|
7170
|
+
issues.push(`Expected at least ${String(input.minProviders)} campaign dialer provider(s), found ${String(report.providers.length)}.`);
|
|
7171
|
+
}
|
|
7172
|
+
if (input.minCarrierRequests !== undefined && carrierRequests < input.minCarrierRequests) {
|
|
7173
|
+
issues.push(`Expected at least ${String(input.minCarrierRequests)} campaign dialer carrier request(s), found ${String(carrierRequests)}.`);
|
|
7174
|
+
}
|
|
7175
|
+
if (input.minSuccessfulOutcomes !== undefined && successfulOutcomes < input.minSuccessfulOutcomes) {
|
|
7176
|
+
issues.push(`Expected at least ${String(input.minSuccessfulOutcomes)} applied campaign dialer outcome(s), found ${String(successfulOutcomes)}.`);
|
|
7177
|
+
}
|
|
7178
|
+
for (const provider of input.requiredProviders ?? []) {
|
|
7179
|
+
if (!providers.includes(provider)) {
|
|
7180
|
+
issues.push(`Missing campaign dialer provider: ${provider}.`);
|
|
7181
|
+
}
|
|
7182
|
+
}
|
|
7183
|
+
return {
|
|
7184
|
+
carrierRequests,
|
|
7185
|
+
failedProviders,
|
|
7186
|
+
issues,
|
|
7187
|
+
mode: report.mode,
|
|
7188
|
+
ok: issues.length === 0,
|
|
7189
|
+
providers,
|
|
7190
|
+
successfulOutcomes,
|
|
7191
|
+
totalProviders: report.providers.length
|
|
7192
|
+
};
|
|
7193
|
+
};
|
|
7194
|
+
var assertVoiceCampaignDialerProofEvidence = (report, input = {}) => {
|
|
7195
|
+
const assertion = evaluateVoiceCampaignDialerProofEvidence(report, input);
|
|
7196
|
+
if (!assertion.ok) {
|
|
7197
|
+
throw new Error(`Voice campaign dialer proof evidence assertion failed: ${assertion.issues.join(" ")}`);
|
|
7198
|
+
}
|
|
7199
|
+
return assertion;
|
|
7200
|
+
};
|
|
7097
7201
|
// src/audit.ts
|
|
7098
7202
|
var includes = (filter, value) => {
|
|
7099
7203
|
if (!filter) {
|
|
@@ -30922,6 +31026,8 @@ export {
|
|
|
30922
31026
|
evaluateVoiceObservabilityExportReplayEvidence,
|
|
30923
31027
|
evaluateVoiceObservabilityExportDeliveryEvidence,
|
|
30924
31028
|
evaluateVoiceGuardrailPolicy,
|
|
31029
|
+
evaluateVoiceCampaignReadinessEvidence,
|
|
31030
|
+
evaluateVoiceCampaignDialerProofEvidence,
|
|
30925
31031
|
evaluateVoiceAgentSquadContractEvidence,
|
|
30926
31032
|
encodeTwilioMulawBase64,
|
|
30927
31033
|
deliverVoiceTraceEventsToSinks,
|
|
@@ -31251,6 +31357,8 @@ export {
|
|
|
31251
31357
|
assertVoiceObservabilityExportRecord,
|
|
31252
31358
|
assertVoiceObservabilityExportDeliveryEvidence,
|
|
31253
31359
|
assertVoiceLatencySLOGate,
|
|
31360
|
+
assertVoiceCampaignReadinessEvidence,
|
|
31361
|
+
assertVoiceCampaignDialerProofEvidence,
|
|
31254
31362
|
assertVoiceAgentSquadContractEvidence,
|
|
31255
31363
|
assertVoiceAgentSquadContract,
|
|
31256
31364
|
applyVoiceTelephonyOutcome,
|