convex-notifications 1.9.0 → 1.9.2

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.
Files changed (44) hide show
  1. package/README.md +9 -0
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +19 -9
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/component/_generated/component.d.ts +5 -1
  6. package/dist/component/_generated/component.d.ts.map +1 -1
  7. package/dist/component/crons.d.ts.map +1 -1
  8. package/dist/component/crons.js +13 -3
  9. package/dist/component/crons.js.map +1 -1
  10. package/dist/component/fallback.d.ts +10 -0
  11. package/dist/component/fallback.d.ts.map +1 -1
  12. package/dist/component/fallback.js +33 -0
  13. package/dist/component/fallback.js.map +1 -1
  14. package/dist/component/inbox.d.ts +5 -1
  15. package/dist/component/inbox.d.ts.map +1 -1
  16. package/dist/component/inbox.js +17 -5
  17. package/dist/component/inbox.js.map +1 -1
  18. package/dist/component/notifications.d.ts +10 -0
  19. package/dist/component/notifications.d.ts.map +1 -1
  20. package/dist/component/notifications.js +44 -1
  21. package/dist/component/notifications.js.map +1 -1
  22. package/dist/component/retry.d.ts.map +1 -1
  23. package/dist/component/retry.js +5 -1
  24. package/dist/component/retry.js.map +1 -1
  25. package/dist/component/scheduled.d.ts.map +1 -1
  26. package/dist/component/scheduled.js +5 -1
  27. package/dist/component/scheduled.js.map +1 -1
  28. package/dist/component/webhooks/resend.d.ts.map +1 -1
  29. package/dist/component/webhooks/resend.js +4 -0
  30. package/dist/component/webhooks/resend.js.map +1 -1
  31. package/dist/component/webhooks/twilio.d.ts.map +1 -1
  32. package/dist/component/webhooks/twilio.js +4 -0
  33. package/dist/component/webhooks/twilio.js.map +1 -1
  34. package/package.json +15 -8
  35. package/src/client/index.ts +22 -16
  36. package/src/component/_generated/component.ts +2 -2
  37. package/src/component/crons.ts +25 -3
  38. package/src/component/fallback.ts +36 -0
  39. package/src/component/inbox.ts +17 -5
  40. package/src/component/notifications.ts +51 -1
  41. package/src/component/retry.ts +5 -1
  42. package/src/component/scheduled.ts +5 -1
  43. package/src/component/webhooks/resend.ts +5 -0
  44. package/src/component/webhooks/twilio.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/component/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;mEAgDrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;KAgB5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;oBAgB9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;iBAW7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;GA2C1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;KAaxB,CAAC"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/component/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;mEAgDrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;KAgB5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;oBAgB9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;iBAW7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;GA+C1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;KAaxB,CAAC"}
