@k-msg/messaging 0.1.1 → 0.1.3

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.
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Delivery tracking system for messages
3
+ */
4
+ import { EventEmitter } from "events";
5
+ import { type DeliveryReport, MessageEventType, MessageStatus } from "../types/message.types";
6
+ export interface DeliveryTrackingOptions {
7
+ trackingInterval: number;
8
+ maxTrackingDuration: number;
9
+ batchSize: number;
10
+ enableWebhooks: boolean;
11
+ webhookRetries: number;
12
+ webhookTimeout: number;
13
+ persistence: {
14
+ enabled: boolean;
15
+ retentionDays: number;
16
+ };
17
+ }
18
+ export interface DeliveryWebhook {
19
+ url: string;
20
+ events: MessageEventType[];
21
+ secret?: string;
22
+ headers?: Record<string, string>;
23
+ timeout: number;
24
+ retries: number;
25
+ }
26
+ export interface TrackingRecord {
27
+ messageId: string;
28
+ phoneNumber: string;
29
+ templateId: string;
30
+ provider: string;
31
+ currentStatus: MessageStatus;
32
+ statusHistory: StatusHistoryEntry[];
33
+ deliveryReport: DeliveryReport;
34
+ webhooks: DeliveryWebhook[];
35
+ createdAt: Date;
36
+ updatedAt: Date;
37
+ expiresAt: Date;
38
+ metadata: Record<string, any>;
39
+ }
40
+ export interface StatusHistoryEntry {
41
+ status: MessageStatus;
42
+ timestamp: Date;
43
+ provider: string;
44
+ details?: Record<string, any>;
45
+ source: "provider" | "webhook" | "manual" | "system";
46
+ }
47
+ export interface DeliveryStats {
48
+ totalMessages: number;
49
+ byStatus: Record<MessageStatus, number>;
50
+ byProvider: Record<string, number>;
51
+ averageDeliveryTime: number;
52
+ deliveryRate: number;
53
+ failureRate: number;
54
+ lastUpdated: Date;
55
+ }
56
+ export interface WebhookDeliveryResult {
57
+ success: boolean;
58
+ statusCode?: number;
59
+ error?: string;
60
+ responseTime: number;
61
+ attempt: number;
62
+ }
63
+ export declare class DeliveryTracker extends EventEmitter {
64
+ private options;
65
+ private trackingRecords;
66
+ private statusIndex;
67
+ private trackingTimer?;
68
+ private webhookQueue;
69
+ private isRunning;
70
+ private stats;
71
+ private defaultOptions;
72
+ constructor(options: DeliveryTrackingOptions);
73
+ /**
74
+ * Start delivery tracking
75
+ */
76
+ start(): void;
77
+ /**
78
+ * Stop delivery tracking
79
+ */
80
+ stop(): void;
81
+ /**
82
+ * Start tracking a message
83
+ */
84
+ trackMessage(messageId: string, phoneNumber: string, templateId: string, provider: string, options?: {
85
+ webhooks?: DeliveryWebhook[];
86
+ metadata?: Record<string, any>;
87
+ initialStatus?: MessageStatus;
88
+ }): Promise<void>;
89
+ /**
90
+ * Update message status
91
+ */
92
+ updateStatus(messageId: string, status: MessageStatus, details?: {
93
+ provider?: string;
94
+ error?: {
95
+ code: string;
96
+ message: string;
97
+ details?: any;
98
+ };
99
+ metadata?: Record<string, any>;
100
+ source?: "provider" | "webhook" | "manual" | "system";
101
+ sentAt?: Date;
102
+ deliveredAt?: Date;
103
+ clickedAt?: Date;
104
+ failedAt?: Date;
105
+ }): Promise<boolean>;
106
+ /**
107
+ * Get delivery report for a message
108
+ */
109
+ getDeliveryReport(messageId: string): DeliveryReport | undefined;
110
+ /**
111
+ * Get tracking record for a message
112
+ */
113
+ getTrackingRecord(messageId: string): TrackingRecord | undefined;
114
+ /**
115
+ * Get messages by status
116
+ */
117
+ getMessagesByStatus(status: MessageStatus): TrackingRecord[];
118
+ /**
119
+ * Get delivery statistics
120
+ */
121
+ getStats(): DeliveryStats;
122
+ /**
123
+ * Get delivery statistics for a specific time range
124
+ */
125
+ getStatsForPeriod(startDate: Date, endDate: Date): DeliveryStats;
126
+ /**
127
+ * Clean up expired tracking records
128
+ */
129
+ cleanup(): number;
130
+ /**
131
+ * Stop tracking a specific message
132
+ */
133
+ stopTracking(messageId: string): boolean;
134
+ private scheduleTracking;
135
+ private processTracking;
136
+ private processWebhookQueue;
137
+ private deliverWebhook;
138
+ private sendWebhook;
139
+ private queueWebhook;
140
+ private isStatusProgression;
141
+ private isTerminalStatus;
142
+ private getEventTypeForStatus;
143
+ private updateStats;
144
+ }
@@ -0,0 +1,11 @@
1
+ import type { KMsgError, SendOptions, SendResult } from "@k-msg/core";
2
+ export interface HookContext {
3
+ messageId: string;
4
+ options: SendOptions;
5
+ timestamp: number;
6
+ }
7
+ export interface KMsgHooks {
8
+ onBeforeSend?: (context: HookContext) => void | Promise<void>;
9
+ onSuccess?: (context: HookContext, result: SendResult) => void | Promise<void>;
10
+ onError?: (context: HookContext, error: KMsgError) => void | Promise<void>;
11
+ }