diff --git a/ghost/core/core/server/services/activitypub/ActivityPubServiceWrapper.js b/ghost/core/core/server/services/activitypub/ActivityPubServiceWrapper.js index ab17c1f2b4..8f1b0a3ec5 100644 --- a/ghost/core/core/server/services/activitypub/ActivityPubServiceWrapper.js +++ b/ghost/core/core/server/services/activitypub/ActivityPubServiceWrapper.js @@ -4,30 +4,27 @@ module.exports = class ActivityPubServiceWrapper { /** @type ActivityPubService */ static instance; + static initialised = false; + static async init() { if (ActivityPubServiceWrapper.instance) { return; } - const labs = require('../../../shared/labs'); - - if (!labs.isSet('ActivityPub')) { - return; - } - - const urlUtils = require('../../../shared/url-utils'); - const siteUrl = new URL(urlUtils.getSiteUrl()); - - const db = require('../../data/db'); - const knex = db.knex; const logging = require('@tryghost/logging'); - + const events = require('../../lib/common/events'); + const {knex} = require('../../data/db'); + const labs = require('../../../shared/labs'); + const urlUtils = require('../../../shared/url-utils'); const IdentityTokenServiceWrapper = require('../identity-tokens'); if (!IdentityTokenServiceWrapper.instance) { logging.error(`IdentityTokenService needs to be initialised before ActivityPubService`); + return; } + const siteUrl = new URL(urlUtils.getSiteUrl()); + ActivityPubServiceWrapper.instance = new ActivityPubService( knex, siteUrl, @@ -35,8 +32,16 @@ module.exports = class ActivityPubServiceWrapper { IdentityTokenServiceWrapper.instance ); - if (labs.isSet('ActivityPub') && IdentityTokenServiceWrapper.instance) { + if (labs.isSet('ActivityPub')) { await ActivityPubServiceWrapper.instance.initialiseWebhooks(); + ActivityPubServiceWrapper.initialised = true; + } else { + events.on('settings.labs.edited', async () => { + if (labs.isSet('ActivityPub') && !ActivityPubServiceWrapper.initialised) { + await ActivityPubServiceWrapper.instance.initialiseWebhooks(); + ActivityPubServiceWrapper.initialised = true; + } + }); } } };