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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const DomainEvents = require('@tryghost/domain-events');
|
|
2
|
-
const MentionCreatedEvent = require('../mentions/
|
|
2
|
+
const MentionCreatedEvent = require('../mentions/mention-created-event');
|
|
3
3
|
const logging = require('@tryghost/logging');
|
|
4
4
|
|
|
5
5
|
class RecommendationServiceWrapper {
|
|
@@ -53,7 +53,7 @@ class RecommendationServiceWrapper {
|
|
|
53
53
|
const models = require('../../models');
|
|
54
54
|
const sentry = require('../../../shared/sentry');
|
|
55
55
|
const settings = require('../settings');
|
|
56
|
-
const RecommendationEnablerService = require('./
|
|
56
|
+
const RecommendationEnablerService = require('./recommendation-enabler-service');
|
|
57
57
|
|
|
58
58
|
const {
|
|
59
59
|
BookshelfRecommendationRepository,
|
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BookshelfClickEventRepository = void 0;
|
|
7
|
-
const
|
|
7
|
+
const bookshelf_repository_1 = require("./bookshelf-repository");
|
|
8
8
|
const logging_1 = __importDefault(require("@tryghost/logging"));
|
|
9
|
-
const
|
|
10
|
-
class BookshelfClickEventRepository extends
|
|
9
|
+
const click_event_1 = require("./click-event");
|
|
10
|
+
class BookshelfClickEventRepository extends bookshelf_repository_1.BookshelfRepository {
|
|
11
11
|
sentry;
|
|
12
12
|
constructor(Model, deps = {}) {
|
|
13
13
|
super(Model);
|
|
@@ -23,7 +23,7 @@ class BookshelfClickEventRepository extends BookshelfRepository_1.BookshelfRepos
|
|
|
23
23
|
}
|
|
24
24
|
modelToEntity(model) {
|
|
25
25
|
try {
|
|
26
|
-
return
|
|
26
|
+
return click_event_1.ClickEvent.create({
|
|
27
27
|
id: model.id,
|
|
28
28
|
recommendationId: model.get('recommendation_id'),
|
|
29
29
|
memberId: model.get('member_id'),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {BookshelfRepository, ModelClass, ModelInstance} from './
|
|
1
|
+
import {BookshelfRepository, ModelClass, ModelInstance} from './bookshelf-repository';
|
|
2
2
|
import logger from '@tryghost/logging';
|
|
3
|
-
import {ClickEvent} from './
|
|
3
|
+
import {ClickEvent} from './click-event';
|
|
4
4
|
|
|
5
5
|
type Sentry = {
|
|
6
6
|
captureException(err: unknown): void;
|
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BookshelfRecommendationRepository = void 0;
|
|
7
|
-
const
|
|
7
|
+
const bookshelf_repository_1 = require("./bookshelf-repository");
|
|
8
8
|
const logging_1 = __importDefault(require("@tryghost/logging"));
|
|
9
|
-
const
|
|
10
|
-
class BookshelfRecommendationRepository extends
|
|
9
|
+
const recommendation_1 = require("./recommendation");
|
|
10
|
+
class BookshelfRecommendationRepository extends bookshelf_repository_1.BookshelfRepository {
|
|
11
11
|
sentry;
|
|
12
12
|
constructor(Model, deps = {}) {
|
|
13
13
|
super(Model);
|
|
@@ -43,7 +43,7 @@ class BookshelfRecommendationRepository extends BookshelfRepository_1.BookshelfR
|
|
|
43
43
|
}
|
|
44
44
|
modelToEntity(model) {
|
|
45
45
|
try {
|
|
46
|
-
return
|
|
46
|
+
return recommendation_1.Recommendation.create({
|
|
47
47
|
id: model.id,
|
|
48
48
|
title: model.get('title'),
|
|
49
49
|
description: model.get('description'),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {AllOptions, BookshelfRepository, ModelClass, ModelInstance} from './
|
|
1
|
+
import {AllOptions, BookshelfRepository, ModelClass, ModelInstance} from './bookshelf-repository';
|
|
2
2
|
import logger from '@tryghost/logging';
|
|
3
3
|
import {Knex} from 'knex';
|
|
4
|
-
import {Recommendation} from './
|
|
5
|
-
import {RecommendationRepository} from './
|
|
4
|
+
import {Recommendation} from './recommendation';
|
|
5
|
+
import {RecommendationRepository} from './recommendation-repository';
|
|
6
6
|
|
|
7
7
|
type Sentry = {
|
|
8
8
|
captureException(err: unknown): void;
|
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BookshelfSubscribeEventRepository = void 0;
|
|
7
|
-
const
|
|
7
|
+
const bookshelf_repository_1 = require("./bookshelf-repository");
|
|
8
8
|
const logging_1 = __importDefault(require("@tryghost/logging"));
|
|
9
|
-
const
|
|
10
|
-
class BookshelfSubscribeEventRepository extends
|
|
9
|
+
const subscribe_event_1 = require("./subscribe-event");
|
|
10
|
+
class BookshelfSubscribeEventRepository extends bookshelf_repository_1.BookshelfRepository {
|
|
11
11
|
sentry;
|
|
12
12
|
constructor(Model, deps = {}) {
|
|
13
13
|
super(Model);
|
|
@@ -23,7 +23,7 @@ class BookshelfSubscribeEventRepository extends BookshelfRepository_1.BookshelfR
|
|
|
23
23
|
}
|
|
24
24
|
modelToEntity(model) {
|
|
25
25
|
try {
|
|
26
|
-
return
|
|
26
|
+
return subscribe_event_1.SubscribeEvent.create({
|
|
27
27
|
id: model.id,
|
|
28
28
|
recommendationId: model.get('recommendation_id'),
|
|
29
29
|
memberId: model.get('member_id'),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {BookshelfRepository, ModelClass, ModelInstance} from './
|
|
1
|
+
import {BookshelfRepository, ModelClass, ModelInstance} from './bookshelf-repository';
|
|
2
2
|
import logger from '@tryghost/logging';
|
|
3
|
-
import {SubscribeEvent} from './
|
|
3
|
+
import {SubscribeEvent} from './subscribe-event';
|
|
4
4
|
|
|
5
5
|
type Sentry = {
|
|
6
6
|
captureException(err: unknown): void;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InMemoryRecommendationRepository = void 0;
|
|
4
|
-
const
|
|
5
|
-
class InMemoryRecommendationRepository extends
|
|
4
|
+
const in_memory_repository_1 = require("../../lib/in-memory-repository");
|
|
5
|
+
class InMemoryRecommendationRepository extends in_memory_repository_1.InMemoryRepository {
|
|
6
6
|
toPrimitive(entity) {
|
|
7
7
|
return entity;
|
|
8
8
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {Recommendation} from './
|
|
2
|
-
import {RecommendationRepository} from './
|
|
3
|
-
import {InMemoryRepository} from '../../lib/
|
|
1
|
+
import {Recommendation} from './recommendation';
|
|
2
|
+
import {RecommendationRepository} from './recommendation-repository';
|
|
3
|
+
import {InMemoryRepository} from '../../lib/in-memory-repository';
|
|
4
4
|
|
|
5
5
|
export class InMemoryRecommendationRepository extends InMemoryRepository<string, Recommendation> implements RecommendationRepository {
|
|
6
6
|
toPrimitive(entity: Recommendation): object {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IncomingRecommendationController = void 0;
|
|
4
|
-
const
|
|
4
|
+
const unsafe_data_1 = require("./unsafe-data");
|
|
5
5
|
class IncomingRecommendationController {
|
|
6
6
|
service;
|
|
7
7
|
constructor(deps) {
|
|
8
8
|
this.service = deps.service;
|
|
9
9
|
}
|
|
10
10
|
async browse(frame) {
|
|
11
|
-
const options = new
|
|
11
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
12
12
|
const page = options.optionalKey('page')?.integer ?? 1;
|
|
13
13
|
const limit = options.optionalKey('limit')?.integer ?? 5;
|
|
14
14
|
const { incomingRecommendations, meta } = await this.service.listIncomingRecommendations({ page, limit });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {IncomingRecommendationService} from './
|
|
2
|
-
import {IncomingRecommendation} from './
|
|
3
|
-
import {UnsafeData} from './
|
|
1
|
+
import {IncomingRecommendationService} from './incoming-recommendation-service';
|
|
2
|
+
import {IncomingRecommendation} from './incoming-recommendation-service';
|
|
3
|
+
import {UnsafeData} from './unsafe-data';
|
|
4
4
|
|
|
5
5
|
type Frame = {
|
|
6
6
|
data: unknown,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {EmailRecipient} from './
|
|
2
|
-
import {IncomingRecommendation} from './
|
|
1
|
+
import {EmailRecipient} from './incoming-recommendation-service';
|
|
2
|
+
import {IncomingRecommendation} from './incoming-recommendation-service';
|
|
3
3
|
|
|
4
4
|
type StaffService = {
|
|
5
5
|
api: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable ghost/filenames/match-exported-class */
|
|
2
2
|
|
|
3
|
-
import {IncomingRecommendationEmailRenderer} from './
|
|
4
|
-
import {RecommendationService} from './
|
|
3
|
+
import {IncomingRecommendationEmailRenderer} from './incoming-recommendation-email-renderer';
|
|
4
|
+
import {RecommendationService} from './recommendation-service';
|
|
5
5
|
import logging from '@tryghost/logging';
|
|
6
6
|
|
|
7
7
|
export type IncomingRecommendation = {
|
|
@@ -14,18 +14,18 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
20
|
-
__exportStar(require("./
|
|
21
|
-
__exportStar(require("./
|
|
22
|
-
__exportStar(require("./
|
|
23
|
-
__exportStar(require("./
|
|
24
|
-
__exportStar(require("./
|
|
25
|
-
__exportStar(require("./
|
|
26
|
-
__exportStar(require("./
|
|
27
|
-
__exportStar(require("./
|
|
28
|
-
__exportStar(require("./
|
|
29
|
-
__exportStar(require("./
|
|
30
|
-
__exportStar(require("./
|
|
31
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./recommendation-controller"), exports);
|
|
18
|
+
__exportStar(require("./recommendation-service"), exports);
|
|
19
|
+
__exportStar(require("./recommendation-repository"), exports);
|
|
20
|
+
__exportStar(require("./in-memory-recommendation-repository"), exports);
|
|
21
|
+
__exportStar(require("./recommendation"), exports);
|
|
22
|
+
__exportStar(require("./well-known-service"), exports);
|
|
23
|
+
__exportStar(require("./bookshelf-recommendation-repository"), exports);
|
|
24
|
+
__exportStar(require("./click-event"), exports);
|
|
25
|
+
__exportStar(require("./bookshelf-click-event-repository"), exports);
|
|
26
|
+
__exportStar(require("./subscribe-event"), exports);
|
|
27
|
+
__exportStar(require("./bookshelf-subscribe-event-repository"), exports);
|
|
28
|
+
__exportStar(require("./incoming-recommendation-controller"), exports);
|
|
29
|
+
__exportStar(require("./incoming-recommendation-service"), exports);
|
|
30
|
+
__exportStar(require("./incoming-recommendation-email-renderer"), exports);
|
|
31
|
+
__exportStar(require("./recommendation-metadata-service"), exports);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './
|
|
10
|
-
export * from './
|
|
11
|
-
export * from './
|
|
12
|
-
export * from './
|
|
13
|
-
export * from './
|
|
14
|
-
export * from './
|
|
15
|
-
export * from './
|
|
1
|
+
export * from './recommendation-controller';
|
|
2
|
+
export * from './recommendation-service';
|
|
3
|
+
export * from './recommendation-repository';
|
|
4
|
+
export * from './in-memory-recommendation-repository';
|
|
5
|
+
export * from './recommendation';
|
|
6
|
+
export * from './well-known-service';
|
|
7
|
+
export * from './bookshelf-recommendation-repository';
|
|
8
|
+
export * from './click-event';
|
|
9
|
+
export * from './bookshelf-click-event-repository';
|
|
10
|
+
export * from './subscribe-event';
|
|
11
|
+
export * from './bookshelf-subscribe-event-repository';
|
|
12
|
+
export * from './incoming-recommendation-controller';
|
|
13
|
+
export * from './incoming-recommendation-service';
|
|
14
|
+
export * from './incoming-recommendation-email-renderer';
|
|
15
|
+
export * from './recommendation-metadata-service';
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.RecommendationController = void 0;
|
|
7
7
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
8
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
9
|
-
const
|
|
9
|
+
const unsafe_data_1 = require("./unsafe-data");
|
|
10
10
|
const RecommendationIncludesMap = {
|
|
11
11
|
'count.clicks': 'clickCount',
|
|
12
12
|
'count.subscribers': 'subscriberCount'
|
|
@@ -27,13 +27,13 @@ class RecommendationController {
|
|
|
27
27
|
this.service = deps.service;
|
|
28
28
|
}
|
|
29
29
|
async read(frame) {
|
|
30
|
-
const options = new
|
|
30
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
31
31
|
const id = options.key('id').string;
|
|
32
32
|
const recommendation = await this.service.readRecommendation(id);
|
|
33
33
|
return this.#serialize([recommendation]);
|
|
34
34
|
}
|
|
35
35
|
async add(frame) {
|
|
36
|
-
const data = new
|
|
36
|
+
const data = new unsafe_data_1.UnsafeData(frame.data);
|
|
37
37
|
const recommendation = data.key('recommendations').index(0);
|
|
38
38
|
const plain = {
|
|
39
39
|
title: recommendation.key('title').string,
|
|
@@ -54,14 +54,14 @@ class RecommendationController {
|
|
|
54
54
|
* This can be used in the frontend when creating a new recommendation (duplication checking + showing a preview before saving)
|
|
55
55
|
*/
|
|
56
56
|
async check(frame) {
|
|
57
|
-
const data = new
|
|
57
|
+
const data = new unsafe_data_1.UnsafeData(frame.data);
|
|
58
58
|
const recommendation = data.key('recommendations').index(0);
|
|
59
59
|
const url = recommendation.key('url').url;
|
|
60
60
|
return this.#serialize([await this.service.checkRecommendation(url)]);
|
|
61
61
|
}
|
|
62
62
|
async edit(frame) {
|
|
63
|
-
const options = new
|
|
64
|
-
const data = new
|
|
63
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
64
|
+
const data = new unsafe_data_1.UnsafeData(frame.data);
|
|
65
65
|
const recommendation = data.key('recommendations').index(0);
|
|
66
66
|
const id = options.key('id').string;
|
|
67
67
|
const plain = {
|
|
@@ -76,7 +76,7 @@ class RecommendationController {
|
|
|
76
76
|
return this.#serialize([await this.service.editRecommendation(id, plain)]);
|
|
77
77
|
}
|
|
78
78
|
async destroy(frame) {
|
|
79
|
-
const options = new
|
|
79
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
80
80
|
const id = options.key('id').string;
|
|
81
81
|
await this.service.deleteRecommendation(id);
|
|
82
82
|
}
|
|
@@ -94,8 +94,8 @@ class RecommendationController {
|
|
|
94
94
|
const order = [];
|
|
95
95
|
for (const [index, part] of parts.entries()) {
|
|
96
96
|
const trimmed = part.trim();
|
|
97
|
-
const fieldData = new
|
|
98
|
-
const directionData = new
|
|
97
|
+
const fieldData = new unsafe_data_1.UnsafeData(trimmed.split(' ')[0].trim(), { field: ['order', index.toString(), 'field'] });
|
|
98
|
+
const directionData = new unsafe_data_1.UnsafeData(trimmed.split(' ')[1]?.trim() ?? 'desc', { field: ['order', index.toString(), 'direction'] });
|
|
99
99
|
const validatedField = fieldData.enum(Object.keys(RecommendationOrderMap));
|
|
100
100
|
const direction = directionData.enum(['asc', 'desc']);
|
|
101
101
|
// Convert 'count.' and camelCase to snake_case
|
|
@@ -108,7 +108,7 @@ class RecommendationController {
|
|
|
108
108
|
return order;
|
|
109
109
|
}
|
|
110
110
|
async browse(frame) {
|
|
111
|
-
const options = new
|
|
111
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
112
112
|
const page = options.optionalKey('page')?.integer ?? 1;
|
|
113
113
|
const limit = options.optionalKey('limit')?.integer ?? 5;
|
|
114
114
|
const include = options.optionalKey('withRelated')?.array.map((item) => {
|
|
@@ -125,7 +125,7 @@ class RecommendationController {
|
|
|
125
125
|
}
|
|
126
126
|
async trackClicked(frame) {
|
|
127
127
|
const member = this.#optionalAuthMember(frame);
|
|
128
|
-
const options = new
|
|
128
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
129
129
|
const id = options.key('id').string;
|
|
130
130
|
await this.service.trackClicked({
|
|
131
131
|
id,
|
|
@@ -134,7 +134,7 @@ class RecommendationController {
|
|
|
134
134
|
}
|
|
135
135
|
async trackSubscribed(frame) {
|
|
136
136
|
const member = this.#authMember(frame);
|
|
137
|
-
const options = new
|
|
137
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
138
138
|
const id = options.key('id').string;
|
|
139
139
|
await this.service.trackSubscribed({
|
|
140
140
|
id,
|
|
@@ -142,7 +142,7 @@ class RecommendationController {
|
|
|
142
142
|
});
|
|
143
143
|
}
|
|
144
144
|
#authMember(frame) {
|
|
145
|
-
const options = new
|
|
145
|
+
const options = new unsafe_data_1.UnsafeData(frame.options);
|
|
146
146
|
const memberId = options.key('context').optionalKey('member')?.nullable.key('id').string;
|
|
147
147
|
if (!memberId) {
|
|
148
148
|
// This is an internal server error because authentication should happen outside this service.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import errors from '@tryghost/errors';
|
|
3
|
-
import {AddRecommendation, Recommendation, RecommendationPlain} from './
|
|
4
|
-
import {RecommendationService} from './
|
|
5
|
-
import {UnsafeData} from './
|
|
6
|
-
import {OrderOption} from './
|
|
3
|
+
import {AddRecommendation, Recommendation, RecommendationPlain} from './recommendation';
|
|
4
|
+
import {RecommendationService} from './recommendation-service';
|
|
5
|
+
import {UnsafeData} from './unsafe-data';
|
|
6
|
+
import {OrderOption} from './bookshelf-repository';
|
|
7
7
|
|
|
8
8
|
type Frame = {
|
|
9
9
|
data: unknown,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {AllOptions} from './
|
|
2
|
-
import {Recommendation} from './
|
|
1
|
+
import {AllOptions} from './bookshelf-repository';
|
|
2
|
+
import {Recommendation} from './recommendation';
|
|
3
3
|
|
|
4
4
|
export interface RecommendationRepository {
|
|
5
5
|
save(entity: Recommendation): Promise<void>;
|
|
@@ -10,4 +10,4 @@ export interface RecommendationRepository {
|
|
|
10
10
|
getCount(options: {
|
|
11
11
|
filter?: string;
|
|
12
12
|
}): Promise<number>;
|
|
13
|
-
}
|
|
13
|
+
}
|
|
@@ -7,9 +7,9 @@ exports.RecommendationService = void 0;
|
|
|
7
7
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
8
8
|
const logging_1 = __importDefault(require("@tryghost/logging"));
|
|
9
9
|
const tpl_1 = __importDefault(require("@tryghost/tpl"));
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
10
|
+
const click_event_1 = require("./click-event");
|
|
11
|
+
const recommendation_1 = require("./recommendation");
|
|
12
|
+
const subscribe_event_1 = require("./subscribe-event");
|
|
13
13
|
const messages = {
|
|
14
14
|
notFound: 'Recommendation with id {id} not found'
|
|
15
15
|
};
|
|
@@ -90,7 +90,7 @@ class RecommendationService {
|
|
|
90
90
|
return recommendation.plain;
|
|
91
91
|
}
|
|
92
92
|
async addRecommendation(addRecommendation) {
|
|
93
|
-
const recommendation =
|
|
93
|
+
const recommendation = recommendation_1.Recommendation.create(addRecommendation);
|
|
94
94
|
// If a recommendation with this URL already exists, throw an error
|
|
95
95
|
const existing = await this.repository.getByUrl(recommendation.url);
|
|
96
96
|
if (existing) {
|
|
@@ -210,11 +210,11 @@ class RecommendationService {
|
|
|
210
210
|
return await this.repository.getCount({ filter });
|
|
211
211
|
}
|
|
212
212
|
async trackClicked({ id, memberId }) {
|
|
213
|
-
const clickEvent =
|
|
213
|
+
const clickEvent = click_event_1.ClickEvent.create({ recommendationId: id, memberId });
|
|
214
214
|
await this.clickEventRepository.save(clickEvent);
|
|
215
215
|
}
|
|
216
216
|
async trackSubscribed({ id, memberId }) {
|
|
217
|
-
const subscribeEvent =
|
|
217
|
+
const subscribeEvent = subscribe_event_1.SubscribeEvent.create({ recommendationId: id, memberId });
|
|
218
218
|
await this.subscribeEventRepository.save(subscribeEvent);
|
|
219
219
|
}
|
|
220
220
|
async readRecommendationByUrl(url) {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import errors from '@tryghost/errors';
|
|
2
|
-
import {InMemoryRepository} from '../../lib/
|
|
2
|
+
import {InMemoryRepository} from '../../lib/in-memory-repository';
|
|
3
3
|
import logging from '@tryghost/logging';
|
|
4
4
|
import tpl from '@tryghost/tpl';
|
|
5
5
|
|
|
6
|
-
import {IncludeOption, OrderOption} from './
|
|
7
|
-
import {ClickEvent} from './
|
|
8
|
-
import {AddRecommendation, Recommendation, RecommendationPlain} from './
|
|
9
|
-
import {RecommendationRepository} from './
|
|
10
|
-
import {SubscribeEvent} from './
|
|
11
|
-
import {WellknownService} from './
|
|
12
|
-
import {RecommendationMetadataService} from './
|
|
6
|
+
import {IncludeOption, OrderOption} from './bookshelf-repository';
|
|
7
|
+
import {ClickEvent} from './click-event';
|
|
8
|
+
import {AddRecommendation, Recommendation, RecommendationPlain} from './recommendation';
|
|
9
|
+
import {RecommendationRepository} from './recommendation-repository';
|
|
10
|
+
import {SubscribeEvent} from './subscribe-event';
|
|
11
|
+
import {WellknownService} from './well-known-service';
|
|
12
|
+
import {RecommendationMetadataService} from './recommendation-metadata-service';
|
|
13
13
|
|
|
14
14
|
type MentionSendingService = {
|
|
15
15
|
sendAll(options: {url: URL, links: URL[]}): Promise<void>
|
package/core/server/services/recommendations/service/{Recommendation.js → recommendation.js}
RENAMED
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.Recommendation = void 0;
|
|
8
8
|
const bson_objectid_1 = __importDefault(require("bson-objectid"));
|
|
9
9
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
10
|
-
const
|
|
10
|
+
const unsafe_data_1 = require("./unsafe-data");
|
|
11
11
|
class Recommendation {
|
|
12
12
|
id;
|
|
13
13
|
title;
|
|
@@ -83,9 +83,9 @@ class Recommendation {
|
|
|
83
83
|
title: data.title,
|
|
84
84
|
description: data.description,
|
|
85
85
|
excerpt: data.excerpt,
|
|
86
|
-
featuredImage: new
|
|
87
|
-
favicon: new
|
|
88
|
-
url: new
|
|
86
|
+
featuredImage: new unsafe_data_1.UnsafeData(data.featuredImage, { field: ['featuredImage'] }).nullable.url,
|
|
87
|
+
favicon: new unsafe_data_1.UnsafeData(data.favicon, { field: ['favicon'] }).nullable.url,
|
|
88
|
+
url: new unsafe_data_1.UnsafeData(data.url, { field: ['url'] }).url,
|
|
89
89
|
oneClickSubscribe: data.oneClickSubscribe,
|
|
90
90
|
createdAt: data.createdAt ?? new Date(),
|
|
91
91
|
updatedAt: data.updatedAt ?? null,
|
package/core/server/services/recommendations/service/{Recommendation.ts → recommendation.ts}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import ObjectId from 'bson-objectid';
|
|
4
4
|
import errors from '@tryghost/errors';
|
|
5
|
-
import {UnsafeData} from './
|
|
5
|
+
import {UnsafeData} from './unsafe-data';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* We never expose Entities outside of services. Because we should never expose the bussiness logic methods. The plain objects are used for that
|
|
@@ -6,10 +6,10 @@ let routeSettings;
|
|
|
6
6
|
|
|
7
7
|
module.exports = {
|
|
8
8
|
init: async () => {
|
|
9
|
-
const RouteSettings = require('./
|
|
10
|
-
const SettingsLoader = require('./
|
|
11
|
-
const DefaultSettingsManager = require('./
|
|
12
|
-
const SettingsPathManager = require('./
|
|
9
|
+
const RouteSettings = require('./route-settings');
|
|
10
|
+
const SettingsLoader = require('./settings-loader');
|
|
11
|
+
const DefaultSettingsManager = require('./default-settings-manager');
|
|
12
|
+
const SettingsPathManager = require('./settings-path-manager');
|
|
13
13
|
|
|
14
14
|
const settingsPathManager = new SettingsPathManager({type: 'routes', paths: [config.getContentPath('settings')]});
|
|
15
15
|
settingsLoader = new SettingsLoader({parseYaml, settingFilePath: settingsPathManager.getDefaultFilePath()});
|
|
@@ -4,7 +4,7 @@ const {NotFoundError, NoPermissionError, BadRequestError, IncorrectUsageError, V
|
|
|
4
4
|
const {obfuscatedSetting, isSecretSetting, hideValueIfSecret} = require('./settings-utils');
|
|
5
5
|
const logging = require('@tryghost/logging');
|
|
6
6
|
const verifyEmailTemplate = require('./emails/verify-email');
|
|
7
|
-
const MagicLink = require('../lib/magic-link/
|
|
7
|
+
const MagicLink = require('../lib/magic-link/magic-link');
|
|
8
8
|
const sentry = require('../../../shared/sentry');
|
|
9
9
|
|
|
10
10
|
const EMAIL_KEYS = ['members_support_address'];
|
|
@@ -9,10 +9,10 @@ const limits = require('../limits');
|
|
|
9
9
|
const config = require('../../../shared/config');
|
|
10
10
|
const adapterManager = require('../adapter-manager');
|
|
11
11
|
const SettingsCache = require('../../../shared/settings-cache');
|
|
12
|
-
const SettingsBREADService = require('./
|
|
12
|
+
const SettingsBREADService = require('./settings-bread-service');
|
|
13
13
|
const {obfuscatedSetting, isSecretSetting, hideValueIfSecret} = require('./settings-utils');
|
|
14
14
|
const mail = require('../mail');
|
|
15
|
-
const SingleUseTokenProvider = require('../members/
|
|
15
|
+
const SingleUseTokenProvider = require('../members/single-use-token-provider');
|
|
16
16
|
const urlUtils = require('../../../shared/url-utils');
|
|
17
17
|
|
|
18
18
|
const ObjectId = require('bson-objectid').default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const settingsCache = require('../../../shared/settings-cache');
|
|
2
2
|
const urlUtils = require('../../../shared/url-utils');
|
|
3
3
|
const config = require('../../../shared/config');
|
|
4
|
-
const SettingsHelpers = require('./
|
|
4
|
+
const SettingsHelpers = require('./settings-helpers');
|
|
5
5
|
const labs = require('../../../shared/labs');
|
|
6
6
|
const limitService = require('../limits');
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const net = require('net');
|
|
2
2
|
const tpl = require('@tryghost/tpl');
|
|
3
3
|
const errors = require('@tryghost/errors');
|
|
4
|
-
const EmailAddressParser = require('../email-address/
|
|
4
|
+
const EmailAddressParser = require('../email-address/email-address-parser');
|
|
5
5
|
const logging = require('@tryghost/logging');
|
|
6
6
|
const crypto = require('crypto');
|
|
7
7
|
const debug = require('@tryghost/debug')('services:settings-helpers');
|
|
@@ -269,7 +269,7 @@ class SettingsHelpers {
|
|
|
269
269
|
* Calculated setting for Web analytics
|
|
270
270
|
*
|
|
271
271
|
* Setting > Labs Flag > Config > Limit Service
|
|
272
|
-
*
|
|
272
|
+
*
|
|
273
273
|
* @returns {boolean}
|
|
274
274
|
*/
|
|
275
275
|
isWebAnalyticsEnabled() {
|
|
@@ -289,7 +289,7 @@ class SettingsHelpers {
|
|
|
289
289
|
|
|
290
290
|
/**
|
|
291
291
|
* Check if web analytics can be configured (used for UI enable/disable state)
|
|
292
|
-
*
|
|
292
|
+
*
|
|
293
293
|
* @returns {boolean}
|
|
294
294
|
*/
|
|
295
295
|
isWebAnalyticsConfigured() {
|
|
@@ -316,7 +316,7 @@ class SettingsHelpers {
|
|
|
316
316
|
*/
|
|
317
317
|
_isValidTinybirdConfig() {
|
|
318
318
|
const tinybirdConfig = this.config.get('tinybird');
|
|
319
|
-
|
|
319
|
+
|
|
320
320
|
// First requirement: tinybird:tracker:endpoint is always required
|
|
321
321
|
if (!tinybirdConfig || !tinybirdConfig.tracker?.endpoint) {
|
|
322
322
|
debug('Web analytics is not available without tinybird:tracker:endpoint');
|
|
@@ -326,7 +326,7 @@ class SettingsHelpers {
|
|
|
326
326
|
// Second requirement: Either JWT config OR local stats config
|
|
327
327
|
const hasJwtConfig = !!(tinybirdConfig.workspaceId && tinybirdConfig.adminToken);
|
|
328
328
|
const hasLocalConfig = !!(tinybirdConfig.stats?.local?.enabled);
|
|
329
|
-
|
|
329
|
+
|
|
330
330
|
if (!hasJwtConfig && !hasLocalConfig) {
|
|
331
331
|
debug('Web analytics requires either (workspaceId + adminToken) or stats.local.enabled');
|
|
332
332
|
return false;
|
|
@@ -3,7 +3,7 @@ const config = require('../../../shared/config');
|
|
|
3
3
|
const logging = require('@tryghost/logging');
|
|
4
4
|
|
|
5
5
|
class SlackNotificationsServiceWrapper {
|
|
6
|
-
/** @type {import('./
|
|
6
|
+
/** @type {import('./slack-notifications-service')} */
|
|
7
7
|
#api;
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -14,11 +14,11 @@ class SlackNotificationsServiceWrapper {
|
|
|
14
14
|
* @param {URL} deps.webhookUrl
|
|
15
15
|
* @param {number} deps.minThreshold
|
|
16
16
|
*
|
|
17
|
-
* @returns {import('./
|
|
17
|
+
* @returns {import('./slack-notifications-service')}
|
|
18
18
|
*/
|
|
19
19
|
static create({siteUrl, isEnabled, webhookUrl, minThreshold}) {
|
|
20
|
-
const SlackNotificationsService = require('./
|
|
21
|
-
const SlackNotifications = require('./
|
|
20
|
+
const SlackNotificationsService = require('./slack-notifications-service');
|
|
21
|
+
const SlackNotifications = require('./slack-notifications');
|
|
22
22
|
|
|
23
23
|
const slackNotifications = new SlackNotifications({
|
|
24
24
|
webhookUrl,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const MilestoneCreatedEvent = require('../milestones/
|
|
1
|
+
const MilestoneCreatedEvent = require('../milestones/milestone-created-event');
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @typedef {import('../milestones/
|
|
4
|
+
* @typedef {import('../milestones/milestone')} Milestone
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/**
|