Changeset bfa3ba3 in Klonkt for src/services
- Timestamp:
- 10/26/2026 01:35:31 PM (27 hours ago)
- Branches:
- main
- Children:
- 7ccdced
- Parents:
- 31288dc
- Location:
- src/services
- Files:
-
- 3 edited
-
ActivityPubService.js (modified) (4 diffs)
-
ap-transport.js (modified) (2 diffs)
-
guardianship/delivery.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
r31288dc rbfa3ba3 34 34 import { 35 35 safeFetch, getOrCreateKeys, deliver, fetchActor, 36 enqueueDelivery, deliverWithRetry, processDeliveryQueue, startDeliveryWorker,36 enqueueDelivery, deliverWithRetry, deliverNowOrQueue, processDeliveryQueue, startDeliveryWorker, 37 37 anySigningSlug, verifyRequest, signedGetHeaders, signedGetJson, apGetJson, 38 38 } from './ap-transport.js'; 39 39 export { 40 40 safeFetch, getOrCreateKeys, deliver, fetchActor, 41 enqueueDelivery, deliverWithRetry, processDeliveryQueue, startDeliveryWorker,41 enqueueDelivery, deliverWithRetry, deliverNowOrQueue, processDeliveryQueue, startDeliveryWorker, 42 42 verifyRequest, signedGetHeaders, signedGetJson, 43 43 }; … … 2416 2416 let delivered = 0; 2417 2417 for (const inbox of [...inboxes].filter(Boolean)) { 2418 let ok = false; 2419 try { const st = await deliver(inbox, create, keyId, keys.private_pem); ok = st >= 200 && st < 300; } catch { ok = false; } 2420 if (ok) delivered++; 2421 else enqueueDelivery(site.slug, inbox, create); // durable: retry a briefly-offline recipient (was silently dropped) 2418 // Langs de volgorde per inbox (shaer-xzab.3); wat niet meteen kan, gaat 2419 // in de rij en wordt later opnieuw geprobeerd. 2420 if ((await deliverNowOrQueue(site.slug, inbox, create, keyId, keys.private_pem)) === 'sent') delivered++; 2422 2421 } 2423 2422 console.log('[AP] outreply', site.slug, '→', parent.actor_uri, 'delivered', delivered); … … 2789 2788 if (row.to_actor) { const a = await fetchActor(row.to_actor).catch(() => null); if (a) inboxes.add((a.endpoints && a.endpoints.sharedInbox) || a.inbox); } 2790 2789 for (const f of fStmts().list.all(site.slug)) inboxes.add(f.shared_inbox || f.inbox); 2791 for (const inbox of [...inboxes].filter(Boolean)) {2792 try { const st = await deliver(inbox, del, `${me}#main-key`, keys.private_pem); if (st >= 200 && st < 300) continue; } catch { /* queue below */ }2793 enqueueDelivery(site.slug, inbox, del); // durable: a failed comment-delete now retries (was silently dropped)2794 }2790 // Langs de volgorde per inbox (shaer-xzab.3): deze Delete mag niet vóór 2791 // de Create van dezelfde reactie aankomen als die nog in de rij wacht -- 2792 // dan stond de reactie daarna weer op die server. 2793 for (const inbox of [...inboxes].filter(Boolean)) await deliverNowOrQueue(site.slug, inbox, del, `${me}#main-key`, keys.private_pem); 2795 2794 } 2796 2795 db.prepare('DELETE FROM ap_outbox WHERE id = ?').run(outboxId); … … 4164 4163 actorId, fetchActor, localActor, deliverTo: deliverToActor, deriveHandle, escHtml, linkUrls, linkHashtags, 4165 4164 getOutboxRow: (id) => iStmts().getO.get(id), 4166 buildReplyNote, AP_CONTEXT, getOrCreateKeys, deliver , enqueueDelivery,4165 buildReplyNote, AP_CONTEXT, getOrCreateKeys, deliverNowOrQueue, 4167 4166 // Rijke directe berichten: dezelfde sanitizer als deliverReply gebruikt, zodat 4168 4167 // een antwoord uit Berichten door precies één poort gaat. -
src/services/ap-transport.js
r31288dc rbfa3ba3 278 278 } catch { /* health tracking is non-fatal */ } 279 279 } 280 // Deliver now; queue for retry if it fails. 280 // Deliver now, or queue: zegt welke van de twee het werd ('sent' | 'queued'), 281 // voor de aanroepers die tellen wat er meteen aankwam. 281 282 // 282 283 // Niet meteen als er voor deze inbox al iets in de wachtrij staat (dan zou dit … … 284 285 // server net faalde en in zijn backoff zit (dan kost het alleen acht seconden 285 286 // time-out om hetzelfde te horen). Dan achteraan in de rij. 287 // 288 // DE ENIGE WEG om iets direct te versturen dat bij een mislukking in de rij 289 // hoort (shaer-xzab.3). Drie plekken deden eerst zelf deliver() en pas bij een 290 // mislukking enqueueDelivery(), en gingen zo langs de volgorde per inbox. 291 export async function deliverNowOrQueue(slug, inbox, activity, keyId, privPem) { 292 if (!inbox) return 'queued'; 293 try { 294 const st = deliveryStmts(); 295 if (st.pendInbox.get(inbox) || st.hostWaits.get(inboxHost(inbox))) { enqueueDelivery(slug, inbox, activity); return 'queued'; } 296 } catch { /* geen wachtrij te lezen: gewoon proberen */ } 297 try { const st = await deliver(inbox, activity, keyId, privPem); if (st >= 200 && st < 300) { markFollowerDelivery(slug, inbox, true); return 'sent'; } } catch { /* queue below */ } 298 enqueueDelivery(slug, inbox, activity); 299 return 'queued'; 300 } 301 // Deliver now; queue for retry if it fails. 286 302 export async function deliverWithRetry(slug, inbox, activity, keyId, privPem) { 287 if (!inbox) return; 288 try { 289 const st = deliveryStmts(); 290 if (st.pendInbox.get(inbox) || st.hostWaits.get(inboxHost(inbox))) { enqueueDelivery(slug, inbox, activity); return; } 291 } catch { /* geen wachtrij te lezen: gewoon proberen */ } 292 try { const st = await deliver(inbox, activity, keyId, privPem); if (st >= 200 && st < 300) { markFollowerDelivery(slug, inbox, true); return; } } catch { /* queue below */ } 293 enqueueDelivery(slug, inbox, activity); 303 await deliverNowOrQueue(slug, inbox, activity, keyId, privPem); 294 304 } 295 305 let _processingDeliv = false; -
src/services/guardianship/delivery.js
r31288dc rbfa3ba3 93 93 if (!inReplyTo && helpMark && helpMark.noteUri) inReplyTo = helpMark.noteUri; 94 94 const { actorId, fetchActor, localActor, deliverTo, deriveHandle, escHtml, linkUrls, linkHashtags, 95 getOutboxRow, buildReplyNote, AP_CONTEXT, getOrCreateKeys, deliver , enqueueDelivery} = deps;95 getOutboxRow, buildReplyNote, AP_CONTEXT, getOrCreateKeys, deliverNowOrQueue } = deps; 96 96 const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, ''); 97 97 const list = [...new Set((recipients || []).filter((u) => /^https?:\/\//i.test(String(u || ''))))].slice(0, 8); … … 207 207 } 208 208 // Remote: one POST per inbox, so two guardians on the same server share it. 209 // Langs de volgorde per inbox (shaer-xzab.3), zoals elke bezorging. 209 210 for (const inbox of [...new Set(resolved.filter((x) => !x.local).map((r) => r.inbox))]) { 210 let ok = false; 211 try { const st = await deliver(inbox, create, keyId, keys.private_pem); ok = st >= 200 && st < 300; } catch { ok = false; } 212 if (ok) delivered++; 213 else enqueueDelivery(site.slug, inbox, create); 211 if ((await deliverNowOrQueue(site.slug, inbox, create, keyId, keys.private_pem)) === 'sent') delivered++; 214 212 } 215 213 console.log('[AP] direct note', site.slug, '→', resolved.length, 'recipient(s), delivered', delivered);
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)