@commonpub/server 1.1.0 → 2.1.0

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 (52) hide show
  1. package/dist/admin/admin.d.ts +1 -0
  2. package/dist/admin/admin.d.ts.map +1 -1
  3. package/dist/admin/admin.js +21 -1
  4. package/dist/admin/admin.js.map +1 -1
  5. package/dist/admin/index.d.ts +1 -1
  6. package/dist/admin/index.d.ts.map +1 -1
  7. package/dist/admin/index.js +1 -1
  8. package/dist/admin/index.js.map +1 -1
  9. package/dist/content/content.d.ts +13 -2
  10. package/dist/content/content.d.ts.map +1 -1
  11. package/dist/content/content.js +40 -10
  12. package/dist/content/content.js.map +1 -1
  13. package/dist/content/index.d.ts +1 -1
  14. package/dist/content/index.d.ts.map +1 -1
  15. package/dist/content/index.js +1 -1
  16. package/dist/content/index.js.map +1 -1
  17. package/dist/federation/backfill.d.ts +11 -7
  18. package/dist/federation/backfill.d.ts.map +1 -1
  19. package/dist/federation/backfill.js +58 -23
  20. package/dist/federation/backfill.js.map +1 -1
  21. package/dist/federation/circuitBreaker.d.ts +30 -0
  22. package/dist/federation/circuitBreaker.d.ts.map +1 -0
  23. package/dist/federation/circuitBreaker.js +116 -0
  24. package/dist/federation/circuitBreaker.js.map +1 -0
  25. package/dist/federation/delivery.d.ts +12 -6
  26. package/dist/federation/delivery.d.ts.map +1 -1
  27. package/dist/federation/delivery.js +78 -20
  28. package/dist/federation/delivery.js.map +1 -1
  29. package/dist/federation/inboxHandlers.d.ts +6 -1
  30. package/dist/federation/inboxHandlers.d.ts.map +1 -1
  31. package/dist/federation/inboxHandlers.js +35 -4
  32. package/dist/federation/inboxHandlers.js.map +1 -1
  33. package/dist/federation/index.d.ts +4 -2
  34. package/dist/federation/index.d.ts.map +1 -1
  35. package/dist/federation/index.js +3 -1
  36. package/dist/federation/index.js.map +1 -1
  37. package/dist/federation/mirroring.d.ts +9 -4
  38. package/dist/federation/mirroring.d.ts.map +1 -1
  39. package/dist/federation/mirroring.js +31 -8
  40. package/dist/federation/mirroring.js.map +1 -1
  41. package/dist/federation/outboxQueries.d.ts +21 -0
  42. package/dist/federation/outboxQueries.d.ts.map +1 -0
  43. package/dist/federation/outboxQueries.js +59 -0
  44. package/dist/federation/outboxQueries.js.map +1 -0
  45. package/dist/federation/timeline.d.ts.map +1 -1
  46. package/dist/federation/timeline.js +4 -4
  47. package/dist/federation/timeline.js.map +1 -1
  48. package/dist/index.d.ts +3 -3
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +3 -3
  51. package/dist/index.js.map +1 -1
  52. package/package.json +39 -102
