ghost 6.57.1 → 6.58.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/LICENSE +22 -0
- package/bin/validate-adapters.js +1 -5
- package/components/ghost-storage-base-3.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
- package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-redirects-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-route-settings-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-scheduling-0.2.2.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.2.tgz +0 -0
- package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
- package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
- package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
- package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
- package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
- package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
- package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
- package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
- package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
- package/components/tryghost-nql-string-0.0.0.tgz +0 -0
- package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
- package/core/boot.js +35 -3
- package/core/built/admin/assets/{about-BNojRaxf.js → about-B_BvSyLF.js} +1 -1
- package/core/built/admin/assets/{account-migration-DMS8JsM-.js → account-migration-oJUGxnzT.js} +1 -1
- package/core/built/admin/assets/activitypub/{account-migration-DHFbePl6.js → account-migration-BpDeIF3G.js} +8 -8
- package/core/built/admin/assets/activitypub/activitypub.js +4 -4
- package/core/built/admin/assets/activitypub/{avatar-CT4tS2_S.js → avatar-B0SpBPVL.js} +3 -3
- package/core/built/admin/assets/activitypub/{avatar-flipboard-ByYWKipo.js → avatar-flipboard-DKt1LGcE.js} +3 -3
- package/core/built/admin/assets/activitypub/{bluesky-sharing-srVnSHDz.js → bluesky-sharing-aPMtrS3L.js} +10 -10
- package/core/built/admin/assets/activitypub/{chunk-KS7C4IRE-D4HEcEwi.js → chunk-KS7C4IRE-CnTrsgmM.js} +26 -15
- package/core/built/admin/assets/activitypub/{content-formatters-C2sos5Ht.js → content-formatters-BORfuA9G.js} +318 -284
- package/core/built/admin/assets/activitypub/{copy-B1UBTOoZ.js → copy-D-YvNi2E.js} +2 -2
- package/core/built/admin/assets/activitypub/{dist-MPsb2WZ1.js → dist-Dqggkccr.js} +5 -5
- package/core/built/admin/assets/activitypub/{domain-DzcM9Dzo.js → domain-CPdiB27_.js} +10 -10
- package/core/built/admin/assets/activitypub/{edit-profile-CsQ_4xAk.js → edit-profile-BY2PawIe.js} +7 -7
- package/core/built/admin/assets/activitypub/{explore-CJe0DZBK.js → explore-Sp9bgAwq.js} +11 -11
- package/core/built/admin/assets/activitypub/{feed-CKV3qWON.js → feed-BjtF4ohL.js} +10 -10
- package/core/built/admin/assets/activitypub/{field-DckHfDJf.js → field-BDOYVTg6.js} +4 -4
- package/core/built/admin/assets/activitypub/{hash-Dlp8RM55.js → hash-DqXYHgzG.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-CsPy4R0M.js → inbox-CZ7IOAMn.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-DAsjzUUe.js → inbox-z1o2j1Tb.js} +11 -11
- package/core/built/admin/assets/activitypub/{label-DWyo9E5T.js → label-1jhN-qhD.js} +4 -4
- package/core/built/admin/assets/activitypub/layout-BRMezuty.js +1 -0
- package/core/built/admin/assets/activitypub/{moderation-B0Inc03M.js → moderation-CZudJi8N.js} +9 -9
- package/core/built/admin/assets/activitypub/{note-CSE54lER.js → note-nr_m_5yb.js} +8 -8
- package/core/built/admin/assets/activitypub/{notifications-RSwbKqdh.js → notifications-BdcyivbT.js} +10 -10
- package/core/built/admin/assets/activitypub/{onboarding-BFDkzeR2.js → onboarding-B4kwav9u.js} +2 -2
- package/core/built/admin/assets/activitypub/{onboarding-D6rcBdPe.js → onboarding-DZNElJYP.js} +3 -3
- package/core/built/admin/assets/activitypub/{preferences-CE231n2_.js → preferences-CNqy1x9C.js} +13 -13
- package/core/built/admin/assets/activitypub/{profile-aaQ1j1Eo.js → profile-DlY4rhbO.js} +15 -15
- package/core/built/admin/assets/activitypub/{reply-Cjb0Vs3m.js → reply-DASIN0Ec.js} +2 -2
- package/core/built/admin/assets/activitypub/{routes-Djb0mc9k.js → routes-CEHdEZzS.js} +31 -31
- package/core/built/admin/assets/activitypub/{separator-D8pROI5n.js → separator-B3k35sUV.js} +4 -4
- package/core/built/admin/assets/activitypub/{settings-DMc32IQl.js → settings-CrSV1cux.js} +6 -6
- package/core/built/admin/assets/activitypub/{site-DVIcsohX.js → site-CtBUCPBz.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-1-9Yey9usF.js → step-1-D9jGWyAy.js} +7 -7
- package/core/built/admin/assets/activitypub/{step-2-DdYmKRXV.js → step-2-Jz_enuo9.js} +7 -7
- package/core/built/admin/assets/activitypub/{step-3-hdSkcjZU.js → step-3-KpUqpGWi.js} +12 -12
- package/core/built/admin/assets/activitypub/{tabs-CUqseYzQ.js → tabs-DvlsxTCI.js} +7 -7
- package/core/built/admin/assets/activitypub/{topic-filter-Coni6OXM.js → topic-filter-CIN1E2jg.js} +4 -4
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-MeHTPMQv.js → use-activity-pub-queries-CATFd6YV.js} +4 -4
- package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-B046AM38.js → use-navigate-with-base-path-iCkcbMGk.js} +2 -2
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-1AO-Xob6.js → use-reply-chain-data-DJ0vhA8V.js} +6 -6
- package/core/built/admin/assets/activitypub/{users-BLeiOTHc.js → users-sgJ6GNZX.js} +12 -11
- package/core/built/admin/assets/activitypub/{x-BRfRYd16.js → x-Cy2jUiYM.js} +2 -2
- package/core/built/admin/assets/add-integration-modal-BW23PDYs.js +1 -0
- package/core/built/admin/assets/add-newsletter-modal-M0ls8BKO.js +1 -0
- package/core/built/admin/assets/{add-recommendation-modal-D-3LOrdd.js → add-recommendation-modal-B0NeBMzl.js} +1 -1
- package/core/built/admin/assets/{analytics-DTIMRhWw.js → analytics-BC2oR8ay.js} +1 -1
- package/core/built/admin/assets/announcement-bar-modal-pXBqjQE_.js +1 -0
- package/core/built/admin/assets/{api-keys-_iCT4dxr.js → api-keys-BgKr003d.js} +1 -1
- package/core/built/admin/assets/{api-keys-Dx4NeNpK.js → api-keys-Df6uv1dT.js} +1 -1
- package/core/built/admin/assets/{audience-DkknNqhZ.js → audience-BY8od8If.js} +1 -1
- package/core/built/admin/assets/{automated-emails-PayPCT8L.js → automated-emails-28c2Lbb3.js} +1 -1
- package/core/built/admin/assets/{automations-DvSU7QhW.js → automations-DCs6Wady.js} +1 -1
- package/core/built/admin/assets/{automations-162q5HjL.js → automations-Dzp_QnON.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-yZ9A_jL8.js → bluesky-sharing-D0P42Cws.js} +1 -1
- package/core/built/admin/assets/{breadcrumb-CjOH7LCU.js → breadcrumb-MTj_cKLb.js} +1 -1
- package/core/built/admin/assets/card-CiiE7QfM.js +1 -0
- package/core/built/admin/assets/{chart-helpers-DGxvWnBT.js → chart-helpers-DcO3k_vA.js} +1 -1
- package/core/built/admin/assets/{checkbox-BSUcnNq_.js → checkbox-LmClhqcS.js} +1 -1
- package/core/built/admin/assets/{chunk.424.4a27628efdade15c2dab.js → chunk.408.1a258af360eb8d905508.js} +40 -37
- package/core/built/admin/assets/{chunk.571.40f093ed6d883993714e.js → chunk.492.a9da46ca956b10116774.js} +1342 -1342
- package/core/built/admin/assets/{chunk.571.40f093ed6d883993714e.js.LICENSE.txt → chunk.492.a9da46ca956b10116774.js.LICENSE.txt} +1 -1
- package/core/built/admin/assets/chunk.524.4c693c3a00ac91df34fa.js +25 -0
- package/core/built/admin/assets/chunk.582.20b600e329e58d12d7c2.js +27 -0
- package/core/built/admin/assets/code-editor-view-DqTOUnbM.js +1 -0
- package/core/built/admin/assets/code-editor-view-bA0lfxUL.js +1 -0
- package/core/built/admin/assets/{debounce-Cx5B_9OI.js → color-picker-CBlJMv3y.js} +2 -2
- package/core/built/admin/assets/color-picker-field-Cv9GOJQZ.js +1 -0
- package/core/built/admin/assets/{combobox-5rdgDrDV.js → combobox-BbPJzjCp.js} +1 -1
- package/core/built/admin/assets/command-BrhXIlDr.js +1 -0
- package/core/built/admin/assets/comments-Cu4rD1aJ.js +1 -0
- package/core/built/admin/assets/confirmation-provider-BEdrnHns.js +1 -0
- package/core/built/admin/assets/{content-api-modal-BtW4Z1-1.js → content-api-modal-BOFWRUkC.js} +1 -1
- package/core/built/admin/assets/{copy-field-CEp_XieW.js → copy-field-8biQvNMD.js} +1 -1
- package/core/built/admin/assets/custom-field-type-option-CNhAgHbJ.js +1 -0
- package/core/built/admin/assets/custom-integration-modal-CrGOI8IB.js +1 -0
- package/core/built/admin/assets/{date-range-select-B3Ij1Rqg.js → date-range-select-Bsh4gIek.js} +1 -1
- package/core/built/admin/assets/debounce-pscB46sW.js +1 -0
- package/core/built/admin/assets/design-and-theme-modal-DWZguwWX.js +23 -0
- package/core/built/admin/assets/{dirty-confirm-dialog-YE9L21gY.js → dirty-confirm-dialog-DmdMpgyN.js} +1 -1
- package/core/built/admin/assets/{disabled-sources-indicator-uIzbWL7K.js → disabled-sources-indicator-BLnmyWgt.js} +1 -1
- package/core/built/admin/assets/dist-4m6pHdc0.js +23 -0
- package/core/built/admin/assets/{dist-DCk0UkGx.js → dist-B6bJuxL3.js} +1 -1
- package/core/built/admin/assets/{dist-CbHbGtQ-.js → dist-BtaTA7Ii.js} +1 -1
- package/core/built/admin/assets/{dist-Q1p9iXwH.js → dist-CZgIBXQN.js} +1 -1
- package/core/built/admin/assets/dist-CiHx7vA5.js +6 -0
- package/core/built/admin/assets/{dist-ARN6XTcR.js → dist-ECAUrdGc.js} +1 -1
- package/core/built/admin/assets/dist-Z97pCNqS.js +11 -0
- package/core/built/admin/assets/{dist-t6AXpf_4.js → dist-zwwGt8Yf.js} +1 -1
- package/core/built/admin/assets/{domain-DzrOAPY8.js → domain-Dp9TRrFp.js} +1 -1
- package/core/built/admin/assets/{dropzone-CzhP33wa.js → dropzone-B21Entqz.js} +1 -1
- package/core/built/admin/assets/{edit-profile-oufs4R4n.js → edit-profile-DG6lpMsr.js} +1 -1
- package/core/built/admin/assets/editor-CPQOrhrn.js +8 -0
- package/core/built/admin/assets/{editor-DtxX27Jz.css → editor-DLioOiRN.css} +1 -1
- package/core/built/admin/assets/{embed-signup-form-modal-Ch3s6lqA.js → embed-signup-form-modal-CgWniDha.js} +2 -2
- package/core/built/admin/assets/esm-CXo5SEPy.js +2 -0
- package/core/built/admin/assets/{explore-CA-R01Br.js → explore-C3rzONJv.js} +1 -1
- package/core/built/admin/assets/{feed-ClC8_Gld.js → feed-DpUwS1cU.js} +1 -1
- package/core/built/admin/assets/{field-B3OPenbP.js → field-BQqLTgHM.js} +1 -1
- package/core/built/admin/assets/{filter-sources-CiPLnG9A.js → filter-sources-FgqoUIL7.js} +1 -1
- package/core/built/admin/assets/{filters-yFvybRMe.js → filters-D0uIMD8n.js} +1 -1
- package/core/built/admin/assets/filters-DZJT29GW.js +1 -0
- package/core/built/admin/assets/{first-promoter-modal-BC0UpYCD.js → first-promoter-modal-DJhQQheG.js} +1 -1
- package/core/built/admin/assets/framework-provider-CFLwK5uS.js +4 -0
- package/core/built/admin/assets/{ghost-d38c30b866e59f2e06a357b5eb844fe5.css → ghost-68f447a1796b93a1f128b649bac8506d.css} +1 -1
- package/core/built/admin/assets/{ghost-d683fbeb945b13155ea669caa5d8db41.js → ghost-ba408063a5922b458b4a8f216cf23251.js} +124 -342
- package/core/built/admin/assets/{ghost-dark-1bffd5099ba7a749303133efacf8480b.css → ghost-dark-28ae4899c92022857f3584694bcb50ef.css} +1 -1
- package/core/built/admin/assets/{gift-link-modal-BKRuqo-k.js → gift-link-modal-sdFLjND9.js} +1 -1
- package/core/built/admin/assets/{gift-links-CVuqLhsZ.js → gift-links-D7BJ9qfe.js} +1 -1
- package/core/built/admin/assets/{global-data-provider-RzW6Bnlf.js → global-data-provider-CixmTX00.js} +1 -1
- package/core/built/admin/assets/{growth-ClNAldfL.js → growth-0YYkBEeS.js} +1 -1
- package/core/built/admin/assets/{growth-Dz8OSG06.js → growth-DpjAPeQT.js} +2 -2
- package/core/built/admin/assets/{history-modal-DIVuQ5Ct.js → history-modal-BWJ4-cJ0.js} +1 -1
- package/core/built/admin/assets/{hooks-D6EE7BIt.js → hooks-CJepWnbB.js} +1 -1
- package/core/built/admin/assets/{html-field-CVZ2sMxw.js → html-field-C-oa5DEl.js} +1 -1
- package/core/built/admin/assets/{iframe-buffering-e8vH4-Qn.js → iframe-buffering-Ba9sDpi2.js} +1 -1
- package/core/built/admin/assets/{images-Ok8FFJ3A.js → images-3cQgwfTD.js} +1 -1
- package/core/built/admin/assets/{inbox-CMUVI6qb.js → inbox-Dz_JblyJ.js} +6 -6
- package/core/built/admin/assets/index-BOJzlYiz.js +67 -0
- package/core/built/admin/assets/index-Bid6LAyc.css +1 -0
- package/core/built/admin/assets/{input-group-2XU-iuh_.js → input-group-DpogNUIt.js} +1 -1
- package/core/built/admin/assets/{integrations-BT6_iJvu.js → integrations-B9yYgci5.js} +1 -1
- package/core/built/admin/assets/{invite-user-modal-DrZ7xxrZ.js → invite-user-modal-DCiQSiuD.js} +1 -1
- package/core/built/admin/assets/{koenig-editor-base-BPj4S760.js → koenig-editor-base-BApy8Q7C.js} +1 -1
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +8328 -8294
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +84 -84
- package/core/built/admin/assets/{koenig-lexical-Cdjv-m3_.js → koenig-lexical-2KuqRwZI.js} +33 -33
- package/core/built/admin/assets/{kpi-card-J8Mj1sDX.js → kpi-card-Ck3tT2Wg.js} +1 -1
- package/core/built/admin/assets/{kpi-card-awos0BMH.js → kpi-card-DDIxptaS.js} +1 -1
- package/core/built/admin/assets/{kpi-helpers-SEhvH-8E.js → kpi-helpers-ssbuy-hD.js} +1 -1
- package/core/built/admin/assets/{kpi-tabs-R6BjsKhd.js → kpi-tabs-BqoIM6bI.js} +1 -1
- package/core/built/admin/assets/{label-BMC3dzLI.js → label-DodDsMzn.js} +1 -1
- package/core/built/admin/assets/label-picker-Cvvbmzb5.js +1 -0
- package/core/built/admin/assets/{labels-DAPjKPy2.js → labels-DqvSR6JF.js} +1 -1
- package/core/built/admin/assets/layout-DkkGyev2.js +1 -0
- package/core/built/admin/assets/limit-service-BhiEvqcP.js +20 -0
- package/core/built/admin/assets/{link-helpers-Bzkk68GD.js → link-helpers-kpbU8TWh.js} +1 -1
- package/core/built/admin/assets/luxon-D1RVjjpq.js +1 -0
- package/core/built/admin/assets/member-custom-fields-CvGcpaiW.js +1 -0
- package/core/built/admin/assets/member-detail-CMCMZ47_.js +1 -0
- package/core/built/admin/assets/members-sRl6fNfq.js +11 -0
- package/core/built/admin/assets/{moderation-mPjYHgZW.js → moderation-KhKwGqI1.js} +1 -1
- package/core/built/admin/assets/{multi-select-combobox-CsoyHAiX.js → multi-select-combobox-nhCff0_K.js} +1 -1
- package/core/built/admin/assets/{navigation-modal-D_c0badj.js → navigation-modal-MDJExWDJ.js} +1 -1
- package/core/built/admin/assets/newsletter-BIBHumfV.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-CfjBMH3v.js +1 -0
- package/core/built/admin/assets/{newsletter-emails-B-OLfrvr.js → newsletter-emails-ClDL-7dA.js} +1 -1
- package/core/built/admin/assets/newsletters-CBe-IPzK.js +1 -0
- package/core/built/admin/assets/{newsletters-Du0lzskS.js → newsletters-ILsexy-5.js} +1 -1
- package/core/built/admin/assets/{note-CSVsUKBm.js → note-HnNUOt4d.js} +1 -1
- package/core/built/admin/assets/{notifications-DV9FRtDw.js → notifications-Cj5e-258.js} +1 -1
- package/core/built/admin/assets/nql-lang-CaWrLesS.js +19 -0
- package/core/built/admin/assets/{offers-Um6ab71O.js → offers-DMxebaoK.js} +1 -1
- package/core/built/admin/assets/offers-container-modal-BHwHtixC.js +1 -0
- package/core/built/admin/assets/{onboarding-route--jL5KLPD.js → onboarding-route-D_4jp7Nq.js} +1 -1
- package/core/built/admin/assets/overview-CezDdg-F.js +1 -0
- package/core/built/admin/assets/overview-D5mM51Lj.js +1 -0
- package/core/built/admin/assets/{page-header-DAvDYKO9.js → page-header-VLPJfj_d.js} +1 -1
- package/core/built/admin/assets/{pages-BVMnpI2O.js → pages-Gchxp5c7.js} +1 -1
- package/core/built/admin/assets/{pintura-modal-jiUCxX0Q.js → pintura-modal-BXXJ8Iaa.js} +1 -1
- package/core/built/admin/assets/{portal-frame-D4D4nEO6.js → portal-frame-BLCvF8f-.js} +1 -1
- package/core/built/admin/assets/portal-modal-DN80tAcy.js +1 -0
- package/core/built/admin/assets/{post-analytics-BhAtiFJp.js → post-analytics-Gv81eN_g.js} +1 -1
- package/core/built/admin/assets/post-analytics-header-_ydSY8qO.js +1 -0
- package/core/built/admin/assets/{post-analytics-provider-DGg0FUqs.js → post-analytics-provider-O2YjZMhN.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-DtFAC132.js → post-share-modal-CzYak_a5.js} +1 -1
- package/core/built/admin/assets/{posts-CxG7v0-M.js → posts-DgcUi2rc.js} +1 -1
- package/core/built/admin/assets/preferences-gneLb6LV.js +5 -0
- package/core/built/admin/assets/{preview-modal-DctYx20m.js → preview-modal-Bkq-tgVm.js} +1 -1
- package/core/built/admin/assets/profile-CzXmCNTC.js +1 -0
- package/core/built/admin/assets/{radio-group-CI5_Kf_d.js → radio-group-Dsq5ZEbV.js} +1 -1
- package/core/built/admin/assets/{referrers-B9QDAfYm.js → referrers-C3a2K8qB.js} +1 -1
- package/core/built/admin/assets/{router-provider-DSQfprxH.js → router-provider-CkB_ArLF.js} +1 -1
- package/core/built/admin/assets/{select-CkXqNJDJ.js → select-xuZAuDyS.js} +1 -1
- package/core/built/admin/assets/{settings-ZCj-W56o.js → settings-Ct8pabhr.js} +1 -1
- package/core/built/admin/assets/settings-KSWWQanQ.js +4 -0
- package/core/built/admin/assets/{settings-breadcrumbs-DIq31FwA.js → settings-breadcrumbs-DbPGu-Tu.js} +1 -1
- package/core/built/admin/assets/{share-modal-BNj14g79.js → share-modal-CdiUx9WM.js} +1 -1
- package/core/built/admin/assets/{slack-modal-C6SpMQ-q.js → slack-modal-BP--Z3jE.js} +1 -1
- package/core/built/admin/assets/{sort-button-B-k54ow2.js → sort-button-CjfKdlsL.js} +1 -1
- package/core/built/admin/assets/{source-icon-Cej3sZM6.js → source-icon-DHj1h6Ts.js} +1 -1
- package/core/built/admin/assets/{stats-B2KW8E2y.js → stats-C615kulJ.js} +1 -1
- package/core/built/admin/assets/{stats-view-CVzU2-p5.js → stats-view-BSMRdYiN.js} +1 -1
- package/core/built/admin/assets/{step-1-Dbn1iIMU.js → step-1-pSdGYtIF.js} +1 -1
- package/core/built/admin/assets/{step-2-BahnSuN6.js → step-2-T9Uy4eBD.js} +1 -1
- package/core/built/admin/assets/{step-3-CW04e2ZJ.js → step-3-D4uXe_XG.js} +2 -2
- package/core/built/admin/assets/{stripe-button-BkBZqaGG.js → stripe-button-Bh4p6Wud.js} +1 -1
- package/core/built/admin/assets/stripe-connect-modal-C2vTvepi.js +1 -0
- package/core/built/admin/assets/{table-BtLcEi1M.js → table-DghJxZMH.js} +1 -1
- package/core/built/admin/assets/{tabs-BaWRfg8j.js → tabs-l9c7FjzI.js} +1 -1
- package/core/built/admin/assets/tag-detail-DBw_M2-p.js +2 -0
- package/core/built/admin/assets/{tags-BbygUvNB.js → tags-DoWsAG6l.js} +1 -1
- package/core/built/admin/assets/{tags-BwCgmr5v.js → tags-EmEvJN75.js} +1 -1
- package/core/built/admin/assets/{testimonials-modal--bdzppyh.js → testimonials-modal-BZKePE2T.js} +1 -1
- package/core/built/admin/assets/tier-detail-modal-D65pVWsN.js +1 -0
- package/core/built/admin/assets/{tiers-Da6kxHQP.js → tiers-8iTFjJWg.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CVl-Xigr.js → toggle-group-uJnl42w3.js} +1 -1
- package/core/built/admin/assets/{topic-filter-BoRHRbL1.js → topic-filter-BM7hz0kW.js} +1 -1
- package/core/built/admin/assets/transistor-modal-VZOGN3od.js +1 -0
- package/core/built/admin/assets/{unsplash-modal-CixoRAO2.js → unsplash-modal-CKGfACxF.js} +1 -1
- package/core/built/admin/assets/{use-analytics-data-BiWvcf1u.js → use-analytics-data-IxJcSjc9.js} +1 -1
- package/core/built/admin/assets/use-check-theme-limit-error-CGp3CGT5.js +1 -0
- package/core/built/admin/assets/use-feature-flag-CSq2Lwzt.js +1 -0
- package/core/built/admin/assets/use-filter-params-0hcJJuEJ.js +1 -0
- package/core/built/admin/assets/{use-filterable-api-iMpDZBxD.js → use-filterable-api-CQBtVG-l.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-Dom8xVzo.js → use-growth-stats-1NW-8eEZ.js} +1 -1
- package/core/built/admin/assets/use-limiter-ffwpsZPp.js +2 -0
- package/core/built/admin/assets/{use-pintura-config-Bj4QmiVk.js → use-pintura-config-BjFChXV1.js} +1 -1
- package/core/built/admin/assets/{use-pintura-editor-DvrslmPE.js → use-pintura-editor-Cb41oJyL.js} +1 -1
- package/core/built/admin/assets/{use-post-referrers-pxIHTXFs.js → use-post-referrers-Dp1BnTAK.js} +1 -1
- package/core/built/admin/assets/{use-reply-chain-data-CmFe0N6F.js → use-reply-chain-data-C0ZUTkfk.js} +1 -1
- package/core/built/admin/assets/{use-setting-group-Cmp_sy-d.js → use-setting-group-Bx8M6FL2.js} +1 -1
- package/core/built/admin/assets/{use-settings-navigation-BmROPrls.js → use-settings-navigation-BOZcat_V.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-D5rL3YwO.js → use-simple-pagination-DsEGSJhe.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-query-DP2dMaq7.js → use-tinybird-query-Ci_DiPkX.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-DrK_skPQ.js → use-tinybird-token-CsUwc722.js} +1 -1
- package/core/built/admin/assets/use-upgrade-route-B3_DUiuT.js +1 -0
- package/core/built/admin/assets/{use-url-input-ChrUZBFf.js → use-url-input-BEZJpVgN.js} +2 -2
- package/core/built/admin/assets/user-detail-modal-595z1N5r.js +1 -0
- package/core/built/admin/assets/{users-B6hIds6n.js → users-DmGMPfw7.js} +1 -1
- package/core/built/admin/assets/virtual-list-D5ugXyZY.js +1 -0
- package/core/built/admin/assets/{web-D71mjB2r.js → web-CAta3lRE.js} +1 -1
- package/core/built/admin/assets/web-Ds9_wWJK.js +2 -0
- package/core/built/admin/assets/zapier-modal-CcfDZY53.js +1 -0
- package/core/built/admin/index.html +12 -12
- package/core/frontend/apps/private-blogging/lib/middleware.js +5 -58
- package/core/frontend/helpers/ghost_head.js +52 -0
- package/core/frontend/meta/asset-url.js +20 -9
- package/core/frontend/public/cards.manifest.json +1 -0
- package/core/frontend/public/ghost-stats.min.js +1 -1
- package/core/frontend/services/assets-minification/card-assets.js +121 -46
- package/core/frontend/services/assets-minification/index.js +13 -4
- package/core/frontend/services/data/fetch-data.js +7 -14
- package/core/frontend/services/llms/service.js +27 -6
- package/core/frontend/services/proxy.js +1 -0
- package/core/frontend/services/routing/api-adapter.js +11 -5
- package/core/frontend/services/routing/collection-router.js +1 -2
- package/core/frontend/services/routing/controllers/entry/markdown.js +63 -5
- package/core/frontend/services/routing/controllers/entry.js +1 -1
- package/core/frontend/services/routing/controllers/previews.js +0 -3
- package/core/frontend/services/routing/events.js +2 -1
- package/core/frontend/services/routing/parent-router.js +0 -22
- package/core/frontend/services/routing/router-manager.js +2 -2
- package/core/frontend/services/routing/static-pages-router.js +0 -1
- package/core/frontend/services/sitemap/handler.js +3 -4
- package/core/frontend/services/sitemap/site-map-manager.js +1 -2
- package/core/frontend/services/theme-engine/i18n/i18n.js +0 -33
- package/core/frontend/web/middleware/llms-discovery.js +2 -2
- package/core/frontend/web/routers/serve-public-file.js +33 -3
- package/core/frontend/web/site.js +5 -4
- package/core/server/adapters/jobs/InMemoryJobsBackend.js +113 -0
- package/core/server/adapters/redirects/S3RedirectsStore.js +33 -13
- package/core/server/adapters/route-settings/S3RouteSettingsStore.js +33 -13
- package/core/server/adapters/scheduling/scheduling-default.js +6 -7
- package/core/server/adapters/storage/LocalStorageBase.js +1 -3
- package/core/server/api/endpoints/index.js +0 -4
- package/core/server/api/endpoints/member-custom-fields.js +15 -4
- package/core/server/api/endpoints/pages.js +3 -11
- package/core/server/api/endpoints/posts.js +3 -11
- package/core/server/api/endpoints/utils/api-filter-utils.js +15 -1
- package/core/server/api/endpoints/utils/serializers/input/settings.js +4 -0
- package/core/server/api/endpoints/utils/serializers/output/index.js +0 -4
- package/core/server/api/endpoints/utils/serializers/output/mappers/email-batches.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/mappers/snippets.js +0 -1
- package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.js +1 -0
- package/core/server/data/exporter/table-lists.js +4 -1
- package/core/server/data/migrations/utils/schema.js +5 -3
- package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +19 -7
- package/core/server/data/migrations/versions/6.58/2026-08-10-08-20-50-add-machine-payments-settings.js +41 -0
- package/core/server/data/migrations/versions/6.58/2026-08-10-08-21-00-add-machine-payment-events-table.js +18 -0
- package/core/server/data/migrations/versions/6.58/2026-08-10-15-24-09-reset-custom-field-definitions-for-underscored-keys.js +66 -0
- package/core/server/data/migrations/versions/6.58/2026-08-11-10-00-00-swap-custom-field-values-to-key-fk.js +65 -0
- package/core/server/data/migrations/versions/6.58/2026-08-11-10-34-25-remove-legacy-explore-integration.js +131 -0
- package/core/server/data/migrations/versions/6.58/2026-08-11-16-00-00-add-sort-order-to-members-custom-fields.js +13 -0
- package/core/server/data/migrations/versions/6.58/2026-08-11-21-22-48-rename-email-batches-provider-id.js +8 -0
- package/core/server/data/migrations/versions/6.58/2026-08-13-16-07-33-add-automation-runs-automation-id-created-at-index.js +28 -0
- package/core/server/data/schema/README.md +87 -0
- package/core/server/data/schema/commands.js +5 -2
- package/core/server/data/schema/default-settings/default-settings.json +27 -0
- package/core/server/data/schema/fixtures/fixtures.json +0 -21
- package/core/server/data/schema/schema.js +37 -9
- package/core/server/data/seeders/data-generator.js +3 -1
- package/core/server/data/seeders/importers/automation-action-edges-importer.js +38 -0
- package/core/server/data/seeders/importers/automation-action-revisions-importer.js +139 -0
- package/core/server/data/seeders/importers/automation-actions-importer.js +84 -0
- package/core/server/data/seeders/importers/automation-run-steps-importer.js +134 -0
- package/core/server/data/seeders/importers/automation-runs-importer.js +97 -0
- package/core/server/data/seeders/importers/automations-importer.js +78 -0
- package/core/server/data/seeders/importers/benefits-importer.js +1 -1
- package/core/server/data/seeders/importers/comment-reports-importer.js +5 -5
- package/core/server/data/seeders/importers/comments-importer.js +6 -6
- package/core/server/data/seeders/importers/email-batches-importer.js +9 -8
- package/core/server/data/seeders/importers/email-recipient-failures-importer.js +1 -1
- package/core/server/data/seeders/importers/email-recipients-importer.js +12 -12
- package/core/server/data/seeders/importers/emails-importer.js +7 -7
- package/core/server/data/seeders/importers/index.js +6 -0
- package/core/server/data/seeders/importers/labels-importer.js +4 -4
- package/core/server/data/seeders/importers/members-click-events-importer.js +4 -4
- package/core/server/data/seeders/importers/members-created-events-importer.js +5 -5
- package/core/server/data/seeders/importers/members-feedback-importer.js +7 -7
- package/core/server/data/seeders/importers/members-importer.js +5 -5
- package/core/server/data/seeders/importers/members-labels-importer.js +1 -1
- package/core/server/data/seeders/importers/members-login-events-importer.js +4 -4
- package/core/server/data/seeders/importers/members-newsletters-importer.js +1 -1
- package/core/server/data/seeders/importers/members-paid-subscription-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-products-importer.js +3 -3
- package/core/server/data/seeders/importers/members-status-events-importer.js +4 -4
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +3 -3
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +8 -8
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +3 -3
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +4 -4
- package/core/server/data/seeders/importers/newsletters-importer.js +1 -1
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +6 -6
- package/core/server/data/seeders/importers/offers-importer.js +4 -4
- package/core/server/data/seeders/importers/posts-authors-importer.js +1 -1
- package/core/server/data/seeders/importers/posts-importer.js +5 -5
- package/core/server/data/seeders/importers/posts-products-importer.js +1 -1
- package/core/server/data/seeders/importers/posts-tags-importer.js +1 -1
- package/core/server/data/seeders/importers/products-benefits-importer.js +1 -1
- package/core/server/data/seeders/importers/products-importer.js +1 -1
- package/core/server/data/seeders/importers/recommendation-click-events-importer.js +1 -1
- package/core/server/data/seeders/importers/recommendation-subscribe-events-importer.js +1 -1
- package/core/server/data/seeders/importers/recommendations-importer.js +1 -1
- package/core/server/data/seeders/importers/redirects-importer.js +1 -1
- package/core/server/data/seeders/importers/roles-users-importer.js +1 -1
- package/core/server/data/seeders/importers/stripe-prices-importer.js +1 -1
- package/core/server/data/seeders/importers/stripe-products-importer.js +1 -1
- package/core/server/data/seeders/importers/table-importer.js +92 -91
- package/core/server/data/seeders/importers/tags-importer.js +3 -3
- package/core/server/data/seeders/importers/users-importer.js +3 -3
- package/core/server/data/seeders/importers/web-mentions-importer.js +3 -3
- package/core/server/data/seeders/utils/database-date.js +14 -18
- package/core/server/data/seeders/utils/json-importer.js +1 -1
- package/core/server/data/seeders/utils/random.js +8 -7
- package/core/server/data/seeders/utils/topological-sort.js +5 -3
- package/core/server/data/tinybird/ARCHITECTURE.md +1 -2
- package/core/server/models/base/plugins/crud.js +0 -5
- package/core/server/models/index.js +2 -0
- package/core/server/models/machine-payment-event.js +18 -0
- package/core/server/models/member.js +24 -0
- package/core/server/models/settings.js +32 -3
- package/core/server/models/user.js +1 -1
- package/core/server/services/README.md +30 -0
- package/core/server/services/activitypub/activity-pub-service.js +2 -3
- package/core/server/services/adapter-manager/base-classes.js +3 -1
- package/core/server/services/auth/passwordreset.js +47 -51
- package/core/server/services/automations/database-automations-repository.js +19 -3
- package/core/server/services/automations/poll.js +2 -8
- package/core/server/services/comments/comments-service.js +4 -16
- package/core/server/services/comments/index.js +1 -3
- package/core/server/services/email-analytics/email-analytics-service-wrapper.js +68 -119
- package/core/server/services/email-analytics/email-analytics-service.js +73 -229
- package/core/server/services/email-analytics/event-processing-result.js +0 -10
- package/core/server/services/email-analytics/fetch-mailgun-events.js +25 -0
- package/core/server/services/email-analytics/index.js +35 -67
- package/core/server/services/email-analytics/lib/queries.js +88 -51
- package/core/server/services/email-analytics/newsletter-email-analytics-batch-processor.js +4 -1
- package/core/server/services/email-service/batch-sending-service.js +1 -1
- package/core/server/services/email-service/email-event-processor.js +12 -12
- package/core/server/services/email-service/events/email-bounced-event.js +8 -46
- package/core/server/services/email-service/events/email-delivered-event.js +8 -36
- package/core/server/services/email-service/events/email-opened-event.js +8 -36
- package/core/server/services/email-service/events/email-temporary-bounced-event.js +8 -46
- package/core/server/services/email-service/events/email-unsubscribed-event.js +8 -31
- package/core/server/services/email-service/events/spam-complaint-event.js +8 -31
- package/core/server/services/email-service/newsletter-email-event-storage.js +8 -7
- package/core/server/services/email-service/sending-service.js +1 -1
- package/core/server/services/email-suppression-list/mailgun-email-suppression-list.js +2 -2
- package/core/server/services/email-suppression-list/service.js +1 -3
- package/core/server/services/explore-ping/explore-ping-service.js +1 -6
- package/core/server/services/explore-ping/index.js +0 -2
- package/core/server/services/gifts/index.js +109 -3
- package/core/server/services/gifts/jobs/clean-gifts-job.js +1 -1
- package/core/server/services/gifts/jobs/send-gift-reminders-job.js +1 -1
- package/core/server/services/jobs-service/index.js +36 -0
- package/core/server/services/jobs-service/job.js +6 -0
- package/core/server/services/jobs-service/jobs-service.js +91 -0
- package/core/server/services/jobs-service/register-job-handlers.js +6 -0
- package/core/server/services/lib/mailgun-client.js +1 -1
- package/core/server/services/machine-payments/README.md +23 -0
- package/core/server/services/machine-payments/adapters/mpp-adapter.js +195 -0
- package/core/server/services/machine-payments/content-loader.js +89 -0
- package/core/server/services/machine-payments/eligibility.js +6 -0
- package/core/server/services/machine-payments/events/machine-payment-event-repository.js +58 -0
- package/core/server/services/machine-payments/events/machine-payment-event.js +46 -0
- package/core/server/services/machine-payments/index.js +87 -0
- package/core/server/services/machine-payments/pricing.js +54 -0
- package/core/server/services/machine-payments/service.js +275 -0
- package/core/server/services/machine-payments/stripe/deposit-address-store.js +157 -0
- package/core/server/services/machine-payments/stripe/payment-recorder.js +85 -0
- package/core/server/services/machine-payments/stripe/stripe-client-options.js +25 -0
- package/core/server/services/machine-payments/types.js +2 -0
- package/core/server/services/members/import-export/csv/parse.js +9 -1
- package/core/server/services/members/import-export/import/completion-email.js +61 -27
- package/core/server/services/members/import-export/import/email-template.js +28 -15
- package/core/server/services/members/import-export/import/importer.js +99 -51
- package/core/server/services/members/import-export/import/spool.js +1 -1
- package/core/server/services/members/import-export/index.js +24 -1
- package/core/server/services/members/members-api/services/member-bread-service.js +2 -2
- package/core/server/services/members/members-config-provider.js +12 -2
- package/core/server/services/members-custom-fields/actions.js +2 -1
- package/core/server/services/members-custom-fields/definitions-service.js +109 -27
- package/core/server/services/members-custom-fields/filter.js +199 -0
- package/core/server/services/members-custom-fields/key.js +37 -0
- package/core/server/services/members-custom-fields/queries.js +15 -0
- package/core/server/services/members-custom-fields/schema.js +1 -1
- package/core/server/services/members-custom-fields/values-service.js +18 -14
- package/core/server/services/members-events/last-seen-at-updater.js +1 -1
- package/core/server/services/oembed/oembed-service.js +8 -2
- package/core/server/services/permissions/can-this.js +4 -1
- package/core/server/services/posts/posts-service.js +18 -16
- package/core/server/services/public-config/config.js +1 -1
- package/core/server/services/route-settings/dynamic-routing-service.js +2 -0
- package/core/server/services/settings-helpers/settings-helpers.js +0 -1
- package/core/server/services/stats/posts-stats-service.js +0 -2
- package/core/server/services/stripe/stripe-api.js +2 -9
- package/core/server/web/api/endpoints/admin/middleware.js +0 -1
- package/core/server/web/api/endpoints/admin/routes.js +2 -3
- package/core/server/web/comments/routes.js +31 -8
- package/core/shared/config/defaults.json +17 -2
- package/core/shared/config/loader.js +11 -2
- package/core/shared/config/overrides.json +2 -0
- package/core/shared/config/secrets.js +71 -0
- package/core/shared/labs.js +4 -13
- package/core/shared/machine-payments.js +30 -0
- package/core/shared/private-site-access/index.js +68 -0
- package/package.json +48 -43
- package/pnpm-lock.yaml +1412 -1583
- package/pnpm-workspace.yaml +85 -48
- package/bin/validate-adapters.ts +0 -87
- package/components/tryghost-adapter-base-scheduling-0.2.1.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.1.tgz +0 -0
- package/components/tryghost-kg-card-factory-5.2.3.tgz +0 -0
- package/components/tryghost-kg-clean-basic-html-4.3.3.tgz +0 -0
- package/components/tryghost-kg-converters-1.2.4.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.4.tgz +0 -0
- package/components/tryghost-kg-default-nodes-2.1.5.tgz +0 -0
- package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
- package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
- package/components/tryghost-kg-markdown-html-renderer-7.2.3.tgz +0 -0
- package/components/tryghost-kg-utils-1.1.3.tgz +0 -0
- package/content/themes/casper/assets/built/casper.js.map +0 -1
- package/content/themes/casper/assets/built/global.css.map +0 -1
- package/content/themes/casper/assets/built/screen.css.map +0 -1
- package/content/themes/source/assets/built/screen.css.map +0 -1
- package/content/themes/source/assets/built/source.js.map +0 -1
- package/core/built/admin/assets/activitypub/layout-DM_3pqsU.js +0 -1
- package/core/built/admin/assets/add-integration-modal-DU9ghGLS.js +0 -1
- package/core/built/admin/assets/add-newsletter-modal-DFxuQrYu.js +0 -1
- package/core/built/admin/assets/announcement-bar-modal-DGCcezB6.js +0 -1
- package/core/built/admin/assets/card-aUHX0hyR.js +0 -1
- package/core/built/admin/assets/chunk.524.dce1c51e0bc30fb2718e.js +0 -25
- package/core/built/admin/assets/chunk.582.3a430d5c6a744fd475b6.js +0 -27
- package/core/built/admin/assets/code-editor-view-BcyKABrG.js +0 -1
- package/core/built/admin/assets/color-picker-field-8NoSnhNI.js +0 -1
- package/core/built/admin/assets/command-BOYMbZa_.js +0 -1
- package/core/built/admin/assets/comments-BhNM5CYl.js +0 -1
- package/core/built/admin/assets/confirmation-modal-CYD7x3UQ.js +0 -1
- package/core/built/admin/assets/custom-integration-modal-bk3lNEuQ.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-B2xYKS1I.js +0 -23
- package/core/built/admin/assets/dist-Bg8bSvLA.js +0 -6
- package/core/built/admin/assets/dist-BnFdlebk.js +0 -11
- package/core/built/admin/assets/dist-CsvXCJSe.js +0 -23
- package/core/built/admin/assets/editor-BBKrunMK.js +0 -8
- package/core/built/admin/assets/filters-Bz0HsRie.js +0 -1
- package/core/built/admin/assets/framework-provider-CmtnPXIT.js +0 -4
- package/core/built/admin/assets/index-DUXM0NlS.js +0 -67
- package/core/built/admin/assets/index-Ds2iUoF6.css +0 -1
- package/core/built/admin/assets/label-picker-Bnlru5tO.js +0 -1
- package/core/built/admin/assets/layout-yR9rlvEw.js +0 -1
- package/core/built/admin/assets/limit-modal-COmLevuY.js +0 -1
- package/core/built/admin/assets/limit-service-9fwD33lU.js +0 -20
- package/core/built/admin/assets/member-custom-fields-BvFKEpxJ.js +0 -1
- package/core/built/admin/assets/member-detail-CWdPAe3p.js +0 -1
- package/core/built/admin/assets/members-Bnt0ih2R.js +0 -11
- package/core/built/admin/assets/newsletter-DR49NyGS.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-B45pL1pb.js +0 -1
- package/core/built/admin/assets/newsletters-DGs5BaKH.js +0 -1
- package/core/built/admin/assets/nql-lang-B7faUf8D.js +0 -19
- package/core/built/admin/assets/offers-container-modal-B0hFS8nk.js +0 -1
- package/core/built/admin/assets/overview-B-ZPNqMo.js +0 -1
- package/core/built/admin/assets/overview-D96iwoJi.js +0 -1
- package/core/built/admin/assets/portal-modal-BLFdYeDH.js +0 -1
- package/core/built/admin/assets/post-analytics-header-DK27VjJm.js +0 -1
- package/core/built/admin/assets/preferences-CuWLISHa.js +0 -5
- package/core/built/admin/assets/profile-BsKYYtuL.js +0 -1
- package/core/built/admin/assets/settings-B4vM-rgV.js +0 -4
- package/core/built/admin/assets/stripe-connect-modal-CYDDrSJm.js +0 -1
- package/core/built/admin/assets/tag-detail-CmqiC32L.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-BZmAsIy4.js +0 -1
- package/core/built/admin/assets/transistor-modal-CBPDqEGy.js +0 -1
- package/core/built/admin/assets/use-check-theme-limit-error-B14lZukR.js +0 -2
- package/core/built/admin/assets/use-feature-flag-BmJoc5WN.js +0 -1
- package/core/built/admin/assets/use-filter-params-ChoV72Hw.js +0 -1
- package/core/built/admin/assets/use-limiter-Dwg8ivgQ.js +0 -2
- package/core/built/admin/assets/user-detail-modal-XODpOqNC.js +0 -1
- package/core/built/admin/assets/virtual-list-Dnoafqbk.js +0 -1
- package/core/built/admin/assets/web-z71lA1Y3.js +0 -2
- package/core/built/admin/assets/zapier-modal-Bp507Um7.js +0 -1
- package/core/frontend/meta/og-type.ts +0 -13
- package/core/frontend/services/routing/api-adapter.ts +0 -157
- package/core/frontend/services/routing/config.ts +0 -59
- package/core/frontend/services/routing/controllers/entry/canonical-url.ts +0 -14
- package/core/frontend/services/routing/controllers/entry/gift-links.ts +0 -56
- package/core/frontend/services/routing/controllers/entry/markdown.ts +0 -72
- package/core/frontend/services/routing/controllers/entry.ts +0 -120
- package/core/frontend/services/routing/controllers/rss.ts +0 -66
- package/core/frontend/services/routing/permalink-adapter.ts +0 -10
- package/core/frontend/src/utils/privacy.ts +0 -66
- package/core/server/adapters/redirects/FileStore.ts +0 -113
- package/core/server/adapters/redirects/S3RedirectsStore.ts +0 -185
- package/core/server/adapters/route-settings/FileStore.ts +0 -144
- package/core/server/adapters/route-settings/S3RouteSettingsStore.ts +0 -199
- package/core/server/adapters/route-settings/utils.ts +0 -17
- package/core/server/adapters/scheduling/deps.d.ts +0 -1
- package/core/server/adapters/scheduling/error-capture.ts +0 -91
- package/core/server/adapters/scheduling/scheduling-default.ts +0 -248
- package/core/server/adapters/scheduling/utils.ts +0 -36
- package/core/server/adapters/sso/DefaultSSOAdapter.ts +0 -15
- package/core/server/adapters/storage/LocalFilesStorage.ts +0 -24
- package/core/server/adapters/storage/LocalImagesStorage.ts +0 -24
- package/core/server/adapters/storage/LocalMediaStorage.ts +0 -24
- package/core/server/adapters/storage/LocalStorageBase.ts +0 -342
- package/core/server/adapters/storage/S3Storage.ts +0 -506
- package/core/server/adapters/storage/utils.ts +0 -60
- package/core/server/api/endpoints/automation-action-links.ts +0 -46
- package/core/server/api/endpoints/explore.js +0 -18
- package/core/server/api/endpoints/gift-links.ts +0 -87
- package/core/server/api/endpoints/libraries.d.ts +0 -2
- package/core/server/api/endpoints/member-commenting.ts +0 -92
- package/core/server/api/endpoints/member-custom-fields.ts +0 -106
- package/core/server/api/endpoints/utils/api-filter-utils.ts +0 -22
- package/core/server/api/endpoints/utils/gift-link-access.ts +0 -82
- package/core/server/api/endpoints/utils/public-cache-keys.ts +0 -47
- package/core/server/api/endpoints/utils/serializers/input/member-commenting.ts +0 -29
- package/core/server/api/endpoints/utils/serializers/output/explore.js +0 -11
- package/core/server/api/endpoints/utils/serializers/output/gift-links.ts +0 -21
- package/core/server/api/endpoints/utils/serializers/output/member-commenting.ts +0 -8
- package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.ts +0 -25
- package/core/server/api/endpoints/utils/serializers/output/members.d.ts +0 -20
- package/core/server/api/endpoints/utils/serializers/output/posts-csv-transform.ts +0 -46
- package/core/server/api/endpoints/utils/serializers/output/stream-csv-response.ts +0 -47
- package/core/server/api/endpoints/utils/validate-email-sender-fields.ts +0 -42
- package/core/server/data/importer/email-template.ts +0 -213
- package/core/server/data/seeders/utils/topological-sort.ts +0 -48
- package/core/server/lib/auto-filling-map.ts +0 -23
- package/core/server/lib/bootstrap-socket.ts +0 -114
- package/core/server/lib/case-keys.ts +0 -30
- package/core/server/lib/common/to-plain.ts +0 -25
- package/core/server/lib/db-date.ts +0 -8
- package/core/server/lib/get-inbox-links.ts +0 -276
- package/core/server/lib/post-revisions.ts +0 -152
- package/core/server/lib/soonest-timer.ts +0 -57
- package/core/server/models/base/plugins/bulk-filters.ts +0 -35
- package/core/server/models/role-utils.ts +0 -56
- package/core/server/services/activitypub/activity-pub-service.ts +0 -216
- package/core/server/services/adapter-manager/adapter-manager.ts +0 -253
- package/core/server/services/adapter-manager/adapter-paths.ts +0 -26
- package/core/server/services/adapter-manager/base-classes.ts +0 -22
- package/core/server/services/adapter-manager/index.ts +0 -16
- package/core/server/services/adapter-manager/types.ts +0 -45
- package/core/server/services/adapter-manager/utils.ts +0 -308
- package/core/server/services/auth/reset-authentication.ts +0 -72
- package/core/server/services/automations/automations-api.ts +0 -396
- package/core/server/services/automations/automations-repository.ts +0 -218
- package/core/server/services/automations/constants.ts +0 -4
- package/core/server/services/automations/database-automations-repository.ts +0 -1513
- package/core/server/services/automations/database-date.ts +0 -26
- package/core/server/services/automations/fake-wait-hours-multiplier.ts +0 -12
- package/core/server/services/automations/get-scheduler-idempotency-key.ts +0 -8
- package/core/server/services/automations/mailgun-message-id.ts +0 -27
- package/core/server/services/automations/poll.ts +0 -325
- package/core/server/services/automations/scheduler-poll-time.ts +0 -38
- package/core/server/services/automations/service.ts +0 -131
- package/core/server/services/automations/stale-lock-cutoff.ts +0 -5
- package/core/server/services/comments/email-templates/new-comment-reply.txt.ts +0 -25
- package/core/server/services/comments/email-templates/new-comment.txt.ts +0 -25
- package/core/server/services/comments/email-templates/report.txt.ts +0 -34
- package/core/server/services/custom-redirects/redirect-config-parser.ts +0 -148
- package/core/server/services/custom-redirects/redirects-service.ts +0 -181
- package/core/server/services/custom-redirects/utils.ts +0 -7
- package/core/server/services/donations/donation-bookshelf-repository.ts +0 -63
- package/core/server/services/donations/donation-payment-event.ts +0 -51
- package/core/server/services/email-address/email-address-parser.d.ts +0 -12
- package/core/server/services/email-address/email-address-service.ts +0 -241
- package/core/server/services/email-analytics/automation-email-analytics-batch-processor.ts +0 -130
- package/core/server/services/email-analytics/batch-event-processor.ts +0 -18
- package/core/server/services/email-analytics/email-analytics-provider-mailgun.js +0 -57
- package/core/server/services/email-analytics/event-processing-result.ts +0 -66
- package/core/server/services/email-analytics/events/start-automation-email-analytics-job-event.ts +0 -14
- package/core/server/services/email-analytics/events/start-email-analytics-job-event.ts +0 -15
- package/core/server/services/email-analytics/index.ts +0 -109
- package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.ts +0 -126
- package/core/server/services/email-analytics/lib/queries.ts +0 -341
- package/core/server/services/email-service/domain-warming-service.ts +0 -91
- package/core/server/services/explore/explore-service.js +0 -59
- package/core/server/services/explore/index.js +0 -18
- package/core/server/services/explore-ping/explore-ping-service.ts +0 -198
- package/core/server/services/explore-ping/index.ts +0 -42
- package/core/server/services/files/file-type-utils.ts +0 -56
- package/core/server/services/gift-links/actions.ts +0 -51
- package/core/server/services/gift-links/codec.ts +0 -16
- package/core/server/services/gift-links/index.ts +0 -20
- package/core/server/services/gift-links/models.ts +0 -22
- package/core/server/services/gift-links/schema.ts +0 -33
- package/core/server/services/gift-links/serializers.ts +0 -20
- package/core/server/services/gift-links/service.ts +0 -95
- package/core/server/services/gifts/constants.ts +0 -3
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts +0 -43
- package/core/server/services/gifts/email-templates/gift-reminder.ts +0 -50
- package/core/server/services/gifts/gift-bookshelf-repository.ts +0 -366
- package/core/server/services/gifts/gift-checkout-offer.ts +0 -127
- package/core/server/services/gifts/gift-codec.ts +0 -62
- package/core/server/services/gifts/gift-controller.ts +0 -51
- package/core/server/services/gifts/gift-email-renderer.ts +0 -97
- package/core/server/services/gifts/gift-email-service.ts +0 -158
- package/core/server/services/gifts/gift-reminder-scheduler.ts +0 -107
- package/core/server/services/gifts/gift-schema.ts +0 -39
- package/core/server/services/gifts/gift-service-wrapper.js +0 -142
- package/core/server/services/gifts/gift-service.ts +0 -1034
- package/core/server/services/gifts/gift.ts +0 -234
- package/core/server/services/identity-tokens/identity-token-service.ts +0 -36
- package/core/server/services/indexnow-ping/constants.ts +0 -32
- package/core/server/services/indexnow-ping/index.ts +0 -35
- package/core/server/services/indexnow-ping/indexnow-ping-service.ts +0 -311
- package/core/server/services/internal-keys/index.ts +0 -53
- package/core/server/services/lib/dynamic-redirect-manager.d.ts +0 -20
- package/core/server/services/lib/in-memory-repository.ts +0 -78
- package/core/server/services/lib/member-signup-contexts.ts +0 -22
- package/core/server/services/link-redirection/link-redirect.ts +0 -24
- package/core/server/services/member-welcome-emails/constants.ts +0 -35
- package/core/server/services/members/commenting/index.ts +0 -2
- package/core/server/services/members/commenting/member-commenting-codec.ts +0 -73
- package/core/server/services/members/commenting/member-commenting.ts +0 -69
- package/core/server/services/members/create-paid-member-shim.ts +0 -40
- package/core/server/services/members/import-export/config.ts +0 -34
- package/core/server/services/members/import-export/csv/formula.ts +0 -14
- package/core/server/services/members/import-export/csv/index.ts +0 -3
- package/core/server/services/members/import-export/csv/parse.ts +0 -69
- package/core/server/services/members/import-export/csv/serialize.ts +0 -18
- package/core/server/services/members/import-export/export/exporter.ts +0 -325
- package/core/server/services/members/import-export/import/completion-email.ts +0 -146
- package/core/server/services/members/import-export/import/importer.ts +0 -489
- package/core/server/services/members/import-export/import/reader.ts +0 -33
- package/core/server/services/members/import-export/import/row.ts +0 -56
- package/core/server/services/members/import-export/import/spool.ts +0 -38
- package/core/server/services/members/import-export/index.ts +0 -143
- package/core/server/services/members/index.d.ts +0 -32
- package/core/server/services/members-custom-fields/actions.ts +0 -62
- package/core/server/services/members-custom-fields/codec.ts +0 -13
- package/core/server/services/members-custom-fields/config.ts +0 -38
- package/core/server/services/members-custom-fields/definitions-service.ts +0 -413
- package/core/server/services/members-custom-fields/index.ts +0 -50
- package/core/server/services/members-custom-fields/models.ts +0 -15
- package/core/server/services/members-custom-fields/queries.ts +0 -13
- package/core/server/services/members-custom-fields/schema.ts +0 -71
- package/core/server/services/members-custom-fields/serializers.ts +0 -22
- package/core/server/services/members-custom-fields/storage.ts +0 -122
- package/core/server/services/members-custom-fields/values-service.ts +0 -269
- package/core/server/services/notifications/notification-email.ts +0 -66
- package/core/server/services/notifications/sanitize-email-html.ts +0 -35
- package/core/server/services/post-scheduling/index.ts +0 -13
- package/core/server/services/post-scheduling/post-scheduling.ts +0 -133
- package/core/server/services/recommendations/service/bookshelf-click-event-repository.ts +0 -49
- package/core/server/services/recommendations/service/bookshelf-recommendation-repository.ts +0 -117
- package/core/server/services/recommendations/service/bookshelf-repository.ts +0 -192
- package/core/server/services/recommendations/service/bookshelf-subscribe-event-repository.ts +0 -49
- package/core/server/services/recommendations/service/click-event.ts +0 -32
- package/core/server/services/recommendations/service/in-memory-recommendation-repository.ts +0 -20
- package/core/server/services/recommendations/service/incoming-recommendation-controller.ts +0 -51
- package/core/server/services/recommendations/service/incoming-recommendation-email-renderer.ts +0 -37
- package/core/server/services/recommendations/service/incoming-recommendation-service.ts +0 -159
- package/core/server/services/recommendations/service/index.ts +0 -15
- package/core/server/services/recommendations/service/libraries.d.ts +0 -2
- package/core/server/services/recommendations/service/recommendation-controller.ts +0 -257
- package/core/server/services/recommendations/service/recommendation-metadata-service.ts +0 -132
- package/core/server/services/recommendations/service/recommendation-repository.ts +0 -13
- package/core/server/services/recommendations/service/recommendation-service.ts +0 -285
- package/core/server/services/recommendations/service/recommendation.ts +0 -200
- package/core/server/services/recommendations/service/subscribe-event.ts +0 -32
- package/core/server/services/recommendations/service/unsafe-data.ts +0 -217
- package/core/server/services/recommendations/service/well-known-service.ts +0 -47
- package/core/server/services/remote-flags/index.ts +0 -101
- package/core/server/services/remote-flags/remote-flags-service.ts +0 -236
- package/core/server/services/remote-flags/resolve.ts +0 -108
- package/core/server/services/route-settings/route-settings-parser.ts +0 -455
- package/core/server/services/route-settings/validation-errors.ts +0 -271
- package/core/server/services/route-settings/yaml-parser.d.ts +0 -4
- package/core/server/services/slack-ping/constants.ts +0 -15
- package/core/server/services/slack-ping/index.ts +0 -35
- package/core/server/services/slack-ping/slack-ping-service.ts +0 -295
- package/core/server/services/staff/email-templates/donation.txt.ts +0 -26
- package/core/server/services/staff/email-templates/gift.txt.ts +0 -27
- package/core/server/services/staff/email-templates/new-free-signup.txt.ts +0 -15
- package/core/server/services/staff/email-templates/new-gift-subscription.txt.ts +0 -26
- package/core/server/services/staff/email-templates/new-milestone-received.txt.ts +0 -20
- package/core/server/services/staff/email-templates/new-paid-cancellation.txt.ts +0 -15
- package/core/server/services/staff/email-templates/new-paid-started.txt.ts +0 -15
- package/core/server/services/staff/email-templates/recommendation-received.txt.ts +0 -23
- package/core/server/services/staff/email-templates/types.ts +0 -13
- package/core/server/services/url/lazy-find-resource.ts +0 -104
- package/core/server/services/url/lazy-url-service.ts +0 -647
- package/core/server/services/url/permalink-matcher.ts +0 -119
- package/core/server/services/url/router-filter.ts +0 -80
- package/core/server/services/verification/verification-webhook-service.ts +0 -137
- package/core/shared/config/helpers.ts +0 -133
- package/core/shared/config/index.ts +0 -12
- package/core/shared/config/loader.ts +0 -87
- package/core/shared/config/utils.ts +0 -104
- package/core/shared/errify.ts +0 -31
- package/core/shared/events-ts/index.ts +0 -8
- package/core/shared/events-ts/post-deleted-event.ts +0 -15
- package/core/shared/events-ts/posts-bulk-add-tags-event.ts +0 -13
- package/core/shared/events-ts/posts-bulk-destroyed-event.ts +0 -13
- package/core/shared/events-ts/posts-bulk-featured-event.ts +0 -13
- package/core/shared/events-ts/posts-bulk-unfeatured-event.ts +0 -13
- package/core/shared/events-ts/posts-bulk-unpublished-event.ts +0 -13
- package/core/shared/events-ts/posts-bulk-unscheduled-event.ts +0 -13
- package/core/shared/labs-flag-overrides.ts +0 -35
- package/core/shared/one-at-a-time.ts +0 -47
- package/core/shared/url-utils.ts +0 -20
|
@@ -1,97 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
6
|
exports.init = exports.automations = exports.newsletters = void 0;
|
|
40
|
-
|
|
41
|
-
const email_analytics_service_wrapper_1 = __importDefault(require("./email-analytics-service-wrapper"));
|
|
42
|
-
const config_1 = __importDefault(require("../../../shared/config"));
|
|
7
|
+
const email_analytics_service_wrapper_1 = require("./email-analytics-service-wrapper");
|
|
43
8
|
// @ts-expect-error This module lacks type definitions.
|
|
44
9
|
const newsletter_email_analytics_batch_processor_1 = require("./newsletter-email-analytics-batch-processor");
|
|
45
10
|
// @ts-expect-error This module lacks type definitions.
|
|
46
11
|
const newsletter_email_event_storage_1 = __importDefault(require("../email-service/newsletter-email-event-storage"));
|
|
47
12
|
// @ts-expect-error This module lacks type definitions.
|
|
48
13
|
const email_event_processor_1 = __importDefault(require("../email-service/email-event-processor"));
|
|
49
|
-
// @ts-expect-error This module lacks type definitions.
|
|
50
|
-
const db_1 = __importDefault(require("../../data/db"));
|
|
51
|
-
const members_1 = __importDefault(require("../members"));
|
|
52
|
-
// @ts-expect-error This module lacks type definitions.
|
|
53
|
-
const email_suppression_list_1 = __importDefault(require("../email-suppression-list"));
|
|
54
|
-
// @ts-expect-error This module lacks type definitions.
|
|
55
|
-
const models_1 = require("../../models");
|
|
56
|
-
// @ts-expect-error This module lacks type definitions.
|
|
57
|
-
const domain_events_1 = __importDefault(require("@tryghost/domain-events"));
|
|
58
|
-
// @ts-expect-error This module lacks type definitions.
|
|
59
|
-
const prometheus_client_1 = __importDefault(require("../../../shared/prometheus-client"));
|
|
60
14
|
const queries_1 = require("./lib/queries");
|
|
61
15
|
const start_email_analytics_job_event_1 = require("./events/start-email-analytics-job-event");
|
|
62
16
|
const start_automation_email_analytics_job_event_1 = require("./events/start-automation-email-analytics-job-event");
|
|
63
17
|
const constants_1 = require("../member-welcome-emails/constants");
|
|
64
|
-
const automationsApi = __importStar(require("../automations/automations-api"));
|
|
65
18
|
const automation_email_analytics_batch_processor_1 = require("./automation-email-analytics-batch-processor");
|
|
66
|
-
exports.newsletters = new email_analytics_service_wrapper_1.
|
|
19
|
+
exports.newsletters = new email_analytics_service_wrapper_1.EmailAnalyticsServiceWrapper({
|
|
67
20
|
logName: 'newsletters'
|
|
68
21
|
});
|
|
69
|
-
exports.automations = new email_analytics_service_wrapper_1.
|
|
22
|
+
exports.automations = new email_analytics_service_wrapper_1.EmailAnalyticsServiceWrapper({
|
|
70
23
|
logName: 'automations',
|
|
71
24
|
});
|
|
72
|
-
const init = () => {
|
|
25
|
+
const init = ({ automationsApi, config, db, domainEvents, emailSuppressionList, membersRepository, models: { Email, EmailRecipientFailure, EmailSpamComplaintEvent }, metrics, prometheusClient, settingsCache }) => {
|
|
26
|
+
const queries = new queries_1.Queries(db.knex);
|
|
73
27
|
const newsletterEmailEventProcessor = new email_event_processor_1.default({
|
|
74
|
-
domainEvents
|
|
75
|
-
db
|
|
28
|
+
domainEvents,
|
|
29
|
+
db,
|
|
76
30
|
eventStorage: new newsletter_email_event_storage_1.default({
|
|
77
|
-
|
|
78
|
-
|
|
31
|
+
config,
|
|
32
|
+
db,
|
|
33
|
+
membersRepository,
|
|
79
34
|
models: {
|
|
80
|
-
Email
|
|
81
|
-
EmailRecipientFailure
|
|
82
|
-
EmailSpamComplaintEvent
|
|
35
|
+
Email,
|
|
36
|
+
EmailRecipientFailure,
|
|
37
|
+
EmailSpamComplaintEvent
|
|
83
38
|
},
|
|
84
|
-
emailSuppressionList
|
|
85
|
-
prometheusClient
|
|
39
|
+
emailSuppressionList,
|
|
40
|
+
prometheusClient
|
|
86
41
|
}),
|
|
87
|
-
prometheusClient
|
|
42
|
+
prometheusClient
|
|
88
43
|
});
|
|
89
44
|
const newsletterMailgunTags = ['bulk-email'];
|
|
90
|
-
if (
|
|
91
|
-
newsletterMailgunTags.push(
|
|
45
|
+
if (config.get('bulkEmail:mailgun:tag')) {
|
|
46
|
+
newsletterMailgunTags.push(config.get('bulkEmail:mailgun:tag'));
|
|
92
47
|
}
|
|
48
|
+
prometheusClient?.registerCounter({
|
|
49
|
+
name: newsletter_email_analytics_batch_processor_1.AGGREGATE_MEMBER_STATS_METRIC_NAME,
|
|
50
|
+
help: 'Count of member stats aggregations'
|
|
51
|
+
});
|
|
93
52
|
exports.newsletters.init({
|
|
53
|
+
config,
|
|
54
|
+
domainEvents,
|
|
94
55
|
event: start_email_analytics_job_event_1.StartEmailAnalyticsJobEvent,
|
|
56
|
+
queries,
|
|
95
57
|
mailgunTags: newsletterMailgunTags,
|
|
96
58
|
jobNames: {
|
|
97
59
|
latestNonOpened: 'email-analytics-latest-others',
|
|
@@ -107,16 +69,20 @@ const init = () => {
|
|
|
107
69
|
failed: 'failed_at'
|
|
108
70
|
}
|
|
109
71
|
},
|
|
110
|
-
|
|
72
|
+
metrics,
|
|
73
|
+
settingsCache,
|
|
111
74
|
createEventProcessor: () => (new newsletter_email_analytics_batch_processor_1.NewsletterEmailAnalyticsBatchProcessor({
|
|
112
|
-
config
|
|
75
|
+
config,
|
|
113
76
|
emailEventProcessor: newsletterEmailEventProcessor,
|
|
114
|
-
prometheusClient
|
|
115
|
-
queries
|
|
77
|
+
prometheusClient,
|
|
78
|
+
queries
|
|
116
79
|
}))
|
|
117
80
|
});
|
|
118
81
|
exports.automations.init({
|
|
82
|
+
config,
|
|
83
|
+
domainEvents,
|
|
119
84
|
event: start_automation_email_analytics_job_event_1.StartAutomationEmailAnalyticsJobEvent,
|
|
85
|
+
queries,
|
|
120
86
|
mailgunTags: [constants_1.AUTOMATION_EMAIL_TAG],
|
|
121
87
|
jobNames: {
|
|
122
88
|
latestNonOpened: 'email-analytics-automation-latest-others',
|
|
@@ -131,6 +97,8 @@ const init = () => {
|
|
|
131
97
|
opened: 'opened_at'
|
|
132
98
|
}
|
|
133
99
|
},
|
|
100
|
+
metrics,
|
|
101
|
+
settingsCache,
|
|
134
102
|
createEventProcessor: () => (new automation_email_analytics_batch_processor_1.AutomationEmailAnalyticsBatchProcessor({
|
|
135
103
|
automationsApi
|
|
136
104
|
}))
|
|
@@ -3,11 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.Queries = void 0;
|
|
7
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
8
|
const debug_1 = __importDefault(require("@tryghost/debug"));
|
|
9
|
-
// @ts-expect-error This module lacks type definitions.
|
|
10
|
-
const db_1 = __importDefault(require("../../../data/db"));
|
|
11
9
|
const logging_1 = __importDefault(require("@tryghost/logging"));
|
|
12
10
|
const bson_objectid_1 = __importDefault(require("bson-objectid"));
|
|
13
11
|
const debug = (0, debug_1.default)('services:email-analytics');
|
|
@@ -16,8 +14,8 @@ const MIN_EMAIL_COUNT_FOR_OPEN_RATE = 5;
|
|
|
16
14
|
* Creates a job in the jobs table if it does not already exist.
|
|
17
15
|
* @param jobName - The name of the job to create.
|
|
18
16
|
*/
|
|
19
|
-
async function createJobIfNotExists(jobName) {
|
|
20
|
-
await
|
|
17
|
+
async function createJobIfNotExists(knex, jobName) {
|
|
18
|
+
await knex('jobs').insert({
|
|
21
19
|
id: new bson_objectid_1.default().toHexString(),
|
|
22
20
|
name: jobName,
|
|
23
21
|
started_at: new Date(),
|
|
@@ -25,7 +23,35 @@ async function createJobIfNotExists(jobName) {
|
|
|
25
23
|
status: 'started'
|
|
26
24
|
}).onConflict('name').ignore();
|
|
27
25
|
}
|
|
28
|
-
|
|
26
|
+
function parseJsonObject(raw) {
|
|
27
|
+
if (typeof raw !== 'string') {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
let result;
|
|
31
|
+
try {
|
|
32
|
+
result = JSON.parse(raw);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return result && typeof result === 'object' && !Array.isArray(result) ? result : null;
|
|
38
|
+
}
|
|
39
|
+
function getStringValue(obj, key) {
|
|
40
|
+
const result = obj[key];
|
|
41
|
+
return typeof result === 'string' ? result : null;
|
|
42
|
+
}
|
|
43
|
+
function parseJobMetadata(rawMetadata) {
|
|
44
|
+
const parsed = parseJsonObject(rawMetadata) || {};
|
|
45
|
+
return {
|
|
46
|
+
begin: getStringValue(parsed, 'begin'),
|
|
47
|
+
end: getStringValue(parsed, 'end')
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
class Queries {
|
|
51
|
+
#knex;
|
|
52
|
+
constructor(knex) {
|
|
53
|
+
this.#knex = knex;
|
|
54
|
+
}
|
|
29
55
|
/**
|
|
30
56
|
* Retrieves the timestamp of the last seen event for the specified email analytics events.
|
|
31
57
|
* @param jobName - The name of the job to update.
|
|
@@ -34,6 +60,7 @@ exports.queries = {
|
|
|
34
60
|
* @returns The timestamp of the last seen event, or null if no events are found.
|
|
35
61
|
*/
|
|
36
62
|
async getLastEventTimestamp(jobName, events, cursorSeed) {
|
|
63
|
+
const knex = this.#knex;
|
|
37
64
|
const startDate = new Date();
|
|
38
65
|
let timestamps = [];
|
|
39
66
|
const lastJobRunTimestamp = await this.getLastJobRunTimestamp(jobName);
|
|
@@ -49,12 +76,12 @@ exports.queries = {
|
|
|
49
76
|
if (!columnName) {
|
|
50
77
|
continue;
|
|
51
78
|
}
|
|
52
|
-
const row = await
|
|
53
|
-
.select(
|
|
79
|
+
const row = await knex(cursorSeed.tableName)
|
|
80
|
+
.select(knex.raw('MAX(??) as maxTimestamp', [columnName]))
|
|
54
81
|
.first();
|
|
55
82
|
timestamps.push(row.maxTimestamp);
|
|
56
83
|
}
|
|
57
|
-
await createJobIfNotExists(jobName);
|
|
84
|
+
await createJobIfNotExists(knex, jobName);
|
|
58
85
|
}
|
|
59
86
|
// Convert string dates to Date objects for SQLite compatibility
|
|
60
87
|
const normalizedTimestamps = timestamps.map(date => {
|
|
@@ -66,15 +93,23 @@ exports.queries = {
|
|
|
66
93
|
const lastSeenEventTimestamp = lodash_1.default.max(normalizedTimestamps) ?? null;
|
|
67
94
|
debug(`getLastEventTimestamp: finished in ${Date.now() - startDate.getTime()}ms`);
|
|
68
95
|
return lastSeenEventTimestamp;
|
|
69
|
-
}
|
|
96
|
+
}
|
|
70
97
|
/**
|
|
71
98
|
* Retrieves the job data for the specified job name.
|
|
72
99
|
* @param jobName - The name of the job to retrieve data for.
|
|
73
100
|
* @returns The job data, or null if no job data is found.
|
|
74
101
|
*/
|
|
75
102
|
async getJobData(jobName) {
|
|
76
|
-
|
|
77
|
-
|
|
103
|
+
const row = await this.#knex('jobs')
|
|
104
|
+
.select('finished_at', 'started_at', 'metadata')
|
|
105
|
+
.where('name', jobName)
|
|
106
|
+
.first();
|
|
107
|
+
return row ? {
|
|
108
|
+
finished_at: row.finished_at,
|
|
109
|
+
started_at: row.started_at,
|
|
110
|
+
metadata: parseJobMetadata(row.metadata)
|
|
111
|
+
} : null;
|
|
112
|
+
}
|
|
78
113
|
/**
|
|
79
114
|
* Retrieves the timestamp of the last job run for the specified job name.
|
|
80
115
|
* @param jobName - The name of the job to retrieve the last run timestamp for.
|
|
@@ -83,7 +118,7 @@ exports.queries = {
|
|
|
83
118
|
async getLastJobRunTimestamp(jobName) {
|
|
84
119
|
const jobData = await this.getJobData(jobName);
|
|
85
120
|
return jobData ? jobData.finished_at || jobData.started_at : null;
|
|
86
|
-
}
|
|
121
|
+
}
|
|
87
122
|
/**
|
|
88
123
|
* Sets the timestamp of the last seen event for the specified email analytics events.
|
|
89
124
|
* @param jobName - The name of the job to update.
|
|
@@ -99,12 +134,13 @@ exports.queries = {
|
|
|
99
134
|
debug(`Setting ${field} timestamp for job ${jobName} to ${date}`);
|
|
100
135
|
const updateField = field === 'finished' ? 'finished_at' : 'started_at';
|
|
101
136
|
const status = field === 'finished' ? 'finished' : 'started';
|
|
102
|
-
const result = await
|
|
137
|
+
const result = await this.#knex('jobs').update({ [updateField]: date, updated_at: new Date(), status: status }).where('name', jobName);
|
|
103
138
|
if (result === 0) {
|
|
104
|
-
await
|
|
139
|
+
await this.#knex('jobs').insert({
|
|
105
140
|
id: new bson_objectid_1.default().toHexString(),
|
|
106
141
|
name: jobName,
|
|
107
142
|
[updateField]: date.toISOString(), // force to iso string for sqlite
|
|
143
|
+
created_at: date.toISOString(), // force to iso string for sqlite
|
|
108
144
|
updated_at: date.toISOString(), // force to iso string for sqlite
|
|
109
145
|
status: status
|
|
110
146
|
});
|
|
@@ -114,25 +150,16 @@ exports.queries = {
|
|
|
114
150
|
const message = err instanceof Error ? err.message : String(err);
|
|
115
151
|
debug(`Error setting ${field} timestamp for job ${jobName}: ${message}`);
|
|
116
152
|
}
|
|
117
|
-
}
|
|
153
|
+
}
|
|
118
154
|
/**
|
|
119
155
|
* Retrieves and parses the metadata JSON for the specified job.
|
|
120
156
|
* @param jobName - The name of the job.
|
|
121
157
|
* @returns The parsed metadata object, or null.
|
|
122
158
|
*/
|
|
123
159
|
async getJobMetadata(jobName) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return JSON.parse(row.metadata);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
132
|
-
logging_1.default.error(`Error reading metadata for job ${jobName}: ${message}`);
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
135
|
-
},
|
|
160
|
+
const row = await this.#knex('jobs').select('metadata').where('name', jobName).first();
|
|
161
|
+
return row ? parseJobMetadata(row.metadata) : null;
|
|
162
|
+
}
|
|
136
163
|
/**
|
|
137
164
|
* Writes metadata JSON for the specified job.
|
|
138
165
|
* @param jobName - The name of the job.
|
|
@@ -141,7 +168,7 @@ exports.queries = {
|
|
|
141
168
|
async setJobMetadata(jobName, metadata) {
|
|
142
169
|
try {
|
|
143
170
|
const value = metadata ? JSON.stringify(metadata) : null;
|
|
144
|
-
await
|
|
171
|
+
await this.#knex.transaction(async (trx) => {
|
|
145
172
|
const result = await trx('jobs').update({ metadata: value, updated_at: new Date() }).where('name', jobName);
|
|
146
173
|
if (result === 0 && metadata) {
|
|
147
174
|
await trx('jobs').insert({
|
|
@@ -158,7 +185,7 @@ exports.queries = {
|
|
|
158
185
|
const message = err instanceof Error ? err.message : String(err);
|
|
159
186
|
logging_1.default.error(`Error setting metadata for job ${jobName}: ${message}`);
|
|
160
187
|
}
|
|
161
|
-
}
|
|
188
|
+
}
|
|
162
189
|
/**
|
|
163
190
|
* Sets the status of the specified email analytics job.
|
|
164
191
|
* @param jobName - The name of the job to update.
|
|
@@ -170,14 +197,14 @@ exports.queries = {
|
|
|
170
197
|
async setJobStatus(jobName, status) {
|
|
171
198
|
debug(`Setting status for job ${jobName} to ${status}`);
|
|
172
199
|
try {
|
|
173
|
-
const result = await
|
|
200
|
+
const result = await this.#knex('jobs')
|
|
174
201
|
.update({
|
|
175
202
|
status: status,
|
|
176
203
|
updated_at: new Date()
|
|
177
204
|
})
|
|
178
205
|
.where('name', jobName);
|
|
179
206
|
if (result === 0) {
|
|
180
|
-
await
|
|
207
|
+
await this.#knex('jobs').insert({
|
|
181
208
|
id: new bson_objectid_1.default().toHexString(),
|
|
182
209
|
name: jobName,
|
|
183
210
|
status: status,
|
|
@@ -191,48 +218,56 @@ exports.queries = {
|
|
|
191
218
|
debug(`Error setting status for job ${jobName}: ${message}`);
|
|
192
219
|
throw err;
|
|
193
220
|
}
|
|
194
|
-
}
|
|
221
|
+
}
|
|
195
222
|
async aggregateEmailStats(emailId, updateOpenedCount) {
|
|
196
|
-
const [deliveredCount] = await
|
|
197
|
-
const [failedCount] = await
|
|
223
|
+
const [deliveredCount] = await this.#knex('email_recipients').count('id as count').whereRaw('email_id = ? AND delivered_at IS NOT NULL', [emailId]);
|
|
224
|
+
const [failedCount] = await this.#knex('email_recipients').count('id as count').whereRaw('email_id = ? AND failed_at IS NOT NULL', [emailId]);
|
|
198
225
|
const updateData = {
|
|
199
226
|
delivered_count: deliveredCount.count,
|
|
200
227
|
failed_count: failedCount.count
|
|
201
228
|
};
|
|
202
229
|
if (updateOpenedCount) {
|
|
203
|
-
const [openedCount] = await
|
|
230
|
+
const [openedCount] = await this.#knex('email_recipients').count('id as count').whereRaw('email_id = ? AND opened_at IS NOT NULL', [emailId]);
|
|
204
231
|
updateData.opened_count = openedCount.count;
|
|
205
232
|
}
|
|
206
|
-
await
|
|
207
|
-
}
|
|
233
|
+
await this.#knex('emails').update(updateData).where('id', emailId);
|
|
234
|
+
}
|
|
208
235
|
async aggregateMemberStats(memberId) {
|
|
209
|
-
const { trackedEmailCount } = await
|
|
210
|
-
.select(
|
|
236
|
+
const { trackedEmailCount } = await this.#knex('email_recipients')
|
|
237
|
+
.select(this.#knex.raw('COUNT(email_recipients.id) as trackedEmailCount'))
|
|
211
238
|
.leftJoin('emails', 'email_recipients.email_id', 'emails.id')
|
|
212
239
|
.where('email_recipients.member_id', memberId)
|
|
213
240
|
.where('emails.track_opens', true)
|
|
214
241
|
.first() || {};
|
|
215
|
-
const
|
|
216
|
-
|
|
242
|
+
const emailCountResult = await this.#knex('email_recipients')
|
|
243
|
+
.count('id as count')
|
|
244
|
+
.whereRaw('member_id = ?', [memberId])
|
|
245
|
+
.first();
|
|
246
|
+
const emailOpenedCountResult = await this.#knex('email_recipients')
|
|
247
|
+
.count('id as count')
|
|
248
|
+
.whereRaw('member_id = ? AND opened_at IS NOT NULL', [memberId])
|
|
249
|
+
.first();
|
|
250
|
+
const emailCount = Number(emailCountResult?.count || 0);
|
|
251
|
+
const emailOpenedCount = Number(emailOpenedCountResult?.count || 0);
|
|
217
252
|
const updateQuery = {
|
|
218
|
-
email_count: emailCount
|
|
219
|
-
email_opened_count: emailOpenedCount
|
|
253
|
+
email_count: emailCount,
|
|
254
|
+
email_opened_count: emailOpenedCount
|
|
220
255
|
};
|
|
221
256
|
if (trackedEmailCount >= MIN_EMAIL_COUNT_FOR_OPEN_RATE) {
|
|
222
|
-
updateQuery.email_open_rate = Math.round(emailOpenedCount
|
|
257
|
+
updateQuery.email_open_rate = Math.round(emailOpenedCount / trackedEmailCount * 100);
|
|
223
258
|
}
|
|
224
|
-
await
|
|
259
|
+
await this.#knex('members')
|
|
225
260
|
.update(updateQuery)
|
|
226
261
|
.where('id', memberId);
|
|
227
|
-
}
|
|
262
|
+
}
|
|
228
263
|
async aggregateMemberStatsBatch(memberIds) {
|
|
229
264
|
if (!memberIds || memberIds.length === 0) {
|
|
230
265
|
return;
|
|
231
266
|
}
|
|
232
267
|
// Batch query to get stats for all members at once
|
|
233
|
-
const stats = await
|
|
268
|
+
const stats = await this.#knex('email_recipients')
|
|
234
269
|
.leftJoin('emails', 'emails.id', 'email_recipients.email_id')
|
|
235
|
-
.select('email_recipients.member_id',
|
|
270
|
+
.select('email_recipients.member_id', this.#knex.raw('COUNT(email_recipients.id) as email_count'), this.#knex.raw('SUM(CASE WHEN email_recipients.opened_at IS NOT NULL THEN 1 ELSE 0 END) as email_opened_count'), this.#knex.raw('SUM(CASE WHEN emails.track_opens = 1 THEN 1 ELSE 0 END) as tracked_count'))
|
|
236
271
|
.whereIn('email_recipients.member_id', memberIds)
|
|
237
272
|
.groupBy('email_recipients.member_id');
|
|
238
273
|
// Build update data for each member
|
|
@@ -285,7 +320,7 @@ exports.queries = {
|
|
|
285
320
|
...memberIds
|
|
286
321
|
];
|
|
287
322
|
// Execute batched update with CASE statements
|
|
288
|
-
await
|
|
323
|
+
await this.#knex.raw(`
|
|
289
324
|
UPDATE members
|
|
290
325
|
SET
|
|
291
326
|
email_count = CASE id ${emailCountCases.join(' ')} END,
|
|
@@ -294,4 +329,6 @@ exports.queries = {
|
|
|
294
329
|
WHERE id IN (${memberIds.map(() => '?').join(',')})
|
|
295
330
|
`, bindings);
|
|
296
331
|
}
|
|
297
|
-
}
|
|
332
|
+
}
|
|
333
|
+
exports.Queries = Queries;
|
|
334
|
+
;
|
|
@@ -3,6 +3,9 @@ const logging = require('@tryghost/logging');
|
|
|
3
3
|
/** @import {BatchEventProcessor} from './batch-event-processor' */
|
|
4
4
|
/** @import {FetchData} from './email-analytics-service' */
|
|
5
5
|
|
|
6
|
+
const AGGREGATE_MEMBER_STATS_METRIC_NAME = 'email_analytics_aggregate_member_stats_count';
|
|
7
|
+
exports.AGGREGATE_MEMBER_STATS_METRIC_NAME = AGGREGATE_MEMBER_STATS_METRIC_NAME;
|
|
8
|
+
|
|
6
9
|
/**
|
|
7
10
|
* @implements {BatchEventProcessor}
|
|
8
11
|
*/
|
|
@@ -222,7 +225,7 @@ class NewsletterEmailAnalyticsBatchProcessor {
|
|
|
222
225
|
}
|
|
223
226
|
const emailAggregationTimeMs = Date.now() - emailAggregationStart;
|
|
224
227
|
|
|
225
|
-
const memberMetric = this.#prometheusClient?.getMetric(
|
|
228
|
+
const memberMetric = this.#prometheusClient?.getMetric(AGGREGATE_MEMBER_STATS_METRIC_NAME);
|
|
226
229
|
|
|
227
230
|
const memberAggregationStart = Date.now();
|
|
228
231
|
if (useBatchProcessing) {
|
|
@@ -611,7 +611,7 @@ class BatchSendingService {
|
|
|
611
611
|
async () => {
|
|
612
612
|
await batch.save({
|
|
613
613
|
status: 'submitted',
|
|
614
|
-
|
|
614
|
+
mailgun_message_id: response.id,
|
|
615
615
|
// reset error fields when sending succeeds
|
|
616
616
|
error_status_code: null,
|
|
617
617
|
error_message: null,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
|
|
3
|
-
const EmailDeliveredEvent = require('./events/email-delivered-event');
|
|
4
|
-
const EmailOpenedEvent = require('./events/email-opened-event');
|
|
5
|
-
const EmailBouncedEvent = require('./events/email-bounced-event');
|
|
6
|
-
const EmailTemporaryBouncedEvent = require('./events/email-temporary-bounced-event');
|
|
7
|
-
const EmailUnsubscribedEvent = require('./events/email-unsubscribed-event');
|
|
8
|
-
const SpamComplaintEvent = require('./events/spam-complaint-event');
|
|
3
|
+
const {EmailDeliveredEvent} = require('./events/email-delivered-event');
|
|
4
|
+
const {EmailOpenedEvent} = require('./events/email-opened-event');
|
|
5
|
+
const {EmailBouncedEvent} = require('./events/email-bounced-event');
|
|
6
|
+
const {EmailTemporaryBouncedEvent} = require('./events/email-temporary-bounced-event');
|
|
7
|
+
const {EmailUnsubscribedEvent} = require('./events/email-unsubscribed-event');
|
|
8
|
+
const {SpamComplaintEvent} = require('./events/spam-complaint-event');
|
|
9
9
|
|
|
10
10
|
async function waitForEvent() {
|
|
11
11
|
return new Promise((resolve) => {
|
|
@@ -50,7 +50,7 @@ class EmailEventProcessor {
|
|
|
50
50
|
this.#db = db;
|
|
51
51
|
this.#eventStorage = eventStorage;
|
|
52
52
|
this.#prometheusClient = prometheusClient;
|
|
53
|
-
// Avoid having to query email_batch by
|
|
53
|
+
// Avoid having to query email_batch by mailgun_message_id for every event
|
|
54
54
|
this.providerIdEmailIdMap = {};
|
|
55
55
|
|
|
56
56
|
if (this.#prometheusClient) {
|
|
@@ -211,7 +211,7 @@ class EmailEventProcessor {
|
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
// With the
|
|
214
|
+
// With the mailgun_message_id and email address we can look for the EmailRecipient
|
|
215
215
|
const emailId = emailIdentification.emailId ?? await this.getEmailId(emailIdentification.providerId);
|
|
216
216
|
if (!emailId) {
|
|
217
217
|
// Invalid
|
|
@@ -269,7 +269,7 @@ class EmailEventProcessor {
|
|
|
269
269
|
|
|
270
270
|
const {emailId} = await this.#db.knex('email_batches')
|
|
271
271
|
.select('email_id as emailId')
|
|
272
|
-
.where('
|
|
272
|
+
.where('mailgun_message_id', providerId)
|
|
273
273
|
.first() || {};
|
|
274
274
|
|
|
275
275
|
if (!emailId) {
|
|
@@ -301,11 +301,11 @@ class EmailEventProcessor {
|
|
|
301
301
|
|
|
302
302
|
if (providerIds.length > 0) {
|
|
303
303
|
const providerIdMapping = await this.#db.knex('email_batches')
|
|
304
|
-
.select('
|
|
305
|
-
.whereIn('
|
|
304
|
+
.select('mailgun_message_id', 'email_id')
|
|
305
|
+
.whereIn('mailgun_message_id', providerIds);
|
|
306
306
|
|
|
307
307
|
for (const row of providerIdMapping) {
|
|
308
|
-
this.providerIdEmailIdMap[row.
|
|
308
|
+
this.providerIdEmailIdMap[row.mailgun_message_id] = row.email_id;
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
|
|
@@ -1,50 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailBouncedEvent = void 0;
|
|
4
|
+
class EmailBouncedEvent {
|
|
6
5
|
id;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @readonly
|
|
10
|
-
* @type {string}
|
|
11
|
-
*/
|
|
12
6
|
email;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @readonly
|
|
16
|
-
* @type {string}
|
|
17
|
-
*/
|
|
18
7
|
memberId;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @readonly
|
|
22
|
-
* @type {string}
|
|
23
|
-
*/
|
|
24
8
|
emailId;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @readonly
|
|
28
|
-
* @type {{message: string, code: number, enhancedCode: string | null}|null}
|
|
29
|
-
*/
|
|
30
9
|
error;
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @readonly
|
|
34
|
-
* @type {string}
|
|
35
|
-
*/
|
|
36
10
|
emailRecipientId;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @readonly
|
|
40
|
-
* @type {Date}
|
|
41
|
-
*/
|
|
42
11
|
timestamp;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @private
|
|
46
|
-
*/
|
|
47
|
-
constructor({id, email, memberId, emailId, error, emailRecipientId, timestamp}) {
|
|
12
|
+
constructor({ id, email, memberId, emailId, error, emailRecipientId, timestamp }) {
|
|
48
13
|
this.id = id;
|
|
49
14
|
this.memberId = memberId;
|
|
50
15
|
this.emailId = emailId;
|
|
@@ -53,11 +18,8 @@ module.exports = class EmailBouncedEvent {
|
|
|
53
18
|
this.emailRecipientId = emailRecipientId;
|
|
54
19
|
this.timestamp = timestamp;
|
|
55
20
|
}
|
|
56
|
-
|
|
57
21
|
static create(data) {
|
|
58
|
-
return new EmailBouncedEvent({
|
|
59
|
-
...data,
|
|
60
|
-
timestamp: data.timestamp || new Date
|
|
61
|
-
});
|
|
22
|
+
return new EmailBouncedEvent({ ...data, timestamp: data.timestamp || new Date() });
|
|
62
23
|
}
|
|
63
|
-
}
|
|
24
|
+
}
|
|
25
|
+
exports.EmailBouncedEvent = EmailBouncedEvent;
|
|
@@ -1,49 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailDeliveredEvent = void 0;
|
|
4
|
+
class EmailDeliveredEvent {
|
|
6
5
|
email;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @readonly
|
|
10
|
-
* @type {string}
|
|
11
|
-
*/
|
|
12
6
|
memberId;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @readonly
|
|
16
|
-
* @type {string}
|
|
17
|
-
*/
|
|
18
7
|
emailId;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @readonly
|
|
22
|
-
* @type {string}
|
|
23
|
-
*/
|
|
24
8
|
emailRecipientId;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @readonly
|
|
28
|
-
* @type {Date}
|
|
29
|
-
*/
|
|
30
9
|
timestamp;
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @private
|
|
34
|
-
*/
|
|
35
|
-
constructor({email, memberId, emailId, emailRecipientId, timestamp}) {
|
|
10
|
+
constructor({ email, memberId, emailId, emailRecipientId, timestamp }) {
|
|
36
11
|
this.email = email;
|
|
37
12
|
this.memberId = memberId;
|
|
38
13
|
this.emailId = emailId;
|
|
39
14
|
this.emailRecipientId = emailRecipientId;
|
|
40
15
|
this.timestamp = timestamp;
|
|
41
16
|
}
|
|
42
|
-
|
|
43
17
|
static create(data) {
|
|
44
|
-
return new EmailDeliveredEvent({
|
|
45
|
-
...data,
|
|
46
|
-
timestamp: data.timestamp || new Date
|
|
47
|
-
});
|
|
18
|
+
return new EmailDeliveredEvent({ ...data, timestamp: data.timestamp || new Date() });
|
|
48
19
|
}
|
|
49
|
-
}
|
|
20
|
+
}
|
|
21
|
+
exports.EmailDeliveredEvent = EmailDeliveredEvent;
|