@@ -136,11 +136,15 @@ export const markRetryFailed = internalMutation({
136
136
  }
137
137
  const nextAttempt = retry.attempt + 1;
138
138
  if (nextAttempt > retry.maxAttempts) {
139
- // Max attempts reached
139
+ // Max attempts reached — mark retry as exhausted and delivery as failed
140
140
  await ctx.db.patch(args.id, {
141
141
  status: "exhausted",
142
142
  lastError: args.error,
143
143
  });
144
+ await ctx.db.patch(retry.deliveryLogId, {
145
+ status: "failed",
146
+ error: `Exhausted after ${retry.maxAttempts} attempts: ${args.error}`,
147
+ });
144
148
  return { willRetry: false, exhausted: true };
145
149
  }
146
150
  // Schedule next retry
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/component/retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/component/retry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled.d.ts","sourceRoot":"","sources":["../../src/component/scheduled.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;wEAqC/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;KAyC3C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;oBAgBlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;iBAa5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;iBAc9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;oBA8BtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;KAuDpC,CAAC"}
1
+ {"version":3,"file":"scheduled.d.ts","sourceRoot":"","sources":["../../src/component/scheduled.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;wEAyC/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;KAyC3C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;oBAgBlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;iBAa5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;iBAc9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;oBA8BtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;KAuDpC,CAAC"}
@@ -27,11 +27,15 @@ export const scheduleNotification = internalMutation({
27
27
  },
28
28
  returns: v.id("scheduledNotifications"),
29
29
  handler: async (ctx, args) => {
30
- // Validate scheduledFor is in the future
30
+ // Validate scheduledFor is in the future but not too far out
31
31
  const now = Date.now();
32
+ const MAX_SCHEDULE_MS = 365 * 24 * 60 * 60 * 1000; // 1 year
32
33
  if (args.scheduledFor <= now) {
33
34
  throw new Error("scheduledFor must be in the future");
34
35
  }
36
+ if (args.scheduledFor > now + MAX_SCHEDULE_MS) {
37
+ throw new Error("scheduledFor cannot be more than 1 year in the future");
38
+ }
35
39
  return await ctx.db.insert("scheduledNotifications", {
36
40
  tenantId: args.tenantId,
37
41
  userId: args.userId,
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled.js","sourceRoot":"","sources":["../../src/component/scheduled.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;IACnD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE;QACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACtC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACzC;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,yCAAyC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,wBAAwB,EAAE;YACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,aAAa,CAAC;IAC5D,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;QACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE;QACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACtC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CACvB;QACD,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACpC,CAAC,CACH;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,wBAAwB,CAAC;aAC/B,SAAS,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CACzC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CACnD;aACA,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;IACtD,IAAI,EAAE;QACJ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;KACnC;IACD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,YAAY;SACrB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;IAChD,IAAI,EAAE;QACJ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;QAClC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC;KACtC;IACD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;IAClD,IAAI,EAAE;QACJ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB;IACD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;IAC1D,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,uBAAuB;KAC5C;IACD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE/C,mBAAmB;QACnB,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,kDAAkD;QAClD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wCAAwC;QACxC,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE;YAC1B,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,aAAa,CAAC;IACrD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAChB,CAAC,CAAC,KAAK,CACL,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CACvB,CACF;KACF;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC;QACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE;QACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACtC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CACvB;QACD,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACpC,CAAC,CACH;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,wBAAwB,CAAC;iBAC/B,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,CACnC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAO,CAAC,CACvD;iBACA,OAAO,EAAE,CAAC;QACf,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,wBAAwB,CAAC;aAC/B,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aAC1D,OAAO,EAAE,CAAC;IACf,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"scheduled.js","sourceRoot":"","sources":["../../src/component/scheduled.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../../src/component/webhooks/resend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,aAAa,0CAsDxB,CAAC"}
1
+ {"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../../src/component/webhooks/resend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,aAAa,0CA2DxB,CAAC"}
@@ -131,6 +131,10 @@ export const resendWebhook = httpAction(async (ctx, request) => {
131
131
  return new Response("Invalid signature", { status: 401 });
132
132
  }
133
133
  }
134
+ else {
135
+ console.warn("[notifications] RESEND_WEBHOOK_SECRET not set — webhook signature verification is disabled. " +
136
+ "This is insecure in production. Set the environment variable to enable verification.");
137
+ }
134
138
  // Parse the webhook payload
135
139
  let payload;
136
140
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"resend.js","sourceRoot":"","sources":["../../../src/component/webhooks/resend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resend.js","sourceRoot":"","sources":["../../../src/component/webhooks/resend.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"twilio.d.ts","sourceRoot":"","sources":["../../../src/component/webhooks/twilio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyFH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,aAAa,0CAkExB,CAAC"}
1
+ {"version":3,"file":"twilio.d.ts","sourceRoot":"","sources":["../../../src/component/webhooks/twilio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyFH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,aAAa,0CAuExB,CAAC"}
@@ -111,6 +111,10 @@ export const twilioWebhook = httpAction(async (ctx, request) => {
111
111
  return new Response("Invalid signature", { status: 401 });
112
112
  }
113
113
  }
114
+ else {
115
+ console.warn("[notifications] TWILIO_AUTH_TOKEN not set — webhook signature verification is disabled. " +
116
+ "This is insecure in production. Set the environment variable to enable verification.");
117
+ }
114
118
  const messageSid = params["MessageSid"] ?? null;
115
119
  const messageStatus = (params["MessageStatus"] ?? null);
116
120
  const errorCode = params["ErrorCode"] ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"twilio.js","sourceRoot":"","sources":["../../../src/component/webhooks/twilio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAClC,GAAW,EACX,MAA8B,EAC9B,SAAwB,EACxB,SAAiB;IAEjB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gDAAgD;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,UAAU,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,6CAA6C;IAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EACnC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAC/B,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAC7C,MAAM,EACN,GAAG,EACH,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CACrC,CAAC;IAEF,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAExE,OAAO,SAAS,KAAK,iBAAiB,CAAC;AACzC,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAcD;;GAEG;AACH,SAAS,+BAA+B,CACtC,YAA6B;IAE7B,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,aAAa,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IAC7D,oCAAoC;IACpC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE1C,wDAAwD;IACxD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAChD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAExB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IAChD,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI,CAA2B,CAAC;IAClF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAEpC,2BAA2B;IAC3B,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,OAAO,IAAI,QAAQ,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,aAAa;IACb,MAAM,MAAM,GAAG,+BAA+B,CAAC,aAAa,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAyB,CAAC;IAC9B,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAC9B,KAAK,GAAG,YAAY;YAClB,CAAC,CAAC,GAAG,SAAS,KAAK,YAAY,EAAE;YACjC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,+DAA+D;IAC/D,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,EAAE;QACjE,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,KAAK;QACd,MAAM;QACN,KAAK;QACL,WAAW,EAAE;YACX,UAAU;YACV,aAAa;YACb,SAAS;YACT,YAAY;YACZ,EAAE;YACF,IAAI;SACL;KACF,CAAC,CAAC;IAEH,oCAAoC;IACpC,OAAO,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"twilio.js","sourceRoot":"","sources":["../../../src/component/webhooks/twilio.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "registry": "https://registry.npmjs.org/",
12
12
  "provenance": true
13
13
  },
14
- "version": "1.9.0",
14
+ "version": "1.9.2",
15
15
  "license": "Apache-2.0",
16
16
  "keywords": [
17
17
  "convex",
@@ -34,6 +34,11 @@
34
34
  "test:watch": "vitest --typecheck --clearScreen false",
35
35
  "test:debug": "vitest --inspect-brk --no-file-parallelism",
36
36
  "test:coverage": "vitest run --coverage --coverage.reporter=text",
37
+ "check:exports": "publint",
38
+ "check:types": "attw --pack . --profile esm-only",
39
+ "check:package": "npm run check:exports && npm run check:types",
40
+ "test:consumer": "bash consumer-test/run.sh",
41
+ "test:all": "npm run test && npm run check:package && npm run test:consumer",
37
42
  "prepublishOnly": "npm run build",
38
43
  "semantic-release": "semantic-release"
39
44
  },
@@ -76,11 +81,11 @@
76
81
  }
77
82
  },
78
83
  "peerDependencies": {
79
- "convex": "^1.31.6",
80
- "react": "^18.3.1 || ^19.0.0",
81
84
  "@convex-dev/expo-push-notifications": ">=0.3.0",
82
85
  "@convex-dev/resend": ">=0.2.0",
83
- "@convex-dev/twilio": ">=0.2.0"
86
+ "@convex-dev/twilio": ">=0.2.0",
87
+ "convex": "^1.31.6",
88
+ "react": "^18.3.1 || ^19.0.0"
84
89
  },
85
90
  "peerDependenciesMeta": {
86
91
  "@convex-dev/expo-push-notifications": {
@@ -97,10 +102,11 @@
97
102
  }
98
103
  },
99
104
  "devDependencies": {
105
+ "@arethetypeswrong/cli": "^0.18.2",
106
+ "@convex-dev/eslint-plugin": "^1.1.1",
100
107
  "@convex-dev/expo-push-notifications": "^0.3.1",
101
108
  "@convex-dev/resend": "^0.2.3",
102
109
  "@convex-dev/twilio": "^0.2.1",
103
- "@convex-dev/eslint-plugin": "^1.1.1",
104
110
  "@edge-runtime/vm": "^5.0.0",
105
111
  "@eslint/eslintrc": "^3.3.3",
106
112
  "@eslint/js": "9.39.2",
@@ -124,6 +130,7 @@
124
130
  "path-exists-cli": "2.0.0",
125
131
  "pkg-pr-new": "^0.0.62",
126
132
  "prettier": "3.8.1",
133
+ "publint": "^0.3.17",
127
134
  "react": "^19.2.4",
128
135
  "react-dom": "^19.2.4",
129
136
  "semantic-release": "^25.0.2",
@@ -135,9 +142,9 @@
135
142
  "types": "./dist/client/index.d.ts",
136
143
  "module": "./dist/client/index.js",
137
144
  "dependencies": {
138
- "@convex-dev/expo-push-notifications": "^0.3.1",
139
- "@convex-dev/resend": "^0.2.3",
140
- "@convex-dev/twilio": "^0.2.1",
145
+ "@convex-dev/expo-push-notifications": ">=0.3.0",
146
+ "@convex-dev/resend": ">=0.2.0",
147
+ "@convex-dev/twilio": ">=0.2.0",
141
148
  "convex-helpers": "^0.1.111"
142
149
  }
143
150
  }
@@ -247,10 +247,16 @@ export class Notifications {
247
247
 
248
248
  async markAllRead(ctx: RunMutationCtx) {
249
249
  const { userId, tenantId } = await this.resolveAuth(ctx);
250
- return await ctx.runMutation(this.component.inbox.markAllRead, {
251
- tenantId,
252
- userId,
253
- });
250
+ // Loop in batches to avoid transaction limits with large unread counts
251
+ let hasMore = true;
252
+ while (hasMore) {
253
+ const result = await ctx.runMutation(this.component.inbox.markAllRead, {
254
+ tenantId,
255
+ userId,
256
+ });
257
+ hasMore = result.hasMore;
258
+ }
259
+ return null;
254
260
  }
255
261
 
256
262
  async archive(ctx: RunMutationCtx, notificationId: NotificationId) {
@@ -354,10 +360,14 @@ export class Notifications {
354
360
  ? args.scheduledFor.getTime()
355
361
  : args.scheduledFor;
356
362
 
357
- // Validate scheduledFor is in the future
363
+ // Validate scheduledFor is in the future but not too far out
364
+ const MAX_SCHEDULE_MS = 365 * 24 * 60 * 60 * 1000; // 1 year
358
365
  if (scheduledFor <= Date.now()) {
359
366
  throw new Error("scheduledFor must be in the future");
360
367
  }
368
+ if (scheduledFor > Date.now() + MAX_SCHEDULE_MS) {
369
+ throw new Error("scheduledFor cannot be more than 1 year in the future");
370
+ }
361
371
 
362
372
  // Render inbox template for storage
363
373
  const inboxTemplate = definition.channels.inbox;
@@ -604,9 +614,8 @@ export class Notifications {
604
614
  );
605
615
  } else {
606
616
  // Log stub message for development
607
- console.log(
608
- `[notifications] email dispatch (no client configured):`,
609
- renderedEmail,
617
+ console.warn(
618
+ `[notifications] Email client not configured — skipping dispatch. Configure options.clients.email to enable.`,
610
619
  );
611
620
  result = {
612
621
  channel: "email",
@@ -637,9 +646,8 @@ export class Notifications {
637
646
  pushConfig?.allowUnregisteredTokens ?? true,
638
647
  );
639
648
  } else {
640
- console.log(
641
- `[notifications] push dispatch (no client configured):`,
642
- renderedPush,
649
+ console.warn(
650
+ `[notifications] Push client not configured — skipping dispatch. Configure options.clients.push to enable.`,
643
651
  );
644
652
  result = {
645
653
  channel: "push",
@@ -704,9 +712,8 @@ export class Notifications {
704
712
  error: "Scheduled for async delivery",
705
713
  };
706
714
  } else {
707
- console.log(
715
+ console.warn(
708
716
  `[notifications] SMS requires action context. Configure smsDispatchAction for async delivery.`,
709
- renderedSms,
710
717
  );
711
718
  result = {
712
719
  channel: "sms",
@@ -717,9 +724,8 @@ export class Notifications {
717
724
  }
718
725
  }
719
726
  } else {
720
- console.log(
721
- `[notifications] sms dispatch (no client configured):`,
722
- renderedSms,
727
+ console.warn(
728
+ `[notifications] SMS client not configured — skipping dispatch. Configure options.clients.sms to enable.`,
723
729
  );
724
730
  result = {
725
731
  channel: "sms",
@@ -65,8 +65,8 @@ export type ComponentApi<
65
65
  markAllRead: FunctionReference<
66
66
  "mutation",
67
67
  "internal",
68
- { tenantId?: string; userId: string },
69
- null,
68
+ { tenantId?: string; userId: string; batchSize?: number },
69
+ { marked: number; hasMore: boolean },
70
70
  Name
71
71
  >;
72
72
  markRead: FunctionReference<
@@ -22,7 +22,7 @@ crons.interval(
22
22
  "process scheduled notifications",
23
23
  { minutes: 1 },
24
24
  internal.notifications.processScheduledNotifications,
25
- { batchSize: 50 },
25
+ { batchSize: 200 },
26
26
  );
27
27
 
28
28
  /**
@@ -33,7 +33,7 @@ crons.interval(
33
33
  "process retry queue",
34
34
  { minutes: 1 },
35
35
  internal.notifications.processRetryQueue,
36
- { batchSize: 50 },
36
+ { batchSize: 200 },
37
37
  );
38
38
 
39
39
  /**
@@ -45,7 +45,29 @@ crons.interval(
45
45
  "process channel fallbacks",
46
46
  { minutes: 1 },
47
47
  internal.fallback.processFallbacks,
48
- { batchSize: 50 },
48
+ { batchSize: 200 },
49
+ );
50
+
51
+ /**
52
+ * Clean up completed retry queue entries every 6 hours.
53
+ * Removes "succeeded" and "exhausted" entries older than 7 days.
54
+ */
55
+ crons.interval(
56
+ "cleanup completed retries",
57
+ { hours: 6 },
58
+ internal.notifications.cleanupRetryQueue,
59
+ { batchSize: 500 },
60
+ );
61
+
62
+ /**
63
+ * Clean up completed fallback queue entries every 6 hours.
64
+ * Removes "cancelled" and "triggered" entries older than 7 days.
65
+ */
66
+ crons.interval(
67
+ "cleanup completed fallbacks",
68
+ { hours: 6 },
69
+ internal.fallback.cleanupFallbackQueue,
70
+ { batchSize: 500 },
49
71
  );
50
72
 
51
73
  export default crons;
@@ -216,3 +216,39 @@ export const getTriggeredFallbacks = internalQuery({
216
216
  }));
217
217
  },
218
218
  });
219
+
220
+ /**
221
+ * Clean up completed fallback queue entries older than 7 days.
222
+ * Removes entries with status "cancelled" or "triggered" to prevent table bloat.
223
+ */
224
+ export const cleanupFallbackQueue = internalMutation({
225
+ args: {
226
+ batchSize: v.optional(v.number()),
227
+ },
228
+ returns: v.object({
229
+ deleted: v.number(),
230
+ hasMore: v.boolean(),
231
+ }),
232
+ handler: async (ctx, args) => {
233
+ const batchSize = args.batchSize ?? 500;
234
+ const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000; // 7 days
235
+ let deleted = 0;
236
+
237
+ for (const status of ["cancelled", "triggered"] as const) {
238
+ if (deleted >= batchSize) break;
239
+ const entries = await ctx.db
240
+ .query("fallbackQueue")
241
+ .withIndex("by_status_fallbackAt", (q) => q.eq("status", status))
242
+ .take(batchSize - deleted + 1);
243
+
244
+ for (const entry of entries) {
245
+ if (entry._creationTime < cutoff && deleted < batchSize) {
246
+ await ctx.db.delete(entry._id);
247
+ deleted++;
248
+ }
249
+ }
250
+ }
251
+
252
+ return { deleted, hasMore: deleted >= batchSize };
253
+ },
254
+ });
@@ -43,6 +43,9 @@ export const list = internalQuery({
43
43
 
44
44
  const result = await q
45
45
  .order("desc")
46
+ // filterWith runs in JS after loading from the index. This is necessary
47
+ // because Convex doesn't support "field is undefined" in compound indexes.
48
+ // For most apps this is efficient since archived+unread is rare.
46
49
  .filterWith(async (n) => n.archivedAt === undefined)
47
50
  .paginate(args.paginationOpts);
48
51
 
@@ -68,7 +71,9 @@ export const unreadCount = internalQuery({
68
71
  .withIndex("by_userId_unread", (q) =>
69
72
  q.eq("userId", args.userId).eq("readAt", undefined),
70
73
  );
71
- // Count in-place instead of collecting all documents into memory
74
+ // Stream and count in-place rather than .collect() to avoid loading all
75
+ // unread notifications into memory. The archivedAt filter is applied in JS
76
+ // since archived+unread is a rare edge case (users typically archive after reading).
72
77
  let count = 0;
73
78
  for await (const n of q) {
74
79
  if (n.archivedAt === undefined) count++;
@@ -116,9 +121,14 @@ export const markAllRead = internalMutation({
116
121
  args: {
117
122
  tenantId: v.optional(v.string()),
118
123
  userId: v.string(),
124
+ batchSize: v.optional(v.number()),
119
125
  },
120
- returns: v.null(),
126
+ returns: v.object({
127
+ marked: v.number(),
128
+ hasMore: v.boolean(),
129
+ }),
121
130
  handler: async (ctx, args) => {
131
+ const batchSize = args.batchSize ?? 100;
122
132
  const q = args.tenantId !== undefined
123
133
  ? ctx.db
124
134
  .query("notifications")
@@ -130,9 +140,11 @@ export const markAllRead = internalMutation({
130
140
  .withIndex("by_userId_unread", (q) =>
131
141
  q.eq("userId", args.userId).eq("readAt", undefined),
132
142
  );
133
- const unread = await q.collect();
143
+ const unread = await q.take(batchSize + 1);
144
+ const hasMore = unread.length > batchSize;
145
+ const batch = unread.slice(0, batchSize);
134
146
  const now = Date.now();
135
- for (const n of unread) {
147
+ for (const n of batch) {
136
148
  await ctx.db.patch(n._id, { readAt: now });
137
149
 
138
150
  // Cancel any pending fallbacks for this notification
@@ -146,7 +158,7 @@ export const markAllRead = internalMutation({
146
158
  await ctx.db.patch(fallback._id, { status: "cancelled" });
147
159
  }
148
160
  }
149
- return null;
161
+ return { marked: batch.length, hasMore };
150
162
  },
151
163
  });
152
164
 
@@ -235,8 +235,22 @@ export const processRetryQueue = internalMutation({
235
235
  readyForRetry: v.array(v.id("retryQueue")),
236
236
  }),
237
237
  handler: async (ctx, args) => {
238
- const batchSize = args.batchSize ?? 50;
238
+ const batchSize = args.batchSize ?? 200;
239
239
  const now = Date.now();
240
+ const STALE_THRESHOLD_MS = 5 * 60 * 1000; // 5 minutes
241
+
242
+ // Reset stale "processing" entries back to pending.
243
+ // Uses nextRetryAt as a proxy for when the entry was last touched.
244
+ const stale = await ctx.db
245
+ .query("retryQueue")
246
+ .withIndex("by_status_nextRetryAt", (q) =>
247
+ q.eq("status", "processing").lte("nextRetryAt", now - STALE_THRESHOLD_MS),
248
+ )
249
+ .take(batchSize);
250
+
251
+ for (const entry of stale) {
252
+ await ctx.db.patch(entry._id, { status: "pending", nextRetryAt: now });
253
+ }
240
254
 
241
255
  // Get pending retries that are ready
242
256
  const pending = await ctx.db
@@ -260,3 +274,39 @@ export const processRetryQueue = internalMutation({
260
274
  };
261
275
  },
262
276
  });
277
+
278
+ /**
279
+ * Clean up completed retry queue entries older than 7 days.
280
+ * Removes entries with status "succeeded" or "exhausted" to prevent table bloat.
281
+ */
282
+ export const cleanupRetryQueue = internalMutation({
283
+ args: {
284
+ batchSize: v.optional(v.number()),
285
+ },
286
+ returns: v.object({
287
+ deleted: v.number(),
288
+ hasMore: v.boolean(),
289
+ }),
290
+ handler: async (ctx, args) => {
291
+ const batchSize = args.batchSize ?? 500;
292
+ const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000; // 7 days
293
+ let deleted = 0;
294
+
295
+ for (const status of ["succeeded", "exhausted"] as const) {
296
+ if (deleted >= batchSize) break;
297
+ const entries = await ctx.db
298
+ .query("retryQueue")
299
+ .withIndex("by_status_nextRetryAt", (q) => q.eq("status", status))
300
+ .take(batchSize - deleted + 1);
301
+
302
+ for (const entry of entries) {
303
+ if (entry._creationTime < cutoff && deleted < batchSize) {
304
+ await ctx.db.delete(entry._id);
305
+ deleted++;
306
+ }
307
+ }
308
+ }
309
+
310
+ return { deleted, hasMore: deleted >= batchSize };
311
+ },
312
+ });
@@ -165,11 +165,15 @@ export const markRetryFailed = internalMutation({
165
165
  const nextAttempt = retry.attempt + 1;
166
166
 
167
167
  if (nextAttempt > retry.maxAttempts) {
168
- // Max attempts reached
168
+ // Max attempts reached — mark retry as exhausted and delivery as failed
169
169
  await ctx.db.patch(args.id, {
170
170
  status: "exhausted",
171
171
  lastError: args.error,
172
172
  });
173
+ await ctx.db.patch(retry.deliveryLogId, {
174
+ status: "failed",
175
+ error: `Exhausted after ${retry.maxAttempts} attempts: ${args.error}`,
176
+ });
173
177
  return { willRetry: false, exhausted: true };
174
178
  }
175
179
 
@@ -29,11 +29,15 @@ export const scheduleNotification = internalMutation({
29
29
  },
30
30
  returns: v.id("scheduledNotifications"),
31
31
  handler: async (ctx, args) => {
32
- // Validate scheduledFor is in the future
32
+ // Validate scheduledFor is in the future but not too far out
33
33
  const now = Date.now();
34
+ const MAX_SCHEDULE_MS = 365 * 24 * 60 * 60 * 1000; // 1 year
34
35
  if (args.scheduledFor <= now) {
35
36
  throw new Error("scheduledFor must be in the future");
36
37
  }
38
+ if (args.scheduledFor > now + MAX_SCHEDULE_MS) {
39
+ throw new Error("scheduledFor cannot be more than 1 year in the future");
40
+ }
37
41
 
38
42
  return await ctx.db.insert("scheduledNotifications", {
39
43
  tenantId: args.tenantId,
@@ -200,6 +200,11 @@ export const resendWebhook = httpAction(async (ctx, request) => {
200
200
  if (!isValid) {
201
201
  return new Response("Invalid signature", { status: 401 });
202
202
  }
203
+ } else {
204
+ console.warn(
205
+ "[notifications] RESEND_WEBHOOK_SECRET not set — webhook signature verification is disabled. " +
206
+ "This is insecure in production. Set the environment variable to enable verification.",
207
+ );
203
208
  }
204
209
 
205
210
  // Parse the webhook payload
@@ -152,6 +152,11 @@ export const twilioWebhook = httpAction(async (ctx, request) => {
152
152
  if (!isValid) {
153
153
  return new Response("Invalid signature", { status: 401 });
154
154
  }
155
+ } else {
156
+ console.warn(
157
+ "[notifications] TWILIO_AUTH_TOKEN not set — webhook signature verification is disabled. " +
158
+ "This is insecure in production. Set the environment variable to enable verification.",
159
+ );
155
160
  }
156
161
 
157
162
  const messageSid = params["MessageSid"] ?? null;