@@ -1 +1 @@
1
- {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../src/federation/backfill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../src/federation/backfill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { DB } from '../types.js';
2
+ /**
3
+ * Check if the circuit is open for a domain (should skip delivery).
4
+ * Returns true if delivery should be SKIPPED (circuit is open).
5
+ */
6
+ export declare function isCircuitOpen(db: DB, domain: string): Promise<boolean>;
7
+ /**
8
+ * Record a successful delivery to a domain.
9
+ * Resets consecutive failures and closes the circuit.
10
+ */
11
+ export declare function recordDeliverySuccess(db: DB, domain: string): Promise<void>;
12
+ /**
13
+ * Record a delivery failure to a domain.
14
+ * Increments consecutive failures. If threshold exceeded, opens the circuit.
15
+ */
16
+ export declare function recordDeliveryFailure(db: DB, domain: string, failureThreshold?: number): Promise<void>;
17
+ /**
18
+ * Get delivery health stats for all known remote instances.
19
+ */
20
+ export declare function getDeliveryHealth(db: DB): Promise<Array<{
21
+ domain: string;
22
+ consecutiveFailures: number;
23
+ totalDelivered: number;
24
+ totalFailed: number;
25
+ circuitOpen: boolean;
26
+ circuitOpenUntil: Date | null;
27
+ lastSuccessAt: Date | null;
28
+ lastFailureAt: Date | null;
29
+ }>>;
30
+ //# sourceMappingURL=circuitBreaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuitBreaker.d.ts","sourceRoot":"","sources":["../../src/federation/circuitBreaker.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AActC;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS5E;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBjF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,gBAAgB,SAA4B,GAC3C,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;CAC5B,CAAC,CAAC,CAYF"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Circuit breaker for federation delivery.
3
+ * Tracks consecutive failures per remote instance domain.
4
+ * After N consecutive failures, opens the circuit (stops delivery attempts)
5
+ * for an exponentially increasing cooldown period.
6
+ */
7
+ import { eq, sql } from 'drizzle-orm';
8
+ import { instanceHealth } from '@commonpub/schema';
9
+ /** Default: open circuit after 50 consecutive failures */
10
+ const DEFAULT_FAILURE_THRESHOLD = 50;
11
+ /** Cooldown periods: 5min, 15min, 1h, 6h, 24h */
12
+ const COOLDOWN_MS = [
13
+ 5 * 60_000, // 5 minutes
14
+ 15 * 60_000, // 15 minutes
15
+ 60 * 60_000, // 1 hour
16
+ 6 * 60 * 60_000, // 6 hours
17
+ 24 * 60 * 60_000, // 24 hours
18
+ ];
19
+ /**
20
+ * Check if the circuit is open for a domain (should skip delivery).
21
+ * Returns true if delivery should be SKIPPED (circuit is open).
22
+ */
23
+ export async function isCircuitOpen(db, domain) {
24
+ const [health] = await db
25
+ .select({ circuitOpenUntil: instanceHealth.circuitOpenUntil })
26
+ .from(instanceHealth)
27
+ .where(eq(instanceHealth.domain, domain))
28
+ .limit(1);
29
+ if (!health?.circuitOpenUntil)
30
+ return false;
31
+ return health.circuitOpenUntil.getTime() > Date.now();
32
+ }
33
+ /**
34
+ * Record a successful delivery to a domain.
35
+ * Resets consecutive failures and closes the circuit.
36
+ */
37
+ export async function recordDeliverySuccess(db, domain) {
38
+ await db
39
+ .insert(instanceHealth)
40
+ .values({
41
+ domain,
42
+ consecutiveFailures: 0,
43
+ totalDelivered: 1,
44
+ lastSuccessAt: new Date(),
45
+ circuitOpenUntil: null,
46
+ })
47
+ .onConflictDoUpdate({
48
+ target: instanceHealth.domain,
49
+ set: {
50
+ consecutiveFailures: 0,
51
+ totalDelivered: sql `${instanceHealth.totalDelivered} + 1`,
52
+ lastSuccessAt: new Date(),
53
+ circuitOpenUntil: null,
54
+ updatedAt: new Date(),
55
+ },
56
+ });
57
+ }
58
+ /**
59
+ * Record a delivery failure to a domain.
60
+ * Increments consecutive failures. If threshold exceeded, opens the circuit.
61
+ */
62
+ export async function recordDeliveryFailure(db, domain, failureThreshold = DEFAULT_FAILURE_THRESHOLD) {
63
+ // Upsert: increment failures, update timestamp
64
+ await db
65
+ .insert(instanceHealth)
66
+ .values({
67
+ domain,
68
+ consecutiveFailures: 1,
69
+ totalFailed: 1,
70
+ lastFailureAt: new Date(),
71
+ })
72
+ .onConflictDoUpdate({
73
+ target: instanceHealth.domain,
74
+ set: {
75
+ consecutiveFailures: sql `${instanceHealth.consecutiveFailures} + 1`,
76
+ totalFailed: sql `${instanceHealth.totalFailed} + 1`,
77
+ lastFailureAt: new Date(),
78
+ updatedAt: new Date(),
79
+ },
80
+ });
81
+ // Check if we need to open the circuit
82
+ const [health] = await db
83
+ .select({
84
+ consecutiveFailures: instanceHealth.consecutiveFailures,
85
+ })
86
+ .from(instanceHealth)
87
+ .where(eq(instanceHealth.domain, domain))
88
+ .limit(1);
89
+ if (health && health.consecutiveFailures >= failureThreshold) {
90
+ // Calculate cooldown: escalating based on how many times we've opened
91
+ const openCount = Math.floor(health.consecutiveFailures / failureThreshold) - 1;
92
+ const cooldownMs = COOLDOWN_MS[Math.min(openCount, COOLDOWN_MS.length - 1)];
93
+ const openUntil = new Date(Date.now() + cooldownMs);
94
+ await db
95
+ .update(instanceHealth)
96
+ .set({ circuitOpenUntil: openUntil, updatedAt: new Date() })
97
+ .where(eq(instanceHealth.domain, domain));
98
+ }
99
+ }
100
+ /**
101
+ * Get delivery health stats for all known remote instances.
102
+ */
103
+ export async function getDeliveryHealth(db) {
104
+ const rows = await db.select().from(instanceHealth).orderBy(instanceHealth.domain);
105
+ return rows.map((r) => ({
106
+ domain: r.domain,
107
+ consecutiveFailures: r.consecutiveFailures,
108
+ totalDelivered: r.totalDelivered,
109
+ totalFailed: r.totalFailed,
110
+ circuitOpen: r.circuitOpenUntil ? r.circuitOpenUntil.getTime() > Date.now() : false,
111
+ circuitOpenUntil: r.circuitOpenUntil,
112
+ lastSuccessAt: r.lastSuccessAt,
113
+ lastFailureAt: r.lastFailureAt,
114
+ }));
115
+ }
116
+ //# sourceMappingURL=circuitBreaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuitBreaker.js","sourceRoot":"","sources":["../../src/federation/circuitBreaker.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,19 @@ export interface DeliveryResult {
4
4
  failed: number;
5
5
  errors: string[];
6
6
  }
