fix(swarm-loc-guard): correct content extraction and IndiekitError constructor call
Deploy Indiekit Server / deploy (push) Successful in 1m29s

- rawContent extraction now handles normalized {html,text} object (content is
  already normalized by the time the guard runs, so String({...}) was '[object Object]')
- IndiekitError constructor is (message, options) not (status, message) — was
  passing 422 as message causing error.message=422 (number) which crashed the
  Nunjucks error template with 'Input data should be a String'
This commit is contained in:
Sven
2026-05-13 22:52:32 +02:00
parent 7e93bc5688
commit ba760047ce
+11 -4
View File
@@ -29,11 +29,18 @@ const newSnippet = ` if (
(hasCheckinProperty || hasSwarmSyndication)
) {
// Guard: only accept OwnYourSwarm posts that contain "Loc" in content. ${MARKER}
const rawContent = Array.isArray(properties.content)
? properties.content.join(" ")
: String(properties.content || "");
// Extract raw text before normaliseProperties converts content to {html,text} object.
// After normalisation, String(properties.content) yields "[object Object]" — not useful.
// We read .text/.html from the normalised object, then fall back to raw string.
const rawContent = (() => {
const c = properties.content;
if (!c) return "";
if (typeof c === "string") return c;
if (typeof c === "object") return String(c.text || c.html || "");
return String(c);
})();
if (hasSwarmSyndication && !rawContent.includes("Loc")) {
throw new IndiekitError(422, "OwnYourSwarm post without 'Loc' in content rejected");
throw new IndiekitError("OwnYourSwarm post without 'Loc' in content rejected", { status: 422, code: "invalid_request" });
}
properties.visibility = "unlisted";
}`;