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.
Files changed (435) hide show
  1. package/components/tryghost-i18n-6.12.0.tgz +0 -0
  2. package/core/boot.js +4 -2
  3. package/core/built/admin/assets/{_baseAssignValue-BX8EallQ.js → _baseAssignValue-hsL6ItjC.js} +1 -1
  4. package/core/built/admin/assets/{a-large-small-CKZJgscl.js → a-large-small-BPPu_Iy7.js} +1 -1
  5. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  6. package/core/built/admin/assets/admin-x-settings/{code-editor-view-n8DFeXbv.mjs → code-editor-view-Bq6l5arq.mjs} +2 -2
  7. package/core/built/admin/assets/admin-x-settings/{index-v6qQgUXt.mjs → index-CKaxer_o.mjs} +2 -2
  8. package/core/built/admin/assets/admin-x-settings/{index-CXL12uvO.mjs → index-CtYEAgeN.mjs} +2 -2
  9. package/core/built/admin/assets/admin-x-settings/{index-D4ye6uvI.mjs → index-D4NstoNQ.mjs} +11 -6
  10. package/core/built/admin/assets/admin-x-settings/{modals-CdsPaTfy.mjs → modals-BzljHVa7.mjs} +2 -2
  11. package/core/built/admin/assets/{at-sign-CqQzllfI.js → at-sign-CYnGzOFc.js} +1 -1
  12. package/core/built/admin/assets/{audience-select-DQD7iDOb.js → audience-select-DYoxiiwy.js} +1 -1
  13. package/core/built/admin/assets/{avatar-flipboard-uq7ptTxT.js → avatar-flipboard-C9-npfmZ.js} +1 -1
  14. package/core/built/admin/assets/{bluesky-sharing-qyIGv6Ny.js → bluesky-sharing-BGcmGcee.js} +1 -1
  15. package/core/built/admin/assets/{chart-DGA1MaFs.js → chart-CqJxisVP.js} +1 -1
  16. package/core/built/admin/assets/{chunk.524.1289543297329587cf8a.js → chunk.524.74a9629dd2ba0d21bbef.js} +7 -7
  17. package/core/built/admin/assets/{chunk.582.344ea0d0a16d671345cd.js → chunk.582.3846471396b3a7c46e66.js} +8 -8
  18. package/core/built/admin/assets/{code-editor-view-Bz6kXDiv.js → code-editor-view-C8l3gNnO.js} +1 -1
  19. package/core/built/admin/assets/{comments-C-lkEDkz.js → comments-CpHDoxov.js} +1 -1
  20. package/core/built/admin/assets/{copy-BFuV16bY.js → copy-DWiB-781.js} +1 -1
  21. package/core/built/admin/assets/{data-list-Bw1CQEZ9.js → data-list-yngXNZDF.js} +1 -1
  22. package/core/built/admin/assets/{deleted-feed-item-CmNbSYiO.js → deleted-feed-item-C0FcyLMN.js} +1 -1
  23. package/core/built/admin/assets/{edit-profile-DlIPB2km.js → edit-profile-BjtDkDAq.js} +1 -1
  24. package/core/built/admin/assets/{empty-indicator-DBrIZcFq.js → empty-indicator-BXWniwsl.js} +1 -1
  25. package/core/built/admin/assets/{en-BBc7b85q.js → en-B8qaJx-T.js} +1 -1
  26. package/core/built/admin/assets/{feed-B3XQzKZl.js → feed-DsCVb1SA.js} +1 -1
  27. package/core/built/admin/assets/{filters-DUFXZZnu.js → filters-jAXQSPq6.js} +1 -1
  28. package/core/built/admin/assets/{gh-chart-BV97-O7c.js → gh-chart-DwTCK8z_.js} +1 -1
  29. package/core/built/admin/assets/{ghost-9aa1e7c5992f122dba6932af78bf8e56.js → ghost-6367d022df9db9dacbcb9bfa30232ec7.js} +2 -2
  30. package/core/built/admin/assets/{growth-njR0GqK2.js → growth-DshcRqda.js} +1 -1
  31. package/core/built/admin/assets/{hash-CdH0ikFp.js → hash-p9dv0yuc.js} +1 -1
  32. package/core/built/admin/assets/{inbox-Bd0uf1Ez.js → inbox-CRoP9sy5.js} +1 -1
  33. package/core/built/admin/assets/{index-Kji6JKl7.js → index-6syrC9X1.js} +1 -1
  34. package/core/built/admin/assets/{index-C7M19LpB.js → index-BKtz3UH0.js} +1 -1
  35. package/core/built/admin/assets/{index-DWk7hKRR.js → index-BwY94Fb4.js} +1 -1
  36. package/core/built/admin/assets/{index-BFhECYgc.js → index-C3DF6aFe.js} +1 -1
  37. package/core/built/admin/assets/index-C6NCNp1B.js +1 -0
  38. package/core/built/admin/assets/{index-BYawr8p9.js → index-CJU9a2PB.js} +3 -3
  39. package/core/built/admin/assets/{index-CIE2_z5J.js → index-CUWE7aD1.js} +1 -1
  40. package/core/built/admin/assets/{index-DgRIbSpg.js → index-CuQ_II0e.js} +1 -1
  41. package/core/built/admin/assets/{index-Birw80cQ.js → index-DG8f-HuU.js} +1 -1
  42. package/core/built/admin/assets/{index-DziHC2du.js → index-DItZTRQ4.js} +1 -1
  43. package/core/built/admin/assets/{index-DG53N3Xt.js → index-eLx96SEn.js} +1 -1
  44. package/core/built/admin/assets/{index-DCw6JaEl.js → index-j2_Q-_8H.js} +1 -1
  45. package/core/built/admin/assets/{index-BZ21H0xH.js → index-qWpHJAMP.js} +1 -1
  46. package/core/built/admin/assets/{index-DXCu9e7c.js → index-sy6xRtoO.js} +1 -1
  47. package/core/built/admin/assets/{koenig-lexical-BDJVCHtm.js → koenig-lexical-DgAlBHHS.js} +1 -1
  48. package/core/built/admin/assets/{kpi-card-cv8roErt.js → kpi-card-CHZSLw4p.js} +1 -1
  49. package/core/built/admin/assets/{kpis-Dt4OFY3L.js → kpis-DzbAHfKK.js} +1 -1
  50. package/core/built/admin/assets/{links-08beB3Ij.js → links-BQHRbn46.js} +1 -1
  51. package/core/built/admin/assets/{lucide-react-DKlmxVQI.js → lucide-react-B7UnD_Dp.js} +1 -1
  52. package/core/built/admin/assets/{main-layout-Cl09wG7F.js → main-layout-9nmU5WlG.js} +1 -1
  53. package/core/built/admin/assets/{message-square-text-CaMVBVPr.js → message-square-text-CS3iRuPc.js} +1 -1
  54. package/core/built/admin/assets/{minus-2XwCoFJV.js → minus-emzwh6hq.js} +1 -1
  55. package/core/built/admin/assets/{modals-CIgzYQgv.js → modals-CumFuZ2d.js} +1 -1
  56. package/core/built/admin/assets/{moderation-FjlsSym6.js → moderation-DyfFc9m4.js} +1 -1
  57. package/core/built/admin/assets/{newsletter-BNOwZNlE.js → newsletter-BWul5IFc.js} +1 -1
  58. package/core/built/admin/assets/{newsletters-DUusEYSg.js → newsletters-N6bwI1OF.js} +1 -1
  59. package/core/built/admin/assets/{note-BpYwIDK6.js → note-CiBzkHzz.js} +1 -1
  60. package/core/built/admin/assets/{overview-Y5QYPClr.js → overview-D9gRvn7X.js} +1 -1
  61. package/core/built/admin/assets/{pagemenu-BMXHDXYy.js → pagemenu-aHubMPwB.js} +1 -1
  62. package/core/built/admin/assets/{post-analytics-UerFnJse.js → post-analytics-Bm9xH8nA.js} +1 -1
  63. package/core/built/admin/assets/{post-analytics-context-geHk7rOj.js → post-analytics-context-C7oW3aBz.js} +1 -1
  64. package/core/built/admin/assets/{post-analytics-header-DXfc4KeX.js → post-analytics-header-BjGFgN6A.js} +1 -1
  65. package/core/built/admin/assets/{post-share-modal-Dql4fYjR.js → post-share-modal-Su923uIc.js} +1 -1
  66. package/core/built/admin/assets/{posts-Bsvw11Zo.js → posts-BwP7BNcB.js} +1 -1
  67. package/core/built/admin/assets/{referrers-B8xJpCcR.js → referrers-n_ln9DqI.js} +1 -1
  68. package/core/built/admin/assets/{repeat-COP-3g8d.js → repeat-ms5ocvE0.js} +1 -1
  69. package/core/built/admin/assets/{reply-JE8tmvOn.js → reply-BvO85IDn.js} +1 -1
  70. package/core/built/admin/assets/{select-BhvNY3I-.js → select-B4QhMW5f.js} +1 -1
  71. package/core/built/admin/assets/{settings-BJwVfuWG.js → settings-D5rGcWJ7.js} +4 -4
  72. package/core/built/admin/assets/{settings-C6ZUZQe4.js → settings-QtZ6a2TL.js} +1 -1
  73. package/core/built/admin/assets/{sort-button-iOtR-vQ1.js → sort-button-84sYUZMN.js} +1 -1
  74. package/core/built/admin/assets/{source-icon-C2iFWMlV.js → source-icon-Bzw-AU8p.js} +1 -1
  75. package/core/built/admin/assets/{sprout-BW9HFVU8.js → sprout-C2R5CbXV.js} +1 -1
  76. package/core/built/admin/assets/{square-BCNGSZhW.js → square-DT1uWkxs.js} +1 -1
  77. package/core/built/admin/assets/stats/{audience-select-DNAWmT7R.mjs → audience-select-fTCiZ9MT.mjs} +3 -3
  78. package/core/built/admin/assets/stats/{index-DbGvSTMe.mjs → index-BKgioyC7.mjs} +5 -5
  79. package/core/built/admin/assets/stats/{index-s19ZmxbX.mjs → index-CR2t5Xd-.mjs} +5 -5
  80. package/core/built/admin/assets/stats/index-DEkYwR7C.mjs +739 -0
  81. package/core/built/admin/assets/stats/{index-BS3KMSy9.mjs → index-Djwey97a.mjs} +5 -5
  82. package/core/built/admin/assets/stats/{index-MOQSSYwT.mjs → index-FiU_XgEe.mjs} +6 -6
  83. package/core/built/admin/assets/stats/{sort-button-D76rcldr.mjs → sort-button-Bvi1wfa7.mjs} +3 -3
  84. package/core/built/admin/assets/stats/{stats-CJ7fhUyT.mjs → stats-Bbm6yWZq.mjs} +2 -2
  85. package/core/built/admin/assets/stats/stats.js +1 -1
  86. package/core/built/admin/assets/stats/{tabs-CkbxYgOE.mjs → tabs-BKwH5k-q.mjs} +3 -3
  87. package/core/built/admin/assets/stats/{url-helpers-DICtqCrE.mjs → url-helpers-DmHnUIGc.mjs} +9 -9
  88. package/core/built/admin/assets/stats/{use-growth-stats-DzO7zEy4.mjs → use-growth-stats-BVj3j1hb.mjs} +3 -3
  89. package/core/built/admin/assets/{stats-r0Bphuvi.js → stats-B1mhlQSp.js} +1 -1
  90. package/core/built/admin/assets/{stats-view-DzZxrBDz.js → stats-view-C6MTCwRW.js} +1 -1
  91. package/core/built/admin/assets/{step-1-CUoUOyMm.js → step-1-CzQmZJ93.js} +1 -1
  92. package/core/built/admin/assets/{step-2-CpAkPD8D.js → step-2-DXGDWSQo.js} +1 -1
  93. package/core/built/admin/assets/{step-3-Ci6oJDmK.js → step-3-CYuxXKac.js} +1 -1
  94. package/core/built/admin/assets/{table-DeBuf80X.js → table-mjAkKNdb.js} +1 -1
  95. package/core/built/admin/assets/{tabs-C2sFfNcp.js → tabs-BwQ-i6MY.js} +1 -1
  96. package/core/built/admin/assets/{tags-Bl6G5rvf.js → tags-BkUqCuvX.js} +1 -1
  97. package/core/built/admin/assets/{tags-BL_N4nn2.js → tags-DXDZbfxp.js} +1 -1
  98. package/core/built/admin/assets/{toggle-group-B2X-8giI.js → toggle-group-CqDO3Kkx.js} +1 -1
  99. package/core/built/admin/assets/{topic-filter-DeqMID_s.js → topic-filter-DnuJJBAE.js} +1 -1
  100. package/core/built/admin/assets/{trash-BglGemAb.js → trash-CZ3EXwTL.js} +1 -1
  101. package/core/built/admin/assets/{url-helpers-84icqAuE.js → url-helpers-BE3VXr__.js} +1 -1
  102. package/core/built/admin/assets/{use-growth-stats-DF-7tL8g.js → use-growth-stats-CiuWWM6O.js} +1 -1
  103. package/core/built/admin/assets/{use-infinite-virtual-scroll-BHH7oscK.js → use-infinite-virtual-scroll-BjATkxBj.js} +1 -1
  104. package/core/built/admin/assets/{use-simple-pagination-BsvYfixw.js → use-simple-pagination-C9cb7dDz.js} +1 -1
  105. package/core/built/admin/assets/{user-round-check-BjHbfXKY.js → user-round-check-D3ihrrKL.js} +1 -1
  106. package/core/built/admin/assets/{wallet-cards-KaTkgqvi.js → wallet-cards-Do7nPf3f.js} +1 -1
  107. package/core/built/admin/assets/{web-CUWbpFil.js → web-BEwI2Gfy.js} +1 -1
  108. package/core/built/admin/index-forward.html +4 -4
  109. package/core/built/admin/index.html +3 -3
  110. package/core/frontend/web/middleware/index.js +1 -0
  111. package/core/frontend/web/middleware/serve-indexnow-key.js +66 -0
  112. package/core/frontend/web/site.js +3 -0
  113. package/core/server/api/endpoints/authentication.js +1 -1
  114. package/core/server/api/endpoints/pages.js +1 -1
  115. package/core/server/api/endpoints/posts-public.js +1 -1
  116. package/core/server/api/endpoints/posts.js +1 -1
  117. package/core/server/api/endpoints/search-index-public.js +1 -1
  118. package/core/server/api/endpoints/search-index.js +1 -1
  119. package/core/server/api/endpoints/users.js +1 -1
  120. package/core/server/api/endpoints/utils/serializers/input/settings.js +2 -1
  121. package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
  122. package/core/server/api/endpoints/utils/validators/input/settings.js +1 -1
  123. package/core/server/data/exporter/table-lists.js +2 -1
  124. package/core/server/data/migrations/versions/6.12/2026-01-08-11-48-16-add-indexnow-api-key-setting.js +9 -0
  125. package/core/server/data/schema/default-settings/default-settings.json +6 -0
  126. package/core/server/lib/lexical.js +1 -1
  127. package/core/server/models/settings.js +2 -1
  128. package/core/server/services/activitypub/{ActivityPubServiceWrapper.js → activity-pub-service-wrapper.js} +1 -1
  129. package/core/server/services/activitypub/{ActivityPubService.ts → activity-pub-service.ts} +1 -1
  130. package/core/server/services/activitypub/index.js +1 -1
  131. package/core/server/services/adapter-manager/index.js +1 -1
  132. package/core/server/services/announcement-bar-service/{AnnouncementBarSettings.js → announcement-bar-settings.js} +1 -1
  133. package/core/server/services/announcement-bar-service/index.js +1 -1
  134. package/core/server/services/audience-feedback/{AudienceFeedbackController.js → audience-feedback-controller.js} +3 -3
  135. package/core/server/services/audience-feedback/index.js +4 -4
  136. package/core/server/services/auth/session/express-session.js +1 -1
  137. package/core/server/services/comments/{CommentsController.js → comments-controller.js} +2 -2
  138. package/core/server/services/comments/{CommentsServiceEmails.js → comments-service-emails.js} +1 -1
  139. package/core/server/services/comments/{CommentsService.js → comments-service.js} +1 -1
  140. package/core/server/services/comments/index.js +3 -3
  141. package/core/server/services/custom-redirects/index.js +2 -2
  142. package/core/server/services/donations/{DonationBookshelfRepository.ts → donation-bookshelf-repository.ts} +1 -1
  143. package/core/server/services/donations/{DonationServiceWrapper.js → donation-service-wrapper.js} +1 -1
  144. package/core/server/services/donations/index.js +1 -1
  145. package/core/server/services/email-address/{EmailAddressServiceWrapper.js → email-address-service-wrapper.js} +2 -2
  146. package/core/server/services/email-address/{EmailAddressService.js → email-address-service.js} +4 -4
  147. package/core/server/services/email-address/{EmailAddressService.ts → email-address-service.ts} +1 -1
  148. package/core/server/services/email-address/index.js +1 -1
  149. package/core/server/services/email-analytics/{EmailAnalyticsProviderMailgun.js → email-analytics-provider-mailgun.js} +1 -1
  150. package/core/server/services/email-analytics/{EmailAnalyticsServiceWrapper.js → email-analytics-service-wrapper.js} +5 -5
  151. package/core/server/services/email-analytics/{EmailAnalyticsService.js → email-analytics-service.js} +2 -2
  152. package/core/server/services/email-analytics/index.js +1 -1
  153. package/core/server/services/email-analytics/jobs/fetch-latest/index.js +1 -1
  154. package/core/server/services/email-service/{BatchSendingService.js → batch-sending-service.js} +8 -8
  155. package/core/server/services/email-service/{EmailEventProcessor.js → email-event-processor.js} +6 -6
  156. package/core/server/services/email-service/{EmailEventStorage.js → email-event-storage.js} +1 -1
  157. package/core/server/services/email-service/{EmailRenderer.js → email-renderer.js} +1 -1
  158. package/core/server/services/email-service/{EmailServiceWrapper.js → email-service-wrapper.js} +9 -9
  159. package/core/server/services/email-service/{EmailService.js → email-service.js} +13 -13
  160. package/core/server/services/email-service/index.js +1 -1
  161. package/core/server/services/email-service/{MailgunEmailProvider.js → mailgun-email-provider.js} +1 -1
  162. package/core/server/services/email-service/{SendingService.js → sending-service.js} +6 -6
  163. package/core/server/services/email-suppression-list/{InMemoryEmailSuppressionList.js → in-memory-email-suppression-list.js} +1 -1
  164. package/core/server/services/email-suppression-list/{MailgunEmailSuppressionList.js → mailgun-email-suppression-list.js} +3 -3
  165. package/core/server/services/email-suppression-list/service.js +2 -2
  166. package/core/server/services/explore/index.js +2 -2
  167. package/core/server/services/explore-ping/index.js +2 -2
  168. package/core/server/services/frontend-data-service/index.js +1 -1
  169. package/core/server/services/identity-tokens/{IdentityTokenServiceWrapper.js → identity-token-service-wrapper.js} +1 -1
  170. package/core/server/services/identity-tokens/index.js +1 -1
  171. package/core/server/services/indexnow.js +212 -0
  172. package/core/server/services/invites/index.js +1 -1
  173. package/core/server/services/link-redirection/index.js +2 -2
  174. package/core/server/services/link-redirection/{LinkRedirectRepository.js → link-redirect-repository.js} +1 -1
  175. package/core/server/services/link-redirection/{LinkRedirectsService.js → link-redirects-service.js} +2 -2
  176. package/core/server/services/link-redirection/{RedirectEvent.js → redirect-event.js} +1 -1
  177. package/core/server/services/link-tracking/index.js +3 -3
  178. package/core/server/services/link-tracking/{LinkClickRepository.js → link-click-repository.js} +1 -1
  179. package/core/server/services/link-tracking/{LinkClickTrackingService.js → link-click-tracking-service.js} +4 -4
  180. package/core/server/services/link-tracking/{PostLinkRepository.js → post-link-repository.js} +7 -7
  181. package/core/server/services/mail/{GhostMailer.js → ghost-mailer.js} +1 -1
  182. package/core/server/services/mail/index.js +2 -2
  183. package/core/server/services/media-inliner/service.js +1 -1
  184. package/core/server/services/member-attribution/README.md +6 -6
  185. package/core/server/services/member-attribution/{AttributionBuilder.js → attribution-builder.js} +4 -4
  186. package/core/server/services/member-attribution/index.js +5 -5
  187. package/core/server/services/member-attribution/{MemberAttributionService.js → member-attribution-service.js} +9 -9
  188. package/core/server/services/member-attribution/{ReferrerTranslator.js → referrer-translator.js} +1 -1
  189. package/core/server/services/member-attribution/{UrlTranslator.js → url-translator.js} +1 -1
  190. package/core/server/services/member-welcome-emails/constants.js +22 -1
  191. package/core/server/services/member-welcome-emails/service.js +23 -5
  192. package/core/server/services/members/api.js +1 -1
  193. package/core/server/services/members/importer/index.js +3 -3
  194. package/core/server/services/members/importer/{MembersCSVImporter.js → members-csv-importer.js} +2 -2
  195. package/core/server/services/members/members-api/members-api.js +14 -14
  196. package/core/server/services/members/members-api/repositories/{MemberRepository.js → member-repository.js} +17 -8
  197. package/core/server/services/members/members-api/services/{MemberBREADService.js → member-bread-service.js} +1 -1
  198. package/core/server/services/members/members-api/services/{PaymentsService.js → payments-service.js} +12 -12
  199. package/core/server/services/members/service.js +4 -4
  200. package/core/server/services/members-events/index.js +3 -3
  201. package/core/server/services/members-events/{LastSeenAtUpdater.js → last-seen-at-updater.js} +2 -2
  202. package/core/server/services/mentions/{BookshelfMentionRepository.js → bookshelf-mention-repository.js} +9 -9
  203. package/core/server/services/mentions/{InMemoryMentionRepository.js → in-memory-mention-repository.js} +4 -4
  204. package/core/server/services/mentions/{MentionController.js → mention-controller.js} +5 -5
  205. package/core/server/services/mentions/{MentionCreatedEvent.js → mention-created-event.js} +1 -1
  206. package/core/server/services/mentions/{Mention.js → mention.js} +1 -1
  207. package/core/server/services/mentions/{MentionsAPI.js → mentions-api.js} +1 -1
  208. package/core/server/services/mentions/{ResourceService.js → resource-service.js} +2 -2
  209. package/core/server/services/mentions/{RoutingService.js → routing-service.js} +2 -2
  210. package/core/server/services/mentions/service.js +11 -11
  211. package/core/server/services/mentions/{WebmentionMetadata.js → webmention-metadata.js} +1 -1
  212. package/core/server/services/mentions-email-report/job.js +1 -1
  213. package/core/server/services/mentions-email-report/{MentionEmailReportJob.js → mention-email-report-job.js} +1 -1
  214. package/core/server/services/mentions-email-report/service.js +2 -2
  215. package/core/server/services/milestones/{BookshelfMilestoneRepository.js → bookshelf-milestone-repository.js} +2 -2
  216. package/core/server/services/milestones/{InMemoryMilestoneRepository.js → in-memory-milestone-repository.js} +2 -2
  217. package/core/server/services/milestones/{Milestone.js → milestone.js} +1 -1
  218. package/core/server/services/milestones/{MilestonesService.js → milestones-service.js} +1 -1
  219. package/core/server/services/milestones/service.js +4 -4
  220. package/core/server/services/newsletters/index.js +2 -2
  221. package/core/server/services/newsletters/{NewslettersService.js → newsletters-service.js} +1 -1
  222. package/core/server/services/notifications/index.js +1 -1
  223. package/core/server/services/oembed/service.js +3 -3
  224. package/core/server/services/offers/application/{OfferMapper.js → offer-mapper.js} +1 -1
  225. package/core/server/services/offers/application/{OffersAPI.js → offers-api.js} +9 -9
  226. package/core/server/services/offers/application/{UniqueChecker.js → unique-checker.js} +2 -2
  227. package/core/server/services/offers/domain/events/{OfferCodeChangeEvent.js → offer-code-change-event.js} +1 -1
  228. package/core/server/services/offers/domain/events/{OfferCreatedEvent.js → offer-created-event.js} +1 -1
  229. package/core/server/services/offers/domain/models/{OfferAmount.js → offer-amount.js} +1 -1
  230. package/core/server/services/offers/domain/models/{OfferCadence.js → offer-cadence.js} +1 -1
  231. package/core/server/services/offers/domain/models/{OfferCode.js → offer-code.js} +1 -1
  232. package/core/server/services/offers/domain/models/{OfferCreatedAt.js → offer-created-at.js} +1 -1
  233. package/core/server/services/offers/domain/models/{OfferCurrency.js → offer-currency.js} +1 -1
  234. package/core/server/services/offers/domain/models/{OfferDescription.js → offer-description.js} +1 -1
  235. package/core/server/services/offers/domain/models/{OfferDuration.js → offer-duration.js} +1 -1
  236. package/core/server/services/offers/domain/models/{OfferName.js → offer-name.js} +1 -1
  237. package/core/server/services/offers/domain/models/{OfferStatus.js → offer-status.js} +1 -1
  238. package/core/server/services/offers/domain/models/{OfferTitle.js → offer-title.js} +1 -1
  239. package/core/server/services/offers/domain/models/{OfferType.js → offer-type.js} +1 -1
  240. package/core/server/services/offers/domain/models/{Offer.js → offer.js} +14 -14
  241. package/core/server/services/offers/domain/models/{StripeCoupon.js → stripe-coupon.js} +1 -1
  242. package/core/server/services/offers/{OfferBookshelfRepository.js → offer-bookshelf-repository.js} +6 -6
  243. package/core/server/services/offers/{OffersModule.js → offers-module.js} +4 -4
  244. package/core/server/services/offers/service.js +3 -3
  245. package/core/server/services/outbox/index.js +2 -2
  246. package/core/server/services/outbox/jobs/outbox-job.js +2 -2
  247. package/core/server/services/posts/posts-service-instance.js +47 -0
  248. package/core/server/services/posts/posts-service.js +572 -45
  249. package/core/server/services/recommendations/index.js +1 -1
  250. package/core/server/services/recommendations/{RecommendationEnablerService.js → recommendation-enabler-service.js} +2 -2
  251. package/core/server/services/recommendations/{RecommendationServiceWrapper.js → recommendation-service-wrapper.js} +2 -2
  252. package/core/server/services/recommendations/service/{BookshelfClickEventRepository.js → bookshelf-click-event-repository.js} +4 -4
  253. package/core/server/services/recommendations/service/{BookshelfClickEventRepository.ts → bookshelf-click-event-repository.ts} +2 -2
  254. package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.js → bookshelf-recommendation-repository.js} +4 -4
  255. package/core/server/services/recommendations/service/{BookshelfRecommendationRepository.ts → bookshelf-recommendation-repository.ts} +3 -3
  256. package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.js → bookshelf-subscribe-event-repository.js} +4 -4
  257. package/core/server/services/recommendations/service/{BookshelfSubscribeEventRepository.ts → bookshelf-subscribe-event-repository.ts} +2 -2
  258. package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.js → in-memory-recommendation-repository.js} +2 -2
  259. package/core/server/services/recommendations/service/{InMemoryRecommendationRepository.ts → in-memory-recommendation-repository.ts} +3 -3
  260. package/core/server/services/recommendations/service/{IncomingRecommendationController.js → incoming-recommendation-controller.js} +2 -2
  261. package/core/server/services/recommendations/service/{IncomingRecommendationController.ts → incoming-recommendation-controller.ts} +3 -3
  262. package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.ts → incoming-recommendation-email-renderer.ts} +2 -2
  263. package/core/server/services/recommendations/service/{IncomingRecommendationService.ts → incoming-recommendation-service.ts} +2 -2
  264. package/core/server/services/recommendations/service/index.js +15 -15
  265. package/core/server/services/recommendations/service/index.ts +15 -15
  266. package/core/server/services/recommendations/service/{RecommendationController.js → recommendation-controller.js} +13 -13
  267. package/core/server/services/recommendations/service/{RecommendationController.ts → recommendation-controller.ts} +4 -4
  268. package/core/server/services/recommendations/service/{RecommendationRepository.ts → recommendation-repository.ts} +3 -3
  269. package/core/server/services/recommendations/service/{RecommendationService.js → recommendation-service.js} +6 -6
  270. package/core/server/services/recommendations/service/{RecommendationService.ts → recommendation-service.ts} +8 -8
  271. package/core/server/services/recommendations/service/{Recommendation.js → recommendation.js} +4 -4
  272. package/core/server/services/recommendations/service/{Recommendation.ts → recommendation.ts} +1 -1
  273. package/core/server/services/recommendations/service/{WellknownService.ts → well-known-service.ts} +1 -1
  274. package/core/server/services/route-settings/index.js +4 -4
  275. package/core/server/services/settings/{SettingsBREADService.js → settings-bread-service.js} +1 -1
  276. package/core/server/services/settings/settings-service.js +2 -2
  277. package/core/server/services/settings-helpers/index.js +1 -1
  278. package/core/server/services/settings-helpers/{SettingsHelpers.js → settings-helpers.js} +5 -5
  279. package/core/server/services/slack-notifications/service.js +4 -4
  280. package/core/server/services/slack-notifications/{SlackNotificationsService.js → slack-notifications-service.js} +2 -2
  281. package/core/server/services/slack-notifications/{SlackNotifications.js → slack-notifications.js} +2 -2
  282. package/core/server/services/staff/index.js +1 -1
  283. package/core/server/services/staff/{StaffServiceEmails.js → staff-service-emails.js} +2 -2
  284. package/core/server/services/staff/{StaffService.js → staff-service.js} +2 -2
  285. package/core/server/services/stats/{PostsStatsService.js → posts-stats-service.js} +25 -25
  286. package/core/server/services/stats/{ReferrersStatsService.js → referrers-stats-service.js} +3 -3
  287. package/core/server/services/stats/service.js +1 -1
  288. package/core/server/services/stats/{StatsService.js → stats-service.js} +23 -23
  289. package/core/server/services/stripe/events/index.js +2 -2
  290. package/core/server/services/stripe/service.js +1 -1
  291. package/core/server/services/stripe/services/webhook/{CheckoutSessionEventService.js → checkout-session-event-service.js} +2 -2
  292. package/core/server/services/stripe/{StripeMigrations.js → stripe-migrations.js} +1 -1
  293. package/core/server/services/stripe/{StripeService.js → stripe-service.js} +8 -8
  294. package/core/server/services/stripe/{WebhookController.js → webhook-controller.js} +4 -4
  295. package/core/server/services/stripe/{WebhookManager.js → webhook-manager.js} +5 -5
  296. package/core/server/services/themes/storage.js +1 -1
  297. package/core/server/services/tiers/{InMemoryTierRepository.js → in-memory-tier-repository.js} +1 -1
  298. package/core/server/services/tiers/service.js +2 -2
  299. package/core/server/services/tiers/{TierActivatedEvent.js → tier-activated-event.js} +1 -1
  300. package/core/server/services/tiers/{TierArchivedEvent.js → tier-archived-event.js} +1 -1
  301. package/core/server/services/tiers/{TierCreatedEvent.js → tier-created-event.js} +1 -1
  302. package/core/server/services/tiers/{TierNameChangeEvent.js → tier-name-change-event.js} +1 -1
  303. package/core/server/services/tiers/{TierPriceChangeEvent.js → tier-price-change-event.js} +1 -1
  304. package/core/server/services/tiers/{TierRepository.js → tier-repository.js} +7 -7
  305. package/core/server/services/tiers/{Tier.js → tier.js} +5 -5
  306. package/core/server/services/tiers/{TiersAPI.js → tiers-api.js} +1 -1
  307. package/core/server/services/tinybird/index.js +1 -1
  308. package/core/server/services/tinybird/{TinybirdServiceWrapper.js → tinybird-service-wrapper.js} +2 -2
  309. package/core/server/services/update-check/index.js +1 -1
  310. package/core/server/services/url/index.js +2 -2
  311. package/core/server/services/url/{Resources.js → resources.js} +1 -1
  312. package/core/server/services/url/{UrlGenerator.js → url-generator.js} +1 -1
  313. package/core/server/services/url/{UrlService.js → url-service.js} +4 -4
  314. package/core/server/services/url/{Urls.js → urls.js} +1 -1
  315. package/core/server/services/webhooks/listen.js +1 -1
  316. package/core/shared/labs.js +2 -1
  317. package/package.json +3 -3
  318. package/tsconfig.tsbuildinfo +1 -1
  319. package/components/tryghost-i18n-6.11.0.tgz +0 -0
  320. package/core/built/admin/assets/index-Cr_YX9yU.js +0 -1
  321. package/core/built/admin/assets/stats/index-BBCJ2EZo.mjs +0 -733
  322. package/core/server/services/posts/PostsService.js +0 -574
  323. /package/core/server/{GhostServer.js → ghost-server.js} +0 -0
  324. /package/core/server/services/activitypub/{ActivityPubService.js → activity-pub-service.js} +0 -0
  325. /package/core/server/services/adapter-manager/{AdapterManager.js → adapter-manager.js} +0 -0
  326. /package/core/server/services/announcement-bar-service/{AnnouncementVisibilityValues.js → announcement-visibility-values.js} +0 -0
  327. /package/core/server/services/audience-feedback/{AudienceFeedbackService.js → audience-feedback-service.js} +0 -0
  328. /package/core/server/services/audience-feedback/{FeedbackRepository.js → feedback-repository.js} +0 -0
  329. /package/core/server/services/audience-feedback/{Feedback.js → feedback.js} +0 -0
  330. /package/core/server/services/auth/session/{SessionStore.js → session-store.js} +0 -0
  331. /package/core/server/services/comments/{CommentsServiceEmailRenderer.js → comments-service-email-renderer.js} +0 -0
  332. /package/core/server/services/comments/{CommentsStatsService.js → comments-stats-service.js} +0 -0
  333. /package/core/server/services/custom-redirects/{CustomRedirectsAPI.js → custom-redirects-api.js} +0 -0
  334. /package/core/server/services/donations/{DonationBookshelfRepository.js → donation-bookshelf-repository.js} +0 -0
  335. /package/core/server/services/donations/{DonationPaymentEvent.js → donation-payment-event.js} +0 -0
  336. /package/core/server/services/donations/{DonationPaymentEvent.ts → donation-payment-event.ts} +0 -0
  337. /package/core/server/services/email-address/{EmailAddressParser.js → email-address-parser.js} +0 -0
  338. /package/core/server/services/email-address/{EmailAddressParser.js.d.ts → email-address-parser.js.d.ts} +0 -0
  339. /package/core/server/services/email-analytics/{EventProcessingResult.js → event-processing-result.js} +0 -0
  340. /package/core/server/services/email-analytics/events/{StartEmailAnalyticsJobEvent.js → start-email-analytics-job-event.js} +0 -0
  341. /package/core/server/services/email-service/{DomainWarmingService.js → domain-warming-service.js} +0 -0
  342. /package/core/server/services/email-service/{DomainWarmingService.ts → domain-warming-service.ts} +0 -0
  343. /package/core/server/services/email-service/{EmailBodyCache.js → email-body-cache.js} +0 -0
  344. /package/core/server/services/email-service/{EmailController.js → email-controller.js} +0 -0
  345. /package/core/server/services/email-service/{EmailSegmenter.js → email-segmenter.js} +0 -0
  346. /package/core/server/services/email-service/events/{EmailBouncedEvent.js → email-bounced-event.js} +0 -0
  347. /package/core/server/services/email-service/events/{EmailDeliveredEvent.js → email-delivered-event.js} +0 -0
  348. /package/core/server/services/email-service/events/{EmailOpenedEvent.js → email-opened-event.js} +0 -0
  349. /package/core/server/services/email-service/events/{EmailTemporaryBouncedEvent.js → email-temporary-bounced-event.js} +0 -0
  350. /package/core/server/services/email-service/events/{EmailUnsubscribedEvent.js → email-unsubscribed-event.js} +0 -0
  351. /package/core/server/services/email-service/events/{SpamComplaintEvent.js → spam-complaint-event.js} +0 -0
  352. /package/core/server/services/email-suppression-list/{EmailSuppressionList.js → email-suppression-list.js} +0 -0
  353. /package/core/server/services/explore/{ExploreService.js → explore-service.js} +0 -0
  354. /package/core/server/services/explore-ping/{ExplorePingService.js → explore-ping-service.js} +0 -0
  355. /package/core/server/services/frontend-data-service/{FrontendDataService.js → front-end-data-service.js} +0 -0
  356. /package/core/server/services/identity-tokens/{IdentityTokenService.js → identity-token-service.js} +0 -0
  357. /package/core/server/services/identity-tokens/{IdentityTokenService.ts → identity-token-service.ts} +0 -0
  358. /package/core/server/services/invites/{Invites.js → invites.js} +0 -0
  359. /package/core/server/services/lib/{DynamicRedirectManager.js → dynamic-redirect-manager.js} +0 -0
  360. /package/core/server/services/lib/{EmailContentGenerator.js → email-content-generator.js} +0 -0
  361. /package/core/server/services/lib/{InMemoryRepository.js → in-memory-repository.js} +0 -0
  362. /package/core/server/services/lib/{InMemoryRepository.ts → in-memory-repository.ts} +0 -0
  363. /package/core/server/services/lib/magic-link/{MagicLink.js → magic-link.js} +0 -0
  364. /package/core/server/services/lib/{MailgunClient.js → mailgun-client.js} +0 -0
  365. /package/core/server/services/link-redirection/{LinkRedirect.js → link-redirect.js} +0 -0
  366. /package/core/server/services/link-tracking/{ClickEvent.js → click-event.js} +0 -0
  367. /package/core/server/services/link-tracking/{FullPostLink.js → full-post-link.js} +0 -0
  368. /package/core/server/services/link-tracking/{PostLink.js → post-link.js} +0 -0
  369. /package/core/server/services/media-inliner/{ExternalMediaInliner.js → external-media-inliner.js} +0 -0
  370. /package/core/server/services/member-attribution/{OutboundLinkTagger.js → outbound-link-tagger.js} +0 -0
  371. /package/core/server/services/member-attribution/{UrlHistory.js → url-history.js} +0 -0
  372. /package/core/server/services/member-welcome-emails/{MemberWelcomeEmailRenderer.js → member-welcome-email-renderer.js} +0 -0
  373. /package/core/server/services/members/importer/{MembersCSVImporterStripeUtils.js → members-csv-importer-stripe-utils.js} +0 -0
  374. /package/core/server/services/members/members-api/controllers/{MemberController.js → member-controller.js} +0 -0
  375. /package/core/server/services/members/members-api/controllers/{RouterController.js → router-controller.js} +0 -0
  376. /package/core/server/services/members/members-api/controllers/{WellKnownController.js → well-known-controller.js} +0 -0
  377. /package/core/server/services/members/members-api/repositories/{EventRepository.js → event-repository.js} +0 -0
  378. /package/core/server/services/members/members-api/repositories/{ProductRepository.js → product-repository.js} +0 -0
  379. /package/core/server/services/members/members-api/services/{GeolocationService.js → geolocation-service.js} +0 -0
  380. /package/core/server/services/members/members-api/services/{TokenService.js → token-service.js} +0 -0
  381. /package/core/server/services/members/{MembersConfigProvider.js → members-config-provider.js} +0 -0
  382. /package/core/server/services/members/{RequestIntegrityTokenProvider.js → request-integrity-token-provider.js} +0 -0
  383. /package/core/server/services/members/{SingleUseTokenProvider.js → single-use-token-provider.js} +0 -0
  384. /package/core/server/services/members/stats/{MembersStats.js → members-stats.js} +0 -0
  385. /package/core/server/services/members-events/{EventStorage.js → event-storage.js} +0 -0
  386. /package/core/server/services/members-events/{LastSeenAtCache.js → last-seen-at-cache.js} +0 -0
  387. /package/core/server/services/mentions/{MentionDiscoveryService.js → mention-discovery-service.js} +0 -0
  388. /package/core/server/services/mentions/{MentionSendingService.js → mention-sending-service.js} +0 -0
  389. /package/core/server/services/mentions-email-report/{StartMentionEmailReportJob.js → start-mention-email-report-job.js} +0 -0
  390. /package/core/server/services/milestones/{MilestoneCreatedEvent.js → milestone-created-event.js} +0 -0
  391. /package/core/server/services/milestones/{MilestoneQueries.js → milestone-queries.js} +0 -0
  392. /package/core/server/services/notifications/{Notifications.js → notifications.js} +0 -0
  393. /package/core/server/services/oembed/{NFTOEmbedProvider.js → nft-oembed-provider.js} +0 -0
  394. /package/core/server/services/oembed/{OEmbedService.js → oembed-service.js} +0 -0
  395. /package/core/server/services/oembed/{TwitterOEmbedProvider.js → twitter-oembed-provider.js} +0 -0
  396. /package/core/server/services/offers/domain/models/shared/{ValueObject.js → value-object.js} +0 -0
  397. /package/core/server/services/outbox/events/{StartOutboxProcessingEvent.js → start-outbox-processing-event.js} +0 -0
  398. /package/core/server/services/posts/{PostsExporter.js → posts-exporter.js} +0 -0
  399. /package/core/server/services/posts/stats/{PostStats.js → post-stats.js} +0 -0
  400. /package/core/server/services/recommendations/service/{BookshelfRepository.js → bookshelf-repository.js} +0 -0
  401. /package/core/server/services/recommendations/service/{BookshelfRepository.ts → bookshelf-repository.ts} +0 -0
  402. /package/core/server/services/recommendations/service/{ClickEvent.js → click-event.js} +0 -0
  403. /package/core/server/services/recommendations/service/{ClickEvent.ts → click-event.ts} +0 -0
  404. /package/core/server/services/recommendations/service/{IncomingRecommendationEmailRenderer.js → incoming-recommendation-email-renderer.js} +0 -0
  405. /package/core/server/services/recommendations/service/{IncomingRecommendationService.js → incoming-recommendation-service.js} +0 -0
  406. /package/core/server/services/recommendations/service/{RecommendationMetadataService.js → recommendation-metadata-service.js} +0 -0
  407. /package/core/server/services/recommendations/service/{RecommendationMetadataService.ts → recommendation-metadata-service.ts} +0 -0
  408. /package/core/server/services/recommendations/service/{RecommendationRepository.js → recommendation-repository.js} +0 -0
  409. /package/core/server/services/recommendations/service/{SubscribeEvent.js → subscribe-event.js} +0 -0
  410. /package/core/server/services/recommendations/service/{SubscribeEvent.ts → subscribe-event.ts} +0 -0
  411. /package/core/server/services/recommendations/service/{UnsafeData.js → unsafe-data.js} +0 -0
  412. /package/core/server/services/recommendations/service/{UnsafeData.ts → unsafe-data.ts} +0 -0
  413. /package/core/server/services/recommendations/service/{WellknownService.js → well-known-service.js} +0 -0
  414. /package/core/server/services/route-settings/{DefaultSettingsManager.js → default-settings-manager.js} +0 -0
  415. /package/core/server/services/route-settings/{RouteSettings.js → route-settings.js} +0 -0
  416. /package/core/server/services/route-settings/{SettingsLoader.js → settings-loader.js} +0 -0
  417. /package/core/server/services/route-settings/{SettingsPathManager.js → settings-path-manager.js} +0 -0
  418. /package/core/server/services/stats/{ContentStatsService.js → content-stats-service.js} +0 -0
  419. /package/core/server/services/stats/{MembersStatsService.js → members-stats-service.js} +0 -0
  420. /package/core/server/services/stats/{MrrStatsService.js → mrr-stats-service.js} +0 -0
  421. /package/core/server/services/stats/{SubscriptionStatsService.js → subscription-stats-service.js} +0 -0
  422. /package/core/server/services/stripe/events/{StripeLiveDisabledEvent.js → stripe-live-disabled-event.js} +0 -0
  423. /package/core/server/services/stripe/events/{StripeLiveEnabledEvent.js → stripe-live-enabled-event.js} +0 -0
  424. /package/core/server/services/stripe/services/webhook/{InvoiceEventService.js → invoice-event-service.js} +0 -0
  425. /package/core/server/services/stripe/services/webhook/{SubscriptionEventService.js → subscription-event-service.js} +0 -0
  426. /package/core/server/services/stripe/{StripeAPI.js → stripe-api.js} +0 -0
  427. /package/core/server/services/themes/{ThemeStorage.js → theme-storage.js} +0 -0
  428. /package/core/server/services/tinybird/{TinybirdService.js → tinybird-service.js} +0 -0
  429. /package/core/server/services/update-check/{UpdateCheckService.js → update-check-service.js} +0 -0
  430. /package/core/server/services/url/{LocalFileCache.js → local-file-cache.js} +0 -0
  431. /package/core/server/services/url/{Queue.js → queue.js} +0 -0
  432. /package/core/server/services/url/{Resource.js → resource.js} +0 -0
  433. /package/core/server/services/{Users.js → users.js} +0 -0
  434. /package/core/server/services/{VerificationTrigger.js → verification-trigger.js} +0 -0
  435. /package/core/server/services/webhooks/{WebhookTrigger.js → webhook-trigger.js} +0 -0
