diff --git a/lib/federation-setup.js b/lib/federation-setup.js index cd79485..42669ba 100644 --- a/lib/federation-setup.js +++ b/lib/federation-setup.js @@ -16,6 +16,7 @@ import { createFederation, importSpki, } from "@fedify/fedify"; +import { configure, getConsoleSink, getLogger } from "@logtape/logtape"; import { MongoKvStore } from "./kv-store.js"; import { registerInboxListeners } from "./inbox-listeners.js"; @@ -29,6 +30,9 @@ import { registerInboxListeners } from "./inbox-listeners.js"; * @param {boolean} options.storeRawActivities - Whether to store full raw JSON * @returns {{ federation: import("@fedify/fedify").Federation }} */ +// Track whether LogTape has been configured (can only call configure() once) +let _logtapeConfigured = false; + export function setupFederation(options) { const { collections, @@ -37,6 +41,26 @@ export function setupFederation(options) { storeRawActivities = false, } = options; + // Configure LogTape for Fedify delivery logging (once per process) + if (!_logtapeConfigured) { + _logtapeConfigured = true; + configure({ + sinks: { + console: getConsoleSink(), + }, + loggers: [ + { + // All Fedify logs — federation, vocab, delivery, HTTP signatures + category: ["fedify"], + sinks: ["console"], + lowestLevel: "info", + }, + ], + }).catch((error) => { + console.warn("[ActivityPub] LogTape configure failed:", error.message); + }); + } + const federation = createFederation({ kv: new MongoKvStore(collections.ap_kv), queue: new InProcessMessageQueue(), diff --git a/package.json b/package.json index a1cd9ff..035dd99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rmdes/indiekit-endpoint-activitypub", - "version": "1.0.6", + "version": "1.0.7", "description": "ActivityPub federation endpoint for Indiekit via Fedify. Adds full fediverse support: actor, inbox, outbox, followers, following, syndication, and Mastodon migration.", "keywords": [ "indiekit",