Skip to content

Commit 180b09a

Browse files
committed
Memoize queued actor IDs
Parse actor IDs at most once while processing a queued outbox message so shared failure paths do not repeat URL parsing or duplicate warning logs. #778 (comment) Assisted-by: Codex:gpt-5.5
1 parent 7aaea0c commit 180b09a

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

packages/fedify/src/federation/middleware.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,8 +1029,9 @@ export class FederationImpl<TContextData>
10291029
keys.push(pair);
10301030
}
10311031
const loaderOptions = this.#getLoaderOptions(message.baseUrl);
1032-
const parseActorIds = () =>
1033-
(message.actorIds ?? []).flatMap((id) => {
1032+
let parsedActorIds: URL[] | undefined;
1033+
const getActorIds = () => {
1034+
parsedActorIds ??= (message.actorIds ?? []).flatMap((id) => {
10341035
try {
10351036
return [new URL(id)];
10361037
} catch {
@@ -1041,6 +1042,8 @@ export class FederationImpl<TContextData>
10411042
return [];
10421043
}
10431044
});
1045+
return parsedActorIds;
1046+
};
10441047
const parseActivity = () =>
10451048
Activity.fromJsonLd(message.activity, {
10461049
contextLoader: this.contextLoaderFactory(loaderOptions),
@@ -1085,7 +1088,7 @@ export class FederationImpl<TContextData>
10851088
activity,
10861089
activityId: message.activityId,
10871090
activityType: message.activityType,
1088-
actorIds: parseActorIds(),
1091+
actorIds: getActorIds(),
10891092
heldSince,
10901093
});
10911094
if (this.outboxPermanentFailureHandler != null) {
@@ -1109,7 +1112,7 @@ export class FederationImpl<TContextData>
11091112
),
11101113
statusCode: 0,
11111114
circuitHeldSince: heldSince,
1112-
actorIds: parseActorIds(),
1115+
actorIds: getActorIds(),
11131116
});
11141117
} catch (handlerError) {
11151118
logger.error(
@@ -1370,7 +1373,7 @@ export class FederationImpl<TContextData>
13701373
activity,
13711374
error,
13721375
statusCode: error.statusCode,
1373-
actorIds: parseActorIds(),
1376+
actorIds: getActorIds(),
13741377
});
13751378
} catch (handlerError) {
13761379
logger.error(

0 commit comments

Comments
 (0)