7
+ export interface DeliveryOptions {
8
+ batchSize?: number;
9
+ maxRetries?: number;
10
+ }
7
11
  /**
8
12
  * Process and deliver pending outbound activities.
9
- * Call this from a background worker or cron job.
10
- *
11
- * @param db - Database connection
12
- * @param domain - The local instance domain
13
- * @param batchSize - Max activities to process per run (default 20)
13
+ * Uses claim-based locking for multi-worker safety:
14
+ * each worker claims activities by setting lockedAt, preventing duplicates.
15
+ */
16
+ export declare function deliverPendingActivities(db: DB, domain: string, batchSizeOrOpts?: number | DeliveryOptions): Promise<DeliveryResult>;
17
+ /**
18
+ * Delete delivered activities older than the specified retention period.
19
+ * Call from a scheduled job (e.g., daily via the delivery worker plugin).
14
20
  */
15
- export declare function deliverPendingActivities(db: DB, domain: string, batchSize?: number): Promise<DeliveryResult>;
21
+ export declare function cleanupDeliveredActivities(db: DB, retentionDays: number): Promise<number>;
16
22
  //# sourceMappingURL=delivery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAsBtC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,SAAS,SAAK,GACb,OAAO,CAAC,cAAc,CAAC,CAoCzB"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAwBtC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GAAG,eAAe,GACzC,OAAO,CAAC,cAAc,CAAC,CA6DzB;AAmXD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAYjB"}
