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
package/core/server/services/slack-notifications/{SlackNotifications.js → slack-notifications.js}
RENAMED
|
@@ -17,7 +17,7 @@ const moment = require('moment');
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* @typedef {import('./
|
|
20
|
+
* @typedef {import('./slack-notifications-service').ISlackNotifications} ISlackNotifications
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -47,7 +47,7 @@ class SlackNotifications {
|
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* @param {object} eventData
|
|
50
|
-
* @param {import('../milestones/
|
|
50
|
+
* @param {import('../milestones/milestone')} eventData.milestone
|
|
51
51
|
* @param {object} [eventData.meta]
|
|
52
52
|
* @param {'import'|'email'|'skipped'|'initial'} [eventData.meta.reason]
|
|
53
53
|
* @param {number} [eventData.meta.currentValue]
|
|
@@ -2,7 +2,7 @@ const {promises: fs, readFileSync} = require('fs');
|
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const moment = require('moment');
|
|
4
4
|
const glob = require('glob');
|
|
5
|
-
const EmailAddressParser = require('../email-address/
|
|
5
|
+
const EmailAddressParser = require('../email-address/email-address-parser');
|
|
6
6
|
|
|
7
7
|
class StaffServiceEmails {
|
|
8
8
|
constructor({logging, models, mailer, settingsHelpers, settingsCache, blogIcon, urlUtils, labs}) {
|
|
@@ -263,7 +263,7 @@ class StaffServiceEmails {
|
|
|
263
263
|
/**
|
|
264
264
|
*
|
|
265
265
|
* @param {object} eventData
|
|
266
|
-
* @param {import('../donations/
|
|
266
|
+
* @param {import('../donations/donation-payment-event').DonationPaymentEvent} eventData.donationPaymentEvent
|
|
267
267
|
*
|
|
268
268
|
* @returns {Promise<void>}
|
|
269
269
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const {MemberCreatedEvent, SubscriptionCancelledEvent, SubscriptionActivatedEvent} = require('../../../shared/events');
|
|
2
|
-
const MilestoneCreatedEvent = require('../milestones/
|
|
2
|
+
const MilestoneCreatedEvent = require('../milestones/milestone-created-event');
|
|
3
3
|
|
|
4
4
|
// @NOTE: 'StaffService' is a vague name that does not describe what it's actually doing.
|
|
5
5
|
// Possibly, "StaffNotificationService" or "StaffEventNotificationService" would be a more accurate name
|
|
@@ -13,7 +13,7 @@ class StaffService {
|
|
|
13
13
|
this.DomainEvents = DomainEvents;
|
|
14
14
|
this.memberAttributionService = memberAttributionService;
|
|
15
15
|
|
|
16
|
-
const Emails = require('./
|
|
16
|
+
const Emails = require('./staff-service-emails');
|
|
17
17
|
|
|
18
18
|
this.emails = new Emails({
|
|
19
19
|
logging,
|
|
@@ -3,7 +3,7 @@ const errors = require('@tryghost/errors');
|
|
|
3
3
|
const urlUtils = require('../../../shared/url-utils');
|
|
4
4
|
|
|
5
5
|
// Import source normalization from ReferrersStatsService
|
|
6
|
-
const {normalizeSource} = require('./
|
|
6
|
+
const {normalizeSource} = require('./referrers-stats-service');
|
|
7
7
|
// Import centralized date utilities
|
|
8
8
|
const {getDateBoundaries, applyDateFilter} = require('./utils/date-utils');
|
|
9
9
|
|
|
@@ -147,7 +147,7 @@ class PostsStatsService {
|
|
|
147
147
|
.from('members_created_events')
|
|
148
148
|
.whereNotNull('attribution_url');
|
|
149
149
|
applyDateFilter(subquery1, dateFrom, dateTo, 'created_at');
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
subquery1.union(function () {
|
|
152
152
|
const subquery2 = this.select('attribution_url', 'attribution_type', 'attribution_id')
|
|
153
153
|
.from('members_subscription_created_events')
|
|
@@ -215,10 +215,10 @@ class PostsStatsService {
|
|
|
215
215
|
// Transform results and enrich with titles and URL existence validation
|
|
216
216
|
return results.map((row) => {
|
|
217
217
|
const title = row.title || this._generateTitleFromPath(row.attribution_url);
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
// Check if URL exists using the URL service
|
|
220
220
|
let urlExists = true; // Default to true for backward compatibility
|
|
221
|
-
|
|
221
|
+
|
|
222
222
|
if (this.urlService && row.attribution_url) {
|
|
223
223
|
try {
|
|
224
224
|
// Check if URL service is ready
|
|
@@ -253,7 +253,7 @@ class PostsStatsService {
|
|
|
253
253
|
if (!path) {
|
|
254
254
|
return 'Unknown';
|
|
255
255
|
}
|
|
256
|
-
|
|
256
|
+
|
|
257
257
|
// Handle common Ghost paths
|
|
258
258
|
if (path === '/') {
|
|
259
259
|
return 'Homepage';
|
|
@@ -269,12 +269,12 @@ class PostsStatsService {
|
|
|
269
269
|
if (path.startsWith('/author/')) {
|
|
270
270
|
const segments = path.split('/');
|
|
271
271
|
return segments.length > 2 && segments[2] ? `author/${segments[2]}` : 'author/unknown';
|
|
272
|
-
}
|
|
272
|
+
}
|
|
273
273
|
if (path.startsWith('/authors/')) {
|
|
274
274
|
const segments = path.split('/');
|
|
275
275
|
return segments.length > 2 && segments[2] ? `author/${segments[2]}` : 'author/unknown';
|
|
276
276
|
}
|
|
277
|
-
|
|
277
|
+
|
|
278
278
|
// For other paths, just return the path itself
|
|
279
279
|
return path;
|
|
280
280
|
}
|
|
@@ -362,7 +362,7 @@ class PostsStatsService {
|
|
|
362
362
|
|
|
363
363
|
// Apply source normalization and group by normalized source
|
|
364
364
|
const normalizedResults = new Map();
|
|
365
|
-
|
|
365
|
+
|
|
366
366
|
results.forEach((row) => {
|
|
367
367
|
const normalizedSource = normalizeSource(row.source);
|
|
368
368
|
const existing = normalizedResults.get(normalizedSource) || {
|
|
@@ -372,11 +372,11 @@ class PostsStatsService {
|
|
|
372
372
|
paid_members: 0,
|
|
373
373
|
mrr: 0
|
|
374
374
|
};
|
|
375
|
-
|
|
375
|
+
|
|
376
376
|
existing.free_members += row.free_members;
|
|
377
377
|
existing.paid_members += row.paid_members;
|
|
378
378
|
existing.mrr += row.mrr;
|
|
379
|
-
|
|
379
|
+
|
|
380
380
|
normalizedResults.set(normalizedSource, existing);
|
|
381
381
|
});
|
|
382
382
|
|
|
@@ -453,7 +453,7 @@ class PostsStatsService {
|
|
|
453
453
|
const groupByField = groupByUrl ? 'mce.attribution_url' : 'mce.attribution_id';
|
|
454
454
|
const joinCondition = groupByUrl ? 'mce.attribution_url' : 'mce.attribution_id';
|
|
455
455
|
const {dateFrom, dateTo} = getDateBoundaries(options);
|
|
456
|
-
|
|
456
|
+
|
|
457
457
|
let subquery = knex('members_created_events as mce')
|
|
458
458
|
.select(selectField)
|
|
459
459
|
.countDistinct('mce.member_id as free_members')
|
|
@@ -515,7 +515,7 @@ class PostsStatsService {
|
|
|
515
515
|
const selectField = groupByUrl ? 'msce.attribution_url' : 'msce.attribution_id as post_id';
|
|
516
516
|
const groupByField = groupByUrl ? 'msce.attribution_url' : 'msce.attribution_id';
|
|
517
517
|
const {dateFrom, dateTo} = getDateBoundaries(options);
|
|
518
|
-
|
|
518
|
+
|
|
519
519
|
let subquery = knex('members_subscription_created_events as msce')
|
|
520
520
|
.select(selectField)
|
|
521
521
|
.countDistinct('msce.member_id as paid_members')
|
|
@@ -559,7 +559,7 @@ class PostsStatsService {
|
|
|
559
559
|
const selectField = groupByUrl ? 'msce.attribution_url' : 'msce.attribution_id as post_id';
|
|
560
560
|
const groupByField = groupByUrl ? 'msce.attribution_url' : 'msce.attribution_id';
|
|
561
561
|
const {dateFrom, dateTo} = getDateBoundaries(options);
|
|
562
|
-
|
|
562
|
+
|
|
563
563
|
let subquery = this.knex('members_subscription_created_events as msce')
|
|
564
564
|
.select(selectField)
|
|
565
565
|
.sum('mpse.mrr_delta as mrr')
|
|
@@ -841,7 +841,7 @@ class PostsStatsService {
|
|
|
841
841
|
.whereIn('p.status', ['sent', 'published'])
|
|
842
842
|
.orderBy(orderFieldMap[orderField], orderDirection)
|
|
843
843
|
.limit(limit);
|
|
844
|
-
|
|
844
|
+
|
|
845
845
|
// Apply centralized date filtering
|
|
846
846
|
applyDateFilter(query, dateFrom, dateTo, 'p.published_at');
|
|
847
847
|
} else {
|
|
@@ -861,7 +861,7 @@ class PostsStatsService {
|
|
|
861
861
|
.whereIn('p.status', ['sent', 'published'])
|
|
862
862
|
.orderBy(orderFieldMap[orderField], orderDirection)
|
|
863
863
|
.limit(limit);
|
|
864
|
-
|
|
864
|
+
|
|
865
865
|
// Apply centralized date filtering
|
|
866
866
|
applyDateFilter(query, dateFrom, dateTo, 'p.published_at');
|
|
867
867
|
}
|
|
@@ -1119,7 +1119,7 @@ class PostsStatsService {
|
|
|
1119
1119
|
if (!postId || postId.trim() === '') {
|
|
1120
1120
|
return {data: []};
|
|
1121
1121
|
}
|
|
1122
|
-
|
|
1122
|
+
|
|
1123
1123
|
// Get basic post info for stats calculations
|
|
1124
1124
|
const postData = await this.knex('posts')
|
|
1125
1125
|
.select('posts.id', 'posts.uuid', 'posts.published_at', 'e.email_count', 'e.opened_count')
|
|
@@ -1127,7 +1127,7 @@ class PostsStatsService {
|
|
|
1127
1127
|
.where('posts.id', postId)
|
|
1128
1128
|
.where('posts.status', 'published')
|
|
1129
1129
|
.first();
|
|
1130
|
-
|
|
1130
|
+
|
|
1131
1131
|
if (!postData) {
|
|
1132
1132
|
return {data: []};
|
|
1133
1133
|
}
|
|
@@ -1135,14 +1135,14 @@ class PostsStatsService {
|
|
|
1135
1135
|
// Get member attribution counts
|
|
1136
1136
|
const memberAttributionCounts = await this._getMemberAttributionCounts([postData.id]);
|
|
1137
1137
|
const attributionCount = memberAttributionCounts.find(ac => ac.post_id === postData.id);
|
|
1138
|
-
|
|
1138
|
+
|
|
1139
1139
|
const freeMembers = attributionCount ? attributionCount.free_members : 0;
|
|
1140
1140
|
const paidMembers = attributionCount ? attributionCount.paid_members : 0;
|
|
1141
1141
|
const totalMembers = freeMembers + paidMembers;
|
|
1142
1142
|
|
|
1143
1143
|
// Calculate open rate
|
|
1144
|
-
const openRate = postData.email_count ?
|
|
1145
|
-
(postData.opened_count / postData.email_count) * 100 :
|
|
1144
|
+
const openRate = postData.email_count ?
|
|
1145
|
+
(postData.opened_count / postData.email_count) * 100 :
|
|
1146
1146
|
null;
|
|
1147
1147
|
|
|
1148
1148
|
// Get visitor count from Tinybird
|
|
@@ -1208,7 +1208,7 @@ class PostsStatsService {
|
|
|
1208
1208
|
|
|
1209
1209
|
// Filter out any rows without post_uuid and get unique UUIDs
|
|
1210
1210
|
const postUuids = [...new Set(viewsData.filter(row => row.post_uuid).map(row => row.post_uuid))];
|
|
1211
|
-
|
|
1211
|
+
|
|
1212
1212
|
// Get posts data from Ghost DB - prioritize posts that were sent as newsletters
|
|
1213
1213
|
const posts = await this.knex('posts as p')
|
|
1214
1214
|
.select(
|
|
@@ -1300,7 +1300,7 @@ class PostsStatsService {
|
|
|
1300
1300
|
if (remainingCount > 0) {
|
|
1301
1301
|
// Get post IDs that we already have to exclude them
|
|
1302
1302
|
const existingPostIds = postsWithViews.map(p => p.post_id);
|
|
1303
|
-
|
|
1303
|
+
|
|
1304
1304
|
additionalPosts = await this.knex('posts as p')
|
|
1305
1305
|
.select(
|
|
1306
1306
|
'p.id as post_id',
|
|
@@ -1474,7 +1474,7 @@ class PostsStatsService {
|
|
|
1474
1474
|
async getPostsMemberCounts(postIds, options = {}) {
|
|
1475
1475
|
try {
|
|
1476
1476
|
const attributionCounts = await this._getMemberAttributionCounts(postIds, options);
|
|
1477
|
-
|
|
1477
|
+
|
|
1478
1478
|
// Convert array to object mapping post_id -> counts
|
|
1479
1479
|
const memberCounts = {};
|
|
1480
1480
|
attributionCounts.forEach((count) => {
|
|
@@ -1483,7 +1483,7 @@ class PostsStatsService {
|
|
|
1483
1483
|
paid_members: count.paid_members
|
|
1484
1484
|
};
|
|
1485
1485
|
});
|
|
1486
|
-
|
|
1486
|
+
|
|
1487
1487
|
return memberCounts;
|
|
1488
1488
|
} catch (error) {
|
|
1489
1489
|
logging.error('Error fetching member counts:', error);
|
|
@@ -1568,4 +1568,4 @@ class PostsStatsService {
|
|
|
1568
1568
|
}
|
|
1569
1569
|
}
|
|
1570
1570
|
|
|
1571
|
-
module.exports = PostsStatsService;
|
|
1571
|
+
module.exports = PostsStatsService;
|
|
@@ -362,12 +362,12 @@ class ReferrersStatsService {
|
|
|
362
362
|
* @param {string} [options.date_from] - Start date in YYYY-MM-DD format
|
|
363
363
|
* @param {string} [options.date_to] - End date in YYYY-MM-DD format
|
|
364
364
|
* @param {string} [options.timezone] - Timezone to use for date interpretation
|
|
365
|
-
* @param {string} [options.
|
|
365
|
+
* @param {string} [options.order='signups desc'] - Sort order: 'signups desc', 'paid_conversions desc', 'mrr desc', 'source desc'
|
|
366
366
|
* @param {number} [options.limit=50] - Maximum number of sources to return
|
|
367
367
|
* @returns {Promise<{data: AttributionCountStatWithMrr[], meta: {}}>}
|
|
368
368
|
*/
|
|
369
369
|
async getTopSourcesWithRange(options = {}) {
|
|
370
|
-
const {
|
|
370
|
+
const {order = 'signups desc', limit = 50} = options;
|
|
371
371
|
|
|
372
372
|
// Get deduplicated member counts and MRR data in parallel
|
|
373
373
|
const [memberCounts, mrrEntries] = await Promise.all([
|
|
@@ -416,7 +416,7 @@ class ReferrersStatsService {
|
|
|
416
416
|
let results = Array.from(sourceMap.values());
|
|
417
417
|
|
|
418
418
|
// Apply sorting - only allow descending sorts for sources
|
|
419
|
-
const [field] =
|
|
419
|
+
const [field] = order.split(' ');
|
|
420
420
|
|
|
421
421
|
results.sort((a, b) => {
|
|
422
422
|
let valueA; let valueB;
|
|
@@ -10,7 +10,7 @@ class StatsServiceWrapper {
|
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
const StatsService = require('./
|
|
13
|
+
const StatsService = require('./stats-service');
|
|
14
14
|
const db = require('../../data/db');
|
|
15
15
|
const models = require('../../models');
|
|
16
16
|
const urlService = require('../url');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const MRRService = require('./
|
|
2
|
-
const MembersService = require('./
|
|
3
|
-
const SubscriptionStatsService = require('./
|
|
4
|
-
const ReferrersStatsService = require('./
|
|
5
|
-
const PostsStatsService = require('./
|
|
6
|
-
const ContentStatsService = require('./
|
|
1
|
+
const MRRService = require('./mrr-stats-service');
|
|
2
|
+
const MembersService = require('./members-stats-service');
|
|
3
|
+
const SubscriptionStatsService = require('./subscription-stats-service');
|
|
4
|
+
const ReferrersStatsService = require('./referrers-stats-service');
|
|
5
|
+
const PostsStatsService = require('./posts-stats-service');
|
|
6
|
+
const ContentStatsService = require('./content-stats-service');
|
|
7
7
|
class StatsService {
|
|
8
8
|
/**
|
|
9
9
|
* @param {object} deps
|
|
@@ -78,8 +78,8 @@ class StatsService {
|
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Get top posts by attribution metrics (includes all content that drove conversions)
|
|
81
|
-
* @param {import('./
|
|
82
|
-
* @returns {Promise<{data: import('./
|
|
81
|
+
* @param {import('./posts-stats-service').TopPostsOptions} options
|
|
82
|
+
* @returns {Promise<{data: import('./posts-stats-service').AttributionResult[]}>}
|
|
83
83
|
*/
|
|
84
84
|
async getTopPosts(options = {}) {
|
|
85
85
|
// Return the original { data: results } structure
|
|
@@ -94,7 +94,7 @@ class StatsService {
|
|
|
94
94
|
* @param {string} options.date_to - End date in YYYY-MM-DD format
|
|
95
95
|
* @param {string} options.timezone - Timezone to use for date interpretation
|
|
96
96
|
* @param {number} [options.limit=5] - Maximum number of posts to return
|
|
97
|
-
* @returns {Promise<{data: import('./
|
|
97
|
+
* @returns {Promise<{data: import('./posts-stats-service').TopPostResult[]}>}
|
|
98
98
|
*/
|
|
99
99
|
async getTopPostsViews(options) {
|
|
100
100
|
const result = await this.posts.getTopPostsViews(options);
|
|
@@ -124,17 +124,17 @@ class StatsService {
|
|
|
124
124
|
* @param {string} [options.date_from] - Start date filter in YYYY-MM-DD format
|
|
125
125
|
* @param {string} [options.date_to] - End date filter in YYYY-MM-DD format
|
|
126
126
|
* @param {string} [options.timezone] - Timezone to use for date interpretation
|
|
127
|
-
* @returns {Promise<{data: import('./
|
|
127
|
+
* @returns {Promise<{data: import('./posts-stats-service').NewsletterStatResult[]}>}
|
|
128
128
|
*/
|
|
129
129
|
async getNewsletterStats(options = {}) {
|
|
130
130
|
// Extract newsletter_id from options
|
|
131
131
|
const {newsletter_id: newsletterId, ...otherOptions} = options;
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
// If no newsletterId is provided, we can't get specific stats
|
|
134
134
|
if (!newsletterId) {
|
|
135
135
|
return {data: []};
|
|
136
136
|
}
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
// Return newsletter stats for the specific newsletter
|
|
139
139
|
const result = await this.posts.getNewsletterStats(newsletterId, otherOptions);
|
|
140
140
|
return result;
|
|
@@ -142,23 +142,23 @@ class StatsService {
|
|
|
142
142
|
|
|
143
143
|
/**
|
|
144
144
|
* Get newsletter subscriber statistics including total count and daily deltas
|
|
145
|
-
*
|
|
145
|
+
*
|
|
146
146
|
* @param {Object} options
|
|
147
147
|
* @param {string} [options.newsletter_id] - ID of the specific newsletter to get stats for
|
|
148
148
|
* @param {string} [options.date_from] - Start date filter in YYYY-MM-DD format
|
|
149
149
|
* @param {string} [options.date_to] - End date filter in YYYY-MM-DD format
|
|
150
150
|
* @param {string} [options.timezone] - Timezone to use for date interpretation
|
|
151
|
-
* @returns {Promise<{data: import('./
|
|
151
|
+
* @returns {Promise<{data: import('./posts-stats-service').NewsletterSubscriberStats[]}>}
|
|
152
152
|
*/
|
|
153
153
|
async getNewsletterSubscriberStats(options = {}) {
|
|
154
154
|
// Extract newsletter_id from options
|
|
155
155
|
const {newsletter_id: newsletterId, ...otherOptions} = options;
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
// If no newsletterId is provided, we can't get specific stats
|
|
158
158
|
if (!newsletterId) {
|
|
159
159
|
return {data: [{total: 0, values: []}]};
|
|
160
160
|
}
|
|
161
|
-
|
|
161
|
+
|
|
162
162
|
const result = await this.posts.getNewsletterSubscriberStats(newsletterId, otherOptions);
|
|
163
163
|
return result;
|
|
164
164
|
}
|
|
@@ -195,17 +195,17 @@ class StatsService {
|
|
|
195
195
|
* @param {string} [options.timezone] - Timezone to use for date interpretation
|
|
196
196
|
* @param {string} [options.date_from] - Start date filter in YYYY-MM-DD format
|
|
197
197
|
* @param {string} [options.date_to] - End date filter in YYYY-MM-DD format
|
|
198
|
-
* @returns {Promise<{data: import('./
|
|
198
|
+
* @returns {Promise<{data: import('./posts-stats-service').NewsletterStatResult[]}>}
|
|
199
199
|
*/
|
|
200
200
|
async getNewsletterBasicStats(options = {}) {
|
|
201
201
|
// Extract newsletter_id from options
|
|
202
202
|
const {newsletter_id: newsletterId, ...otherOptions} = options;
|
|
203
|
-
|
|
203
|
+
|
|
204
204
|
// If no newsletterId is provided, we can't get specific stats
|
|
205
205
|
if (!newsletterId) {
|
|
206
206
|
return {data: []};
|
|
207
207
|
}
|
|
208
|
-
|
|
208
|
+
|
|
209
209
|
// Return newsletter basic stats for the specific newsletter
|
|
210
210
|
const result = await this.posts.getNewsletterBasicStats(newsletterId, otherOptions);
|
|
211
211
|
return result;
|
|
@@ -221,12 +221,12 @@ class StatsService {
|
|
|
221
221
|
async getNewsletterClickStats(options = {}) {
|
|
222
222
|
// Extract newsletter_id and post_ids from options
|
|
223
223
|
const {newsletter_id: newsletterId, post_ids: postIds} = options;
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
// If no newsletterId is provided, we can't get specific stats
|
|
226
226
|
if (!newsletterId) {
|
|
227
227
|
return {data: []};
|
|
228
228
|
}
|
|
229
|
-
|
|
229
|
+
|
|
230
230
|
// Return newsletter click stats for the specific newsletter and posts
|
|
231
231
|
const result = await this.posts.getNewsletterClickStats(newsletterId, postIds);
|
|
232
232
|
return result;
|
|
@@ -237,7 +237,7 @@ class StatsService {
|
|
|
237
237
|
* @param {string} [options.date_from] - Start date in YYYY-MM-DD format
|
|
238
238
|
* @param {string} [options.date_to] - End date in YYYY-MM-DD format
|
|
239
239
|
* @param {string} [options.timezone] - Timezone to use for date interpretation
|
|
240
|
-
* @param {string} [options.
|
|
240
|
+
* @param {string} [options.order='signups desc'] - Sort order: 'signups desc', 'paid_conversions desc', 'mrr desc', 'source desc'
|
|
241
241
|
* @param {number} [options.limit=50] - Maximum number of sources to return
|
|
242
242
|
*/
|
|
243
243
|
async getTopSourcesWithRange(options = {}) {
|
|
@@ -255,7 +255,7 @@ class StatsService {
|
|
|
255
255
|
* @param {string} [options.date_to] - End date in YYYY-MM-DD format
|
|
256
256
|
* @param {string} [options.timezone] - Timezone to use for date interpretation
|
|
257
257
|
* @param {string} [options.post_id] - Optional filter by post ID
|
|
258
|
-
* @returns {Promise<{data: import('./
|
|
258
|
+
* @returns {Promise<{data: import('./referrers-stats-service').UtmGrowthStat[], meta: {}}>}
|
|
259
259
|
*/
|
|
260
260
|
async getUtmGrowthStats(options = {}) {
|
|
261
261
|
return this.referrers.getUtmGrowthStats(options);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
StripeLiveEnabledEvent: require('./
|
|
3
|
-
StripeLiveDisabledEvent: require('./
|
|
2
|
+
StripeLiveEnabledEvent: require('./stripe-live-enabled-event'),
|
|
3
|
+
StripeLiveDisabledEvent: require('./stripe-live-disabled-event')
|
|
4
4
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
|
-
const StripeService = require('./
|
|
2
|
+
const StripeService = require('./stripe-service');
|
|
3
3
|
const logging = require('@tryghost/logging');
|
|
4
4
|
const membersService = require('../members');
|
|
5
5
|
const config = require('../../../shared/config');
|
|
@@ -19,7 +19,7 @@ const logging = require('@tryghost/logging');
|
|
|
19
19
|
module.exports = class CheckoutSessionEventService {
|
|
20
20
|
/**
|
|
21
21
|
* @param {object} deps
|
|
22
|
-
* @param {import('../../
|
|
22
|
+
* @param {import('../../stripe-api')} deps.api
|
|
23
23
|
* @param {object} deps.memberRepository
|
|
24
24
|
* @param {object} deps.donationRepository
|
|
25
25
|
* @param {object} deps.staffServiceEmails
|
|
@@ -62,7 +62,7 @@ module.exports = class CheckoutSessionEventService {
|
|
|
62
62
|
const memberRepository = this.deps.memberRepository;
|
|
63
63
|
const member = session.customer ? (await memberRepository.get({customer_id: session.customer})) : null;
|
|
64
64
|
|
|
65
|
-
const {DonationPaymentEvent} = require('../../../donations/
|
|
65
|
+
const {DonationPaymentEvent} = require('../../../donations/donation-payment-event');
|
|
66
66
|
const data = DonationPaymentEvent.create({
|
|
67
67
|
name: member?.get('name') ?? session.customer_details.name,
|
|
68
68
|
email: member?.get('email') ?? session.customer_details.email,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const WebhookManager = require('./
|
|
2
|
-
const StripeAPI = require('./
|
|
3
|
-
const StripeMigrations = require('./
|
|
4
|
-
const WebhookController = require('./
|
|
1
|
+
const WebhookManager = require('./webhook-manager');
|
|
2
|
+
const StripeAPI = require('./stripe-api');
|
|
3
|
+
const StripeMigrations = require('./stripe-migrations');
|
|
4
|
+
const WebhookController = require('./webhook-controller');
|
|
5
5
|
const DomainEvents = require('@tryghost/domain-events');
|
|
6
6
|
const {StripeLiveEnabledEvent, StripeLiveDisabledEvent} = require('./events');
|
|
7
|
-
const SubscriptionEventService = require('./services/webhook/
|
|
8
|
-
const InvoiceEventService = require('./services/webhook/
|
|
9
|
-
const CheckoutSessionEventService = require('./services/webhook/
|
|
7
|
+
const SubscriptionEventService = require('./services/webhook/subscription-event-service');
|
|
8
|
+
const InvoiceEventService = require('./services/webhook/invoice-event-service');
|
|
9
|
+
const CheckoutSessionEventService = require('./services/webhook/checkout-session-event-service');
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @typedef {object} IStripeServiceConfig
|
|
@@ -34,7 +34,7 @@ module.exports = class StripeService {
|
|
|
34
34
|
* @param {*} deps.membersService
|
|
35
35
|
* @param {*} deps.donationService
|
|
36
36
|
* @param {*} deps.staffService
|
|
37
|
-
* @param {import('./
|
|
37
|
+
* @param {import('./webhook-manager').StripeWebhook} deps.StripeWebhook
|
|
38
38
|
* @param {object} deps.models
|
|
39
39
|
* @param {object} deps.models.Product
|
|
40
40
|
* @param {object} deps.models.StripePrice
|
|
@@ -3,10 +3,10 @@ const logging = require('@tryghost/logging');
|
|
|
3
3
|
module.exports = class WebhookController {
|
|
4
4
|
/**
|
|
5
5
|
* @param {object} deps
|
|
6
|
-
* @param {import('./
|
|
7
|
-
* @param {import('./services/webhook/
|
|
8
|
-
* @param {import('./services/webhook/
|
|
9
|
-
* @param {import('./services/webhook/
|
|
6
|
+
* @param {import('./webhook-manager')} deps.webhookManager
|
|
7
|
+
* @param {import('./services/webhook/checkout-session-event-service')} deps.checkoutSessionEventService
|
|
8
|
+
* @param {import('./services/webhook/subscription-event-service')} deps.subscriptionEventService
|
|
9
|
+
* @param {import('./services/webhook/invoice-event-service')} deps.invoiceEventService
|
|
10
10
|
*/
|
|
11
11
|
constructor(deps) {
|
|
12
12
|
this.checkoutSessionEventService = deps.checkoutSessionEventService;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @typedef {import('stripe').Stripe.WebhookEndpointCreateParams.EnabledEvent} WebhookEvent
|
|
3
|
-
* @typedef {import('./
|
|
3
|
+
* @typedef {import('./stripe-api')} StripeAPI
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -51,7 +51,7 @@ module.exports = class WebhookManager {
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Deletes the Stripe Webhook Endpoint and saves null values for the webhook ID and secret.
|
|
54
|
-
*
|
|
54
|
+
*
|
|
55
55
|
* @returns {Promise<boolean>}
|
|
56
56
|
*/
|
|
57
57
|
async stop() {
|
|
@@ -76,7 +76,7 @@ module.exports = class WebhookManager {
|
|
|
76
76
|
|
|
77
77
|
/**
|
|
78
78
|
* Starts the Stripe Webhook Endpoint and saves the webhook ID and secret.
|
|
79
|
-
*
|
|
79
|
+
*
|
|
80
80
|
* @returns {Promise<void>}
|
|
81
81
|
*/
|
|
82
82
|
async start() {
|
|
@@ -115,7 +115,7 @@ module.exports = class WebhookManager {
|
|
|
115
115
|
* Setup a new Stripe Webhook Endpoint.
|
|
116
116
|
* - If the webhook exists, delete it and create a new one
|
|
117
117
|
* - If the webhook does not exist, create a new one
|
|
118
|
-
*
|
|
118
|
+
*
|
|
119
119
|
* @param {string} [id]
|
|
120
120
|
* @param {string} [secret]
|
|
121
121
|
* @param {object} [opts]
|
|
@@ -164,7 +164,7 @@ module.exports = class WebhookManager {
|
|
|
164
164
|
|
|
165
165
|
/**
|
|
166
166
|
* Parse a Stripe Webhook event.
|
|
167
|
-
*
|
|
167
|
+
*
|
|
168
168
|
* @param {string} body
|
|
169
169
|
* @param {string} signature
|
|
170
170
|
* @returns {import('stripe').Stripe.Event}
|
|
@@ -8,7 +8,7 @@ const errors = require('@tryghost/errors');
|
|
|
8
8
|
|
|
9
9
|
const validate = require('./validate');
|
|
10
10
|
const list = require('./list');
|
|
11
|
-
const ThemeStorage = require('./
|
|
11
|
+
const ThemeStorage = require('./theme-storage');
|
|
12
12
|
const themeLoader = require('./loader');
|
|
13
13
|
const activator = require('./activation-bridge');
|
|
14
14
|
const toJSON = require('./to-json');
|
|
@@ -5,11 +5,11 @@ class TiersServiceWrapper {
|
|
|
5
5
|
return;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
const TiersAPI = require('./
|
|
8
|
+
const TiersAPI = require('./tiers-api');
|
|
9
9
|
const DomainEvents = require('@tryghost/domain-events');
|
|
10
10
|
|
|
11
11
|
const models = require('../../models');
|
|
12
|
-
const TierRepository = require('./
|
|
12
|
+
const TierRepository = require('./tier-repository');
|
|
13
13
|
|
|
14
14
|
const repository = new TierRepository({
|
|
15
15
|
ProductModel: models.Product,
|