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