@@ -2,10 +2,12 @@
2
2
  * Activity delivery — sends pending outbound AP activities to remote inboxes.
3
3
  * Signs requests with HTTP Signatures and updates delivery status.
4
4
  */
5
- import { eq, and, sql, lte } from 'drizzle-orm';
5
+ import { eq, and, sql, lte, isNull, or } from 'drizzle-orm';
6
6
  import { activities, remoteActors, followRelationships, users, hubs, hubFollowers } from '@commonpub/schema';
7
7
  import { signRequest } from '@commonpub/protocol';
8
- const MAX_ATTEMPTS = 6;
8
+ const DEFAULT_MAX_ATTEMPTS = 6;
9
+ /** Lock expiry: if a worker crashes, its locks expire after 5 minutes */
10
+ const LOCK_EXPIRY_MS = 5 * 60 * 1000;
9
11
  const CONTENT_TYPE_AP = 'application/activity+json';
10
12
  /** Exponential backoff delays in milliseconds: 1m, 5m, 30m, 2h, 12h, 48h */
11
13
  const BACKOFF_DELAYS_MS = [
@@ -25,24 +27,40 @@ function isReadyForRetry(attempts, updatedAt) {
25
27
  }
26
28
  /**
27
29
  * Process and deliver pending outbound activities.
28
- * Call this from a background worker or cron job.
29
- *
30
- * @param db - Database connection
31
- * @param domain - The local instance domain
32
- * @param batchSize - Max activities to process per run (default 20)
30
+ * Uses claim-based locking for multi-worker safety:
31
+ * each worker claims activities by setting lockedAt, preventing duplicates.
33
32
  */
34
- export async function deliverPendingActivities(db, domain, batchSize = 20) {
33
+ export async function deliverPendingActivities(db, domain, batchSizeOrOpts) {
34
+ const opts = typeof batchSizeOrOpts === 'number'
35
+ ? { batchSize: batchSizeOrOpts }
36
+ : batchSizeOrOpts ?? {};
37
+ const batchSize = opts.batchSize ?? 20;
38
+ const maxRetries = opts.maxRetries ?? DEFAULT_MAX_ATTEMPTS;
35
39
  const result = { delivered: 0, failed: 0, errors: [] };
36
- // Fetch pending outbound activities (with backoff check applied in-memory)
40
+ const now = new Date();
41
+ const lockExpiry = new Date(now.getTime() - LOCK_EXPIRY_MS);
42
+ // Fetch pending outbound activities — only unlocked (lockedAt IS NULL or lock expired)
37
43
  const candidates = await db
38
44
  .select()
39
45
  .from(activities)
40
- .where(and(eq(activities.direction, 'outbound'), eq(activities.status, 'pending'), lte(activities.attempts, MAX_ATTEMPTS)))
46
+ .where(and(eq(activities.direction, 'outbound'), eq(activities.status, 'pending'), lte(activities.attempts, maxRetries), isNull(activities.deadLetteredAt), or(isNull(activities.lockedAt), lte(activities.lockedAt, lockExpiry))))
41
47
  .orderBy(activities.createdAt)
42
- .limit(batchSize * 2); // Fetch extra to account for backoff filtering
48
+ .limit(batchSize * 2);
43
49
  // Apply exponential backoff filter in-memory
44
50
  const pending = candidates.filter((a) => isReadyForRetry(a.attempts, a.updatedAt)).slice(0, batchSize);
51
+ // Claim activities by setting lockedAt (prevents other workers from picking them up)
52
+ const claimedIds = [];
45
53
  for (const activity of pending) {
54
+ const claimed = await db.update(activities)
55
+ .set({ lockedAt: now })
56
+ .where(and(eq(activities.id, activity.id), or(isNull(activities.lockedAt), lte(activities.lockedAt, lockExpiry))))
57
+ .returning({ id: activities.id });
58
+ if (claimed.length > 0)
59
+ claimedIds.push(activity.id);
60
+ }
61
+ // Only process activities we successfully claimed
62
+ const toClaim = pending.filter((a) => claimedIds.includes(a.id));
63
+ for (const activity of toClaim) {
46
64
  try {
47
65
  await deliverActivity(db, activity, domain);
48
66
  result.delivered++;
@@ -53,10 +71,6 @@ export async function deliverPendingActivities(db, domain, batchSize = 20) {
53
71
  result.failed++;
54
72
  }
55
73
  }
56
- // NOTE: For production with multiple delivery workers, add SELECT ... FOR UPDATE SKIP LOCKED
57
- // to the pending activities query to prevent duplicate processing. PGlite (test DB) doesn't
58
- // support this, so it's omitted from the query builder. The Nitro plugin should ensure
59
- // only one worker runs at a time via setInterval (not parallel invocations).
60
74
  return result;
61
75
  }
62
76
  async function deliverActivity(db, activity, domain) {
@@ -79,9 +93,26 @@ async function deliverActivity(db, activity, domain) {
79
93
  }
80
94
  const keyId = `${activity.actorUri}#main-key`;
81
95
  const body = JSON.stringify(payload);
82
- // Deliver to each inbox
96
+ // Deliver to each inbox (with circuit breaker checks)
97
+ const { isCircuitOpen, recordDeliverySuccess, recordDeliveryFailure } = await import('./circuitBreaker.js');
83
98
  const errors = [];
99
+ let skippedCircuitOpen = 0;
84
100
  for (const inbox of targetInboxes) {
101
+ // Extract domain from inbox URL for circuit breaker
102
+ let inboxDomain;
103
+ try {
104
+ inboxDomain = new URL(inbox).hostname;
105
+ }
106
+ catch {
107
+ inboxDomain = inbox;
108
+ }
109
+ // Check circuit breaker — skip if circuit is open for this domain
110
+ const circuitOpen = await isCircuitOpen(db, inboxDomain);
111
+ if (circuitOpen) {
112
+ skippedCircuitOpen++;
113
+ errors.push(`${inbox}: circuit open (skipped)`);
114
+ continue;
115
+ }
85
116
  try {
86
117
  const request = new Request(inbox, {
87
118
  method: 'POST',
@@ -99,6 +130,10 @@ async function deliverActivity(db, activity, domain) {
99
130
  const response = await fetch(signed, { signal: controller.signal });
100
131
  if (!response.ok && response.status !== 202) {
101
132
  errors.push(`${inbox}: ${response.status} ${response.statusText}`);
133
+ await recordDeliveryFailure(db, inboxDomain).catch(() => { });
134
+ }
135
+ else {
136
+ await recordDeliverySuccess(db, inboxDomain).catch(() => { });
102
137
  }
103
138
  }
104
139
  finally {
@@ -107,14 +142,18 @@ async function deliverActivity(db, activity, domain) {
107
142
  }
108
143
  catch (err) {
109
144
  errors.push(`${inbox}: ${err instanceof Error ? err.message : String(err)}`);
145
+ await recordDeliveryFailure(db, inboxDomain).catch(() => { });
110
146
  }
111
147
  }
148
+ // If all inboxes were skipped due to circuit breaker, don't count as attempt
149
+ if (skippedCircuitOpen === targetInboxes.length) {
150
+ // All skipped — leave as pending, don't increment attempts
151
+ return;
152
+ }
112
153
  if (errors.length === 0) {
113
154
  await markDelivered(db, activity.id);
114
155
  }
115
156
  else {
116
- // Any failures (partial or total) → retry the whole activity.
117
- // AP servers handle duplicate deliveries idempotently (objectUri is unique).
118
157
  await incrementAttempts(db, activity.id, errors.join('; '));
119
158
  }
120
159
  }
@@ -325,6 +364,7 @@ async function markDelivered(db, activityId, error) {
325
364
  status: 'delivered',
326
365
  error: error ?? null,
327
366
  attempts: sql `${activities.attempts} + 1`,
367
+ lockedAt: null, // Release lock
328
368
  })
329
369
  .where(eq(activities.id, activityId));
330
370
  }
@@ -335,17 +375,20 @@ async function markFailed(db, activityId, error) {
335
375
  status: 'failed',
336
376
  error,
337
377
  attempts: sql `${activities.attempts} + 1`,
378
+ lockedAt: null,
379
+ deadLetteredAt: new Date(), // Mark as dead-lettered
338
380
  })
339
381
  .where(eq(activities.id, activityId));
340
382
  }
341
- async function incrementAttempts(db, activityId, error) {
383
+ async function incrementAttempts(db, activityId, error, maxRetries = DEFAULT_MAX_ATTEMPTS) {
342
384
  const [row] = await db
343
385
  .select({ attempts: activities.attempts })
344
386
  .from(activities)
345
387
  .where(eq(activities.id, activityId))
346
388
  .limit(1);
347
389
  const newAttempts = (row?.attempts ?? 0) + 1;
348
- const newStatus = newAttempts >= MAX_ATTEMPTS ? 'failed' : 'pending';
390
+ const isDead = newAttempts >= maxRetries;
391
+ const newStatus = isDead ? 'failed' : 'pending';
349
392
  await db
350
393
  .update(activities)
351
394
  .set({
@@ -353,7 +396,22 @@ async function incrementAttempts(db, activityId, error) {
353
396
  error,
354
397
  attempts: newAttempts,
355
398
  updatedAt: new Date(),
399
+ lockedAt: null, // Release lock
400
+ ...(isDead ? { deadLetteredAt: new Date() } : {}),
356
401
  })
357
402
  .where(eq(activities.id, activityId));
358
403
  }
404
+ // --- Activity Cleanup ---
405
+ /**
406
+ * Delete delivered activities older than the specified retention period.
407
+ * Call from a scheduled job (e.g., daily via the delivery worker plugin).
408
+ */
409
+ export async function cleanupDeliveredActivities(db, retentionDays) {
410
+ const cutoff = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
411
+ const deleted = await db
412
+ .delete(activities)
413
+ .where(and(eq(activities.status, 'delivered'), lte(activities.createdAt, cutoff)))
414
+ .returning({ id: activities.id });
415
+ return deleted.length;
416
+ }
359
417
  //# sourceMappingURL=delivery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/federation/delivery.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,13 @@ import type { DB } from '../types.js';
3
3
  export interface InboxHandlerOptions {
4
4
  db: DB;
5
5
  domain: string;
6
- /** Auto-accept follow requests (default: true) */
6
+ /** Auto-accept follow requests (default: true). Set to false for 'manual' policy. */
7
7
  autoAcceptFollows?: boolean;
8
+ /** Config for federation behavior */
9
+ federationConfig?: {
10
+ backfillOnMirrorAccept?: boolean;
11
+ mirrorMaxItems?: number;
12
+ };
8
13
  }
9
14
  /**
10
15
  * Create inbox callbacks wired to database operations.
@@ -1 +1 @@
1
- {"version":3,"file":"inboxHandlers.d.ts","sourceRoot":"","sources":["../../src/federation/inboxHandlers.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAoBtC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,cAAc,CAkmB7E"}
1
+ {"version":3,"file":"inboxHandlers.d.ts","sourceRoot":"","sources":["../../src/federation/inboxHandlers.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAoBtC,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qCAAqC;IACrC,gBAAgB,CAAC,EAAE;QACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,cAAc,CAkoB7E"}
@@ -20,7 +20,7 @@ async function notifyRemoteInteraction(db, localUserId, type, actorUri, title, m
20
20
  */
21
21
  export function createInboxHandlers(opts) {
22
22
  const { db, domain, autoAcceptFollows = true } = opts;
23
- return {
23
+ const handlers = {
24
24
  /**
25
25
  * Remote user wants to follow a local user.
26
26
  * Creates a follow relationship and optionally auto-accepts.
@@ -96,6 +96,20 @@ export function createInboxHandlers(opts) {
96
96
  .update(followRelationships)
97
97
  .set({ status: 'accepted', updatedAt: new Date() })
98
98
  .where(eq(followRelationships.id, pending[0].id));
99
+ // Auto-backfill: if this Accept is for an instance mirror and config says to backfill
100
+ if (opts.federationConfig?.backfillOnMirrorAccept) {
101
+ try {
102
+ const { getMirror, listMirrors } = await import('./mirroring.js');
103
+ const mirrors = await listMirrors(db);
104
+ const mirror = mirrors.find((m) => m.remoteActorUri === actorUri && m.direction === 'pull');
105
+ if (mirror) {
106
+ const { backfillFromOutbox } = await import('./backfill.js');
107
+ // Fire and forget — don't block the Accept processing
108
+ backfillFromOutbox(db, actorUri, domain, opts.federationConfig?.mirrorMaxItems).catch((err) => console.error('[federation] auto-backfill failed:', err instanceof Error ? err.message : err));
109
+ }
110
+ }
111
+ catch { /* non-critical */ }
112
+ }
99
113
  }
100
114
  await db.insert(activities).values({
101
115
  type: 'Accept',
@@ -322,7 +336,13 @@ export function createInboxHandlers(opts) {
322
336
  const cpubType = typeof object['cpub:type'] === 'string' ? object['cpub:type'] : null;
323
337
  const cpubMetadata = object['cpub:metadata'] ?? null;
324
338
  // Check if this content matches an active mirror config
325
- const mirrorId = await matchMirrorForContent(db, originDomain, objectType, cpubType, tags);
339
+ // Extract sender domain from actorUri for re-broadcast matching
340
+ let senderDomain;
341
+ try {
342
+ senderDomain = new URL(actorUri).hostname;
343
+ }
344
+ catch { /* ignore */ }
345
+ const mirrorId = await matchMirrorForContent(db, originDomain, objectType, cpubType, tags, senderDomain);
326
346
  // Upsert federated content (objectUri is unique — prevents duplicates)
327
347
  if (objectUri) {
328
348
  await db
@@ -352,6 +372,8 @@ export function createInboxHandlers(opts) {
352
372
  content: sanitizedContent || null,
353
373
  title: typeof object.name === 'string' ? object.name : null,
354
374
  summary: typeof object.summary === 'string' ? sanitizeHtml(object.summary) : null,
375
+ // Preserve cpubType: use new value if present, otherwise keep existing
376
+ cpubType: cpubType ?? sql `${federatedContent.cpubType}`,
355
377
  updatedAt: new Date(),
356
378
  },
357
379
  });
@@ -420,10 +442,18 @@ export function createInboxHandlers(opts) {
420
442
  updates.summary = sanitizeHtml(object.summary);
421
443
  if (typeof object.url === 'string')
422
444
  updates.url = object.url;
423
- await db
445
+ const updateResult = await db
424
446
  .update(federatedContent)
425
447
  .set(updates)
426
- .where(and(eq(federatedContent.objectUri, objectUri), eq(federatedContent.actorUri, actorUri)));
448
+ .where(and(eq(federatedContent.objectUri, objectUri), eq(federatedContent.actorUri, actorUri)))
449
+ .returning({ id: federatedContent.id });
450
+ // If no rows updated, content doesn't exist locally — treat as new content
451
+ // This handles the case where an Update arrives before a Create (e.g., missed during backfill)
452
+ if (updateResult.length === 0) {
453
+ // Delegate to onCreate to store the content
454
+ await handlers.onCreate(actorUri, object);
455
+ return;
456
+ }
427
457
  }
428
458
  await db.insert(activities).values({
429
459
  type: 'Update',
@@ -550,5 +580,6 @@ export function createInboxHandlers(opts) {
550
580
  });
551
581
  },
552
582
  };
583
+ return handlers;
553
584
  }
554
585
  //# sourceMappingURL=inboxHandlers.js.map