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,574 +0,0 @@
|
|
|
1
|
-
const nql = require('@tryghost/nql');
|
|
2
|
-
const {BadRequestError} = require('@tryghost/errors');
|
|
3
|
-
const tpl = require('@tryghost/tpl');
|
|
4
|
-
const errors = require('@tryghost/errors');
|
|
5
|
-
const ObjectId = require('bson-objectid').default;
|
|
6
|
-
const pick = require('lodash/pick');
|
|
7
|
-
const DomainEvents = require('@tryghost/domain-events');
|
|
8
|
-
|
|
9
|
-
const messages = {
|
|
10
|
-
invalidVisibilityFilter: 'Invalid visibility filter.',
|
|
11
|
-
invalidVisibility: 'Invalid visibility value.',
|
|
12
|
-
invalidTiers: 'Invalid tiers value.',
|
|
13
|
-
invalidTags: 'Invalid tags value.',
|
|
14
|
-
invalidEmailSegment: 'The email segment parameter doesn\'t contain a valid filter',
|
|
15
|
-
unsupportedBulkAction: 'Unsupported bulk action',
|
|
16
|
-
postNotFound: 'Post not found.'
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
class PostsService {
|
|
20
|
-
constructor({urlUtils, models, isSet, stats, emailService, postsExporter}) {
|
|
21
|
-
this.urlUtils = urlUtils;
|
|
22
|
-
this.models = models;
|
|
23
|
-
this.isSet = isSet;
|
|
24
|
-
this.stats = stats;
|
|
25
|
-
this.emailService = emailService;
|
|
26
|
-
this.postsExporter = postsExporter;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* @param {Object} options - frame options
|
|
32
|
-
* @returns {Promise<Object>}
|
|
33
|
-
*/
|
|
34
|
-
async browsePosts(options) {
|
|
35
|
-
const posts = await this.models.Post.findPage(options);
|
|
36
|
-
return posts;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async readPost(frame) {
|
|
40
|
-
const model = await this.models.Post.findOne(frame.data, frame.options);
|
|
41
|
-
|
|
42
|
-
if (!model) {
|
|
43
|
-
throw new errors.NotFoundError({
|
|
44
|
-
message: tpl(messages.postNotFound)
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return model.toJSON(frame.options);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @typedef {'published_updated' | 'scheduled_updated' | 'draft_updated' | 'unpublished'} EventString
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
* @param {import('@tryghost/api-framework').Frame} frame
|
|
58
|
-
* @param {object} [options]
|
|
59
|
-
* @param {(event: EventString, dto: any) => Promise<void> | void} [options.eventHandler] - Called before the editPost method resolves with an event string
|
|
60
|
-
* @returns
|
|
61
|
-
*/
|
|
62
|
-
async editPost(frame, options) {
|
|
63
|
-
// Make sure the newsletter is matching an active newsletter
|
|
64
|
-
// Note that this option is simply ignored if the post isn't published or scheduled
|
|
65
|
-
if (frame.options.newsletter && frame.options.email_segment) {
|
|
66
|
-
if (frame.options.email_segment !== 'all') {
|
|
67
|
-
// check filter is valid
|
|
68
|
-
try {
|
|
69
|
-
await this.models.Member.findPage({filter: frame.options.email_segment, limit: 1});
|
|
70
|
-
} catch (err) {
|
|
71
|
-
return Promise.reject(new BadRequestError({
|
|
72
|
-
message: tpl(messages.invalidEmailSegment),
|
|
73
|
-
context: err.message
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const model = await this.models.Post.edit(frame.data.posts[0], frame.options);
|
|
80
|
-
|
|
81
|
-
/**Handle newsletter email */
|
|
82
|
-
if (model.get('newsletter_id')) {
|
|
83
|
-
const sendEmail = model.wasChanged() && this.shouldSendEmail(model.get('status'), model.previous('status'));
|
|
84
|
-
|
|
85
|
-
if (sendEmail) {
|
|
86
|
-
let postEmail = model.relations.email;
|
|
87
|
-
let email;
|
|
88
|
-
|
|
89
|
-
if (!postEmail) {
|
|
90
|
-
email = await this.emailService.createEmail(model);
|
|
91
|
-
} else if (postEmail && postEmail.get('status') === 'failed') {
|
|
92
|
-
email = await this.emailService.retryEmail(postEmail);
|
|
93
|
-
}
|
|
94
|
-
if (email) {
|
|
95
|
-
model.set('email', email);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const dto = model.toJSON(frame.options);
|
|
101
|
-
|
|
102
|
-
if (typeof options?.eventHandler === 'function') {
|
|
103
|
-
await options.eventHandler(this.getChanges(model), dto);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return dto;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* @param {any} model
|
|
110
|
-
* @returns {EventString}
|
|
111
|
-
*/
|
|
112
|
-
getChanges(model) {
|
|
113
|
-
if (model.get('status') === 'published' && model.wasChanged()) {
|
|
114
|
-
return 'published_updated';
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (model.get('status') === 'draft' && model.previous('status') === 'published') {
|
|
118
|
-
return 'unpublished';
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (model.get('status') === 'draft' && model.previous('status') !== 'published') {
|
|
122
|
-
return 'draft_updated';
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
if (model.get('status') === 'scheduled' && model.wasChanged()) {
|
|
126
|
-
return 'scheduled_updated';
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
#mergeFilters(...filters) {
|
|
131
|
-
return filters.filter(filter => filter).map(f => `(${f})`).join('+');
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
async bulkEdit(data, options) {
|
|
135
|
-
const {
|
|
136
|
-
PostsBulkAddTagsEvent,
|
|
137
|
-
PostsBulkUnpublishedEvent,
|
|
138
|
-
PostsBulkFeaturedEvent,
|
|
139
|
-
PostsBulkUnfeaturedEvent,
|
|
140
|
-
PostsBulkUnscheduledEvent
|
|
141
|
-
} = require('../../../shared/events-ts');
|
|
142
|
-
|
|
143
|
-
if (data.action === 'unpublish') {
|
|
144
|
-
const updateResult = await this.#updatePosts({status: 'draft'}, {filter: this.#mergeFilters('status:published', options.filter), context: options.context, actionName: 'unpublished'});
|
|
145
|
-
DomainEvents.dispatch(PostsBulkUnpublishedEvent.create(updateResult.editIds));
|
|
146
|
-
|
|
147
|
-
return updateResult;
|
|
148
|
-
}
|
|
149
|
-
if (data.action === 'unschedule') {
|
|
150
|
-
const updateResult = await this.#updatePosts({status: 'draft', published_at: null}, {filter: this.#mergeFilters('status:scheduled', options.filter), context: options.context, actionName: 'unscheduled'});
|
|
151
|
-
// makes sure `email_only` value is reverted for the unscheduled posts
|
|
152
|
-
await this.models.Post.bulkEdit(updateResult.editIds, 'posts_meta', {
|
|
153
|
-
data: {email_only: false},
|
|
154
|
-
column: 'post_id',
|
|
155
|
-
transacting: options.transacting,
|
|
156
|
-
throwErrors: true
|
|
157
|
-
});
|
|
158
|
-
DomainEvents.dispatch(PostsBulkUnscheduledEvent.create(updateResult.editIds));
|
|
159
|
-
|
|
160
|
-
return updateResult;
|
|
161
|
-
}
|
|
162
|
-
if (data.action === 'feature') {
|
|
163
|
-
const updateResult = await this.#updatePosts({featured: true}, {filter: options.filter, context: options.context, actionName: 'featured'});
|
|
164
|
-
DomainEvents.dispatch(PostsBulkFeaturedEvent.create(updateResult.editIds));
|
|
165
|
-
|
|
166
|
-
return updateResult;
|
|
167
|
-
}
|
|
168
|
-
if (data.action === 'unfeature') {
|
|
169
|
-
const updateResult = await this.#updatePosts({featured: false}, {filter: options.filter, context: options.context, actionName: 'unfeatured'});
|
|
170
|
-
DomainEvents.dispatch(PostsBulkUnfeaturedEvent.create(updateResult.editIds));
|
|
171
|
-
|
|
172
|
-
return updateResult;
|
|
173
|
-
}
|
|
174
|
-
if (data.action === 'access') {
|
|
175
|
-
if (!['public', 'members', 'paid', 'tiers'].includes(data.meta.visibility)) {
|
|
176
|
-
throw new errors.IncorrectUsageError({
|
|
177
|
-
message: tpl(messages.invalidVisibility)
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
let tiers = undefined;
|
|
181
|
-
if (data.meta.visibility === 'tiers') {
|
|
182
|
-
if (!Array.isArray(data.meta.tiers)) {
|
|
183
|
-
throw new errors.IncorrectUsageError({
|
|
184
|
-
message: tpl(messages.invalidTiers)
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
tiers = data.meta.tiers;
|
|
188
|
-
}
|
|
189
|
-
return await this.#updatePosts({visibility: data.meta.visibility, tiers}, {filter: options.filter, context: options.context});
|
|
190
|
-
}
|
|
191
|
-
if (data.action === 'addTag') {
|
|
192
|
-
if (!Array.isArray(data.meta.tags)) {
|
|
193
|
-
throw new errors.IncorrectUsageError({
|
|
194
|
-
message: tpl(messages.invalidTags)
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
for (const tag of data.meta.tags) {
|
|
198
|
-
if (typeof tag !== 'object') {
|
|
199
|
-
throw new errors.IncorrectUsageError({
|
|
200
|
-
message: tpl(messages.invalidTags)
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
if (!tag.id && !tag.name) {
|
|
204
|
-
throw new errors.IncorrectUsageError({
|
|
205
|
-
message: tpl(messages.invalidTags)
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const bulkResult = await this.#bulkAddTags({tags: data.meta.tags}, {filter: options.filter, context: options.context});
|
|
211
|
-
DomainEvents.dispatch(PostsBulkAddTagsEvent.create(bulkResult.editIds));
|
|
212
|
-
|
|
213
|
-
return bulkResult;
|
|
214
|
-
}
|
|
215
|
-
throw new errors.IncorrectUsageError({
|
|
216
|
-
message: tpl(messages.unsupportedBulkAction)
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* @param {object} data
|
|
222
|
-
* @param {string[]} data.tags - Array of tag ids to add to the post
|
|
223
|
-
* @param {object} options
|
|
224
|
-
* @param {string} options.filter - An NQL Filter
|
|
225
|
-
* @param {object} options.context
|
|
226
|
-
* @param {object} [options.transacting]
|
|
227
|
-
* @returns {Promise<{successful: number, unsuccessful: number, editIds: string[]}>}
|
|
228
|
-
*/
|
|
229
|
-
async #bulkAddTags(data, options) {
|
|
230
|
-
if (!options.transacting) {
|
|
231
|
-
return await this.models.Post.transaction(async (transacting) => {
|
|
232
|
-
return await this.#bulkAddTags(data, {
|
|
233
|
-
...options,
|
|
234
|
-
transacting
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Create tags that don't exist
|
|
240
|
-
for (const tag of data.tags) {
|
|
241
|
-
if (!tag.id) {
|
|
242
|
-
const createdTag = await this.models.Tag.add(tag, {transacting: options.transacting, context: options.context});
|
|
243
|
-
tag.id = createdTag.id;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const postRows = await this.models.Post.getFilteredCollectionQuery({
|
|
248
|
-
filter: options.filter,
|
|
249
|
-
status: 'all',
|
|
250
|
-
transacting: options.transacting
|
|
251
|
-
}).select('posts.id');
|
|
252
|
-
|
|
253
|
-
const postTags = data.tags.reduce((pt, tag) => {
|
|
254
|
-
return pt.concat(postRows.map((post) => {
|
|
255
|
-
return {
|
|
256
|
-
id: (new ObjectId()).toHexString(),
|
|
257
|
-
post_id: post.id,
|
|
258
|
-
tag_id: tag.id,
|
|
259
|
-
sort_order: 0
|
|
260
|
-
};
|
|
261
|
-
}));
|
|
262
|
-
}, []);
|
|
263
|
-
|
|
264
|
-
await options.transacting('posts_tags').insert(postTags);
|
|
265
|
-
await this.models.Post.addActions('edited', postRows.map(p => p.id), options);
|
|
266
|
-
|
|
267
|
-
return {
|
|
268
|
-
editIds: postRows.map(p => p.id),
|
|
269
|
-
successful: postRows.length,
|
|
270
|
-
unsuccessful: 0
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
*
|
|
276
|
-
* @param {Object} options
|
|
277
|
-
* @returns Promise<{successful: number, unsuccessful: number, deleteIds: string[]}>
|
|
278
|
-
*/
|
|
279
|
-
async #bulkDestroy(options) {
|
|
280
|
-
if (!options.transacting) {
|
|
281
|
-
return await this.models.Post.transaction(async (transacting) => {
|
|
282
|
-
return await this.#bulkDestroy({
|
|
283
|
-
...options,
|
|
284
|
-
transacting
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
const postRows = await this.models.Post.getFilteredCollectionQuery({
|
|
290
|
-
filter: options.filter,
|
|
291
|
-
status: 'all',
|
|
292
|
-
transacting: options.transacting
|
|
293
|
-
}).leftJoin('emails', 'posts.id', 'emails.post_id').select('posts.id', 'emails.id as email_id');
|
|
294
|
-
const deleteIds = postRows.map(row => row.id);
|
|
295
|
-
|
|
296
|
-
// We also need to collect the email ids because the email relation doesn't have cascase, and we need to delete the related relations of the post
|
|
297
|
-
const deleteEmailIds = postRows.map(row => row.email_id).filter(id => !!id);
|
|
298
|
-
|
|
299
|
-
const postTablesToDelete = [
|
|
300
|
-
'posts_authors',
|
|
301
|
-
'posts_tags',
|
|
302
|
-
'posts_meta',
|
|
303
|
-
'mobiledoc_revisions',
|
|
304
|
-
'post_revisions',
|
|
305
|
-
'posts_products'
|
|
306
|
-
];
|
|
307
|
-
const emailTablesToDelete = [
|
|
308
|
-
'email_recipient_failures',
|
|
309
|
-
'email_recipients',
|
|
310
|
-
'email_batches',
|
|
311
|
-
'email_spam_complaint_events'
|
|
312
|
-
];
|
|
313
|
-
|
|
314
|
-
// Don't clear, but set relation to null
|
|
315
|
-
const emailTablesToSetNull = [
|
|
316
|
-
'suppressions'
|
|
317
|
-
];
|
|
318
|
-
|
|
319
|
-
for (const table of postTablesToDelete) {
|
|
320
|
-
await this.models.Post.bulkDestroy(deleteIds, table, {
|
|
321
|
-
column: 'post_id',
|
|
322
|
-
transacting: options.transacting,
|
|
323
|
-
throwErrors: true
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
for (const table of emailTablesToDelete) {
|
|
328
|
-
await this.models.Post.bulkDestroy(deleteEmailIds, table, {
|
|
329
|
-
column: 'email_id',
|
|
330
|
-
transacting: options.transacting,
|
|
331
|
-
throwErrors: true
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
for (const table of emailTablesToSetNull) {
|
|
336
|
-
await this.models.Post.bulkEdit(deleteEmailIds, table, {
|
|
337
|
-
data: {email_id: null},
|
|
338
|
-
column: 'email_id',
|
|
339
|
-
transacting: options.transacting,
|
|
340
|
-
throwErrors: true
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// Posts and emails
|
|
345
|
-
await this.models.Post.bulkDestroy(deleteEmailIds, 'emails', {transacting: options.transacting, throwErrors: true});
|
|
346
|
-
const result = await this.models.Post.bulkDestroy(deleteIds, 'posts', {...options, throwErrors: true});
|
|
347
|
-
|
|
348
|
-
result.deleteIds = deleteIds;
|
|
349
|
-
|
|
350
|
-
return result;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
async bulkDestroy(options) {
|
|
354
|
-
const result = await this.#bulkDestroy(options);
|
|
355
|
-
const {PostsBulkDestroyedEvent} = require('../../../shared/events-ts');
|
|
356
|
-
DomainEvents.dispatch(PostsBulkDestroyedEvent.create(result.deleteIds));
|
|
357
|
-
|
|
358
|
-
return result;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
async export(frame) {
|
|
362
|
-
return await this.postsExporter.export(frame.options);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
async #updatePosts(data, options) {
|
|
366
|
-
if (!options.transacting) {
|
|
367
|
-
return await this.models.Post.transaction(async (transacting) => {
|
|
368
|
-
return await this.#updatePosts(data, {
|
|
369
|
-
...options,
|
|
370
|
-
transacting
|
|
371
|
-
});
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
const postRows = await this.models.Post.getFilteredCollectionQuery({
|
|
376
|
-
filter: options.filter,
|
|
377
|
-
status: 'all',
|
|
378
|
-
transacting: options.transacting
|
|
379
|
-
}).select('posts.id');
|
|
380
|
-
|
|
381
|
-
const editIds = postRows.map(row => row.id);
|
|
382
|
-
|
|
383
|
-
let tiers = undefined;
|
|
384
|
-
if (data.tiers) {
|
|
385
|
-
tiers = data.tiers;
|
|
386
|
-
delete data.tiers;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
const result = await this.models.Post.bulkEdit(editIds, 'posts', {
|
|
390
|
-
...options,
|
|
391
|
-
data,
|
|
392
|
-
throwErrors: true
|
|
393
|
-
});
|
|
394
|
-
|
|
395
|
-
// Update tiers
|
|
396
|
-
if (tiers) {
|
|
397
|
-
// First delete all
|
|
398
|
-
await this.models.Post.bulkDestroy(editIds, 'posts_products', {
|
|
399
|
-
column: 'post_id',
|
|
400
|
-
transacting: options.transacting,
|
|
401
|
-
throwErrors: true
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
// Then add again
|
|
405
|
-
const toInsert = [];
|
|
406
|
-
for (const postId of editIds) {
|
|
407
|
-
for (const [index, tier] of tiers.entries()) {
|
|
408
|
-
if (typeof tier.id === 'string') {
|
|
409
|
-
toInsert.push({
|
|
410
|
-
id: ObjectId().toHexString(),
|
|
411
|
-
post_id: postId,
|
|
412
|
-
product_id: tier.id,
|
|
413
|
-
sort_order: index
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
await this.models.Post.bulkAdd(toInsert, 'posts_products', {
|
|
419
|
-
transacting: options.transacting,
|
|
420
|
-
throwErrors: true
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
result.editIds = editIds;
|
|
425
|
-
|
|
426
|
-
return result;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
async getProductsFromVisibilityFilter(visibilityFilter) {
|
|
430
|
-
try {
|
|
431
|
-
const allProducts = await this.models.Product.findAll();
|
|
432
|
-
const visibilityFilterJson = nql(visibilityFilter).toJSON();
|
|
433
|
-
const productsData = (visibilityFilterJson.product ? [visibilityFilterJson] : visibilityFilterJson.$or) || [];
|
|
434
|
-
const tiers = productsData
|
|
435
|
-
.map((data) => {
|
|
436
|
-
return allProducts.find((p) => {
|
|
437
|
-
return p.get('slug') === data.product;
|
|
438
|
-
});
|
|
439
|
-
}).filter(p => !!p).map((d) => {
|
|
440
|
-
return d.toJSON();
|
|
441
|
-
});
|
|
442
|
-
return tiers;
|
|
443
|
-
} catch (err) {
|
|
444
|
-
return Promise.reject(new BadRequestError({
|
|
445
|
-
message: tpl(messages.invalidVisibilityFilter),
|
|
446
|
-
context: err.message
|
|
447
|
-
}));
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
/**
|
|
452
|
-
* Calculates if the email should be tried to be sent out
|
|
453
|
-
* @private
|
|
454
|
-
* @param {String} currentStatus current status from the post model
|
|
455
|
-
* @param {String} previousStatus previous status from the post model
|
|
456
|
-
* @returns {Boolean}
|
|
457
|
-
*/
|
|
458
|
-
shouldSendEmail(currentStatus, previousStatus) {
|
|
459
|
-
return (['published', 'sent'].includes(currentStatus))
|
|
460
|
-
&& (!['published', 'sent'].includes(previousStatus));
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
handleCacheInvalidation(model) {
|
|
464
|
-
let cacheInvalidate;
|
|
465
|
-
|
|
466
|
-
if (
|
|
467
|
-
model.get('status') === 'published' && model.wasChanged() ||
|
|
468
|
-
model.get('status') === 'draft' && model.previous('status') === 'published'
|
|
469
|
-
) {
|
|
470
|
-
cacheInvalidate = true;
|
|
471
|
-
} else if (
|
|
472
|
-
model.get('status') === 'draft' && model.previous('status') !== 'published' ||
|
|
473
|
-
model.get('status') === 'scheduled' && model.wasChanged()
|
|
474
|
-
) {
|
|
475
|
-
const baseUrl = this.urlUtils.urlJoin('/p', model.get('uuid'), '/');
|
|
476
|
-
cacheInvalidate = {
|
|
477
|
-
value: [
|
|
478
|
-
baseUrl,
|
|
479
|
-
`${baseUrl}?member_status=anonymous`,
|
|
480
|
-
`${baseUrl}?member_status=free`,
|
|
481
|
-
`${baseUrl}?member_status=paid`
|
|
482
|
-
].join(', ')
|
|
483
|
-
};
|
|
484
|
-
} else {
|
|
485
|
-
cacheInvalidate = false;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
return cacheInvalidate;
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
async copyPost(frame) {
|
|
492
|
-
const existingPost = await this.models.Post.findOne({
|
|
493
|
-
id: frame.options.id,
|
|
494
|
-
status: 'all'
|
|
495
|
-
}, frame.options);
|
|
496
|
-
|
|
497
|
-
const newPostData = pick(
|
|
498
|
-
existingPost.attributes,
|
|
499
|
-
[
|
|
500
|
-
'title',
|
|
501
|
-
'mobiledoc',
|
|
502
|
-
'lexical',
|
|
503
|
-
'html',
|
|
504
|
-
'plaintext',
|
|
505
|
-
'feature_image',
|
|
506
|
-
'featured',
|
|
507
|
-
'type',
|
|
508
|
-
'locale',
|
|
509
|
-
'visibility',
|
|
510
|
-
'email_recipient_filter',
|
|
511
|
-
'custom_excerpt',
|
|
512
|
-
'codeinjection_head',
|
|
513
|
-
'codeinjection_foot',
|
|
514
|
-
'custom_template'
|
|
515
|
-
]
|
|
516
|
-
);
|
|
517
|
-
|
|
518
|
-
newPostData.title = `${existingPost.attributes.title} (Copy)`;
|
|
519
|
-
newPostData.status = 'draft';
|
|
520
|
-
newPostData.authors = existingPost.related('authors')
|
|
521
|
-
.map(author => ({id: author.get('id')}));
|
|
522
|
-
newPostData.tags = existingPost.related('tags')
|
|
523
|
-
.map(tag => ({id: tag.get('id')}));
|
|
524
|
-
|
|
525
|
-
const existingPostMeta = existingPost.related('posts_meta');
|
|
526
|
-
|
|
527
|
-
if (existingPostMeta.isNew() === false) {
|
|
528
|
-
newPostData.posts_meta = pick(
|
|
529
|
-
existingPostMeta.attributes,
|
|
530
|
-
[
|
|
531
|
-
'og_image',
|
|
532
|
-
'og_title',
|
|
533
|
-
'og_description',
|
|
534
|
-
'twitter_image',
|
|
535
|
-
'twitter_title',
|
|
536
|
-
'twitter_description',
|
|
537
|
-
'meta_title',
|
|
538
|
-
'meta_description',
|
|
539
|
-
'frontmatter',
|
|
540
|
-
'feature_image_alt',
|
|
541
|
-
'feature_image_caption',
|
|
542
|
-
'hide_title_and_feature_image'
|
|
543
|
-
]
|
|
544
|
-
);
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
const existingPostTiers = existingPost.related('tiers');
|
|
548
|
-
|
|
549
|
-
if (existingPostTiers.length > 0) {
|
|
550
|
-
newPostData.tiers = existingPostTiers.map(tier => ({id: tier.get('id')}));
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
return this.models.Post.add(newPostData, frame.options);
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
/**
|
|
557
|
-
* Generates a location url for a copied post based on the original url generated by the API framework
|
|
558
|
-
*
|
|
559
|
-
* @param {string} url
|
|
560
|
-
* @returns {string}
|
|
561
|
-
*/
|
|
562
|
-
generateCopiedPostLocationFromUrl(url) {
|
|
563
|
-
const urlParts = url.split('/');
|
|
564
|
-
const pageId = urlParts[urlParts.length - 2];
|
|
565
|
-
|
|
566
|
-
return urlParts
|
|
567
|
-
.slice(0, -4)
|
|
568
|
-
.concat(pageId)
|
|
569
|
-
.concat('')
|
|
570
|
-
.join('/');
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
module.exports = PostsService;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/core/server/services/audience-feedback/{FeedbackRepository.js → feedback-repository.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/core/server/services/comments/{CommentsStatsService.js → comments-stats-service.js}
RENAMED
|
File without changes
|
/package/core/server/services/custom-redirects/{CustomRedirectsAPI.js → custom-redirects-api.js}
RENAMED
|
File without changes
|
|
File without changes
|
/package/core/server/services/donations/{DonationPaymentEvent.js → donation-payment-event.js}
RENAMED
|
File without changes
|
/package/core/server/services/donations/{DonationPaymentEvent.ts → donation-payment-event.ts}
RENAMED
|
File without changes
|
/package/core/server/services/email-address/{EmailAddressParser.js → email-address-parser.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/core/server/services/email-service/{DomainWarmingService.js → domain-warming-service.js}
RENAMED
|
File without changes
|
/package/core/server/services/email-service/{DomainWarmingService.ts → domain-warming-service.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/core/server/services/email-service/events/{EmailBouncedEvent.js → email-bounced-event.js}
RENAMED
|
File without changes
|
|
File without changes
|
/package/core/server/services/email-service/events/{EmailOpenedEvent.js → email-opened-event.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/core/server/services/email-service/events/{SpamComplaintEvent.js → spam-complaint-event.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/core/server/services/explore-ping/{ExplorePingService.js → explore-ping-service.js}
RENAMED
|
File without changes
|
|
File without changes
|
/package/core/server/services/identity-tokens/{IdentityTokenService.js → identity-token-service.js}
RENAMED
|
File without changes
|
/package/core/server/services/identity-tokens/{IdentityTokenService.ts → identity-token-service.ts}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|