@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.
- package/dist/delivery/tracker.d.ts +144 -0
- package/dist/hooks.d.ts +11 -0
- package/dist/index.d.ts +10 -854
- package/dist/index.js +112 -2030
- package/dist/index.js.map +106 -1
- package/dist/index.mjs +121 -0
- package/dist/index.mjs.map +106 -0
- package/dist/k-msg.d.ts +8 -0
- package/dist/personalization/variable.replacer.d.ts +139 -0
- package/dist/queue/job-queue.interface.d.ts +39 -0
- package/dist/queue/job.processor.d.ts +133 -0
- package/dist/queue/retry.handler.d.ts +105 -0
- package/dist/queue/sqlite-job-queue.d.ts +28 -0
- package/dist/sender/bulk.sender.d.ts +18 -0
- package/dist/types/message.types.d.ts +280 -0
- package/package.json +20 -13
- package/dist/index.cjs +0 -2084
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -854
|
@@ -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
|
+
}
|
package/dist/hooks.d.ts
ADDED
|
@@ -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
|
+
}
|