@absolutejs/voice 0.0.22-beta.392 → 0.0.22-beta.393

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.
@@ -390,6 +390,31 @@ export type VoiceCampaignTelephonyOutcomeResult = {
390
390
  status?: 'failed' | 'succeeded';
391
391
  attemptId?: string;
392
392
  };
393
+ export type VoiceCampaignTelephonyOutcomeSnapshot<TResult = unknown> = {
394
+ action: VoiceTelephonyOutcomeDecision['action'];
395
+ at: number;
396
+ campaignOutcome: VoiceCampaignTelephonyOutcomeResult;
397
+ disposition?: VoiceTelephonyOutcomeDecision['disposition'];
398
+ duplicate?: boolean;
399
+ idempotencyKey?: string;
400
+ provider?: string;
401
+ routeResult?: TResult;
402
+ sessionId?: string;
403
+ source?: VoiceTelephonyOutcomeDecision['source'];
404
+ };
405
+ export type VoiceCampaignTelephonyOutcomeRecorderOptions<TResult = unknown> = VoiceCampaignTelephonyOutcomeOptions<TResult> & {
406
+ maxSnapshots?: number;
407
+ now?: () => number;
408
+ };
409
+ export type VoiceCampaignTelephonyOutcomeRecorderRecordInput<TResult = unknown> = VoiceTelephonyWebhookDecision<TResult> & {
410
+ provider?: string;
411
+ };
412
+ export type VoiceCampaignTelephonyOutcomeRecorder<TResult = unknown> = {
413
+ clear: () => void;
414
+ handler: (provider?: string) => (input: VoiceTelephonyWebhookDecision<TResult>) => Promise<void>;
415
+ list: () => VoiceCampaignTelephonyOutcomeSnapshot<TResult>[];
416
+ record: (input: VoiceCampaignTelephonyOutcomeRecorderRecordInput<TResult>) => Promise<VoiceCampaignTelephonyOutcomeSnapshot<TResult>>;
417
+ };
393
418
  export declare const importVoiceCampaignRecipients: (options: VoiceCampaignRecipientImportOptions) => VoiceCampaignRecipientImportResult;
394
419
  export declare const createVoiceMemoryCampaignStore: () => VoiceCampaignStore;
395
420
  export declare const summarizeVoiceCampaigns: (records: VoiceCampaignRecord[]) => VoiceCampaignSummary;
@@ -399,6 +424,7 @@ export declare const createVoiceCampaignWorker: (options: VoiceCampaignWorkerOpt
399
424
  export declare const createVoiceCampaignWorkerLoop: (options: VoiceCampaignWorkerLoopOptions) => VoiceCampaignWorkerLoop;
400
425
  export declare const applyVoiceCampaignTelephonyOutcome: <TResult = unknown>(input: VoiceCampaignTelephonyOutcomeInput<TResult>, options?: VoiceCampaignTelephonyOutcomeOptions<TResult>) => Promise<VoiceCampaignTelephonyOutcomeResult>;
401
426
  export declare const createVoiceCampaignTelephonyOutcomeHandler: <TResult = unknown>(options: VoiceCampaignTelephonyOutcomeOptions<TResult>) => (input: VoiceTelephonyWebhookDecision<TResult>) => Promise<VoiceCampaignTelephonyOutcomeResult>;
427
+ export declare const createVoiceCampaignTelephonyOutcomeRecorder: <TResult = unknown>(options?: VoiceCampaignTelephonyOutcomeRecorderOptions<TResult>) => VoiceCampaignTelephonyOutcomeRecorder<TResult>;
402
428
  export declare const runVoiceCampaignProof: (options?: VoiceCampaignProofOptions) => Promise<VoiceCampaignProofReport>;
403
429
  export declare const runVoiceCampaignReadinessProof: (options?: VoiceCampaignReadinessProofOptions) => Promise<VoiceCampaignReadinessProofReport>;
404
430
  export declare const evaluateVoiceCampaignReadinessEvidence: (report: VoiceCampaignReadinessProofReport, input?: VoiceCampaignReadinessAssertionInput) => VoiceCampaignReadinessAssertionReport;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { voice } from './plugin';
2
- export { applyVoiceCampaignTelephonyOutcome, assertVoiceCampaignReadinessEvidence, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, evaluateVoiceCampaignReadinessEvidence, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
2
+ export { applyVoiceCampaignTelephonyOutcome, assertVoiceCampaignReadinessEvidence, buildVoiceCampaignObservabilityReport, createVoiceCampaignTelephonyOutcomeHandler, createVoiceCampaignTelephonyOutcomeRecorder, createVoiceCampaign, createVoiceCampaignRoutes, createVoiceCampaignWorker, createVoiceCampaignWorkerLoop, createVoiceMemoryCampaignStore, evaluateVoiceCampaignReadinessEvidence, importVoiceCampaignRecipients, renderVoiceCampaignObservabilityHTML, renderVoiceCampaignsHTML, runVoiceCampaignProof, runVoiceCampaignReadinessProof, summarizeVoiceCampaigns } from './campaign';
3
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';
@@ -116,7 +116,7 @@ export { resolveVoiceRuntimePreset } from './presets';
116
116
  export { resolveTurnDetectionConfig, TURN_PROFILE_DEFAULTS } from './turnProfiles';
117
117
  export { createVoiceCallReviewFromLiveTelephonyReport, createVoiceCallReviewRecorder, renderVoiceCallReviewHTML, renderVoiceCallReviewMarkdown } from './testing/review';
118
118
  export { getDefaultVoiceTelephonyBenchmarkScenarios, runVoiceTelephonyBenchmark, runVoiceTelephonyBenchmarkScenario, runVoiceTelephonyMediaOperationsSmoke, summarizeVoiceTelephonyBenchmark } from './testing/telephony';
119
- 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';
119
+ 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, VoiceCampaignTelephonyOutcomeInput, VoiceCampaignTelephonyOutcomeOptions, VoiceCampaignTelephonyOutcomeRecorder, VoiceCampaignTelephonyOutcomeRecorderOptions, VoiceCampaignTelephonyOutcomeRecorderRecordInput, VoiceCampaignTelephonyOutcomeResult, VoiceCampaignTelephonyOutcomeSnapshot, VoiceCampaignTelephonyOutcomeStatus, VoiceCampaignTimeWindow, VoiceCampaignTickResult } from './campaign';
120
120
  export type { VoiceCampaignDialerProofAssertionInput, VoiceCampaignDialerProofAssertionReport, VoiceCampaignDialerProofCarrierRequest, VoiceCampaignDialerProofOptions, VoiceCampaignDialerProofProvider, VoiceCampaignDialerProofProviderResult, VoiceCampaignDialerProofReport, VoiceCampaignDialerProofStatus, VoicePlivoCampaignDialerOptions, VoiceTelnyxCampaignDialerOptions, VoiceTwilioCampaignDialerOptions } from './campaignDialers';
121
121
  export type { VoiceBargeInReport, VoiceBargeInRoutesOptions } from './bargeInRoutes';
122
122
  export type { VoiceAssistant, VoiceAssistantArtifactPlan, VoiceAssistantExperiment, VoiceAssistantExperimentOptions, VoiceAssistantGuardrailInput, VoiceAssistantGuardrails, VoiceAssistantMemoryLifecycle, VoiceAssistantMemoryLifecycleInput, VoiceAssistantOptions, VoiceAssistantOutputGuardrailInput, VoiceAssistantPreset, VoiceAssistantRunsSummary, VoiceAssistantRunSummary, VoiceAssistantVariant } from './assistant';
package/dist/index.js CHANGED
@@ -7310,6 +7310,49 @@ var createVoiceCampaignTelephonyOutcomeHandler = (options) => (input) => applyVo
7310
7310
  routeResult: input.routeResult,
7311
7311
  sessionId: input.sessionId
7312
7312
  }, options);