Binary file
@@ -1 +0,0 @@
1
- import{aM as de,j as e,B as me,r as C,b3 as re,b4 as te,bR as Se,aj as c,cf as K,ah as A,cg as X,aN as Ce,ch as F,aW as Me,ap as ke,aY as Pe,a_ as J,af as ue,ag as ae,e as he,S as Ne,ci as Be,bJ as Ee,bK as Ye,bL as Oe,bM as Fe,bN as Re,bO as Ve,bU as xe}from"./index-BYawr8p9.js";import{s as Z,d as Ge,g as se,S as Ae,a as $e,D as Le,b as ze}from"./stats-view-DzZxrBDz.js";import{E as pe}from"./empty-indicator-DBrIZcFq.js";import{A as Ke,a as Ie}from"./wallet-cards-KaTkgqvi.js";import{C as Ue,a as He,b as We,B as be}from"./chart-DGA1MaFs.js";import{G as fe,C as qe,X as Qe,Y as Xe}from"./gh-chart-BV97-O7c.js";import{T as oe,a as ce,K as ee,d as R,e as Je,b as I,c as ge}from"./tabs-C2sFfNcp.js";import{g as Ze}from"./audience-select-DQD7iDOb.js";import{B as ea,S as U}from"./sort-button-iOtR-vQ1.js";import{S as aa,C as z,g as sa,a as ra,b as ta}from"./url-helpers-84icqAuE.js";import{e as q,c as M,f,g as na,a as _e,b as De,d as V}from"./table-DeBuf80X.js";import{g as le}from"./currency-fEUUCkj0.js";import{g as ia}from"./source-utils-B1S3ZHA2.js";import{a as la,h as oa}from"./stats-r0Bphuvi.js";import{u as ca}from"./referrers-B8xJpCcR.js";import{j as da,C as je,c as ve,a as ma,b as ua,h as pa}from"./pagemenu-BMXHDXYy.js";import{u as ha}from"./use-growth-stats-DF-7tL8g.js";import{C as xa}from"./lucide-react-DKlmxVQI.js";import"./select-BhvNY3I-.js";import"./message-square-text-CaMVBVPr.js";import"./sprout-BW9HFVU8.js";import"./_baseAssignValue-BX8EallQ.js";import"./index-Kji6JKl7.js";import"./a-large-small-CKZJgscl.js";import"./at-sign-CqQzllfI.js";import"./copy-BFuV16bY.js";import"./hash-CdH0ikFp.js";import"./inbox-Bd0uf1Ez.js";import"./minus-2XwCoFJV.js";import"./tags-BL_N4nn2.js";import"./square-BCNGSZhW.js";import"./user-round-check-BjHbfXKY.js";import"./repeat-COP-3g8d.js";import"./reply-JE8tmvOn.js";import"./trash-BglGemAb.js";const we=({className:l})=>{const p=de();return e.jsx(pe,{actions:e.jsx(me,{variant:"outline",onClick:()=>p("/settings/analytics",{crossApp:!0}),children:"Open settings"}),className:l,description:"Enable member source tracking in settings to see which content drives member growth.",title:"Member sources have been disabled",children:e.jsx(Ke,{})})},ba=({chartData:l,subscriptionData:p,totals:g,initialTab:d="total-members",currencySymbol:h,isLoading:x})=>{const[s,j]=C.useState(d),[N,$]=C.useState("total"),{range:r}=re(),{appSettings:_}=te(),H=de(),[B]=Se();C.useEffect(()=>{j(d)},[d]);const D=a=>{j(a);const n=new URLSearchParams(B);n.set("tab",a),H(`?${n.toString()}`,{replace:!0})},{totalMembers:E,freeMembers:Y,paidMembers:O,mrr:k,percentChanges:w,directions:t}=g,y=(a,n)=>{if(n===1){const T=A().format("YYYY-MM-DD"),G=a.find(Q=>Q.date===T);return[{date:T,signups:G?.signups||0,cancellations:G?.cancellations||0}]}const{startDate:m,endDate:u}=ue(n),o=A(u).diff(A(m),"days"),v=Ge(n,o,"sum"),ne=new Map(a.map(T=>[T.date,T])),ie=[],W=A(m),Te=A(u);for(;W.isSameOrBefore(Te);){let T,G;switch(v){case"weekly":T=W.startOf("week").format("YYYY-MM-DD"),G="week";break;case"monthly":T=W.startOf("month").format("YYYY-MM-DD"),G="month";break;default:T=W.format("YYYY-MM-DD"),G="day"}const Q=ne.get(T);Q?ie.push(Q):ie.push({date:T,signups:0,cancellations:0}),W.add(1,G)}return ie},b=C.useMemo(()=>{if(!l||l.length===0)return[];let a=[],n="value";switch(s){case"free-members":n="free";break;case"paid-members":n="paid";break;case"mrr":{n="mrr";break}default:n="value"}a=Z(l,r,n,"exact");let m=[];switch(s){case"free-members":m=a.map(u=>({...u,value:u.free,formattedValue:c(u.free),label:"Free members"}));break;case"paid-members":m=a.map(u=>({...u,value:u.paid,formattedValue:c(u.paid),label:"Paid members"}));break;case"mrr":m=a.map(u=>({...u,value:K(u.mrr),formattedValue:`${h}${c(K(u.mrr))}`,label:"MRR"}));break;default:m=a.map(u=>{const o=u.free+u.paid;return{...u,value:o,formattedValue:c(o),label:"Total members"}})}return m},[s,l,r,h]),S={"total-members":{color:"hsl(var(--chart-darkblue))"},"free-members":{color:"hsl(var(--chart-blue))"},"paid-members":{color:"hsl(var(--chart-purple))"},mrr:{color:"hsl(var(--chart-teal))"}},L=C.useMemo(()=>{if(s!=="paid-members")return[];if(p&&p.length>0){if(r===1){const o=A().format("YYYY-MM-DD"),v=p.find(ne=>ne.date===o);return[{date:X(o,r),new:v?.signups||0,cancelled:-(v?.cancellations||0)}]}const a=Z(p,r,"signups","sum"),n=Z(p,r,"cancellations","sum"),m=a.map(o=>({date:o.date,signups:o.signups||0,cancellations:n.find(v=>v.date===o.date)?.cancellations||0}));return n.forEach(o=>{m.find(v=>v.date===o.date)||m.push({date:o.date,signups:0,cancellations:o.cancellations||0})}),m.sort((o,v)=>new Date(o.date).getTime()-new Date(v.date).getTime()),y(m,r).map(o=>({date:X(o.date,r),new:o.signups||0,cancelled:-(o.cancellations||0)}))}else{if(!l||l.length===0)return[];if(r===1){const n=A().format("YYYY-MM-DD"),m=l.find(u=>u.date===n);return[{date:X(n,r),new:m?.paid_subscribed||0,cancelled:-(m?.paid_canceled||0)}]}return Z(l,r,"paid","exact").map(n=>({date:X(n.date,r),new:n.paid_subscribed||0,cancelled:-(n.paid_canceled||0)}))}},[s,l,p,r]),P={new:{label:"New",color:"hsl(var(--chart-teal))"},cancelled:{label:"Cancelled",color:"hsl(var(--chart-rose))"}};if(x)return e.jsx("div",{className:"-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center",children:e.jsx(Ce,{})});const i="-mb-3 h-[16vw] max-h-[320px] w-full min-h-[180px]";return e.jsxs(oe,{defaultValue:d,variant:"kpis",children:[e.jsxs(ce,{className:`-mx-6 ${_?.paidMembersEnabled?"hidden grid-cols-4 lg:!visible lg:!grid":"grid grid-cols-4"}`,children:[e.jsx(ee,{className:_?.paidMembersEnabled?"":"cursor-auto after:hidden",value:"total-members",onClick:()=>{_?.paidMembersEnabled&&D("total-members")},children:e.jsx(R,{color:"hsl(var(--chart-darkblue))",diffDirection:r===F.allTime.value?"hidden":t.total,diffValue:w.total,label:"Total members",value:c(E)})}),_?.paidMembersEnabled&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{value:"free-members",onClick:()=>{D("free-members")},children:e.jsx(R,{color:"hsl(var(--chart-blue))",diffDirection:r===F.allTime.value?"hidden":t.free,diffValue:w.free,label:"Free members",value:c(Y)})}),e.jsx(ee,{value:"paid-members",onClick:()=>{D("paid-members")},children:e.jsx(R,{color:"hsl(var(--chart-purple))",diffDirection:r===F.allTime.value?"hidden":t.paid,diffValue:w.paid,label:"Paid members",value:c(O)})}),e.jsx(ee,{value:"mrr",onClick:()=>{D("mrr")},children:e.jsx(R,{color:"hsl(var(--chart-teal))",diffDirection:r===F.allTime.value?"hidden":t.mrr,diffValue:w.mrr,label:"MRR",value:`${h}${c(K(k))}`})})]})]}),_?.paidMembersEnabled&&e.jsxs(Me,{children:[e.jsx(ke,{className:"lg:hidden",asChild:!0,children:e.jsxs(Je,{children:[s==="total-members"&&e.jsx(R,{color:"hsl(var(--chart-darkblue))",diffDirection:r===F.allTime.value?"hidden":t.total,diffValue:w.total,label:"Total members",value:c(E)}),s==="free-members"&&e.jsx(R,{color:"hsl(var(--chart-blue))",diffDirection:r===F.allTime.value?"hidden":t.free,diffValue:w.free,label:"Free members",value:c(Y)}),s==="paid-members"&&e.jsx(R,{color:"hsl(var(--chart-purple))",diffDirection:r===F.allTime.value?"hidden":t.paid,diffValue:w.paid,label:"Paid members",value:c(O)}),s==="mrr"&&e.jsx(R,{color:"hsl(var(--chart-teal))",diffDirection:r===F.allTime.value?"hidden":t.mrr,diffValue:w.mrr,label:"MRR",value:`${h}${c(K(k))}`})]})}),e.jsxs(Pe,{align:"end",className:"w-56",children:[e.jsx(J,{onClick:()=>D("total-members"),children:"Total members"}),e.jsx(J,{onClick:()=>D("free-members"),children:"Free members"}),e.jsx(J,{onClick:()=>D("paid-members"),children:"Paid members"}),e.jsx(J,{onClick:()=>D("mrr"),children:"MRR"})]})]}),e.jsx("div",{className:"my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500",children:s==="paid-members"?e.jsxs(oe,{defaultValue:N,variant:"button-sm",onValueChange:a=>{$(a)},children:[e.jsx("div",{className:"mb-4 mt-2 flex w-full items-center justify-start",children:e.jsxs(ce,{className:"flex items-center",children:[e.jsx(I,{value:"total",children:"Total"}),e.jsx(I,{value:"change",children:"Change"})]})}),e.jsx(ge,{value:"total",children:e.jsx(fe,{className:i,color:S[s].color,data:b,dataFormatter:c,id:"paid-members",range:r})}),e.jsxs(ge,{value:"change",children:[e.jsx(Ue,{className:"mt-6 aspect-auto h-[200px] w-full md:h-[220px] xl:h-[260px]",config:P,children:e.jsxs(ea,{data:L,stackOffset:"sign",children:[e.jsx("defs",{children:e.jsxs("linearGradient",{id:"tealGradient",x1:"0",x2:"0",y1:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"var(--color-new)",stopOpacity:.8}),e.jsx("stop",{offset:"100%",stopColor:"var(--color-new)",stopOpacity:.6})]})}),e.jsx("defs",{children:e.jsxs("linearGradient",{id:"roseGradient",x1:"0",x2:"0",y1:"0",y2:"1",children:[e.jsx("stop",{offset:"0%",stopColor:"var(--color-cancelled)",stopOpacity:.6}),e.jsx("stop",{offset:"100%",stopColor:"var(--color-cancelled)",stopOpacity:.8})]})}),e.jsx(qe,{vertical:!1}),e.jsx(Qe,{axisLine:!1,dataKey:"date",tickFormatter:()=>"",tickLine:!1,tickMargin:10}),e.jsx(Xe,{axisLine:!1,tickFormatter:a=>a<0?c(a*-1):c(a),tickLine:!1}),e.jsx(He,{content:e.jsx(We,{className:"!min-w-[120px] px-3 py-2",formatter:(a,n,m,u)=>{const o=Number(a);let v="0";return o===0?v="0":v=o<0?c(o*-1):c(o),e.jsxs("div",{className:"flex w-full flex-col",children:[u===0&&e.jsx("div",{className:"mb-1 text-sm font-medium text-foreground",children:m?.payload?.date}),e.jsxs("div",{className:"flex w-full items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("div",{className:"size-2 shrink-0 rounded-full bg-[var(--color-bg)] opacity-50",style:{"--color-bg":`var(--color-${n})`}}),e.jsx("span",{className:"text-sm text-muted-foreground",children:P[n]?.label||n})]}),e.jsx("div",{className:"ml-auto flex items-baseline gap-0.5 font-mono font-medium tabular-nums text-foreground",children:v})]})]})},hideLabel:!0}),cursor:!1,isAnimationActive:!1,position:{y:10}}),e.jsx(be,{activeBar:{fillOpacity:1},dataKey:"new",fill:"url(#tealGradient)",fillOpacity:.75,maxBarSize:32,minPointSize:3,radius:[4,4,0,0],stackId:"a"}),e.jsx(be,{activeBar:{fillOpacity:1},dataKey:"cancelled",fill:"url(#roseGradient)",fillOpacity:.75,maxBarSize:32,radius:[4,4,0,0],stackId:"a"})]})}),e.jsxs("div",{className:"flex items-center justify-center gap-6 text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"size-2 rounded-full opacity-50",style:{backgroundColor:P.new.color}}),"New"]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"size-2 rounded-full opacity-50",style:{backgroundColor:P.cancelled.color}}),"Cancelled"]})]})]})]}):e.jsx(fe,{className:i,color:S[s].color,data:b,dataFormatter:s==="mrr"?a=>`${h}${c(a)}`:c,id:"mrr",range:r})})]})},fa=(l,p="signups desc",g=50)=>{const{audience:d}=re(),{startDate:h,endDate:x,timezone:s}=ue(l),j={date_from:ae(h),date_to:ae(x),member_status:Ze(d),order:p,limit:g.toString()};return s&&(j.timezone=s),ca({searchParams:j})},ye=({data:l,currencySymbol:p,limit:g,defaultSourceIconUrl:d})=>{const h=g?l.slice(0,g):l,{appSettings:x}=te();return e.jsx(q,{children:h.map(s=>e.jsxs(M,{className:"last:border-none",children:[e.jsx(f,{className:"font-medium",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(aa,{defaultSourceIconUrl:d,displayName:s.displayName,iconSrc:s.iconSrc}),s.linkUrl?e.jsx("a",{className:"hover:underline",href:s.linkUrl,rel:"noreferrer",target:"_blank",children:s.displayName}):e.jsx("span",{children:s.displayName})]})}),e.jsxs(f,{className:"text-right font-mono text-sm",children:["+",c(s.free_members)]}),x?.paidMembersEnabled&&e.jsxs(e.Fragment,{children:[e.jsxs(f,{className:"text-right font-mono text-sm",children:["+",c(s.paid_members)]}),e.jsxs(f,{className:"text-right font-mono text-sm",children:["+",p,c(K(s.mrr))]})]})]},s.source))})},ga=({range:l,limit:p=20,showViewAll:g=!1,sortBy:d,setSortBy:h})=>{const{data:x}=re(),{data:s}=la(),{appSettings:j}=te(),[N,$]=C.useState("free_members desc"),r=d||N,_=h||$,H=r.replace("free_members","signups").replace("paid_members","paid_conversions"),{data:B,isLoading:D}=fa(l,H,p),E=x?.url,Y="https://www.google.com/s2/favicons?domain=ghost.org&sz=64",O=he.useMemo(()=>{if(s?.stats&&s?.meta?.totals){const y=s.meta.totals;let b=y[0];if(!b)return le("usd");for(const S of y)S.mrr>b.mrr&&(b=S);return le(b.currency)}return le("usd")},[s]),k=he.useMemo(()=>B?.stats?B.stats.map(y=>{const b=y.source||"Direct",{domain:S}=ia(b,E),L=S?`https://www.faviconextractor.com/favicon/${S}?larger=true`:Y,P=S&&b!=="Direct"?`https://${S}`:void 0;return{source:b,free_members:y.signups,paid_members:y.paid_conversions,mrr:y.mrr,iconSrc:L,displayName:b,linkUrl:P}}):[],[B,E]),w="Top sources",t=`Where did your growth come from ${se(l)}`;return j?.analytics.membersTrackSources?D?e.jsx(q,{children:e.jsx(M,{className:"last:border-none",children:e.jsx(f,{className:"border-none py-2",colSpan:1,children:e.jsx(Ne,{containerClassName:"space-y-2",count:5,maxWidth:75,randomize:!0})})})}):e.jsxs(e.Fragment,{children:[k.length>0?e.jsx(ye,{currencySymbol:O,data:k,defaultSourceIconUrl:Y,limit:p}):e.jsx(q,{children:e.jsx(M,{className:"last:border-none",children:e.jsx(f,{className:"border-none py-12 group-hover:!bg-transparent",colSpan:j?.paidMembersEnabled?4:2,children:e.jsx(pe,{description:"Try adjusting your date range to see more data.",title:`No conversions ${se(l)}`,children:e.jsx(Be,{strokeWidth:1.5})})})})}),g&&k.length>p&&e.jsx(na,{className:"border-none bg-transparent hover:!bg-transparent",children:e.jsx(M,{children:e.jsx(f,{className:"border-none bg-transparent px-0 pb-0 hover:!bg-transparent",colSpan:4,children:e.jsxs(Ee,{children:[e.jsx(Ye,{asChild:!0,children:e.jsxs(me,{variant:"outline",children:["View all ",e.jsx(Ie,{})]})}),e.jsxs(Oe,{className:"overflow-y-auto pt-0 sm:max-w-[600px]",children:[e.jsxs(Fe,{className:"sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur",children:[e.jsx(Re,{children:w}),e.jsx(Ve,{children:t})]}),e.jsx("div",{className:"group/datalist",children:e.jsxs(_e,{children:[e.jsx(De,{children:e.jsxs(M,{children:[e.jsx(V,{children:"Source"}),e.jsx(V,{className:"w-[110px] text-right",children:e.jsx(U,{activeSortBy:r,setSortBy:_,sortBy:"free_members desc",children:"Free members"})}),j?.paidMembersEnabled&&e.jsxs(e.Fragment,{children:[e.jsx(V,{className:"w-[110px] text-right",children:e.jsx(U,{activeSortBy:r,setSortBy:_,sortBy:"paid_members desc",children:"Paid members"})}),e.jsx(V,{className:"w-[110px] text-right",children:e.jsx(U,{activeSortBy:r,setSortBy:_,sortBy:"mrr desc",children:"MRR impact"})})]})]})}),e.jsx(ye,{currencySymbol:O,data:k,defaultSourceIconUrl:Y})]})})]})]})})})})]}):e.jsx(q,{children:e.jsx(M,{className:"last:border-none",children:e.jsx(f,{className:"border-none py-12 group-hover:!bg-transparent",colSpan:j?.paidMembersEnabled?4:2,children:e.jsx(we,{})})})})},ja=(l,p,g)=>{const d=l??30,h=p??"mrr desc",{startDate:x,endDate:s}=C.useMemo(()=>ue(d),[d]),j=C.useMemo(()=>{const r={date_from:ae(x),date_to:ae(s),order:h};return g==="posts"?r.post_type="post":g==="pages"&&(r.post_type="page"),r},[x,s,h,g]),N=Object.fromEntries(Object.entries(j).filter(([,r])=>r!==void 0));return oa({searchParams:N})},as=()=>{const{range:l,site:p}=re(),g=de(),[d,h]=C.useState("free_members desc"),[x,s]=C.useState(z.POSTS_AND_PAGES),[j]=Se(),{appSettings:N}=te(),$=j.get("tab")||"total-members",{isLoading:r,chartData:_,totals:H,currencySymbol:B,subscriptionData:D}=ha(l),{data:E,isLoading:Y}=ja(l,d,x),O=C.useMemo(()=>{const y=(E?.stats||[]).reduce((i,a)=>{const n=a.post_id||(a.title&&a.title.trim()!==""?a.title:a.attribution_url);if(!n)return i;if(!i.has(n))i.set(n,a);else{const m=i.get(n);m.free_members+=a.free_members,m.paid_members+=a.paid_members,m.mrr+=a.mrr,i.set(n,m)}return i},new Map),b=Array.from(y.values()),S=b.reduce((i,a)=>i+a.free_members,0),L=b.reduce((i,a)=>i+a.paid_members,0),P=b.reduce((i,a)=>i+a.mrr,0);return b.map(i=>{let a=0;return d.includes("free_members")&&S>0?a=i.free_members/S:d.includes("paid_members")&&L>0?a=i.paid_members/L:d.includes("mrr")&&P>0&&(a=i.mrr/P),{title:i.title||i.attribution_url,post_id:i.post_id,attribution_url:i.attribution_url,attribution_type:i.attribution_type,attribution_id:i.attribution_id,free_members:i.free_members,paid_members:i.paid_members,mrr:i.mrr,percentage:a,published_at:i.published_at,url_exists:i.url_exists??!0}})},[E,d]),k=r,w=r||Y;return e.jsxs(Ae,{children:[e.jsx($e,{children:e.jsx(da,{children:e.jsx(Le,{})})}),e.jsxs(ze,{data:k?void 0:_,isLoading:!1,loadingComponent:e.jsx(e.Fragment,{}),children:[e.jsx(je,{"data-testid":"total-members-card",children:e.jsx(ve,{children:e.jsx(ba,{chartData:_,currencySymbol:B,initialTab:$,isLoading:k,subscriptionData:D,totals:H})})}),e.jsxs(je,{className:"w-full overflow-x-auto","data-testid":"top-content-card",children:[e.jsxs(ma,{children:[e.jsx(ua,{children:sa(x)}),e.jsx(pa,{children:ra(x,l,se)})]}),e.jsx(ve,{children:e.jsxs(_e,{children:[e.jsx(De,{children:e.jsxs(M,{className:"[&>th]:h-auto [&>th]:pb-2 [&>th]:pt-0",children:[e.jsx(V,{className:"min-w-[320px] pl-0",children:e.jsx(oe,{defaultValue:x,variant:"button-sm",onValueChange:t=>{s(t)},children:e.jsxs(ce,{children:[e.jsx(I,{value:z.POSTS_AND_PAGES,children:"Posts & pages"}),e.jsx(I,{value:z.POSTS,children:"Posts"}),e.jsx(I,{value:z.PAGES,children:"Pages"}),e.jsx(I,{value:z.SOURCES,children:"Sources"})]})})}),e.jsx(V,{className:"w-[140px] text-right",children:N?.paidMembersEnabled?e.jsx(U,{activeSortBy:d,setSortBy:h,sortBy:"free_members desc",children:"Free members"}):e.jsx(e.Fragment,{children:"Free members"})}),N?.paidMembersEnabled&&e.jsxs(e.Fragment,{children:[e.jsx(V,{className:"w-[140px] text-right",children:e.jsx(U,{activeSortBy:d,setSortBy:h,sortBy:"paid_members desc",children:"Paid members"})}),e.jsx(V,{className:"w-[140px] text-right",children:e.jsx(U,{activeSortBy:d,setSortBy:h,sortBy:"mrr desc",children:"MRR impact"})})]})]})}),x===z.SOURCES?e.jsx(ga,{limit:20,range:l,setSortBy:t=>h(t),showViewAll:!0,sortBy:d}):e.jsx(q,{children:w?e.jsx(M,{className:"last:border-none",children:e.jsx(f,{className:"border-none py-2",colSpan:1,children:e.jsx(Ne,{containerClassName:"space-y-2",count:5,maxWidth:75,randomize:!0})})}):N?.analytics.membersTrackSources?O.length>0?O.map((t,y)=>e.jsxs(M,{className:"last:border-none",children:[e.jsx(f,{children:e.jsxs("div",{className:"group/link inline-flex flex-col items-start gap-px",children:[t.post_id&&t.attribution_type==="post"?e.jsx(me,{className:"h-auto whitespace-normal p-0 text-left font-medium leading-tight hover:!underline",title:"View post analytics",variant:"link",onClick:ta(t.attribution_url,t.post_id,p.url||"",g,t.attribution_type),children:t.title}):e.jsx("span",{className:"font-medium",children:t.title}),t.published_at&&xe&&new Date(t.published_at).getTime()>0&&e.jsxs("span",{className:"text-muted-foreground",children:["Published on ",xe(t.published_at)]})]})}),e.jsxs(f,{className:"text-right font-mono text-sm",children:[t.free_members>0&&"+",c(t.free_members)]}),N?.paidMembersEnabled&&e.jsxs(e.Fragment,{children:[e.jsxs(f,{className:"text-right font-mono text-sm",children:[t.paid_members>0&&"+",c(t.paid_members)]}),e.jsxs(f,{className:"text-right font-mono text-sm",children:[t.mrr>0&&"+",B,c(K(t.mrr))]})]})]},`${x}-${t.post_id||`${t.title}-${y}`}`)):e.jsx(M,{className:"border-none",children:e.jsx(f,{className:"py-12 group-hover:!bg-transparent",colSpan:N?.paidMembersEnabled?4:2,children:e.jsx(pe,{description:"Try adjusting your date range to see more data.",title:`No conversions ${se(l)}`,children:e.jsx(xa,{strokeWidth:1.5})})})}):e.jsx(M,{className:"last:border-none",children:e.jsx(f,{className:"border-none py-12 group-hover:!bg-transparent",colSpan:N?.paidMembersEnabled?4:2,children:e.jsx(we,{})})})})]})})]})]})]})};export{as as default};