@voyantjs/notifications 0.103.0 → 0.104.1
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/README.md +4 -0
- package/dist/service-deliveries.d.ts.map +1 -1
- package/dist/service-deliveries.js +6 -2
- package/dist/service-reminders.d.ts.map +1 -1
- package/dist/service-reminders.js +17 -35
- package/dist/service-sequence.d.ts +1 -1
- package/dist/service-sequence.d.ts.map +1 -1
- package/dist/service-sequence.js +14 -7
- package/dist/service-shared.d.ts +1 -0
- package/dist/service-shared.d.ts.map +1 -1
- package/dist/service-shared.js +3 -0
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -87,6 +87,10 @@ Reminder rules can currently target:
|
|
|
87
87
|
- `booking_payment_schedule`
|
|
88
88
|
- `invoice`
|
|
89
89
|
|
|
90
|
+
Stage cadence and `maxSendsInStage` are evaluated against reminder run attempts.
|
|
91
|
+
A queued, sent, skipped, or failed run consumes the stage slot; failed runs are
|
|
92
|
+
terminal until an operator or explicit recovery flow requeues them.
|
|
93
|
+
|
|
90
94
|
For finance-aware collection sends, the routes also support:
|
|
91
95
|
|
|
92
96
|
- `POST /payment-sessions/:id/send`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-deliveries.d.ts","sourceRoot":"","sources":["../src/service-deliveries.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,KAAK,EACV,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,EACrB,mCAAmC,EACpC,MAAM,qBAAqB,CAAA;AA+F5B,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,iBAOlF;AA6CD,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgChG;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAOvE;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgCX;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"service-deliveries.d.ts","sourceRoot":"","sources":["../src/service-deliveries.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,KAAK,EACV,6BAA6B,EAC7B,mBAAmB,EACnB,4BAA4B,EAC5B,qBAAqB,EACrB,mCAAmC,EACpC,MAAM,qBAAqB,CAAA;AA+F5B,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,iBAOlF;AA6CD,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgChG;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAOvE;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgCX;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAuI7B;AAED,wBAAsB,8BAA8B,CAClD,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA2G3C;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAyGpC"}
|
|
@@ -209,10 +209,14 @@ export async function sendNotification(db, dispatcher, input) {
|
|
|
209
209
|
if (!channel) {
|
|
210
210
|
throw new NotificationError("Notification channel is required");
|
|
211
211
|
}
|
|
212
|
-
const
|
|
212
|
+
const defaultProvider = dispatcher.getProvider(channel);
|
|
213
|
+
const provider = input.provider ?? template?.provider ?? defaultProvider?.name;
|
|
213
214
|
if (!provider) {
|
|
214
215
|
throw new NotificationError(`No notification provider available for channel "${channel}"`);
|
|
215
216
|
}
|
|
217
|
+
if (provider !== defaultProvider?.name && dispatcher.getProviderByName?.(provider) == null) {
|
|
218
|
+
throw new NotificationError(`No notification provider registered with name "${provider}"`);
|
|
219
|
+
}
|
|
216
220
|
const subject = input.subject ?? renderNotificationTemplate(template?.subjectTemplate, data);
|
|
217
221
|
const html = input.html ?? renderNotificationTemplate(template?.htmlTemplate, data);
|
|
218
222
|
const text = input.text ?? renderNotificationTemplate(template?.textTemplate, data);
|
|
@@ -257,7 +261,7 @@ export async function sendNotification(db, dispatcher, input) {
|
|
|
257
261
|
throw new NotificationError("Failed to create notification delivery");
|
|
258
262
|
}
|
|
259
263
|
try {
|
|
260
|
-
const result = provider ===
|
|
264
|
+
const result = provider === defaultProvider?.name
|
|
261
265
|
? await dispatcher.send({
|
|
262
266
|
to: input.to,
|
|
263
267
|
channel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-reminders.d.ts","sourceRoot":"","sources":["../src/service-reminders.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAUjE,OAAO,EACL,KAAK,iCAAiC,EAGvC,MAAM,gCAAgC,CAAA;AAevC,OAAO,KAAK,EAGV,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAW5B,KAAK,wBAAwB,GAAG,CAAC,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAGnF,KAAK,kBAAkB,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAA;AACnE,KAAK,8BAA8B,GAAG,OAAO,CAC3C,kBAAkB,EAClB,mBAAmB,GAAG,kBAAkB,GAAG,+BAA+B,CAC3E,CAAA;AAED,MAAM,WAAW,kCAAkC;IACjD,0BAA0B,CAAC,EAAE,iCAAiC,CAAA;CAC/D;AA6pBD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IACL,UAAU,EAAE,8BAA8B,CAAA;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,EACD,OAAO,GAAE,kCAAuC;;;;;;;;;;;;;;;;;;;aAmBjD;AAED,wBAAsB,kCAAkC,CACtD,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,oBAGlB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,oBAAoB,YAAK,EAChC,eAAe,EAAE,wBAAwB,gCAG1C;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"service-reminders.d.ts","sourceRoot":"","sources":["../src/service-reminders.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAUjE,OAAO,EACL,KAAK,iCAAiC,EAGvC,MAAM,gCAAgC,CAAA;AAevC,OAAO,KAAK,EAGV,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAW5B,KAAK,wBAAwB,GAAG,CAAC,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAGnF,KAAK,kBAAkB,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAA;AACnE,KAAK,8BAA8B,GAAG,OAAO,CAC3C,kBAAkB,EAClB,mBAAmB,GAAG,kBAAkB,GAAG,+BAA+B,CAC3E,CAAA;AAED,MAAM,WAAW,kCAAkC;IACjD,0BAA0B,CAAC,EAAE,iCAAiC,CAAA;CAC/D;AA6pBD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IACL,UAAU,EAAE,8BAA8B,CAAA;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,EACD,OAAO,GAAE,kCAAuC;;;;;;;;;;;;;;;;;;;aAmBjD;AAED,wBAAsB,kCAAkC,CACtD,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,oBAGlB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,kBAAkB,EACtB,KAAK,EAAE,oBAAoB,YAAK,EAChC,eAAe,EAAE,wBAAwB,gCAG1C;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;;;UAwDjC;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,GAAE,oBAAyB,gCAGjC;AAsTD,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,kBAAkB,EACtB,UAAU,EAAE,mBAAmB,EAC/B,KAAK,GAAE,oBAAyB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CA6B9B;AAED,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,kBAAkB,EACtB,eAAe,EAAE,wBAAwB,EACzC,KAAK,GAAE,oBAAyB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CA6B9B"}
|
|
@@ -550,7 +550,7 @@ export async function deliverReminderRun(db, dispatcher, input) {
|
|
|
550
550
|
processedAt: now,
|
|
551
551
|
updatedAt: now,
|
|
552
552
|
})
|
|
553
|
-
.where(and(eq(notificationReminderRuns.id, input.reminderRunId),
|
|
553
|
+
.where(and(eq(notificationReminderRuns.id, input.reminderRunId), eq(notificationReminderRuns.status, "queued")))
|
|
554
554
|
.returning();
|
|
555
555
|
const run = claimedRun ?? (await getReminderRunById(db, input.reminderRunId));
|
|
556
556
|
if (!run) {
|
|
@@ -604,7 +604,7 @@ async function emitStageChannelRun(db, dispatcher, rule, stage, channelRow, targ
|
|
|
604
604
|
.from(notificationReminderRuns)
|
|
605
605
|
.where(eq(notificationReminderRuns.dedupeKey, dedupeKey))
|
|
606
606
|
.limit(1);
|
|
607
|
-
if (existingRun
|
|
607
|
+
if (existingRun) {
|
|
608
608
|
return { status: "skipped", runId: existingRun.id };
|
|
609
609
|
}
|
|
610
610
|
const baseValues = {
|
|
@@ -632,31 +632,19 @@ async function emitStageChannelRun(db, dispatcher, rule, stage, channelRow, targ
|
|
|
632
632
|
},
|
|
633
633
|
};
|
|
634
634
|
if (!recipient?.email) {
|
|
635
|
-
const [run] =
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
.returning()
|
|
641
|
-
: await db
|
|
642
|
-
.insert(notificationReminderRuns)
|
|
643
|
-
.values({ ...baseValues, status: "skipped", errorMessage: "no_recipient" })
|
|
644
|
-
.onConflictDoNothing({ target: notificationReminderRuns.dedupeKey })
|
|
645
|
-
.returning();
|
|
635
|
+
const [run] = await db
|
|
636
|
+
.insert(notificationReminderRuns)
|
|
637
|
+
.values({ ...baseValues, status: "skipped", errorMessage: "no_recipient" })
|
|
638
|
+
.onConflictDoNothing({ target: notificationReminderRuns.dedupeKey })
|
|
639
|
+
.returning();
|
|
646
640
|
return { status: "skipped", runId: run?.id ?? null };
|
|
647
641
|
}
|
|
648
642
|
if (enqueueDelivery && !dispatcher) {
|
|
649
|
-
const [queuedRun] =
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
.returning()
|
|
655
|
-
: await db
|
|
656
|
-
.insert(notificationReminderRuns)
|
|
657
|
-
.values({ ...baseValues, status: "queued" })
|
|
658
|
-
.onConflictDoNothing({ target: notificationReminderRuns.dedupeKey })
|
|
659
|
-
.returning();
|
|
643
|
+
const [queuedRun] = await db
|
|
644
|
+
.insert(notificationReminderRuns)
|
|
645
|
+
.values({ ...baseValues, status: "queued" })
|
|
646
|
+
.onConflictDoNothing({ target: notificationReminderRuns.dedupeKey })
|
|
647
|
+
.returning();
|
|
660
648
|
if (!queuedRun)
|
|
661
649
|
return { status: "skipped", runId: null };
|
|
662
650
|
try {
|
|
@@ -672,17 +660,11 @@ async function emitStageChannelRun(db, dispatcher, rule, stage, channelRow, targ
|
|
|
672
660
|
if (!dispatcher) {
|
|
673
661
|
return { status: "skipped", runId: null };
|
|
674
662
|
}
|
|
675
|
-
const [processingRun] =
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
.returning()
|
|
681
|
-
: await db
|
|
682
|
-
.insert(notificationReminderRuns)
|
|
683
|
-
.values({ ...baseValues, status: "processing" })
|
|
684
|
-
.onConflictDoNothing({ target: notificationReminderRuns.dedupeKey })
|
|
685
|
-
.returning();
|
|
663
|
+
const [processingRun] = await db
|
|
664
|
+
.insert(notificationReminderRuns)
|
|
665
|
+
.values({ ...baseValues, status: "processing" })
|
|
666
|
+
.onConflictDoNothing({ target: notificationReminderRuns.dedupeKey })
|
|
667
|
+
.returning();
|
|
686
668
|
if (!processingRun) {
|
|
687
669
|
return { status: "skipped", runId: null };
|
|
688
670
|
}
|
|
@@ -29,7 +29,7 @@ export declare const DEFAULT_NOTIFICATION_SETTINGS: NotificationSettings;
|
|
|
29
29
|
export declare function getNotificationSettings(db: PostgresJsDatabase, scope?: string): Promise<NotificationSettings>;
|
|
30
30
|
export declare function listStagesForRule(db: PostgresJsDatabase, reminderRuleId: string): Promise<NotificationReminderRuleStage[]>;
|
|
31
31
|
export declare function listChannelsForStage(db: PostgresJsDatabase, stageId: string): Promise<NotificationReminderStageChannel[]>;
|
|
32
|
-
export declare function pickActiveStage(stages: NotificationReminderRuleStage[],
|
|
32
|
+
export declare function pickActiveStage(stages: NotificationReminderRuleStage[], attemptsSoFar: number): NotificationReminderRuleStage | null;
|
|
33
33
|
export declare function inWindow(today: Date, anchorDate: Date, stage: NotificationReminderRuleStage): boolean;
|
|
34
34
|
export declare function pickEscalatingInterval(intervals: NotificationReminderStageCadenceInterval[] | null | undefined, daysUntilDue: number | null): NotificationReminderStageCadenceInterval | null;
|
|
35
35
|
export declare function cadenceElapsed(today: Date, lastSentAt: Date | null, stage: NotificationReminderRuleStage, daysUntilDue: number | null): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-sequence.d.ts","sourceRoot":"","sources":["../src/service-sequence.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,KAAK,wCAAwC,EAC7C,KAAK,gCAAgC,EACrC,KAAK,oBAAoB,EAM1B,MAAM,aAAa,CAAA;AAGpB,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,IAAI,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,6BAA6B,CAAA;CAAE,GACtE;IACE,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,6BAA6B,CAAA;IACpC,UAAU,EAAE,IAAI,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAEL,eAAO,MAAM,6BAA6B,EAAE,oBAW3C,CAAA;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,kBAAkB,EACtB,KAAK,SAAY,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAO/B;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,kBAAkB,EACtB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAM1C;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,kBAAkB,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAS7C;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,6BAA6B,EAAE,EACvC,
|
|
1
|
+
{"version":3,"file":"service-sequence.d.ts","sourceRoot":"","sources":["../src/service-sequence.ts"],"names":[],"mappings":"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"}
|
package/dist/service-sequence.js
CHANGED
|
@@ -37,19 +37,26 @@ export async function listChannelsForStage(db, stageId) {
|
|
|
37
37
|
.where(eq(notificationReminderStageChannels.stageId, stageId))
|
|
38
38
|
.orderBy(asc(notificationReminderStageChannels.orderIndex), asc(notificationReminderStageChannels.createdAt));
|
|
39
39
|
}
|
|
40
|
-
export function pickActiveStage(stages,
|
|
40
|
+
export function pickActiveStage(stages, attemptsSoFar) {
|
|
41
41
|
if (stages.length === 0)
|
|
42
42
|
return null;
|
|
43
43
|
let cumulative = 0;
|
|
44
44
|
for (const stage of stages) {
|
|
45
45
|
const cap = stage.maxSendsInStage ?? Number.POSITIVE_INFINITY;
|
|
46
|
-
if (
|
|
46
|
+
if (attemptsSoFar < cumulative + cap) {
|
|
47
47
|
return stage;
|
|
48
48
|
}
|
|
49
49
|
cumulative += cap;
|
|
50
50
|
}
|
|
51
51
|
return null;
|
|
52
52
|
}
|
|
53
|
+
function isDeliveryAttempt(status) {
|
|
54
|
+
return (status === "queued" ||
|
|
55
|
+
status === "processing" ||
|
|
56
|
+
status === "sent" ||
|
|
57
|
+
status === "skipped" ||
|
|
58
|
+
status === "failed");
|
|
59
|
+
}
|
|
53
60
|
export function inWindow(today, anchorDate, stage) {
|
|
54
61
|
const start = addUtcDays(startOfUtcDay(anchorDate), stage.windowStartDays);
|
|
55
62
|
const end = addUtcDays(startOfUtcDay(anchorDate), stage.windowEndDays);
|
|
@@ -125,8 +132,8 @@ export function evaluateStage(_rule, stages, target, history, today) {
|
|
|
125
132
|
if (target.isTerminal) {
|
|
126
133
|
return { fire: false, reason: "target_terminal_state" };
|
|
127
134
|
}
|
|
128
|
-
const
|
|
129
|
-
const stage = pickActiveStage(stages,
|
|
135
|
+
const attemptHistory = history.filter((h) => isDeliveryAttempt(h.status));
|
|
136
|
+
const stage = pickActiveStage(stages, attemptHistory.length);
|
|
130
137
|
if (!stage) {
|
|
131
138
|
return { fire: false, reason: "no_active_stage" };
|
|
132
139
|
}
|
|
@@ -137,7 +144,7 @@ export function evaluateStage(_rule, stages, target, history, today) {
|
|
|
137
144
|
if (!inWindow(today, anchorDate, stage)) {
|
|
138
145
|
return { fire: false, reason: "outside_window", stage };
|
|
139
146
|
}
|
|
140
|
-
const
|
|
147
|
+
const lastAttempt = attemptHistory.reduce((acc, e) => {
|
|
141
148
|
const stamp = e.sentAt ?? e.scheduledFor;
|
|
142
149
|
return acc && acc > stamp ? acc : stamp;
|
|
143
150
|
}, null);
|
|
@@ -145,10 +152,10 @@ export function evaluateStage(_rule, stages, target, history, today) {
|
|
|
145
152
|
if (target.dueDate) {
|
|
146
153
|
daysUntilDue = daysBetweenUtc(new Date(`${target.dueDate}T00:00:00Z`), today);
|
|
147
154
|
}
|
|
148
|
-
if (!cadenceElapsed(today,
|
|
155
|
+
if (!cadenceElapsed(today, lastAttempt, stage, daysUntilDue)) {
|
|
149
156
|
return { fire: false, reason: "cadence_not_elapsed", stage };
|
|
150
157
|
}
|
|
151
|
-
return { fire: true, stage, anchorDate, sendCountAtFire:
|
|
158
|
+
return { fire: true, stage, anchorDate, sendCountAtFire: attemptHistory.length + 1 };
|
|
152
159
|
}
|
|
153
160
|
function parseTimeOfDayUtcMinutes(value) {
|
|
154
161
|
const [hh, mm] = value.split(":").map((part) => Number(part));
|
package/dist/service-shared.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export interface NotificationService {
|
|
|
42
42
|
send(payload: NotificationPayload): Promise<NotificationResult>;
|
|
43
43
|
sendWith(providerName: string, payload: NotificationPayload): Promise<NotificationResult>;
|
|
44
44
|
getProvider(channel: NotificationChannel): NotificationProvider | undefined;
|
|
45
|
+
getProviderByName?(providerName: string): NotificationProvider | undefined;
|
|
45
46
|
}
|
|
46
47
|
export declare function createNotificationService(providers: ReadonlyArray<NotificationProvider>): NotificationService;
|
|
47
48
|
export declare function summarizeNotificationAttachments(attachments: ReadonlyArray<NotificationAttachment> | null | undefined): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-shared.d.ts","sourceRoot":"","sources":["../src/service-shared.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service-shared.d.ts","sourceRoot":"","sources":["../src/service-shared.ts"],"names":[],"mappings":"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"}
|
package/dist/service-shared.js
CHANGED
|
@@ -35,6 +35,9 @@ export function createNotificationService(providers) {
|
|
|
35
35
|
getProvider(channel) {
|
|
36
36
|
return byChannel.get(channel);
|
|
37
37
|
},
|
|
38
|
+
getProviderByName(providerName) {
|
|
39
|
+
return byName.get(providerName);
|
|
40
|
+
},
|
|
38
41
|
};
|
|
39
42
|
}
|
|
40
43
|
export function summarizeNotificationAttachments(attachments) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/notifications",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.104.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -61,12 +61,12 @@
|
|
|
61
61
|
"hono": "^4.12.10",
|
|
62
62
|
"liquidjs": "^10.24.0",
|
|
63
63
|
"zod": "^4.3.6",
|
|
64
|
-
"@voyantjs/bookings": "0.
|
|
65
|
-
"@voyantjs/core": "0.
|
|
66
|
-
"@voyantjs/db": "0.
|
|
67
|
-
"@voyantjs/finance": "0.
|
|
68
|
-
"@voyantjs/hono": "0.
|
|
69
|
-
"@voyantjs/legal": "0.
|
|
64
|
+
"@voyantjs/bookings": "0.104.1",
|
|
65
|
+
"@voyantjs/core": "0.104.1",
|
|
66
|
+
"@voyantjs/db": "0.104.1",
|
|
67
|
+
"@voyantjs/finance": "0.104.1",
|
|
68
|
+
"@voyantjs/hono": "0.104.1",
|
|
69
|
+
"@voyantjs/legal": "0.104.1"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"typescript": "^6.0.2",
|