From db36e5295d10067014f5eefe4330ba4c36fc2e0d Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Sun, 8 Oct 2023 17:29:47 -0400 Subject: [PATCH] An attempt at improving send-note so it doesnt miss articles to send --- api/activitypub/sendNote.ts | 40 +++++++++++++++---------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/api/activitypub/sendNote.ts b/api/activitypub/sendNote.ts index 5571f105b..e083d1eb5 100644 --- a/api/activitypub/sendNote.ts +++ b/api/activitypub/sendNote.ts @@ -39,15 +39,15 @@ export default async function (req: VercelRequest, res: VercelResponse) { if (config.exists == false) { // Config doesn't exist, make something configRef.set({ - "lastId": "", + "sentIds": [], "lastEpoch": "" }); } const configData = config.data(); - let lastId = ""; + let sentIds = []; if (configData != undefined) { - lastId = configData.lastId; + sentIds = configData.sendIds; let lastEpoch = configData.lastEpoch; let currentEpoch = new Date().getTime(); let elapsed = currentEpoch - lastEpoch; @@ -83,29 +83,21 @@ export default async function (req: VercelRequest, res: VercelResponse) { for (const iteIdx in (<AP.EntityReference[]>outbox.orderedItems)) { // We have to break somewhere... do it after the first. const item = (<AP.EntityReference[]>outbox.orderedItems)[iteIdx]; - console.log(`Checking ID ${item.id}, ${lastId}`); - if (item.id == `${lastId}`) { - lastSuccessfulSentId = item.id; - // We've already posted this, don't try and send it again. - console.log(`${item.id} has already been posted - don't attempt`) - break; - } - - if (item.object != undefined) { - // We might not need this. - item.object.published = (new Date()).toISOString(); - } + console.log(`Checking ID ${item.id}, ${sentIds}`); + if (!sentIds.includes(item.id)) { + if (item.object != undefined) { + // We might not need this. + item.object.published = (new Date()).toISOString(); + } - console.log(`Sending to ${actorInbox}`); + console.log(`Sending to ${actorInbox}`); - // Item will be an entity, i.e, { Create { Note } } - const response = await sendSignedRequest(actorInbox, <AP.Activity> item); - console.log(`Send result: ${actorInbox}`, response.status, response.statusText, await response.text()); + // Item will be an entity, i.e, { Create { Note } } + const response = await sendSignedRequest(actorInbox, <AP.Activity> item); + console.log(`Send result: ${actorInbox}`, response.status, response.statusText, await response.text()); - // It's not been sent. - lastSuccessfulSentId = item.id; // we shouldn't really set this everytime. - - //break; // At some point we might want to post more than one post, so remove this. + sentIds.push(item.id) + } } } catch (ex) { console.log("Error", ex); @@ -113,7 +105,7 @@ export default async function (req: VercelRequest, res: VercelResponse) { } configRef.set({ - "lastId": lastSuccessfulSentId, + "sentIds": sentIds, "lastEpoch": new Date().getTime() }); -- GitLab