7313
+ var createVoiceCampaignTelephonyOutcomeRecorder = (options = {}) => {
7314
+ const snapshots = [];
7315
+ const maxSnapshots = Math.max(0, options.maxSnapshots ?? 20);
7316
+ const now = options.now ?? Date.now;
7317
+ const record = async (input) => {
7318
+ const campaignOutcome = await applyVoiceCampaignTelephonyOutcome({
7319
+ decision: input.decision,
7320
+ event: input.event,
7321
+ routeResult: input.routeResult,
7322
+ sessionId: input.sessionId
7323
+ }, options);
7324
+ const snapshot = {
7325
+ action: input.decision.action,
7326
+ at: now(),
7327
+ campaignOutcome,
7328
+ disposition: input.decision.disposition,
7329
+ duplicate: input.duplicate,
7330
+ idempotencyKey: input.idempotencyKey,
7331
+ provider: input.provider ?? input.event.provider,
7332
+ routeResult: input.routeResult,
7333
+ sessionId: input.sessionId,
7334
+ source: input.decision.source
7335
+ };
7336
+ if (maxSnapshots > 0) {
7337
+ snapshots.unshift(snapshot);
7338
+ snapshots.splice(maxSnapshots);
7339
+ }
7340
+ return snapshot;
7341
+ };
7342
+ return {
7343
+ clear: () => {
7344
+ snapshots.splice(0);
7345
+ },
7346
+ handler: (provider) => async (input) => {
7347
+ await record({
7348
+ ...input,
7349
+ provider: provider ?? input.event.provider
7350
+ });
7351
+ },
7352
+ list: () => snapshots.map((snapshot) => ({ ...snapshot })),
7353
+ record
7354
+ };
7355
+ };
7313
7356
  var defaultProofRecipients = () => [
7314
7357
  {
7315
7358
  id: "campaign-proof-recipient-1",
@@ -39750,6 +39793,7 @@ export {
39750
39793
  createVoiceCompetitiveCoverageRoutes,
39751
39794
  createVoiceCampaignWorkerLoop,
39752
39795
  createVoiceCampaignWorker,
39796
+ createVoiceCampaignTelephonyOutcomeRecorder,
39753
39797
  createVoiceCampaignTelephonyOutcomeHandler,
39754
39798
  createVoiceCampaignRoutes,
39755
39799
  createVoiceCampaign,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.392",
3
+ "version": "0.0.22-beta.393",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",