ghost 6.11.0 → 6.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-i18n-6.12.0.tgz +0 -0
- package/core/boot.js +4 -2
- package/core/built/admin/assets/{_baseAssignValue-BX8EallQ.js → _baseAssignValue-hsL6ItjC.js} +1 -1
- package/core/built/admin/assets/{a-large-small-CKZJgscl.js → a-large-small-BPPu_Iy7.js} +1 -1
- package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
- package/core/built/admin/assets/admin-x-settings/{code-editor-view-n8DFeXbv.mjs → code-editor-view-Bq6l5arq.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-v6qQgUXt.mjs → index-CKaxer_o.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-CXL12uvO.mjs → index-CtYEAgeN.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-D4ye6uvI.mjs → index-D4NstoNQ.mjs} +11 -6
- package/core/built/admin/assets/admin-x-settings/{modals-CdsPaTfy.mjs → modals-BzljHVa7.mjs} +2 -2
- package/core/built/admin/assets/{at-sign-CqQzllfI.js → at-sign-CYnGzOFc.js} +1 -1
- package/core/built/admin/assets/{audience-select-DQD7iDOb.js → audience-select-DYoxiiwy.js} +1 -1
- package/core/built/admin/assets/{avatar-flipboard-uq7ptTxT.js → avatar-flipboard-C9-npfmZ.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-qyIGv6Ny.js → bluesky-sharing-BGcmGcee.js} +1 -1
- package/core/built/admin/assets/{chart-DGA1MaFs.js → chart-CqJxisVP.js} +1 -1
- package/core/built/admin/assets/{chunk.524.1289543297329587cf8a.js → chunk.524.74a9629dd2ba0d21bbef.js} +7 -7
- package/core/built/admin/assets/{chunk.582.344ea0d0a16d671345cd.js → chunk.582.3846471396b3a7c46e66.js} +8 -8
- package/core/built/admin/assets/{code-editor-view-Bz6kXDiv.js → code-editor-view-C8l3gNnO.js} +1 -1
- package/core/built/admin/assets/{comments-C-lkEDkz.js → comments-CpHDoxov.js} +1 -1
- package/core/built/admin/assets/{copy-BFuV16bY.js → copy-DWiB-781.js} +1 -1
- package/core/built/admin/assets/{data-list-Bw1CQEZ9.js → data-list-yngXNZDF.js} +1 -1
- package/core/built/admin/assets/{deleted-feed-item-CmNbSYiO.js → deleted-feed-item-C0FcyLMN.js} +1 -1
- package/core/built/admin/assets/{edit-profile-DlIPB2km.js → edit-profile-BjtDkDAq.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-DBrIZcFq.js → empty-indicator-BXWniwsl.js} +1 -1
- package/core/built/admin/assets/{en-BBc7b85q.js → en-B8qaJx-T.js} +1 -1
- package/core/built/admin/assets/{feed-B3XQzKZl.js → feed-DsCVb1SA.js} +1 -1
- package/core/built/admin/assets/{filters-DUFXZZnu.js → filters-jAXQSPq6.js} +1 -1
- package/core/built/admin/assets/{gh-chart-BV97-O7c.js → gh-chart-DwTCK8z_.js} +1 -1
- package/core/built/admin/assets/{ghost-9aa1e7c5992f122dba6932af78bf8e56.js → ghost-6367d022df9db9dacbcb9bfa30232ec7.js} +2 -2
- package/core/built/admin/assets/{growth-njR0GqK2.js → growth-DshcRqda.js} +1 -1
- package/core/built/admin/assets/{hash-CdH0ikFp.js → hash-p9dv0yuc.js} +1 -1
- package/core/built/admin/assets/{inbox-Bd0uf1Ez.js → inbox-CRoP9sy5.js} +1 -1
- package/core/built/admin/assets/{index-Kji6JKl7.js → index-6syrC9X1.js} +1 -1
- package/core/built/admin/assets/{index-C7M19LpB.js → index-BKtz3UH0.js} +1 -1
- package/core/built/admin/assets/{index-DWk7hKRR.js → index-BwY94Fb4.js} +1 -1
- package/core/built/admin/assets/{index-BFhECYgc.js → index-C3DF6aFe.js} +1 -1
- package/core/built/admin/assets/index-C6NCNp1B.js +1 -0
- package/core/built/admin/assets/{index-BYawr8p9.js → index-CJU9a2PB.js} +3 -3
- package/core/built/admin/assets/{index-CIE2_z5J.js → index-CUWE7aD1.js} +1 -1
- package/core/built/admin/assets/{index-DgRIbSpg.js → index-CuQ_II0e.js} +1 -1
- package/core/built/admin/assets/{index-Birw80cQ.js → index-DG8f-HuU.js} +1 -1
- package/core/built/admin/assets/{index-DziHC2du.js → index-DItZTRQ4.js} +1 -1
- package/core/built/admin/assets/{index-DG53N3Xt.js → index-eLx96SEn.js} +1 -1
- package/core/built/admin/assets/{index-DCw6JaEl.js → index-j2_Q-_8H.js} +1 -1
- package/core/built/admin/assets/{index-BZ21H0xH.js → index-qWpHJAMP.js} +1 -1
- package/core/built/admin/assets/{index-DXCu9e7c.js → index-sy6xRtoO.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-BDJVCHtm.js → koenig-lexical-DgAlBHHS.js} +1 -1
- package/core/built/admin/assets/{kpi-card-cv8roErt.js → kpi-card-CHZSLw4p.js} +1 -1
- package/core/built/admin/assets/{kpis-Dt4OFY3L.js → kpis-DzbAHfKK.js} +1 -1
- package/core/built/admin/assets/{links-08beB3Ij.js → links-BQHRbn46.js} +1 -1
- package/core/built/admin/assets/{lucide-react-DKlmxVQI.js → lucide-react-B7UnD_Dp.js} +1 -1
- package/core/built/admin/assets/{main-layout-Cl09wG7F.js → main-layout-9nmU5WlG.js} +1 -1
- package/core/built/admin/assets/{message-square-text-CaMVBVPr.js → message-square-text-CS3iRuPc.js} +1 -1
- package/core/built/admin/assets/{minus-2XwCoFJV.js → minus-emzwh6hq.js} +1 -1
- package/core/built/admin/assets/{modals-CIgzYQgv.js → modals-CumFuZ2d.js} +1 -1
- package/core/built/admin/assets/{moderation-FjlsSym6.js → moderation-DyfFc9m4.js} +1 -1
- package/core/built/admin/assets/{newsletter-BNOwZNlE.js → newsletter-BWul5IFc.js} +1 -1
- package/core/built/admin/assets/{newsletters-DUusEYSg.js → newsletters-N6bwI1OF.js} +1 -1
- package/core/built/admin/assets/{note-BpYwIDK6.js → note-CiBzkHzz.js} +1 -1
- package/core/built/admin/assets/{overview-Y5QYPClr.js → overview-D9gRvn7X.js} +1 -1
- package/core/built/admin/assets/{pagemenu-BMXHDXYy.js → pagemenu-aHubMPwB.js} +1 -1
- package/core/built/admin/assets/{post-analytics-UerFnJse.js → post-analytics-Bm9xH8nA.js} +1 -1
- package/core/built/admin/assets/{post-analytics-context-geHk7rOj.js → post-analytics-context-C7oW3aBz.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-DXfc4KeX.js → post-analytics-header-BjGFgN6A.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-Dql4fYjR.js → post-share-modal-Su923uIc.js} +1 -1
- package/core/built/admin/assets/{posts-Bsvw11Zo.js → posts-BwP7BNcB.js} +1 -1
- package/core/built/admin/assets/{referrers-B8xJpCcR.js → referrers-n_ln9DqI.js} +1 -1
- package/core/built/admin/assets/{repeat-COP-3g8d.js → repeat-ms5ocvE0.js} +1 -1
- package/core/built/admin/assets/{reply-JE8tmvOn.js → reply-BvO85IDn.js} +1 -1
- package/core/built/admin/assets/{select-BhvNY3I-.js → select-B4QhMW5f.js} +1 -1
- package/core/built/admin/assets/{settings-BJwVfuWG.js → settings-D5rGcWJ7.js} +4 -4
- package/core/built/admin/assets/{settings-C6ZUZQe4.js → settings-QtZ6a2TL.js} +1 -1
- package/core/built/admin/assets/{sort-button-iOtR-vQ1.js → sort-button-84sYUZMN.js} +1 -1
- package/core/built/admin/assets/{source-icon-C2iFWMlV.js → source-icon-Bzw-AU8p.js} +1 -1
- package/core/built/admin/assets/{sprout-BW9HFVU8.js → sprout-C2R5CbXV.js} +1 -1
- package/core/built/admin/assets/{square-BCNGSZhW.js → square-DT1uWkxs.js} +1 -1
- package/core/built/admin/assets/stats/{audience-select-DNAWmT7R.mjs → audience-select-fTCiZ9MT.mjs} +3 -3
- package/core/built/admin/assets/stats/{index-DbGvSTMe.mjs → index-BKgioyC7.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-s19ZmxbX.mjs → index-CR2t5Xd-.mjs} +5 -5
- package/core/built/admin/assets/stats/index-DEkYwR7C.mjs +739 -0
- package/core/built/admin/assets/stats/{index-BS3KMSy9.mjs → index-Djwey97a.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-MOQSSYwT.mjs → index-FiU_XgEe.mjs} +6 -6
- package/core/built/admin/assets/stats/{sort-button-D76rcldr.mjs → sort-button-Bvi1wfa7.mjs} +3 -3
- package/core/built/admin/assets/stats/{stats-CJ7fhUyT.mjs → stats-Bbm6yWZq.mjs} +2 -2
- package/core/built/admin/assets/stats/stats.js +1 -1
- package/core/built/admin/assets/stats/{tabs-CkbxYgOE.mjs → tabs-BKwH5k-q.mjs} +3 -3
- package/core/built/admin/assets/stats/{url-helpers-DICtqCrE.mjs → url-helpers-DmHnUIGc.mjs} +9 -9
- package/core/built/admin/assets/stats/{use-growth-stats-DzO7zEy4.mjs → use-growth-stats-BVj3j1hb.mjs} +3 -3
- package/core/built/admin/assets/{stats-r0Bphuvi.js → stats-B1mhlQSp.js} +1 -1
- package/core/built/admin/assets/{stats-view-DzZxrBDz.js → stats-view-C6MTCwRW.js} +1 -1
- package/core/built/admin/assets/{step-1-CUoUOyMm.js → step-1-CzQmZJ93.js} +1 -1
- package/core/built/admin/assets/{step-2-CpAkPD8D.js → step-2-DXGDWSQo.js} +1 -1
- package/core/built/admin/assets/{step-3-Ci6oJDmK.js → step-3-CYuxXKac.js} +1 -1
- package/core/built/admin/assets/{table-DeBuf80X.js → table-mjAkKNdb.js} +1 -1
- package/core/built/admin/assets/{tabs-C2sFfNcp.js → tabs-BwQ-i6MY.js} +1 -1
- package/core/built/admin/assets/{tags-Bl6G5rvf.js → tags-BkUqCuvX.js} +1 -1
- package/core/built/admin/assets/{tags-BL_N4nn2.js → tags-DXDZbfxp.js} +1 -1
- package/core/built/admin/assets/{toggle-group-B2X-8giI.js → toggle-group-CqDO3Kkx.js} +1 -1
- package/core/built/admin/assets/{topic-filter-DeqMID_s.js → topic-filter-DnuJJBAE.js} +1 -1
- package/core/built/admin/assets/{trash-BglGemAb.js → trash-CZ3EXwTL.js} +1 -1
- package/core/built/admin/assets/{url-helpers-84icqAuE.js → url-helpers-BE3VXr__.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-DF-7tL8g.js → use-growth-stats-CiuWWM6O.js} +1 -1
- package/core/built/admin/assets/{use-infinite-virtual-scroll-BHH7oscK.js → use-infinite-virtual-scroll-BjATkxBj.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-BsvYfixw.js → use-simple-pagination-C9cb7dDz.js} +1 -1
- package/core/built/admin/assets/{user-round-check-BjHbfXKY.js → user-round-check-D3ihrrKL.js} +1 -1
- package/core/built/admin/assets/{wallet-cards-KaTkgqvi.js → wallet-cards-Do7nPf3f.js} +1 -1
- package/core/built/admin/assets/{web-CUWbpFil.js → web-BEwI2Gfy.js} +1 -1
- package/core/built/admin/index-forward.html +4 -4
- package/core/built/admin/index.html +3 -3
- package/core/frontend/web/middleware/index.js +1 -0
- package/core/frontend/web/middleware/serve-indexnow-key.js +66 -0
- package/core/frontend/web/site.js +3 -0
- package/core/server/api/endpoints/authentication.js +1 -1
- package/core/server/api/endpoints/pages.js +1 -1
- package/core/server/api/endpoints/posts-public.js +1 -1
- package/core/server/api/endpoints/posts.js +1 -1
- package/core/server/api/endpoints/search-index-public.js +1 -1
- package/core/server/api/endpoints/search-index.js +1 -1
- package/core/server/api/endpoints/users.js +1 -1
- package/core/server/api/endpoints/utils/serializers/input/settings.js +2 -1
- package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
- package/core/server/api/endpoints/utils/validators/input/settings.js +1 -1
- package/core/server/data/exporter/table-lists.js +2 -1
- package/core/server/data/migrations/versions/6.12/2026-01-08-11-48-16-add-indexnow-api-key-setting.js +9 -0
- package/core/server/data/schema/default-settings/default-settings.json +6 -0
- package/core/server/lib/lexical.js +1 -1
- package/core/server/models/settings.js +2 -1
- package/core/server/services/activitypub/{ActivityPubServiceWrapper.js → activity-pub-service-wrapper.js} +1 -1
- package/core/server/services/activitypub/{ActivityPubService.ts → activity-pub-service.ts} +1 -1
- package/core/server/services/activitypub/index.js +1 -1
- package/core/server/services/adapter-manager/index.js +1 -1
- package/core/server/services/announcement-bar-service/{AnnouncementBarSettings.js → announcement-bar-settings.js} +1 -1
- package/core/server/services/announcement-bar-service/index.js +1 -1
- package/core/server/services/audience-feedback/{AudienceFeedbackController.js → audience-feedback-controller.js} +3 -3
- package/core/server/services/audience-feedback/index.js +4 -4
- package/core/server/services/auth/session/express-session.js +1 -1
- package/core/server/services/comments/{CommentsController.js → comments-controller.js} +2 -2
- package/core/server/services/comments/{CommentsServiceEmails.js → comments-service-emails.js} +1 -1
- package/core/server/services/comments/{CommentsService.js → comments-service.js} +1 -1
- package/core/server/services/comments/index.js +3 -3
- package/core/server/services/custom-redirects/index.js +2 -2
- package/core/server/services/donations/{DonationBookshelfRepository.ts → donation-bookshelf-repository.ts} +1 -1
- package/core/server/services/donations/{DonationServiceWrapper.js → donation-service-wrapper.js} +1 -1
- package/core/server/services/donations/index.js +1 -1
- package/core/server/services/email-address/{EmailAddressServiceWrapper.js → email-address-service-wrapper.js} +2 -2
- package/core/server/services/email-address/{EmailAddressService.js → email-address-service.js} +4 -4
- package/core/server/services/email-address/{EmailAddressService.ts → email-address-service.ts} +1 -1
- package/core/server/services/email-address/index.js +1 -1
- package/core/server/services/email-analytics/{EmailAnalyticsProviderMailgun.js → email-analytics-provider-mailgun.js} +1 -1
- package/core/server/services/email-analytics/{EmailAnalyticsServiceWrapper.js → email-analytics-service-wrapper.js} +5 -5
- package/core/server/services/email-analytics/{EmailAnalyticsService.js → email-analytics-service.js} +2 -2
- package/core/server/services/email-analytics/index.js +1 -1
- package/core/server/services/email-analytics/jobs/fetch-latest/index.js +1 -1
- package/core/server/services/email-service/{BatchSendingService.js → batch-sending-service.js} +8 -8
- package/core/server/services/email-service/{EmailEventProcessor.js → email-event-processor.js} +6 -6
- package/core/server/services/email-service/{EmailEventStorage.js → email-event-storage.js} +1 -1
- package/core/server/services/email-service/{EmailRenderer.js → email-renderer.js} +1 -1
- package/core/server/services/email-service/{EmailServiceWrapper.js → email-service-wrapper.js} +9 -9
- package/core/server/services/email-service/{EmailService.js → email-service.js} +13 -13
- package/core/server/services/email-service/index.js +1 -1
- package/core/server/services/email-service/{MailgunEmailProvider.js → mailgun-email-provider.js} +1 -1
- package/core/server/services/email-service/{SendingService.js → sending-service.js} +6 -6
- package/core/server/services/email-suppression-list/{InMemoryEmailSuppressionList.js → in-memory-email-suppression-list.js} +1 -1
- package/core/server/services/email-suppression-list/{MailgunEmailSuppressionList.js → mailgun-email-suppression-list.js} +3 -3
- package/core/server/services/email-suppression-list/service.js +2 -2
- package/core/server/services/explore/index.js +2 -2
- package/core/server/services/explore-ping/index.js +2 -2
- package/core/server/services/frontend-data-service/index.js +1 -1
- package/core/server/services/identity-tokens/{IdentityTokenServiceWrapper.js → identity-token-service-wrapper.js} +1 -1
- package/core/server/services/identity-tokens/index.js +1 -1
- package/core/server/services/indexnow.js +212 -0
- package/core/server/services/invites/index.js +1 -1
- package/core/server/services/link-redirection/index.js +2 -2
- package/core/server/services/link-redirection/{LinkRedirectRepository.js → link-redirect-repository.js} +1 -1
- package/core/server/services/link-redirection/{LinkRedirectsService.js → link-redirects-service.js} +2 -2
- package/core/server/services/link-redirection/{RedirectEvent.js → redirect-event.js} +1 -1
- package/core/server/services/link-tracking/index.js +3 -3
- package/core/server/services/link-tracking/{LinkClickRepository.js → link-click-repository.js} +1 -1
- package/core/server/services/link-tracking/{LinkClickTrackingService.js → link-click-tracking-service.js} +4 -4
- package/core/server/services/link-tracking/{PostLinkRepository.js → post-link-repository.js} +7 -7
- package/core/server/services/mail/{GhostMailer.js → ghost-mailer.js} +1 -1
- package/core/server/services/mail/index.js +2 -2
- package/core/server/services/media-inliner/service.js +1 -1
- package/core/server/services/member-attribution/README.md +6 -6
- package/core/server/services/member-attribution/{AttributionBuilder.js → attribution-builder.js} +4 -4
- package/core/server/services/member-attribution/index.js +5 -5
- package/core/server/services/member-attribution/{MemberAttributionService.js → member-attribution-service.js} +9 -9
- package/core/server/services/member-attribution/{ReferrerTranslator.js → referrer-translator.js} +1 -1
- package/core/server/services/member-attribution/{UrlTranslator.js → url-translator.js} +1 -1
- package/core/server/services/member-welcome-emails/constants.js +22 -1
- package/core/server/services/member-welcome-emails/service.js +23 -5
- package/core/server/services/members/api.js +1 -1
- package/core/server/services/members/importer/index.js +3 -3
- package/core/server/services/members/importer/{MembersCSVImporter.js → members-csv-importer.js} +2 -2
- package/core/server/services/members/members-api/members-api.js +14 -14
- package/core/server/services/members/members-api/repositories/{MemberRepository.js → member-repository.js} +17 -8
- package/core/server/services/members/members-api/services/{MemberBREADService.js → member-bread-service.js} +1 -1
- package/core/server/services/members/members-api/services/{PaymentsService.js → payments-service.js} +12 -12
- package/core/server/services/members/service.js +4 -4
- package/core/server/services/members-events/index.js +3 -3
- package/core/server/services/members-events/{LastSeenAtUpdater.js → last-seen-at-updater.js} +2 -2
- package/core/server/services/mentions/{BookshelfMentionRepository.js → bookshelf-mention-repository.js} +9 -9
- package/core/server/services/mentions/{InMemoryMentionRepository.js → in-memory-mention-repository.js} +4 -4
- package/core/server/services/mentions/{MentionController.js → mention-controller.js} +5 -5
- package/core/server/services/mentions/{MentionCreatedEvent.js → mention-created-event.js} +1 -1
- package/core/server/services/mentions/{Mention.js → mention.js} +1 -1
- package/core/server/services/mentions/{MentionsAPI.js → mentions-api.js} +1 -1
- package/core/server/services/mentions/{ResourceService.js → resource-service.js} +2 -2
- package/core/server/services/mentions/{RoutingService.js → routing-service.js} +2 -2
- package/core/server/services/mentions/service.js +11 -11
- package/core/server/services/mentions/{WebmentionMetadata.js → webmention-metadata.js} +1 -1
- package/core/server/services/mentions-email-report/job.js +1 -1
- package/core/server/services/mentions-email-report/{MentionEmailReportJob.js → mention-email-report-job.js} +1 -1
- package/core/server/services/mentions-email-report/service.js +2 -2
- package/core/server/services/milestones/{BookshelfMilestoneRepository.js → bookshelf-milestone-repository.js} +2 -2
- package/core/server/services/milestones/{InMemoryMilestoneRepository.js → in-memory-milestone-repository.js} +2 -2
- package/core/server/services/milestones/{Milestone.js → milestone.js} +1 -1
- package/core/server/services/milestones/{MilestonesService.js → milestones-service.js} +1 -1
- package/core/server/services/milestones/service.js +4 -4
- package/core/server/services/newsletters/index.js +2 -2
- package/core/server/services/newsletters/{NewslettersService.js → newsletters-service.js} +1 -1
- package/core/server/services/notifications/index.js +1 -1
- package/core/server/services/oembed/service.js +3 -3
- package/core/server/services/offers/application/{OfferMapper.js → offer-mapper.js} +1 -1
- package/core/server/services/offers/application/{OffersAPI.js → offers-api.js} +9 -9
- package/core/server/services/offers/application/{UniqueChecker.js → unique-checker.js} +2 -2
- package/core/server/services/offers/domain/events/{OfferCodeChangeEvent.js → offer-code-change-event.js} +1 -1
- package/core/server/services/offers/domain/events/{OfferCreatedEvent.js → offer-created-event.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferAmount.js → offer-amount.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCadence.js → offer-cadence.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCode.js → offer-code.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCreatedAt.js → offer-created-at.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferCurrency.js → offer-currency.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferDescription.js → offer-description.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferDuration.js → offer-duration.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferName.js → offer-name.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferStatus.js → offer-status.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferTitle.js → offer-title.js} +1 -1
- package/core/server/services/offers/domain/models/{OfferType.js → offer-type.js} +1 -1
- package/core/server/services/offers/domain/models/{Offer.js → offer.js} +14 -14
- package/core/server/services/offers/domain/models/{StripeCoupon.js → stripe-coupon.js} +1 -1
- package/core/server/services/offers/{OfferBookshelfRepository.js → offer-bookshelf-repository.js} +6 -6
- package/core/server/services/offers/{OffersModule.js → offers-module.js} +4 -4
- package/core/server/services/offers/service.js +3 -3
- package/core/server/services/outbox/index.js +2 -2
- package/core/server/services/outbox/jobs/outbox-job.js +2 -2
- package/core/server/services/posts/posts-service-instance.js +47 -0
- package/core/server/services/posts/posts-service.js +572 -45
- package/core/server/services/recommendations/index.js +1 -1
- package/core/server/services/recommendations/{RecommendationEnablerService.js → recommendation-enabler-service.js} +2 -2
- package/core/server/services/recommendations/{RecommendationServiceWrapper.js → recommendation-service-wrapper.js} +2 -2
- package/core/server/services/recommendations/service/{BookshelfClickEventRepository.js → bookshelf-click-event-repository.js} +4 -4
- package/core/server/services/recommendations/service/{BookshelfClickEventRepository.ts → bookshelf-click-event-repository.ts} +2 -2
- package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.js → bookshelf-recommendation-repository.js} +4 -4
- package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.ts → bookshelf-recommendation-repository.ts} +3 -3
- package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.js → bookshelf-subscribe-event-repository.js} +4 -4
- package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.ts → bookshelf-subscribe-event-repository.ts} +2 -2
- package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.js → in-memory-recommendation-repository.js} +2 -2
- package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.ts → in-memory-recommendation-repository.ts} +3 -3
- package/core/server/services/recommendations/service/{IncomingRecommendationController.js → incoming-recommendation-controller.js} +2 -2
- package/core/server/services/recommendations/service/{IncomingRecommendationController.ts → incoming-recommendation-controller.ts} +3 -3
- package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.ts → incoming-recommendation-email-renderer.ts} +2 -2
- package/core/server/services/recommendations/service/{IncomingRecommendationService.ts → incoming-recommendation-service.ts} +2 -2
- package/core/server/services/recommendations/service/index.js +15 -15
- package/core/server/services/recommendations/service/index.ts +15 -15
- package/core/server/services/recommendations/service/{RecommendationController.js → recommendation-controller.js} +13 -13
- package/core/server/services/recommendations/service/{RecommendationController.ts → recommendation-controller.ts} +4 -4
- package/core/server/services/recommendations/service/{RecommendationRepository.ts → recommendation-repository.ts} +3 -3
- package/core/server/services/recommendations/service/{RecommendationService.js → recommendation-service.js} +6 -6
- package/core/server/services/recommendations/service/{RecommendationService.ts → recommendation-service.ts} +8 -8
- package/core/server/services/recommendations/service/{Recommendation.js → recommendation.js} +4 -4
- package/core/server/services/recommendations/service/{Recommendation.ts → recommendation.ts} +1 -1
- package/core/server/services/recommendations/service/{WellknownService.ts → well-known-service.ts} +1 -1
- package/core/server/services/route-settings/index.js +4 -4
- package/core/server/services/settings/{SettingsBREADService.js → settings-bread-service.js} +1 -1
- package/core/server/services/settings/settings-service.js +2 -2
- package/core/server/services/settings-helpers/index.js +1 -1
- package/core/server/services/settings-helpers/{SettingsHelpers.js → settings-helpers.js} +5 -5
- package/core/server/services/slack-notifications/service.js +4 -4
- package/core/server/services/slack-notifications/{SlackNotificationsService.js → slack-notifications-service.js} +2 -2
- package/core/server/services/slack-notifications/{SlackNotifications.js → slack-notifications.js} +2 -2
- package/core/server/services/staff/index.js +1 -1
- package/core/server/services/staff/{StaffServiceEmails.js → staff-service-emails.js} +2 -2
- package/core/server/services/staff/{StaffService.js → staff-service.js} +2 -2
- package/core/server/services/stats/{PostsStatsService.js → posts-stats-service.js} +25 -25
- package/core/server/services/stats/{ReferrersStatsService.js → referrers-stats-service.js} +3 -3
- package/core/server/services/stats/service.js +1 -1
- package/core/server/services/stats/{StatsService.js → stats-service.js} +23 -23
- package/core/server/services/stripe/events/index.js +2 -2
- package/core/server/services/stripe/service.js +1 -1
- package/core/server/services/stripe/services/webhook/{CheckoutSessionEventService.js → checkout-session-event-service.js} +2 -2
- package/core/server/services/stripe/{StripeMigrations.js → stripe-migrations.js} +1 -1
- package/core/server/services/stripe/{StripeService.js → stripe-service.js} +8 -8
- package/core/server/services/stripe/{WebhookController.js → webhook-controller.js} +4 -4
- package/core/server/services/stripe/{WebhookManager.js → webhook-manager.js} +5 -5
- package/core/server/services/themes/storage.js +1 -1
- package/core/server/services/tiers/{InMemoryTierRepository.js → in-memory-tier-repository.js} +1 -1
- package/core/server/services/tiers/service.js +2 -2
- package/core/server/services/tiers/{TierActivatedEvent.js → tier-activated-event.js} +1 -1
- package/core/server/services/tiers/{TierArchivedEvent.js → tier-archived-event.js} +1 -1
- package/core/server/services/tiers/{TierCreatedEvent.js → tier-created-event.js} +1 -1
- package/core/server/services/tiers/{TierNameChangeEvent.js → tier-name-change-event.js} +1 -1
- package/core/server/services/tiers/{TierPriceChangeEvent.js → tier-price-change-event.js} +1 -1
- package/core/server/services/tiers/{TierRepository.js → tier-repository.js} +7 -7
- package/core/server/services/tiers/{Tier.js → tier.js} +5 -5
- package/core/server/services/tiers/{TiersAPI.js → tiers-api.js} +1 -1
- package/core/server/services/tinybird/index.js +1 -1
- package/core/server/services/tinybird/{TinybirdServiceWrapper.js → tinybird-service-wrapper.js} +2 -2
- package/core/server/services/update-check/index.js +1 -1
- package/core/server/services/url/index.js +2 -2
- package/core/server/services/url/{Resources.js → resources.js} +1 -1
- package/core/server/services/url/{UrlGenerator.js → url-generator.js} +1 -1
- package/core/server/services/url/{UrlService.js → url-service.js} +4 -4
- package/core/server/services/url/{Urls.js → urls.js} +1 -1
- package/core/server/services/webhooks/listen.js +1 -1
- package/core/shared/labs.js +2 -1
- package/package.json +3 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/components/tryghost-i18n-6.11.0.tgz +0 -0
- package/core/built/admin/assets/index-Cr_YX9yU.js +0 -1
- package/core/built/admin/assets/stats/index-BBCJ2EZo.mjs +0 -733
- package/core/server/services/posts/PostsService.js +0 -574
- /package/core/server/{GhostServer.js → ghost-server.js} +0 -0
- /package/core/server/services/activitypub/{ActivityPubService.js → activity-pub-service.js} +0 -0
- /package/core/server/services/adapter-manager/{AdapterManager.js → adapter-manager.js} +0 -0
- /package/core/server/services/announcement-bar-service/{AnnouncementVisibilityValues.js → announcement-visibility-values.js} +0 -0
- /package/core/server/services/audience-feedback/{AudienceFeedbackService.js → audience-feedback-service.js} +0 -0
- /package/core/server/services/audience-feedback/{FeedbackRepository.js → feedback-repository.js} +0 -0
- /package/core/server/services/audience-feedback/{Feedback.js → feedback.js} +0 -0
- /package/core/server/services/auth/session/{SessionStore.js → session-store.js} +0 -0
- /package/core/server/services/comments/{CommentsServiceEmailRenderer.js → comments-service-email-renderer.js} +0 -0
- /package/core/server/services/comments/{CommentsStatsService.js → comments-stats-service.js} +0 -0
- /package/core/server/services/custom-redirects/{CustomRedirectsAPI.js → custom-redirects-api.js} +0 -0
- /package/core/server/services/donations/{DonationBookshelfRepository.js → donation-bookshelf-repository.js} +0 -0
- /package/core/server/services/donations/{DonationPaymentEvent.js → donation-payment-event.js} +0 -0
- /package/core/server/services/donations/{DonationPaymentEvent.ts → donation-payment-event.ts} +0 -0
- /package/core/server/services/email-address/{EmailAddressParser.js → email-address-parser.js} +0 -0
- /package/core/server/services/email-address/{EmailAddressParser.js.d.ts → email-address-parser.js.d.ts} +0 -0
- /package/core/server/services/email-analytics/{EventProcessingResult.js → event-processing-result.js} +0 -0
- /package/core/server/services/email-analytics/events/{StartEmailAnalyticsJobEvent.js → start-email-analytics-job-event.js} +0 -0
- /package/core/server/services/email-service/{DomainWarmingService.js → domain-warming-service.js} +0 -0
- /package/core/server/services/email-service/{DomainWarmingService.ts → domain-warming-service.ts} +0 -0
- /package/core/server/services/email-service/{EmailBodyCache.js → email-body-cache.js} +0 -0
- /package/core/server/services/email-service/{EmailController.js → email-controller.js} +0 -0
- /package/core/server/services/email-service/{EmailSegmenter.js → email-segmenter.js} +0 -0
- /package/core/server/services/email-service/events/{EmailBouncedEvent.js → email-bounced-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailDeliveredEvent.js → email-delivered-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailOpenedEvent.js → email-opened-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailTemporaryBouncedEvent.js → email-temporary-bounced-event.js} +0 -0
- /package/core/server/services/email-service/events/{EmailUnsubscribedEvent.js → email-unsubscribed-event.js} +0 -0
- /package/core/server/services/email-service/events/{SpamComplaintEvent.js → spam-complaint-event.js} +0 -0
- /package/core/server/services/email-suppression-list/{EmailSuppressionList.js → email-suppression-list.js} +0 -0
- /package/core/server/services/explore/{ExploreService.js → explore-service.js} +0 -0
- /package/core/server/services/explore-ping/{ExplorePingService.js → explore-ping-service.js} +0 -0
- /package/core/server/services/frontend-data-service/{FrontendDataService.js → front-end-data-service.js} +0 -0
- /package/core/server/services/identity-tokens/{IdentityTokenService.js → identity-token-service.js} +0 -0
- /package/core/server/services/identity-tokens/{IdentityTokenService.ts → identity-token-service.ts} +0 -0
- /package/core/server/services/invites/{Invites.js → invites.js} +0 -0
- /package/core/server/services/lib/{DynamicRedirectManager.js → dynamic-redirect-manager.js} +0 -0
- /package/core/server/services/lib/{EmailContentGenerator.js → email-content-generator.js} +0 -0
- /package/core/server/services/lib/{InMemoryRepository.js → in-memory-repository.js} +0 -0
- /package/core/server/services/lib/{InMemoryRepository.ts → in-memory-repository.ts} +0 -0
- /package/core/server/services/lib/magic-link/{MagicLink.js → magic-link.js} +0 -0
- /package/core/server/services/lib/{MailgunClient.js → mailgun-client.js} +0 -0
- /package/core/server/services/link-redirection/{LinkRedirect.js → link-redirect.js} +0 -0
- /package/core/server/services/link-tracking/{ClickEvent.js → click-event.js} +0 -0
- /package/core/server/services/link-tracking/{FullPostLink.js → full-post-link.js} +0 -0
- /package/core/server/services/link-tracking/{PostLink.js → post-link.js} +0 -0
- /package/core/server/services/media-inliner/{ExternalMediaInliner.js → external-media-inliner.js} +0 -0
- /package/core/server/services/member-attribution/{OutboundLinkTagger.js → outbound-link-tagger.js} +0 -0
- /package/core/server/services/member-attribution/{UrlHistory.js → url-history.js} +0 -0
- /package/core/server/services/member-welcome-emails/{MemberWelcomeEmailRenderer.js → member-welcome-email-renderer.js} +0 -0
- /package/core/server/services/members/importer/{MembersCSVImporterStripeUtils.js → members-csv-importer-stripe-utils.js} +0 -0
- /package/core/server/services/members/members-api/controllers/{MemberController.js → member-controller.js} +0 -0
- /package/core/server/services/members/members-api/controllers/{RouterController.js → router-controller.js} +0 -0
- /package/core/server/services/members/members-api/controllers/{WellKnownController.js → well-known-controller.js} +0 -0
- /package/core/server/services/members/members-api/repositories/{EventRepository.js → event-repository.js} +0 -0
- /package/core/server/services/members/members-api/repositories/{ProductRepository.js → product-repository.js} +0 -0
- /package/core/server/services/members/members-api/services/{GeolocationService.js → geolocation-service.js} +0 -0
- /package/core/server/services/members/members-api/services/{TokenService.js → token-service.js} +0 -0
- /package/core/server/services/members/{MembersConfigProvider.js → members-config-provider.js} +0 -0
- /package/core/server/services/members/{RequestIntegrityTokenProvider.js → request-integrity-token-provider.js} +0 -0
- /package/core/server/services/members/{SingleUseTokenProvider.js → single-use-token-provider.js} +0 -0
- /package/core/server/services/members/stats/{MembersStats.js → members-stats.js} +0 -0
- /package/core/server/services/members-events/{EventStorage.js → event-storage.js} +0 -0
- /package/core/server/services/members-events/{LastSeenAtCache.js → last-seen-at-cache.js} +0 -0
- /package/core/server/services/mentions/{MentionDiscoveryService.js → mention-discovery-service.js} +0 -0
- /package/core/server/services/mentions/{MentionSendingService.js → mention-sending-service.js} +0 -0
- /package/core/server/services/mentions-email-report/{StartMentionEmailReportJob.js → start-mention-email-report-job.js} +0 -0
- /package/core/server/services/milestones/{MilestoneCreatedEvent.js → milestone-created-event.js} +0 -0
- /package/core/server/services/milestones/{MilestoneQueries.js → milestone-queries.js} +0 -0
- /package/core/server/services/notifications/{Notifications.js → notifications.js} +0 -0
- /package/core/server/services/oembed/{NFTOEmbedProvider.js → nft-oembed-provider.js} +0 -0
- /package/core/server/services/oembed/{OEmbedService.js → oembed-service.js} +0 -0
- /package/core/server/services/oembed/{TwitterOEmbedProvider.js → twitter-oembed-provider.js} +0 -0
- /package/core/server/services/offers/domain/models/shared/{ValueObject.js → value-object.js} +0 -0
- /package/core/server/services/outbox/events/{StartOutboxProcessingEvent.js → start-outbox-processing-event.js} +0 -0
- /package/core/server/services/posts/{PostsExporter.js → posts-exporter.js} +0 -0
- /package/core/server/services/posts/stats/{PostStats.js → post-stats.js} +0 -0
- /package/core/server/services/recommendations/service/{BookshelfRepository.js → bookshelf-repository.js} +0 -0
- /package/core/server/services/recommendations/service/{BookshelfRepository.ts → bookshelf-repository.ts} +0 -0
- /package/core/server/services/recommendations/service/{ClickEvent.js → click-event.js} +0 -0
- /package/core/server/services/recommendations/service/{ClickEvent.ts → click-event.ts} +0 -0
- /package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.js → incoming-recommendation-email-renderer.js} +0 -0
- /package/core/server/services/recommendations/service/{IncomingRecommendationService.js → incoming-recommendation-service.js} +0 -0
- /package/core/server/services/recommendations/service/{RecommendationMetadataService.js → recommendation-metadata-service.js} +0 -0
- /package/core/server/services/recommendations/service/{RecommendationMetadataService.ts → recommendation-metadata-service.ts} +0 -0
- /package/core/server/services/recommendations/service/{RecommendationRepository.js → recommendation-repository.js} +0 -0
- /package/core/server/services/recommendations/service/{SubscribeEvent.js → subscribe-event.js} +0 -0
- /package/core/server/services/recommendations/service/{SubscribeEvent.ts → subscribe-event.ts} +0 -0
- /package/core/server/services/recommendations/service/{UnsafeData.js → unsafe-data.js} +0 -0
- /package/core/server/services/recommendations/service/{UnsafeData.ts → unsafe-data.ts} +0 -0
- /package/core/server/services/recommendations/service/{WellknownService.js → well-known-service.js} +0 -0
- /package/core/server/services/route-settings/{DefaultSettingsManager.js → default-settings-manager.js} +0 -0
- /package/core/server/services/route-settings/{RouteSettings.js → route-settings.js} +0 -0
- /package/core/server/services/route-settings/{SettingsLoader.js → settings-loader.js} +0 -0
- /package/core/server/services/route-settings/{SettingsPathManager.js → settings-path-manager.js} +0 -0
- /package/core/server/services/stats/{ContentStatsService.js → content-stats-service.js} +0 -0
- /package/core/server/services/stats/{MembersStatsService.js → members-stats-service.js} +0 -0
- /package/core/server/services/stats/{MrrStatsService.js → mrr-stats-service.js} +0 -0
- /package/core/server/services/stats/{SubscriptionStatsService.js → subscription-stats-service.js} +0 -0
- /package/core/server/services/stripe/events/{StripeLiveDisabledEvent.js → stripe-live-disabled-event.js} +0 -0
- /package/core/server/services/stripe/events/{StripeLiveEnabledEvent.js → stripe-live-enabled-event.js} +0 -0
- /package/core/server/services/stripe/services/webhook/{InvoiceEventService.js → invoice-event-service.js} +0 -0
- /package/core/server/services/stripe/services/webhook/{SubscriptionEventService.js → subscription-event-service.js} +0 -0
- /package/core/server/services/stripe/{StripeAPI.js → stripe-api.js} +0 -0
- /package/core/server/services/themes/{ThemeStorage.js → theme-storage.js} +0 -0
- /package/core/server/services/tinybird/{TinybirdService.js → tinybird-service.js} +0 -0
- /package/core/server/services/update-check/{UpdateCheckService.js → update-check-service.js} +0 -0
- /package/core/server/services/url/{LocalFileCache.js → local-file-cache.js} +0 -0
- /package/core/server/services/url/{Queue.js → queue.js} +0 -0
- /package/core/server/services/url/{Resource.js → resource.js} +0 -0
- /package/core/server/services/{Users.js → users.js} +0 -0
- /package/core/server/services/{VerificationTrigger.js → verification-trigger.js} +0 -0
- /package/core/server/services/webhooks/{WebhookTrigger.js → webhook-trigger.js} +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexNow API Key Verification File Middleware
|
|
3
|
+
*
|
|
4
|
+
* IndexNow requires websites to prove ownership by hosting a text file
|
|
5
|
+
* containing the API key at a predictable URL: https://example.com/{key}.txt
|
|
6
|
+
*
|
|
7
|
+
* This middleware dynamically serves that file based on the configured key,
|
|
8
|
+
* rather than requiring users to manually upload a file.
|
|
9
|
+
*
|
|
10
|
+
* Security considerations:
|
|
11
|
+
* - Only serves keys that exactly match the configured key
|
|
12
|
+
* - Only responds to 32-character hex patterns (valid IndexNow key format)
|
|
13
|
+
* - Returns 404 (via next()) if IndexNow is disabled or no key configured
|
|
14
|
+
*
|
|
15
|
+
* Route collision note:
|
|
16
|
+
* The pattern /[a-f0-9]{32}.txt is unlikely to collide with user content
|
|
17
|
+
* since pages/posts don't have .txt extensions. The middleware runs before
|
|
18
|
+
* theme static assets, so IndexNow key files take precedence over any
|
|
19
|
+
* theme .txt files with matching names (which is the intended behavior
|
|
20
|
+
* for system-generated verification files).
|
|
21
|
+
*
|
|
22
|
+
* @see ghost/core/core/server/services/indexnow.js - Main IndexNow service
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
const settingsCache = require('../../../shared/settings-cache');
|
|
26
|
+
const labs = require('../../../shared/labs');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Middleware to serve the IndexNow API key verification file
|
|
30
|
+
*/
|
|
31
|
+
function serveIndexNowKey(req, res, next) {
|
|
32
|
+
// Only handle requests for .txt files at the root
|
|
33
|
+
if (!req.path.match(/^\/[a-f0-9]{32}\.txt$/)) {
|
|
34
|
+
return next();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Check if IndexNow is enabled
|
|
38
|
+
if (!labs.isSet('indexnow')) {
|
|
39
|
+
return next();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const apiKey = settingsCache.get('indexnow_api_key');
|
|
43
|
+
|
|
44
|
+
// No key configured
|
|
45
|
+
if (!apiKey) {
|
|
46
|
+
return next();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Extract the requested key from the path (remove leading / and trailing .txt)
|
|
50
|
+
const requestedKey = req.path.slice(1, -4);
|
|
51
|
+
|
|
52
|
+
// Only serve if the requested key matches the configured key
|
|
53
|
+
if (requestedKey !== apiKey) {
|
|
54
|
+
return next();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Serve the key as plain text
|
|
58
|
+
res.set({
|
|
59
|
+
'Content-Type': 'text/plain',
|
|
60
|
+
'Cache-Control': 'public, max-age=86400' // Cache for 24 hours
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return res.send(apiKey);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
module.exports = serveIndexNowKey;
|
|
@@ -10,7 +10,7 @@ const invitations = require('../../services/invitations');
|
|
|
10
10
|
const dbBackup = require('../../data/db/backup');
|
|
11
11
|
const apiMail = require('./index').mail;
|
|
12
12
|
const apiSettings = require('./index').settings;
|
|
13
|
-
const UsersService = require('../../services/
|
|
13
|
+
const UsersService = require('../../services/users');
|
|
14
14
|
const userService = new UsersService({dbBackup, models, auth, apiMail, apiSettings});
|
|
15
15
|
const {deleteAllSessions} = require('../../services/auth/session');
|
|
16
16
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const models = require('../../models');
|
|
2
2
|
const tpl = require('@tryghost/tpl');
|
|
3
3
|
const errors = require('@tryghost/errors');
|
|
4
|
-
const getPostServiceInstance = require('../../services/posts/posts-service');
|
|
4
|
+
const getPostServiceInstance = require('../../services/posts/posts-service-instance');
|
|
5
5
|
const ALLOWED_INCLUDES = ['tags', 'authors', 'authors.roles', 'tiers', 'count.signups', 'count.paid_conversions', 'post_revisions', 'post_revisions.author'];
|
|
6
6
|
const UNSAFE_ATTRS = ['status', 'authors', 'visibility'];
|
|
7
7
|
|
|
@@ -3,7 +3,7 @@ const tpl = require('@tryghost/tpl');
|
|
|
3
3
|
const errors = require('@tryghost/errors');
|
|
4
4
|
const {mapQuery} = require('@tryghost/mongo-utils');
|
|
5
5
|
const postsPublicService = require('../../services/posts-public');
|
|
6
|
-
const getPostServiceInstance = require('../../services/posts/posts-service');
|
|
6
|
+
const getPostServiceInstance = require('../../services/posts/posts-service-instance');
|
|
7
7
|
const postsService = getPostServiceInstance();
|
|
8
8
|
|
|
9
9
|
const allowedIncludes = ['tags', 'authors', 'tiers', 'sentiment'];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const urlUtils = require('../../../shared/url-utils');
|
|
2
2
|
const models = require('../../models');
|
|
3
|
-
const getPostServiceInstance = require('../../services/posts/posts-service');
|
|
3
|
+
const getPostServiceInstance = require('../../services/posts/posts-service-instance');
|
|
4
4
|
const allowedIncludes = [
|
|
5
5
|
'tags',
|
|
6
6
|
'authors',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const models = require('../../models');
|
|
2
|
-
const getPostServiceInstance = require('../../services/posts/posts-service');
|
|
2
|
+
const getPostServiceInstance = require('../../services/posts/posts-service-instance');
|
|
3
3
|
const postsService = getPostServiceInstance();
|
|
4
4
|
|
|
5
5
|
/** @type {import('@tryghost/api-framework').Controller} */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const models = require('../../models');
|
|
2
|
-
const getPostServiceInstance = require('../../services/posts/posts-service');
|
|
2
|
+
const getPostServiceInstance = require('../../services/posts/posts-service-instance');
|
|
3
3
|
const postsService = getPostServiceInstance();
|
|
4
4
|
|
|
5
5
|
/** @type {import('@tryghost/api-framework').Controller} */
|
|
@@ -6,7 +6,7 @@ const dbBackup = require('../../data/db/backup');
|
|
|
6
6
|
const auth = require('../../services/auth');
|
|
7
7
|
const apiMail = require('./index').mail;
|
|
8
8
|
const apiSettings = require('./index').settings;
|
|
9
|
-
const UsersService = require('../../services/
|
|
9
|
+
const UsersService = require('../../services/users');
|
|
10
10
|
const userService = new UsersService({dbBackup, models, auth, apiMail, apiSettings});
|
|
11
11
|
const ALLOWED_INCLUDES = ['count.posts', 'permissions', 'roles', 'roles.permissions'];
|
|
12
12
|
const UNSAFE_ATTRS = ['status', 'roles'];
|
|
@@ -14,7 +14,7 @@ const utils = require('../../../index');
|
|
|
14
14
|
|
|
15
15
|
const postsMetaSchema = require('../../../../../../data/schema').tables.posts_meta;
|
|
16
16
|
|
|
17
|
-
const getPostServiceInstance = require('../../../../../../services/posts/posts-service');
|
|
17
|
+
const getPostServiceInstance = require('../../../../../../services/posts/posts-service-instance');
|
|
18
18
|
const postsService = getPostServiceInstance();
|
|
19
19
|
|
|
20
20
|
const commentsService = require('../../../../../../services/comments');
|
|
@@ -2,7 +2,7 @@ const _ = require('lodash');
|
|
|
2
2
|
const {ValidationError} = require('@tryghost/errors');
|
|
3
3
|
const validator = require('@tryghost/validator');
|
|
4
4
|
const tpl = require('@tryghost/tpl');
|
|
5
|
-
const AnnouncementBarSettings = require('../../../../../services/announcement-bar-service/
|
|
5
|
+
const AnnouncementBarSettings = require('../../../../../services/announcement-bar-service/announcement-bar-settings');
|
|
6
6
|
|
|
7
7
|
const messages = {
|
|
8
8
|
invalidEmailReceived: 'Please send a valid email',
|
|
@@ -72,7 +72,7 @@ module.exports = {
|
|
|
72
72
|
|
|
73
73
|
async render(lexical, userOptions = {}) {
|
|
74
74
|
if (!postsService) {
|
|
75
|
-
const getPostServiceInstance = require('../services/posts/posts-service');
|
|
75
|
+
const getPostServiceInstance = require('../services/posts/posts-service-instance');
|
|
76
76
|
postsService = getPostServiceInstance();
|
|
77
77
|
}
|
|
78
78
|
if (!serializePosts) {
|
|
@@ -60,7 +60,8 @@ function parseDefaultSettings() {
|
|
|
60
60
|
members_otc_secret: () => crypto.randomBytes(64).toString('hex'),
|
|
61
61
|
ghost_public_key: () => getGhostKey('public'),
|
|
62
62
|
ghost_private_key: () => getGhostKey('private'),
|
|
63
|
-
site_uuid: () => getOrGenerateSiteUuid()
|
|
63
|
+
site_uuid: () => getOrGenerateSiteUuid(),
|
|
64
|
+
indexnow_api_key: () => crypto.randomBytes(16).toString('hex')
|
|
64
65
|
};
|
|
65
66
|
|
|
66
67
|
_.each(defaultSettingsInCategories, function each(settings, categoryName) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ObjectID from 'bson-objectid';
|
|
2
2
|
import {Knex} from 'knex';
|
|
3
|
-
import {IdentityTokenService} from '../identity-tokens/
|
|
3
|
+
import {IdentityTokenService} from '../identity-tokens/identity-token-service';
|
|
4
4
|
import fetch from 'node-fetch';
|
|
5
5
|
|
|
6
6
|
type ExpectedWebhook = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports = require('./
|
|
1
|
+
module.exports = require('./activity-pub-service-wrapper');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const AdapterManager = require('./
|
|
1
|
+
const AdapterManager = require('./adapter-manager');
|
|
2
2
|
const getAdapterServiceConfig = require('./config');
|
|
3
3
|
const resolveAdapterOptions = require('./options-resolver');
|
|
4
4
|
const config = require('../../../shared/config');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const settingsCache = require('../../../shared/settings-cache');
|
|
2
|
-
const AnnouncementBarSettings = require('./
|
|
2
|
+
const AnnouncementBarSettings = require('./announcement-bar-settings');
|
|
3
3
|
|
|
4
4
|
const announcementBarService = new AnnouncementBarSettings({
|
|
5
5
|
getAnnouncementSettings: () => ({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const Feedback = require('./
|
|
1
|
+
const Feedback = require('./feedback');
|
|
2
2
|
const errors = require('@tryghost/errors');
|
|
3
3
|
const tpl = require('@tryghost/tpl');
|
|
4
4
|
|
|
@@ -74,8 +74,8 @@ class AudienceFeedbackController {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
const feedback = new Feedback({
|
|
77
|
-
memberId: member.id,
|
|
78
|
-
postId: post.id,
|
|
77
|
+
memberId: member.id,
|
|
78
|
+
postId: post.id,
|
|
79
79
|
score
|
|
80
80
|
});
|
|
81
81
|
await this.#repository.add(feedback);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const urlUtils = require('../../../shared/url-utils');
|
|
2
2
|
const urlService = require('../../services/url');
|
|
3
3
|
|
|
4
|
-
const AudienceFeedbackService = require('./
|
|
5
|
-
const AudienceFeedbackController = require('./
|
|
6
|
-
const Feedback = require('./
|
|
7
|
-
const FeedbackRepository = require('./
|
|
4
|
+
const AudienceFeedbackService = require('./audience-feedback-service');
|
|
5
|
+
const AudienceFeedbackController = require('./audience-feedback-controller');
|
|
6
|
+
const Feedback = require('./feedback');
|
|
7
|
+
const FeedbackRepository = require('./feedback-repository');
|
|
8
8
|
|
|
9
9
|
class AudienceFeedbackServiceWrapper {
|
|
10
10
|
async init() {
|
|
@@ -5,7 +5,7 @@ const settingsCache = require('../../../../shared/settings-cache');
|
|
|
5
5
|
const models = require('../../../models');
|
|
6
6
|
const urlUtils = require('../../../../shared/url-utils');
|
|
7
7
|
|
|
8
|
-
const SessionStore = require('./
|
|
8
|
+
const SessionStore = require('./session-store');
|
|
9
9
|
const sessionStore = new SessionStore(models.Session);
|
|
10
10
|
|
|
11
11
|
let unoExpressSessionMiddleware;
|
|
@@ -17,8 +17,8 @@ const messages = {
|
|
|
17
17
|
|
|
18
18
|
module.exports = class CommentsController {
|
|
19
19
|
/**
|
|
20
|
-
* @param {import('./
|
|
21
|
-
* @param {import('./
|
|
20
|
+
* @param {import('./comments-service')} service
|
|
21
|
+
* @param {import('./comments-stats-service')} stats
|
|
22
22
|
*/
|
|
23
23
|
constructor(service, stats) {
|
|
24
24
|
this.service = service;
|
package/core/server/services/comments/{CommentsServiceEmails.js → comments-service-emails.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const moment = require('moment');
|
|
2
2
|
const htmlToPlaintext = require('@tryghost/html-to-plaintext');
|
|
3
3
|
const emailService = require('../email-service');
|
|
4
|
-
const CommentsServiceEmailRenderer = require('./
|
|
4
|
+
const CommentsServiceEmailRenderer = require('./comments-service-email-renderer');
|
|
5
5
|
const {t} = require('../i18n');
|
|
6
6
|
|
|
7
7
|
class CommentsServiceEmails {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
class CommentsServiceWrapper {
|
|
2
2
|
init() {
|
|
3
|
-
const CommentsService = require('./
|
|
4
|
-
const CommentsController = require('./
|
|
5
|
-
const CommentsStats = require('./
|
|
3
|
+
const CommentsService = require('./comments-service');
|
|
4
|
+
const CommentsController = require('./comments-controller');
|
|
5
|
+
const CommentsStats = require('./comments-stats-service');
|
|
6
6
|
|
|
7
7
|
const config = require('../../../shared/config');
|
|
8
8
|
const logging = require('@tryghost/logging');
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const config = require('../../../shared/config');
|
|
2
2
|
const urlUtils = require('../../../shared/url-utils');
|
|
3
3
|
|
|
4
|
-
const DynamicRedirectManager = require('../lib/
|
|
5
|
-
const CustomRedirectsAPI = require('./
|
|
4
|
+
const DynamicRedirectManager = require('../lib/dynamic-redirect-manager');
|
|
5
|
+
const CustomRedirectsAPI = require('./custom-redirects-api');
|
|
6
6
|
const validation = require('./validation');
|
|
7
7
|
const {getBackupRedirectsFilePath} = require('./utils');
|
|
8
8
|
|
package/core/server/services/donations/{DonationServiceWrapper.js → donation-service-wrapper.js}
RENAMED
|
@@ -8,7 +8,7 @@ class DonationServiceWrapper {
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
const {DonationBookshelfRepository} = require('./
|
|
11
|
+
const {DonationBookshelfRepository} = require('./donation-bookshelf-repository');
|
|
12
12
|
|
|
13
13
|
this.repository = new DonationBookshelfRepository({
|
|
14
14
|
DonationPaymentEventModel
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class EmailAddressServiceWrapper {
|
|
2
2
|
/**
|
|
3
|
-
* @type {import('./
|
|
3
|
+
* @type {import('./email-address-service').EmailAddressService}
|
|
4
4
|
*/
|
|
5
5
|
service;
|
|
6
6
|
|
|
@@ -14,7 +14,7 @@ class EmailAddressServiceWrapper {
|
|
|
14
14
|
const settingsHelpers = require('../settings-helpers');
|
|
15
15
|
const validator = require('@tryghost/validator');
|
|
16
16
|
|
|
17
|
-
const {EmailAddressService} = require('./
|
|
17
|
+
const {EmailAddressService} = require('./email-address-service');
|
|
18
18
|
|
|
19
19
|
this.service = new EmailAddressService({
|
|
20
20
|
labs,
|
package/core/server/services/email-address/{EmailAddressService.js → email-address-service.js}
RENAMED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.EmailAddressService = void 0;
|
|
7
7
|
/* eslint-disable ghost/filenames/match-exported-class */
|
|
8
8
|
const logging_1 = __importDefault(require("@tryghost/logging"));
|
|
9
|
-
const
|
|
9
|
+
const email_address_parser_js_1 = __importDefault(require("./email-address-parser.js"));
|
|
10
10
|
class EmailAddressService {
|
|
11
11
|
#getManagedEmailEnabled;
|
|
12
12
|
#getSendingDomain;
|
|
@@ -25,7 +25,7 @@ class EmailAddressService {
|
|
|
25
25
|
if (!fallbackAddress) {
|
|
26
26
|
return null;
|
|
27
27
|
}
|
|
28
|
-
return
|
|
28
|
+
return email_address_parser_js_1.default.parse(fallbackAddress);
|
|
29
29
|
};
|
|
30
30
|
this.#isValidEmailAddress = dependencies.isValidEmailAddress;
|
|
31
31
|
this.#labs = dependencies.labs;
|
|
@@ -46,8 +46,8 @@ class EmailAddressService {
|
|
|
46
46
|
return this.#getFallbackEmail();
|
|
47
47
|
}
|
|
48
48
|
getAddressFromString(from, replyTo) {
|
|
49
|
-
const parsedFrom =
|
|
50
|
-
const parsedReplyTo = replyTo ?
|
|
49
|
+
const parsedFrom = email_address_parser_js_1.default.parse(from);
|
|
50
|
+
const parsedReplyTo = replyTo ? email_address_parser_js_1.default.parse(replyTo) : undefined;
|
|
51
51
|
return this.getAddress({
|
|
52
52
|
from: parsedFrom ?? this.defaultFromEmail,
|
|
53
53
|
replyTo: parsedReplyTo ?? undefined
|
package/core/server/services/email-address/{EmailAddressService.ts → email-address-service.ts}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable ghost/filenames/match-exported-class */
|
|
2
2
|
import logging from '@tryghost/logging';
|
|
3
|
-
import EmailAddressParser, {EmailAddress} from './
|
|
3
|
+
import EmailAddressParser, {EmailAddress} from './email-address-parser.js';
|
|
4
4
|
|
|
5
5
|
export type EmailAddresses = {
|
|
6
6
|
from: EmailAddress,
|
|
@@ -8,12 +8,12 @@ class EmailAnalyticsServiceWrapper {
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
const EmailAnalyticsService = require('./
|
|
12
|
-
const EmailEventStorage = require('../email-service/
|
|
13
|
-
const EmailEventProcessor = require('../email-service/
|
|
14
|
-
const MailgunProvider = require('./
|
|
11
|
+
const EmailAnalyticsService = require('./email-analytics-service');
|
|
12
|
+
const EmailEventStorage = require('../email-service/email-event-storage');
|
|
13
|
+
const EmailEventProcessor = require('../email-service/email-event-processor');
|
|
14
|
+
const MailgunProvider = require('./email-analytics-provider-mailgun');
|
|
15
15
|
const {EmailRecipientFailure, EmailSpamComplaintEvent, Email} = require('../../models');
|
|
16
|
-
const StartEmailAnalyticsJobEvent = require('./events/
|
|
16
|
+
const StartEmailAnalyticsJobEvent = require('./events/start-email-analytics-job-event');
|
|
17
17
|
const domainEvents = require('@tryghost/domain-events');
|
|
18
18
|
const settings = require('../../../shared/settings-cache');
|
|
19
19
|
const labs = require('../../../shared/labs');
|
package/core/server/services/email-analytics/{EmailAnalyticsService.js → email-analytics-service.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const EventProcessingResult = require('./
|
|
1
|
+
const EventProcessingResult = require('./event-processing-result');
|
|
2
2
|
const logging = require('@tryghost/logging');
|
|
3
3
|
const errors = require('@tryghost/errors');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @typedef {import('../email-service/
|
|
6
|
+
* @typedef {import('../email-service/email-event-processor')} EmailEventProcessor
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const {parentPort} = require('worker_threads');
|
|
2
|
-
const StartEmailAnalyticsJobEvent = require('../../events/
|
|
2
|
+
const StartEmailAnalyticsJobEvent = require('../../events/start-email-analytics-job-event');
|
|
3
3
|
|
|
4
4
|
// recurring job to fetch analytics since the most recently seen event timestamp
|
|
5
5
|
|
package/core/server/services/email-service/{BatchSendingService.js → batch-sending-service.js}
RENAMED
|
@@ -2,7 +2,7 @@ const logging = require('@tryghost/logging');
|
|
|
2
2
|
const ObjectID = require('bson-objectid').default;
|
|
3
3
|
const errors = require('@tryghost/errors');
|
|
4
4
|
const tpl = require('@tryghost/tpl');
|
|
5
|
-
const EmailBodyCache = require('./
|
|
5
|
+
const EmailBodyCache = require('./email-body-cache');
|
|
6
6
|
|
|
7
7
|
const messages = {
|
|
8
8
|
emailErrorPartialFailure: 'An error occurred, and your newsletter was only partially sent. Please retry sending the remaining emails.',
|
|
@@ -12,11 +12,11 @@ const messages = {
|
|
|
12
12
|
const MAX_SENDING_CONCURRENCY = 2;
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* @typedef {import('./
|
|
16
|
-
* @typedef {import('./
|
|
17
|
-
* @typedef {import('./
|
|
18
|
-
* @typedef {import('./
|
|
19
|
-
* @typedef {import('./
|
|
15
|
+
* @typedef {import('./sending-service')} SendingService
|
|
16
|
+
* @typedef {import('./email-segmenter')} EmailSegmenter
|
|
17
|
+
* @typedef {import('./email-renderer')} EmailRenderer
|
|
18
|
+
* @typedef {import('./domain-warming-service').DomainWarmingService} DomainWarmingService
|
|
19
|
+
* @typedef {import('./email-renderer').MemberLike} MemberLike
|
|
20
20
|
* @typedef {object} JobsService
|
|
21
21
|
* @typedef {object} Email
|
|
22
22
|
* @typedef {object} Newsletter
|
|
@@ -345,7 +345,7 @@ class BatchSendingService {
|
|
|
345
345
|
* Creates a batch with retry logic and adds it to the batches array
|
|
346
346
|
* @param {object} params
|
|
347
347
|
* @param {Email} params.email
|
|
348
|
-
* @param {import('./
|
|
348
|
+
* @param {import('./email-renderer').Segment} params.segment
|
|
349
349
|
* @param {object[]} params.members
|
|
350
350
|
* @param {boolean} params.useFallbackDomain
|
|
351
351
|
* @param {EmailBatch[]} params.batches
|
|
@@ -374,7 +374,7 @@ class BatchSendingService {
|
|
|
374
374
|
/**
|
|
375
375
|
* @private
|
|
376
376
|
* @param {Email} email
|
|
377
|
-
* @param {import('./
|
|
377
|
+
* @param {import('./email-renderer').Segment} segment
|
|
378
378
|
* @param {object[]} members
|
|
379
379
|
* @param {object} options
|
|
380
380
|
* @param {boolean} options.useFallbackDomain
|
package/core/server/services/email-service/{EmailEventProcessor.js → email-event-processor.js}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
|
|
3
|
-
const EmailDeliveredEvent = require('./events/
|
|
4
|
-
const EmailOpenedEvent = require('./events/
|
|
5
|
-
const EmailBouncedEvent = require('./events/
|
|
6
|
-
const EmailTemporaryBouncedEvent = require('./events/
|
|
7
|
-
const EmailUnsubscribedEvent = require('./events/
|
|
8
|
-
const SpamComplaintEvent = require('./events/
|
|
3
|
+
const EmailDeliveredEvent = require('./events/email-delivered-event');
|
|
4
|
+
const EmailOpenedEvent = require('./events/email-opened-event');
|
|
5
|
+
const EmailBouncedEvent = require('./events/email-bounced-event');
|
|
6
|
+
const EmailTemporaryBouncedEvent = require('./events/email-temporary-bounced-event');
|
|
7
|
+
const EmailUnsubscribedEvent = require('./events/email-unsubscribed-event');
|
|
8
|
+
const SpamComplaintEvent = require('./events/spam-complaint-event');
|
|
9
9
|
|
|
10
10
|
async function waitForEvent() {
|
|
11
11
|
return new Promise((resolve) => {
|
|
@@ -118,7 +118,7 @@ class EmailEventStorage {
|
|
|
118
118
|
/**
|
|
119
119
|
* @private
|
|
120
120
|
* @param {'temporary'|'permanent'} severity
|
|
121
|
-
* @param {import('./events/
|
|
121
|
+
* @param {import('./events/email-temporary-bounced-event')|import('./events/email-bounced-event')} event
|
|
122
122
|
* @param {{transacting?: any}} options
|
|
123
123
|
* @returns
|
|
124
124
|
*/
|
|
@@ -9,7 +9,7 @@ const {isUnsplashImage} = require('@tryghost/kg-default-cards/lib/utils');
|
|
|
9
9
|
const {textColorForBackgroundColor, darkenToContrastThreshold} = require('@tryghost/color-utils');
|
|
10
10
|
const {DateTime} = require('luxon');
|
|
11
11
|
const htmlToPlaintext = require('@tryghost/html-to-plaintext');
|
|
12
|
-
const EmailAddressParser = require('../email-address/
|
|
12
|
+
const EmailAddressParser = require('../email-address/email-address-parser');
|
|
13
13
|
const {registerHelpers} = require('./helpers/register-helpers');
|
|
14
14
|
const crypto = require('crypto');
|
|
15
15
|
|