ghost 6.62.0 → 6.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
- package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
- package/components/tryghost-checkout-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.1.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-limit-service-0.0.0.tgz +0 -0
- package/components/tryghost-metafield-types-0.0.0.tgz +0 -0
- package/content/themes/source/package.json +2 -2
- package/content/themes/source/partials/post-card.hbs +1 -1
- package/core/boot.js +7 -5
- package/core/built/admin/assets/{about-Dyae_UT6.js → about-C1C3s5-g.js} +1 -1
- package/core/built/admin/assets/accordion-CxGsDKwa.js +1 -0
- package/core/built/admin/assets/{account-migration-CESa0mnX.js → account-migration-CbUhW6gk.js} +1 -1
- package/core/built/admin/assets/activitypub/{account-migration-By69CgCp.js → account-migration-KA6Jjf9L.js} +7 -7
- package/core/built/admin/assets/activitypub/activitypub.js +3 -3
- package/core/built/admin/assets/activitypub/{avatar-DLPL3Abs.js → avatar-DVJF5bxP.js} +2 -2
- package/core/built/admin/assets/activitypub/{avatar-flipboard-C9iDY-QV.js → avatar-flipboard-csQaNeYK.js} +2 -2
- package/core/built/admin/assets/activitypub/{bluesky-sharing-BJcPMrDd.js → bluesky-sharing-C7nTDMvw.js} +9 -9
- package/core/built/admin/assets/activitypub/{content-formatters-3rTHg3mp.js → content-formatters-CLcjaBwV.js} +4 -4
- package/core/built/admin/assets/activitypub/{copy-DIAOQoCZ.js → copy-DcOh8kXw.js} +2 -2
- package/core/built/admin/assets/activitypub/{domain-DUR4xSkV.js → domain-fZ-X8i4-.js} +9 -9
- package/core/built/admin/assets/activitypub/{edit-profile-BqtfzxCp.js → edit-profile-BqMLQV88.js} +6 -6
- package/core/built/admin/assets/activitypub/{explore-BxuJd-J4.js → explore-B4yPoP8E.js} +10 -10
- package/core/built/admin/assets/activitypub/{feed-BM1TcksA.js → feed-BRC_mvAe.js} +9 -9
- package/core/built/admin/assets/activitypub/{field-Dn7HHx2-.js → field-COacNgOt.js} +3 -3
- package/core/built/admin/assets/activitypub/{hash-Bm3WxYN4.js → hash-C7u-irQQ.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-CCjkuow2.js → inbox-BW-yvUoN.js} +10 -10
- package/core/built/admin/assets/activitypub/{inbox-d8oJRTf4.js → inbox-CbTTdDQ3.js} +2 -2
- package/core/built/admin/assets/activitypub/{label-1AA_s9Fa.js → label-kPMmYI7l.js} +3 -3
- package/core/built/admin/assets/activitypub/layout-BL4_jtuV.js +1 -0
- package/core/built/admin/assets/activitypub/{moderation-CnmxEB8w.js → moderation-CuidJzc0.js} +10 -10
- package/core/built/admin/assets/activitypub/{note-ZKc_Bnba.js → note-CAMRRSqD.js} +7 -7
- package/core/built/admin/assets/activitypub/{notifications-CB2tJZau.js → notifications-BmNlXGgp.js} +9 -9
- package/core/built/admin/assets/activitypub/{onboarding-BsJ9E5qf.js → onboarding-Bqg7fh_L.js} +2 -2
- package/core/built/admin/assets/activitypub/{onboarding-CSUJJIlh.js → onboarding-Dmun9jr_.js} +2 -2
- package/core/built/admin/assets/activitypub/{preferences-0-JZnUkI.js → preferences--oH19wf9.js} +11 -11
- package/core/built/admin/assets/activitypub/{profile-C35cFIhM.js → profile-DH_tQx2D.js} +14 -14
- package/core/built/admin/assets/activitypub/{reply-DYK5vVqb.js → reply-Cap9PxSH.js} +2 -2
- package/core/built/admin/assets/activitypub/{routes-BD4vscyc.js → routes-DdyY9uFF.js} +30 -30
- package/core/built/admin/assets/activitypub/{separator-BbQqTm-p.js → separator-CAxxu8VV.js} +3 -3
- package/core/built/admin/assets/activitypub/{settings-BsMROdqh.js → settings-B6EEcVkW.js} +6 -6
- package/core/built/admin/assets/activitypub/{site-O0RL9YCN.js → site-BYps63oh.js} +2 -2
- package/core/built/admin/assets/activitypub/{step-1-BMSx7c_X.js → step-1-CKjR2KAm.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-2-DtPQzlTH.js → step-2-B6PKfOUQ.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-3-CLlOZTyt.js → step-3-C-qBbcUo.js} +11 -11
- package/core/built/admin/assets/activitypub/{tabs-Dxk-b9M-.js → tabs-DLhZtVde.js} +6 -6
- package/core/built/admin/assets/activitypub/{topic-filter-5yZH6tId.js → topic-filter-DsUOuu0k.js} +3 -3
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CV50qe03.js → use-activity-pub-queries-CX9snsLs.js} +3 -3
- package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-Bmk5h4lW.js → use-navigate-with-base-path-DsJTGDSS.js} +988 -959
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-Cbvzgjzd.js → use-reply-chain-data-AJi9zkzm.js} +5 -5
- package/core/built/admin/assets/activitypub/{users-BjcoP_HC.js → users-inweyKL5.js} +186 -160
- package/core/built/admin/assets/activitypub/{x-DbQZOLiI.js → x-DR8AT3-4.js} +2 -2
- package/core/built/admin/assets/{add-integration-modal-BlF6rs_f.js → add-integration-modal-BT_onDJy.js} +1 -1
- package/core/built/admin/assets/{add-newsletter-modal-CglVQqah.js → add-newsletter-modal-Cx1kQpiY.js} +1 -1
- package/core/built/admin/assets/{add-recommendation-modal-wz7BsuaG.js → add-recommendation-modal-B5nvAhvr.js} +1 -1
- package/core/built/admin/assets/{analytics-C4HE1gBg.js → analytics-DjoJWPI7.js} +1 -1
- package/core/built/admin/assets/{announcement-bar-modal-Ci4zz8jO.js → announcement-bar-modal-Dwd0EGFP.js} +1 -1
- package/core/built/admin/assets/{api-keys-3-0vJC3Y.js → api-keys-BGPzLHzA.js} +1 -1
- package/core/built/admin/assets/{api-keys-Ck-Yteiv.js → api-keys-BoeacM-s.js} +1 -1
- package/core/built/admin/assets/{audience-CtbA54Sn.js → audience-ceV3XVHq.js} +1 -1
- package/core/built/admin/assets/automated-emails-BLesE41L.js +1 -0
- package/core/built/admin/assets/{automations-sAcJ1334.js → automations-BN4u3GR8.js} +1 -1
- package/core/built/admin/assets/automations-C-ZTUwW3.js +1 -0
- package/core/built/admin/assets/{bluesky-sharing-BEtJ_gL_.js → bluesky-sharing-vzh-oPXL.js} +1 -1
- package/core/built/admin/assets/{breadcrumb-zUrZrBtW.js → breadcrumb-CaLk2b7D.js} +1 -1
- package/core/built/admin/assets/{button-eNMKQWXr.js → button-Dvcv1QSR.js} +1 -1
- package/core/built/admin/assets/calendar-Bl9RLcZX.js +1 -0
- package/core/built/admin/assets/{chart-helpers-CfBKt0vT.js → chart-helpers-FHywU0pj.js} +1 -1
- package/core/built/admin/assets/{checkbox-CgOn_tKW.js → checkbox-BtayFtjg.js} +1 -1
- package/core/built/admin/assets/chunk.254.035b85ec456ebbd7336b.js +440 -0
- package/core/built/admin/assets/{chunk.524.a697dee88db67fdf6021.js → chunk.524.e6975095fccdf22d90f8.js} +5 -5
- package/core/built/admin/assets/{chunk.582.5ed5d124cfca9c259b9c.js → chunk.582.98b485f9b2802f540897.js} +6 -6
- package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js → chunk.901.4ccc639821020230bcca.js} +9949 -7921
- package/core/built/admin/assets/{code-editor-view-K2wI-I5f.js → code-editor-view-C3ZfoF1X.js} +1 -1
- package/core/built/admin/assets/{code-editor-view-BYNoAoNV.js → code-editor-view-CAyRWy1s.js} +1 -1
- package/core/built/admin/assets/{color-picker-Ddw80xX6.js → color-picker-G4kGR7rp.js} +1 -1
- package/core/built/admin/assets/{color-picker-field-D9nUhvA7.js → color-picker-field-DQFVTNnT.js} +1 -1
- package/core/built/admin/assets/{combobox-w9j8PPQT.js → combobox-BnYzgEB4.js} +1 -1
- package/core/built/admin/assets/{command-BfpHORBv.js → command-C_vyTikI.js} +1 -1
- package/core/built/admin/assets/comments-aBrxfnZf.js +1 -0
- package/core/built/admin/assets/{config-DOMQDZGZ.js → config-kSHvwdTG.js} +1 -1
- package/core/built/admin/assets/{confirmation-context-CBM8G0Vj.js → confirmation-context-DwXX_Y5h.js} +1 -1
- package/core/built/admin/assets/{content-api-modal-TXRz3U7S.js → content-api-modal-D2G0nJP6.js} +1 -1
- package/core/built/admin/assets/{context-menu-_QMdd3kp.js → context-menu-DOVB6yaz.js} +1 -1
- package/core/built/admin/assets/{copy-field-6N01S07E.js → copy-field-DCJwh9qf.js} +1 -1
- package/core/built/admin/assets/{create-ghost-browse-value-source-qIBymvvf.js → create-ghost-browse-value-source-5C53jJaX.js} +1 -1
- package/core/built/admin/assets/custom-field-type-option-BAuW0F-E.js +1 -0
- package/core/built/admin/assets/{custom-integration-modal-DmNquxUV.js → custom-integration-modal-AbJGVyKc.js} +1 -1
- package/core/built/admin/assets/{date-range-select-uvz_DtPh.js → date-range-select-BY3K-ukj.js} +1 -1
- package/core/built/admin/assets/design-and-theme-modal-BvEy4_pC.js +2 -0
- package/core/built/admin/assets/{dirty-confirm-dialog-BZ1iytEd.js → dirty-confirm-dialog-DVPuGz3U.js} +1 -1
- package/core/built/admin/assets/{disabled-sources-indicator-DMRrxsiJ.js → disabled-sources-indicator-Cy7Zp4c8.js} +1 -1
- package/core/built/admin/assets/{domain-BNYrt0aD.js → domain-Dl61QGuk.js} +1 -1
- package/core/built/admin/assets/{dropzone-D7nFdAe5.js → dropzone-Dtz5Rmjt.js} +4 -4
- package/core/built/admin/assets/edit-profile-DNJSMDwm.js +1 -0
- package/core/built/admin/assets/editor-DbAen9zf.js +8 -0
- package/core/built/admin/assets/editor-screen-BFWThIai.js +26 -0
- package/core/built/admin/assets/email-sending-status-context-CWDOD1FN.js +1 -0
- package/core/built/admin/assets/email-sending-status-provider-DCPkDICt.js +1 -0
- package/core/built/admin/assets/emails-vFMk4yYl.js +1 -0
- package/core/built/admin/assets/{embed-signup-form-modal-Ds6mPEi5.js → embed-signup-form-modal-DGqsORxS.js} +1 -1
- package/core/built/admin/assets/{explore-UY10Egsp.js → explore-nnRr1Fja.js} +1 -1
- package/core/built/admin/assets/feature-flag-overrides-context-DQjdJFAk.js +1 -0
- package/core/built/admin/assets/{feature-image-placeholder-D1iF_8bc.js → feature-image-placeholder-BrIHmPs8.js} +1 -1
- package/core/built/admin/assets/{feed-81C8mJWR.js → feed-BNUcNu-W.js} +1 -1
- package/core/built/admin/assets/feedback-DJ4Zb9rZ.js +1 -0
- package/core/built/admin/assets/{field-Dihp5p18.js → field-C93_Mg6j.js} +1 -1
- package/core/built/admin/assets/filter-sources-CGJb4C5r.js +1 -0
- package/core/built/admin/assets/{filters-DirqNXjH.js → filters--kKP-EC8.js} +1 -1
- package/core/built/admin/assets/filters-DxA_a4FP.js +1 -0
- package/core/built/admin/assets/{first-promoter-modal-CT6MxYZb.js → first-promoter-modal-BYDtrz2S.js} +1 -1
- package/core/built/admin/assets/focus-koenig-editor-on-bottom-click-BbSnGOtK.js +1 -0
- package/core/built/admin/assets/{ghost-8eabfc1ece81b03cf7b90780d31487e8.css → ghost-8fd5bb799356bbefb254210ba7e1236d.css} +1 -1
- package/core/built/admin/assets/{ghost-c2848508292937415f20f5a830eea59e.js → ghost-b4e8a403baba61905cd7560e30b9732d.js} +43 -27
- package/core/built/admin/assets/{ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css → ghost-dark-cac0cb2d5bb78e9bd14d8d1c2768ed45.css} +1 -1
- package/core/built/admin/assets/{gift-link-modal-CQVAye17.js → gift-link-modal-B7u5bD4e.js} +1 -1
- package/core/built/admin/assets/{gift-links-DLDS7ljO.js → gift-links-CfLSnst2.js} +1 -1
- package/core/built/admin/assets/growth-Cd1uO9d2.js +1 -0
- package/core/built/admin/assets/growth-aG32xfdE.js +3 -0
- package/core/built/admin/assets/{history-modal-CFd1Hvx6.js → history-modal-Df8lW8h-.js} +1 -1
- package/core/built/admin/assets/hooks-Cy_-oZ4o.js +2 -0
- package/core/built/admin/assets/{html-field-CJBCLTvv.js → html-field-DA4eU7eq.js} +1 -1
- package/core/built/admin/assets/{images-scfkWZiK.js → images-KXmyO3Ss.js} +1 -1
- package/core/built/admin/assets/{inbox-Mcp4DXZN.js → inbox-gJHG7_xd.js} +6 -6
- package/core/built/admin/assets/index-BHHXtR5C.css +2 -0
- package/core/built/admin/assets/index-CgMCwsxN.js +4 -0
- package/core/built/admin/assets/index.es-CY6-yuw9.js +1 -0
- package/core/built/admin/assets/{input-group-CMhe2DvY.js → input-group-BE8rM2y1.js} +1 -1
- package/core/built/admin/assets/{integrations-Bjbu86Z0.js → integrations-B4kuRBFY.js} +1 -1
- package/core/built/admin/assets/{invite-user-modal-DfheMXs0.js → invite-user-modal-B4CuNcx4.js} +1 -1
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +2 -2
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +2 -2
- package/core/built/admin/assets/{koenig-lexical-DBSqAuiI.js → koenig-lexical-CGXb0F8o.js} +2 -2
- package/core/built/admin/assets/koenig-loader-BeM5rFPX.js +2 -0
- package/core/built/admin/assets/{kpi-card-DBRMfGOW.js → kpi-card-B21aToe8.js} +1 -1
- package/core/built/admin/assets/{kpi-card-DFafD1qq.js → kpi-card-pz6Wv4Ae.js} +1 -1
- package/core/built/admin/assets/{kpi-helpers-Cv8i8hns.js → kpi-helpers-Dq5jelmP.js} +1 -1
- package/core/built/admin/assets/{kpi-tabs-BJItvLYm.js → kpi-tabs-DEZHpKUt.js} +1 -1
- package/core/built/admin/assets/{label-BnSCvffu.js → label-OLCzze8N.js} +1 -1
- package/core/built/admin/assets/label-picker-BigOvMPV.js +1 -0
- package/core/built/admin/assets/{labels-CH3Kn8RV.js → labels-Dr0SgUQD.js} +1 -1
- package/core/built/admin/assets/layout-DUTL8SH5.js +1 -0
- package/core/built/admin/assets/lib-7QPTI0FS.js +1 -0
- package/core/built/admin/assets/link-helpers-BRAg9SCj.js +1 -0
- package/core/built/admin/assets/links-BDHPTlyj.js +1 -0
- package/core/built/admin/assets/{member-custom-fields-DDQV6QeG.js → member-custom-fields-TRTHCAz9.js} +1 -1
- package/core/built/admin/assets/member-detail-b6dRwc3C.js +1 -0
- package/core/built/admin/assets/members-Czt5lJSc.js +4 -0
- package/core/built/admin/assets/{moderation-AgCIEso4.js → moderation-ZWefD9uH.js} +1 -1
- package/core/built/admin/assets/{multi-select-combobox-BcITkUVr.js → multi-select-combobox-CT13MTo-.js} +1 -1
- package/core/built/admin/assets/navigation-modal-C8FEhBK5.js +1 -0
- package/core/built/admin/assets/newsletter-5VYW4RyJ.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-ChjC0ZqH.js +1 -0
- package/core/built/admin/assets/{newsletter-emails-DKzwafuh.js → newsletter-emails-DZH6I-PY.js} +1 -1
- package/core/built/admin/assets/{newsletters-BRBb_uQC.js → newsletters-DOC9KBcX.js} +1 -1
- package/core/built/admin/assets/newsletters-Rq1M3GD-.js +1 -0
- package/core/built/admin/assets/{note-DyGHtS9a.js → note-DIV-Pojr.js} +1 -1
- package/core/built/admin/assets/{notifications-ZgWniKna.js → notifications-s20-H49V.js} +1 -1
- package/core/built/admin/assets/{offers-9J1CSiLy.js → offers--e2nGvkW.js} +1 -1
- package/core/built/admin/assets/{offers-container-modal-B-E8TIWr.js → offers-container-modal-BmG5M5Tv.js} +1 -1
- package/core/built/admin/assets/onboarding-CUuy9unR.js +1 -0
- package/core/built/admin/assets/{onboarding-CzIsre-d.js → onboarding-pXyct0Jm.js} +1 -1
- package/core/built/admin/assets/{onboarding-route-CaavZulg.js → onboarding-route-CK4pcXoR.js} +1 -1
- package/core/built/admin/assets/overview-CaPsciMs.js +1 -0
- package/core/built/admin/assets/overview-a8GfcsKX.js +1 -0
- package/core/built/admin/assets/{page-header-De0VzKBi.js → page-header-DM_KyoFI.js} +1 -1
- package/core/built/admin/assets/{pagemenu-B5KKCpbA.js → pagemenu-vgZVUVKR.js} +1 -1
- package/core/built/admin/assets/pages-CjDY2CBI.js +1 -0
- package/core/built/admin/assets/pages-route-BzKZYdV5.js +1 -0
- package/core/built/admin/assets/{pintura-modal-BZ2J9w3n.js → pintura-modal-DExCF1ii.js} +1 -1
- package/core/built/admin/assets/{portal-frame-B6Hr9wHc.js → portal-frame-Cqanidq4.js} +1 -1
- package/core/built/admin/assets/portal-modal-oinBgA27.js +1 -0
- package/core/built/admin/assets/post-analytics-C5oJ1dWV.js +1 -0
- package/core/built/admin/assets/post-analytics-header-OATo3X_r.js +1 -0
- package/core/built/admin/assets/post-analytics-provider-tOpIVGT5.js +1 -0
- package/core/built/admin/assets/post-helpers-C88JBa4D.js +1 -0
- package/core/built/admin/assets/post-share-modal-DvhC1XgV.js +1 -0
- package/core/built/admin/assets/post-utils-DKF4mfuo.js +1 -0
- package/core/built/admin/assets/posts-list-screen-o4ZjbgS3.js +2 -0
- package/core/built/admin/assets/posts-pCPrhQeR.js +1 -0
- package/core/built/admin/assets/posts-route-9F--xdIb.js +1 -0
- package/core/built/admin/assets/{preferences-C5YJLp74.js → preferences--vNubsqD.js} +2 -2
- package/core/built/admin/assets/{preview-modal-BfeFqi5y.js → preview-modal-YYbzlYdO.js} +1 -1
- package/core/built/admin/assets/profile-BllKV3dR.js +1 -0
- package/core/built/admin/assets/radio-group-DL8GI8rt.js +1 -0
- package/core/built/admin/assets/{referrers-CnhCMWCs.js → referrers-D8oHPmDB.js} +1 -1
- package/core/built/admin/assets/router-provider-BSvTXgZY.js +1 -0
- package/core/built/admin/assets/schemas-BoYdB6YU.js +64 -0
- package/core/built/admin/assets/{select-cb0t_TAJ.js → select-v5YbA3Mw.js} +1 -1
- package/core/built/admin/assets/settings-PEsZupw1.js +4 -0
- package/core/built/admin/assets/{settings-breadcrumbs-DLzbRRSt.js → settings-breadcrumbs-NwPnCTC7.js} +1 -1
- package/core/built/admin/assets/{settings-DZqxR0Da.js → settings-u_s1CRkr.js} +1 -1
- package/core/built/admin/assets/{share-modal-D2-Bz1_I.js → share-modal-SskCmVGL.js} +1 -1
- package/core/built/admin/assets/{slack-modal-DYDTUria.js → slack-modal-XxSJiYgo.js} +1 -1
- package/core/built/admin/assets/{sort-button-VVeQjjbu.js → sort-button-Cx1KtINE.js} +1 -1
- package/core/built/admin/assets/{source-icon-Ck5_5Kgq.js → source-icon-Bdp9Im_5.js} +1 -1
- package/core/built/admin/assets/stats-D9PDLS3x.js +1 -0
- package/core/built/admin/assets/stats-view-W2g6Jsd-.js +1 -0
- package/core/built/admin/assets/{step-1-CsaBjeN4.js → step-1-BQYzvBzr.js} +1 -1
- package/core/built/admin/assets/{step-2-D2vnxOOM.js → step-2-xES32xJV.js} +1 -1
- package/core/built/admin/assets/{step-3-wBoLdGEb.js → step-3-DA_XK5kW.js} +2 -2
- package/core/built/admin/assets/{stripe-button-CDgLz0S0.js → stripe-button-CVsLHelt.js} +1 -1
- package/core/built/admin/assets/{stripe-connect-modal-CSjMJetP.js → stripe-connect-modal-ClmLOMGS.js} +1 -1
- package/core/built/admin/assets/style-Wd9nQubI.css +1 -0
- package/core/built/admin/assets/{table-Do6iQ83Q.js → table-BenqVupI.js} +1 -1
- package/core/built/admin/assets/{tabs-D2yWLMp_.js → tabs-eBBlxPp8.js} +1 -1
- package/core/built/admin/assets/tag-detail-Ce8Se2qd.js +2 -0
- package/core/built/admin/assets/tag-picker-C3UR-uJ-.js +1 -0
- package/core/built/admin/assets/tags-B-kJxCs7.js +1 -0
- package/core/built/admin/assets/{tags-zTFiKRpb.js → tags-ChfdwJyS.js} +1 -1
- package/core/built/admin/assets/{testimonials-modal-CtnZBJKl.js → testimonials-modal-9Q6fT06V.js} +1 -1
- package/core/built/admin/assets/tier-detail-modal-CDyYdqK7.js +1 -0
- package/core/built/admin/assets/tiers-BCpIOGQr.js +1 -0
- package/core/built/admin/assets/{toggle-group-ByUJsxwD.js → toggle-group-CviIkyok.js} +1 -1
- package/core/built/admin/assets/{topic-filter-BgC3g5_v.js → topic-filter-I2jCBGxm.js} +1 -1
- package/core/built/admin/assets/{transistor-modal-Drr0SNfo.js → transistor-modal-p53u3W8y.js} +1 -1
- package/core/built/admin/assets/{trend-badge-6ye93YAW.js → trend-badge-CideVzQd.js} +1 -1
- package/core/built/admin/assets/{unsplash-modal-p6AoQoWp.js → unsplash-modal-DY8UcKcE.js} +1 -1
- package/core/built/admin/assets/{use-analytics-data-CWCMAESo.js → use-analytics-data-DAIGcr2f.js} +1 -1
- package/core/built/admin/assets/{use-check-theme-limit-error-Cw3WQHy8.js → use-check-theme-limit-error-DRUjK4YM.js} +1 -1
- package/core/built/admin/assets/use-filter-params-JkZhIS8L.js +1 -0
- package/core/built/admin/assets/{use-filterable-api-CzXcpUh8.js → use-filterable-api-BVEVMrhZ.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-DCVG3s9w.js → use-growth-stats-937CUj6j.js} +1 -1
- package/core/built/admin/assets/use-host-limits-D0Dv3tKA.js +1 -0
- package/core/built/admin/assets/{use-limiter-D2WRRx0H.js → use-limiter-CohWfzvK.js} +1 -1
- package/core/built/admin/assets/{use-navigate-with-base-path-BHPA228f.js → use-navigate-with-base-path-BkxcPj5l.js} +1 -1
- package/core/built/admin/assets/use-pintura-config-xgytjU35.js +1 -0
- package/core/built/admin/assets/{use-pintura-editor-BfN1UwzH.js → use-pintura-editor-CaV1mbfO.js} +1 -1
- package/core/built/admin/assets/{use-post-referrers-Czg47m8s.js → use-post-referrers-BCQI7fDg.js} +1 -1
- package/core/built/admin/assets/{use-reply-chain-data-ns0caK8k.js → use-reply-chain-data-CYRhoaxY.js} +1 -1
- package/core/built/admin/assets/{use-router-history-entry-uldn7zJO.js → use-router-history-entry-NOKcd--l.js} +1 -1
- package/core/built/admin/assets/{use-setting-group-DpcuCUDg.js → use-setting-group-bLKMwoBT.js} +1 -1
- package/core/built/admin/assets/{use-settings-navigation-CZjGrhsp.js → use-settings-navigation-B-qrriKD.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-DzJWobPR.js → use-simple-pagination-CNPd6Rf6.js} +1 -1
- package/core/built/admin/assets/use-staff-users-pRIMIyiW.js +1 -0
- package/core/built/admin/assets/{use-tinybird-query-CSnGXzZh.js → use-tinybird-query-CmdbCS9X.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-DTOKRR7e.js → use-tinybird-token-KLne235s.js} +1 -1
- package/core/built/admin/assets/{use-unsaved-changes-guard-CBzs-KPi.js → use-unsaved-changes-guard-7-ug0JdH.js} +1 -1
- package/core/built/admin/assets/use-upgrade-route-Dm_qqKr0.js +1 -0
- package/core/built/admin/assets/{use-url-input-DFr8lCbS.js → use-url-input-fvp-TpPx.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-D3KlGYv-.js +1 -0
- package/core/built/admin/assets/{users-Cg-OeGzC.js → users-DVNWrqg9.js} +1 -1
- package/core/built/admin/assets/{vendor-5753232c7d6ffb3c44e1eb0a02133953.js → vendor-2dd263291938d407802568d3357ec69e.js} +19 -17
- package/core/built/admin/assets/{virtual-list-BW-padMe.js → virtual-list-CZ3RK2Yf.js} +1 -1
- package/core/built/admin/assets/{web-C1v33ehA.js → web-ClEJsCAj.js} +2 -2
- package/core/built/admin/assets/web-X9rdnrtq.js +1 -0
- package/core/built/admin/assets/{zapier-modal-BBFfI6Ml.js → zapier-modal-DfVhV17j.js} +1 -1
- package/core/built/admin/index.html +19 -18
- package/core/server/adapters/jobs/InMemoryJobsBackend.js +74 -29
- package/core/server/api/endpoints/authentication.js +1 -2
- package/core/server/api/endpoints/authors-public.js +15 -5
- package/core/server/api/endpoints/emails.js +13 -0
- package/core/server/api/endpoints/index.js +8 -0
- package/core/server/api/endpoints/member-metafields-members.js +23 -0
- package/core/server/api/endpoints/member-metafields.js +33 -20
- package/core/server/api/endpoints/members-account.js +42 -0
- package/core/server/api/endpoints/newsletters-public.js +10 -1
- package/core/server/api/endpoints/pages-public.js +15 -5
- package/core/server/api/endpoints/posts-public.js +15 -5
- package/core/server/api/endpoints/tags-public.js +22 -3
- package/core/server/api/endpoints/tiers-checkout-config.js +2 -2
- package/core/server/api/endpoints/tiers-public.js +38 -1
- package/core/server/api/endpoints/users.js +2 -2
- package/core/server/api/endpoints/utils/api-filter-utils.js +170 -3
- package/core/server/api/endpoints/utils/public-cache-keys.js +3 -0
- package/core/server/api/endpoints/utils/serializers/input/authors.js +2 -0
- package/core/server/api/endpoints/utils/serializers/input/members.js +16 -2
- package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -0
- package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -0
- package/core/server/api/endpoints/utils/serializers/input/tags.js +2 -0
- package/core/server/api/endpoints/utils/serializers/output/emails.js +7 -0
- package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
- package/core/server/api/endpoints/utils/serializers/output/member-metafields.js +3 -3
- package/core/server/api/endpoints/utils/serializers/output/members-account.js +19 -0
- package/core/server/api/endpoints/utils/serializers/output/members-csv-transform.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/tiers.js +10 -2
- package/core/server/api/endpoints/utils/serializers/output/users.js +0 -10
- package/core/server/data/exporter/table-lists.js +3 -3
- package/core/server/data/migrations/versions/6.53/2026-07-15-20-22-53-add-members-custom-field-values.js +1 -1
- package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +10 -1
- package/core/server/data/migrations/versions/6.63/2026-09-03-10-07-03-rename-custom-field-tables-to-metafields.js +169 -0
- package/core/server/data/migrations/versions/6.63/2026-09-03-11-03-31-remove-member-custom-field-read-permissions.js +30 -0
- package/core/server/data/schema/fixtures/fixtures.json +0 -11
- package/core/server/data/schema/lib/default-index-name.js +8 -11
- package/core/server/data/schema/schema.js +18 -18
- package/core/server/data/seeders/README.md +48 -0
- package/core/server/data/tinybird/pipes/mv_hits.pipe +86 -50
- package/core/server/lib/db-types/count.js +16 -0
- package/core/server/lib/validate-password.js +81 -120
- package/core/server/models/action.js +4 -4
- package/core/server/models/base/plugins/filtered-collection.js +16 -0
- package/core/server/models/member.js +6 -6
- package/core/server/models/user.js +1 -1
- package/core/server/services/automations/automations-api.js +1 -1
- package/core/server/services/automations/database-automations-repository.js +11 -4
- package/core/server/services/email-service/CONTEXT.md +37 -0
- package/core/server/services/email-service/README.md +42 -0
- package/core/server/services/email-service/batch-sending-service.js +2 -0
- package/core/server/services/email-service/email-controller.js +18 -2
- package/core/server/services/email-service/email-service-wrapper.js +3 -0
- package/core/server/services/email-service/sending-status-schema.js +21 -0
- package/core/server/services/email-service/sending-status-serializers.js +33 -0
- package/core/server/services/email-service/sending-status-service.js +47 -0
- package/core/server/services/email-service/sending-status.js +111 -0
- package/core/server/services/email-suppression-list/email-suppression-list.js +0 -33
- package/core/server/services/email-suppression-list/mailgun-email-suppression-list.js +6 -7
- package/core/server/services/gifts/README.md +2 -2
- package/core/server/services/gifts/constants.js +1 -1
- package/core/server/services/gifts/gift-service.js +19 -57
- package/core/server/services/gifts/index.js +0 -2
- package/core/server/services/jobs-service/index.js +8 -0
- package/core/server/services/jobs-service/jobs-service.js +52 -3
- package/core/server/services/jobs-service/register-job-handlers.js +13 -2
- package/core/server/services/members/account-service.js +98 -0
- package/core/server/services/members/api.js +4 -4
- package/core/server/services/members/import-export/export/exporter.js +20 -20
- package/core/server/services/members/import-export/import/completion-email.js +6 -6
- package/core/server/services/members/import-export/import/importer.js +13 -13
- package/core/server/services/members/import-export/index.js +7 -7
- package/core/server/services/members/members-api/members-api.js +26 -6
- package/core/server/services/members/members-api/repositories/member-repository.js +4 -4
- package/core/server/services/members/members-api/services/member-bread-service.js +45 -39
- package/core/server/services/members/members-ssr.js +18 -0
- package/core/server/services/members/middleware.js +95 -81
- package/core/server/services/members/service.js +70 -42
- package/core/server/services/members/utils.js +9 -0
- package/core/server/services/members-metafields/access.js +28 -0
- package/core/server/services/{members-custom-fields → members-metafields}/actions.js +5 -5
- package/core/server/services/members-metafields/bindings-service.js +147 -0
- package/core/server/services/{members-custom-fields → members-metafields}/codec.js +4 -4
- package/core/server/services/{members-custom-fields → members-metafields}/config.js +1 -1
- package/core/server/services/{members-custom-fields → members-metafields}/definitions-service.js +17 -23
- package/core/server/services/{members-custom-fields → members-metafields}/filter.js +9 -9
- package/core/server/services/{members-custom-fields → members-metafields}/index.js +16 -7
- package/core/server/services/{members-custom-fields → members-metafields}/key.js +1 -1
- package/core/server/services/{members-custom-fields → members-metafields}/models.js +4 -4
- package/core/server/services/members-metafields/namespaces.js +34 -0
- package/core/server/services/{members-custom-fields → members-metafields}/queries.js +1 -1
- package/core/server/services/{members-custom-fields → members-metafields}/schema.js +16 -12
- package/core/server/services/{members-custom-fields → members-metafields}/serializers.js +6 -6
- package/core/server/services/{members-custom-fields → members-metafields}/values-service.js +32 -22
- package/core/server/services/mentions/mention-sending-service.js +26 -9
- package/core/server/services/mentions/send-webmentions-job.js +18 -0
- package/core/server/services/mentions/service.js +1 -31
- package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +2 -2
- package/core/server/services/stripe/stripe-service.js +4 -4
- package/core/server/services/tier-checkout-config/codec.js +2 -2
- package/core/server/services/tier-checkout-config/index.js +2 -1
- package/core/server/services/tier-checkout-config/models.js +2 -2
- package/core/server/services/tier-checkout-config/queries.js +8 -8
- package/core/server/services/tier-checkout-config/serializers.js +57 -0
- package/core/server/services/tier-checkout-config/service.js +1 -1
- package/core/server/services/tiers/service.js +3 -3
- package/core/server/services/url/router-filter.js +8 -10
- package/core/server/services/users.js +1 -19
- package/core/server/web/api/endpoints/admin/routes.js +1 -0
- package/core/server/web/members/account/index.js +2 -0
- package/core/server/web/members/account/routes.js +46 -0
- package/core/server/web/members/app.js +4 -18
- package/core/shared/config/defaults.json +1 -1
- package/core/shared/labs.js +4 -2
- package/package.json +22 -22
- package/pnpm-lock.yaml +513 -571
- package/pnpm-workspace.yaml +12 -12
- package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
- package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +0 -1
- package/core/built/admin/assets/automated-emails-D5VVMND9.js +0 -1
- package/core/built/admin/assets/automations-CzKt5fb8.js +0 -1
- package/core/built/admin/assets/chunk.598.7e056fabb47ce7dbd73f.js +0 -366
- package/core/built/admin/assets/comments-BLmCmyCs.js +0 -1
- package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +0 -2
- package/core/built/admin/assets/edit-profile-C5Asm4LA.js +0 -1
- package/core/built/admin/assets/editor-REokrzci.js +0 -8
- package/core/built/admin/assets/filter-sources-BO9xUPj7.js +0 -1
- package/core/built/admin/assets/filters-CRUWecfY.js +0 -1
- package/core/built/admin/assets/growth-BWIu-6xj.js +0 -3
- package/core/built/admin/assets/growth-DU29oxeA.js +0 -1
- package/core/built/admin/assets/hooks-CuEZV2-q.js +0 -2
- package/core/built/admin/assets/index-6MkPdCtr.js +0 -4
- package/core/built/admin/assets/index-Bn7QhcZu.css +0 -2
- package/core/built/admin/assets/index.es-CNnuNH0d.js +0 -1
- package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +0 -2
- package/core/built/admin/assets/label-picker-KVoo91sh.js +0 -1
- package/core/built/admin/assets/layout-Bjv2Ll-5.js +0 -1
- package/core/built/admin/assets/link-helpers-MVDdnFCY.js +0 -1
- package/core/built/admin/assets/member-detail-CdJF6Agw.js +0 -1
- package/core/built/admin/assets/members-DjQbq9Z2.js +0 -4
- package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +0 -1
- package/core/built/admin/assets/newsletter-BMMAuvgq.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +0 -1
- package/core/built/admin/assets/newsletters-DhNigJUh.js +0 -1
- package/core/built/admin/assets/onboarding-qg8Akovm.js +0 -1
- package/core/built/admin/assets/overview-BW8GLeYi.js +0 -1
- package/core/built/admin/assets/overview-BkXZNzaZ.js +0 -1
- package/core/built/admin/assets/pages-jgaFm69d.js +0 -1
- package/core/built/admin/assets/pages-route-CIUAQxtY.js +0 -1
- package/core/built/admin/assets/portal-modal-D4ceei3t.js +0 -1
- package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +0 -1
- package/core/built/admin/assets/post-analytics-ot7f6pih.js +0 -1
- package/core/built/admin/assets/post-analytics-provider-Bo1gmYaP.js +0 -1
- package/core/built/admin/assets/post-helpers-C5OQMBoi.js +0 -1
- package/core/built/admin/assets/post-share-modal-C-PaYZ_e.js +0 -1
- package/core/built/admin/assets/posts-DuGazgTb.js +0 -1
- package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +0 -2
- package/core/built/admin/assets/posts-route-D6xmS7Vf.js +0 -1
- package/core/built/admin/assets/profile-B8mx2yAu.js +0 -1
- package/core/built/admin/assets/radio-group-DczlLKOn.js +0 -1
- package/core/built/admin/assets/router-provider-B0gZyiGJ.js +0 -1
- package/core/built/admin/assets/schemas-DppqmpeJ.js +0 -64
- package/core/built/admin/assets/settings-DvfTNdHQ.js +0 -4
- package/core/built/admin/assets/stats-Rjmk5owg.js +0 -1
- package/core/built/admin/assets/stats-view-BGGmkmgv.js +0 -1
- package/core/built/admin/assets/tag-detail-BhXlOsCa.js +0 -2
- package/core/built/admin/assets/tags-ldukRApe.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +0 -1
- package/core/built/admin/assets/tiers-Nd_z4BZY.js +0 -1
- package/core/built/admin/assets/use-filter-params-BIni9taJ.js +0 -1
- package/core/built/admin/assets/use-host-limits-DZtR08oa.js +0 -1
- package/core/built/admin/assets/use-pintura-config-h-J0Lvta.js +0 -1
- package/core/built/admin/assets/use-staff-users-Csipb-O0.js +0 -1
- package/core/built/admin/assets/use-upgrade-route-DhRSo7at.js +0 -1
- package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +0 -1
- package/core/built/admin/assets/web-C4BKzn2T.js +0 -1
- package/core/server/services/email-suppression-list/in-memory-email-suppression-list.js +0 -39
- package/core/server/services/members-custom-fields/bindings-service.js +0 -120
- /package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js.LICENSE.txt → chunk.901.4ccc639821020230bcca.js.LICENSE.txt} +0 -0
- /package/core/server/services/{members-custom-fields → members-metafields}/storage.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-CmdbCS9X.js";import{i}from"./pagemenu-vgZVUVKR.js";import{_ as a,h as o}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as s,t as c}from"./router-provider-BSvTXgZY.js";import{_ as l,h as u,m as d}from"./dist-B3keLvjj.js";import{a as f}from"./heading-Dh5SFVjL.js";import{C as p}from"./shade-app-CcS3f8MZ-vwURazk8.js";import{L as m,_n as ee,t as h}from"./button-Dvcv1QSR.js";import{r as g}from"./trend-badge-CideVzQd.js";import{r as _,t as v}from"./tabs-eBBlxPp8.js";import{a as y,i as b,n as x,o as S,r as C,t as w}from"./card--VNbfgo3.js";import{a as T,c as E,i as D,l as O,n as k,o as te,r as A,s as j,t as M,u as N}from"./data-list-CA2jYGPq.js";import{t as ne}from"./empty-indicator-D9QdpuNX.js";import{a as P,i as re,n as ie,r as ae}from"./use-filter-params-JkZhIS8L.js";import{Di as oe,Dr as F,Fn as I,Fr as se,In as L,K as R,Ln as z,Pn as B,Rn as V,Tr as H,Y as ce,_i as le,kr as U,q as ue,qn as W,tr as de,zn as fe}from"./index-CgMCwsxN.js";import{t as G}from"./date-range-select-BY3K-ukj.js";import{a as K,c as pe,i as me,n as q,o as he,r as ge}from"./chart-helpers-FHywU0pj.js";import{n as J,r as Y,t as _e}from"./kpi-tabs-DEZHpKUt.js";import{a as ve}from"./filters-DxA_a4FP.js";import{t as ye}from"./use-analytics-data-DAIGcr2f.js";import{n as be,t as xe}from"./audience-ceV3XVHq.js";import{n as Se,t as Ce}from"./en-B1jX3WMs.js";import{n as we}from"./post-analytics-context-D0Mw-Pmv.js";import{r as Te,t as Ee}from"./post-analytics-header-OATo3X_r.js";import{n as X,r as De,t as Z}from"./kpi-helpers-Dq5jelmP.js";var Q=e(t(),1),$=n(),Oe=({data:e,range:t})=>{let[n]=a(),[r,i]=(0,Q.useState)(n.get(`tab`)||`visits`),o=X[r],s=pe(e||[],t,o.dataKey,`sum`)?.map(e=>{let t=Number(e[o.dataKey]);return{date:String(e.date),value:t,formattedValue:o.formatter(t),label:o.label}}),c=Z(e),l=ge(t,e||[],{fieldName:o.dataKey});return(0,$.jsx)(w,{children:(0,$.jsx)(x,{children:(0,$.jsxs)(v,{defaultValue:r,variant:`kpis`,children:[(0,$.jsxs)(_,{className:`-mx-6 hidden grid-cols-2 md:visible! md:grid!`,children:[(0,$.jsx)(J,{value:`visits`,onClick:()=>{i(`visits`)},children:(0,$.jsx)(Y,{color:X.visits.color,label:`Unique visitors`,value:c.visits})}),(0,$.jsx)(J,{value:`views`,onClick:()=>{i(`views`)},children:(0,$.jsx)(Y,{color:X.views.color,label:`Total views`,value:c.views})})]}),(0,$.jsxs)(H,{children:[(0,$.jsx)(se,{className:`md:hidden`,asChild:!0,children:(0,$.jsxs)(_e,{children:[r===`visits`&&(0,$.jsx)(Y,{color:`var(--chart-blue)`,label:`Unique visitors`,value:c.visits}),r===`views`&&(0,$.jsx)(Y,{color:`var(--chart-teal)`,label:`Total views`,value:c.views})]})}),(0,$.jsxs)(F,{align:`end`,className:`w-56`,children:[(0,$.jsx)(U,{onClick:()=>i(`visits`),children:`Unique visitors`}),(0,$.jsx)(U,{onClick:()=>i(`views`),children:`Total views`})]})]}),(0,$.jsx)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:(0,$.jsx)(g,{className:`-mb-3 aspect-auto h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:o.color,data:s,id:o.dataKey,range:l,showHours:!0,syncId:`overview-charts`})})]})})})},ke=e(Se(),1);ke.registerLocale(Ce);var Ae=e=>R[e]||ke.getName(e,`en`,{select:`alias`})||`Unknown`,je=e=>({"UNITED STATES":`US`,"UNITED STATES OF AMERICA":`US`,USA:`US`,"UNITED KINGDOM":`GB`,UK:`GB`,"GREAT BRITAIN":`GB`,NETHERLANDS:`NL`})[e.toUpperCase()]||(e.length>2?e.substring(0,2):e),Me=({tableHeader:e,data:t,onLocationClick:n})=>(0,$.jsxs)(M,{children:[e&&(0,$.jsxs)(T,{children:[(0,$.jsx)(D,{children:`Country`}),(0,$.jsx)(D,{children:`Visitors`})]}),(0,$.jsx)(A,{children:t.map(e=>{let t=Ae(`${e.location}`)||`Unknown`,r=n&&e.location!==`Unknown`,i=e.location?e.location.toLowerCase():`unknown`;return(0,$.jsxs)(N,{className:r?`cursor-pointer`:``,"data-testid":`location-row-${i}`,onClick:r?()=>n(e.location):void 0,children:[(0,$.jsx)(k,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,$.jsx)(te,{className:`group-hover/data:max-w-[calc(100%-140px)]`,children:(0,$.jsxs)(`div`,{className:`flex items-center space-x-3 overflow-hidden`,title:t||`Unknown`,children:[(0,$.jsx)(P,{countryCode:`${je(e.location)}`,fallback:(0,$.jsx)(`span`,{className:`flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white`,children:(0,$.jsx)(p.SkullAndBones,{className:`size-3`})})}),(0,$.jsx)(`div`,{className:`truncate font-medium`,children:t})]})}),(0,$.jsxs)(j,{children:[(0,$.jsx)(E,{children:d(Number(e.visits))}),(0,$.jsx)(O,{children:u(e.percentage)})]})]},e.location||`unknown`)})})]}),Ne=({data:e,isLoading:t,onLocationClick:n})=>{let r=e.slice(0,10);return(0,$.jsx)($.Fragment,{children:t?``:(0,$.jsx)($.Fragment,{children:e&&e.length>0&&(0,$.jsxs)(w,{className:`group/datalist`,"data-testid":`locations-card`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,$.jsxs)(y,{className:`p-0`,children:[(0,$.jsx)(S,{children:`Locations`}),(0,$.jsx)(C,{children:`Where are the readers of this post`})]}),(0,$.jsx)(f,{className:`mr-2`,children:`Visitors`})]}),(0,$.jsxs)(x,{className:`overflow-hidden`,children:[(0,$.jsx)(W,{}),(0,$.jsx)(Me,{data:r,tableHeader:!1,onLocationClick:n})]}),e.length>10&&(0,$.jsx)(b,{children:(0,$.jsxs)(B,{children:[(0,$.jsx)(fe,{asChild:!0,children:(0,$.jsxs)(h,{variant:`outline`,children:[`View all `,(0,$.jsx)(m,{})]})}),(0,$.jsxs)(I,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,$.jsxs)(z,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,$.jsx)(V,{children:`Top locations`}),(0,$.jsx)(L,{children:`Where are the readers of this post`})]}),(0,$.jsx)(`div`,{className:`group/datalist`,children:(0,$.jsx)(Me,{data:e,tableHeader:!0,onLocationClick:n})})]})]})})]})})})},Pe=()=>{let e=s(),{postId:t}=o(),{statsConfig:n,isLoading:a,site:u}=ye(),{range:d,setRange:f,post:p,isPostLoading:m}=we(),{data:h}=le(),g=oe(),_=(0,Q.useRef)(null),{filters:v,setFilters:y}=ae({supportedFields:ie,trackingSource:`post-analytics`}),b=(0,Q.useMemo)(()=>xe(v.find(e=>e.field===`audience`)?.values),[v]);(0,Q.useEffect)(()=>{!m&&p?.email_only&&e(`/posts/analytics/${t}`)},[m,p?.email_only,e,t]);let S=(0,Q.useMemo)(()=>{if(!p?.published_at)return ue.allTime.value;let e=he(p.published_at),{startDate:t,endDate:n}=K(d);return n.diff(t,`days`)+1>e?e:d},[p?.published_at,d]),{startDate:C,endDate:T,timezone:E}=K(S),D=(0,Q.useCallback)(()=>{let e=l(_.current);e&&e.scrollTo({top:0,behavior:`smooth`})},[]),O=(0,Q.useMemo)(()=>{let e={};return v.forEach(t=>{let n=t.field,r=t.values;if(n===`audience`)return;let i=r&&r.length>0&&r[0]!==null&&r[0]!==void 0,a=n===`source`&&r?.[0]===``;if(i&&(r[0]!==``||a)){let t=String(r[0]);e[n]=t}}),e},[v]),k=(0,Q.useCallback)((e,t)=>{y(n=>n.find(t=>t.field===e)?n.map(n=>n.field===e?{...n,values:[t]}:n):[...n,ve(e,`is`,[t])]),D()},[y,D]),te=(0,Q.useCallback)(e=>k(`location`,e),[k]),A=(0,Q.useCallback)(e=>k(`source`,e),[k]),j=(0,Q.useMemo)(()=>{let e={site_uuid:n?.id||``,date_from:q(C),date_to:q(T),timezone:E,member_status:be(b),post_uuid:``,...O};return!m&&p?.uuid?{...e,post_uuid:p.uuid}:e},[m,p,n?.id,C,T,E,b,O]),{data:M,loading:N}=r({endpoint:`api_kpis`,statsConfig:n,params:j}),{data:P,loading:F}=r({endpoint:`api_top_locations`,statsConfig:n,params:j}),{data:I,loading:se}=r({endpoint:`api_top_sources`,statsConfig:n,params:j}),L=(0,Q.useMemo)(()=>P?.reduce((e,t)=>e+Number(t.visits),0)||0,[P]),R=(0,Q.useMemo)(()=>I?I.reduce((e,t)=>e+Number(t.visits||0),0):0,[I]),z=u.url,B=u.icon,V=(0,Q.useMemo)(()=>{let e=P?.map(e=>({location:String(e.location),visits:Number(e.visits),percentage:L>0?Number(e.visits)/L:0,isUnknown:ce.includes(String(e.location))}))||[],t=e.filter(e=>!e.isUnknown),n=e.filter(e=>e.isUnknown),r=n.length>0?[{location:`Unknown`,visits:n.reduce((e,t)=>e+t.visits,0),percentage:n.reduce((e,t)=>e+t.percentage,0)}]:[];return[...t,...r]},[P,L]),H=a||m||N||F||se,U=Z(M),W=v.length>0;return h?.settings&&!g?(0,$.jsx)(c,{to:`/posts/analytics/${t}`,replace:!0}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(Ee,{currentTab:`Web`,children:[W&&(0,$.jsx)(i,{children:(0,$.jsx)(G,{range:d,onRangeChange:f})}),(0,$.jsxs)(i,{className:`${W?`mt-0! [grid-area:subactions] lg:mt-[25px]!`:`[grid-area:actions]`}`,children:[(0,$.jsx)(re,{filters:v,postUuid:p?.uuid,range:d,onChange:y}),!W&&(0,$.jsx)(G,{range:d,onRangeChange:f})]})]}),(0,$.jsx)(Te,{ref:_,children:H?(0,$.jsx)(w,{className:`size-full`,variant:`plain`,children:(0,$.jsx)(x,{className:`size-full items-center justify-center`,children:(0,$.jsx)(de,{})})}):M&&M.length!==0&&U.visits!==`0`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Oe,{data:M,range:S}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[(0,$.jsx)(Ne,{data:V,isLoading:F,onLocationClick:te}),(0,$.jsx)(De,{data:I,range:S,siteIcon:B,siteUrl:z,totalVisitors:R,onSourceClick:A})]})]}):(0,$.jsx)(`div`,{className:`grow`,children:(0,$.jsx)(ne,{className:`h-full`,description:`Try adjusting filters to see more data.`,title:`No visitors ${me(d)}`,children:(0,$.jsx)(ee,{strokeWidth:1.5})})})})]})};export{Pe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{f as i,p as a}from"./hooks-CuEZV2-q.js";import{Tr as o,t as s}from"./button-eNMKQWXr.js";import{o as c,t as l}from"./use-settings-navigation-CZjGrhsp.js";import{i as u,n as d,r as f,t as p}from"./action-list-C4v0-du8.js";import{t as ee}from"./use-host-limits-DZtR08oa.js";import{n as m}from"./confirmation-context-CBM8G0Vj.js";import{n as h}from"./integrations-Bjbu86Z0.js";import{t as te}from"./api-keys-Ck-Yteiv.js";import{t as ne}from"./integration-header-Bm6IDb1A.js";import{t as re}from"./api-keys-3-0vJC3Y.js";import{t as ie}from"./brand-icon-CrIGOA3Z.js";var ae=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,g=e(n(),1),_=r(),v=(e,t)=>`${e}-${t}`,y=()=>{let[e,t]=(0,g.useState)(``),[n,r]=(0,g.useState)(!1),i=(0,g.useRef)(new Map),[a,o]=(0,g.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,g.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,g.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,g.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,g.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,g.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,_.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return g.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},b=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,x=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,S=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,C=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,w=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,T=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,E=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,D=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,O=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,k=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,A=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,j=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,M=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,N=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,P=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,F=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,I=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,L=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,R=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,z=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,B=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:F,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:I},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:L}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:S},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:O},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:P},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:R},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:k},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:w},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:x},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:b},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:T},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:z},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:D},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:C},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:E},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:A},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:N},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:M},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:j}],V=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,H=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,U=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,W=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,G=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,K=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,q=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,J=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,oe=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,se=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,ce=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:H,appImage:oe,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:U,appImage:J,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:W,appImage:ce,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:G,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:U,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:V,appImage:K,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:W,appImage:se,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:V,appImage:q,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,g.createContext)({officialThemes:B,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),Q=()=>(0,g.useContext)(Z),le=()=>Q().officialThemes,$=()=>Q().search,ue=()=>Q().upgradeStatus,de=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},fe=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},pe=t({default:()=>me});function me(){let{updateRoute:e}=l(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=h(),{mutateAsync:r}=re(),v=a(),{confirm:y}=m(),[b,x]=(0,g.useState)(!1),S=ee()?.customIntegrations?.disabled,C=n.find(({slug:e})=>e===`zapier`),w=C?.api_keys?.find(e=>e.type===`admin`);return(0,g.useEffect)(()=>{S&&e(`integrations`)},[S,e]),(0,_.jsxs)(c,{cancelLabel:``,footer:(0,_.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,_.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by`,` `,(0,_.jsx)(`span`,{children:(0,_.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:ae})})]}),(0,_.jsx)(s,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,_.jsx)(ne,{detail:`Automation for your favorite apps`,extra:(0,_.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,_.jsx)(te,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:w?.secret,hint:b?(0,_.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!C||!w||(x(!1),y({title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await r({integrationId:C.id,apiKeyId:w.id}),x(!0),e?.remove()}catch(e){v(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+i().subdir}]})}),icon:(0,_.jsx)(ie,{name:`zapier`,size:56}),title:`Zapier`}),(0,_.jsx)(p,{children:t.map(e=>(0,_.jsxs)(d,{hover:!1,children:[(0,_.jsx)(u,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,_.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,_.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,_.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,_.jsx)(o,{className:`size-3`}),(0,_.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,_.jsx)(`span`,{children:e.title})]})}),(0,_.jsx)(f,{visibility:`hover`,children:(0,_.jsx)(s,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,_.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{$ as a,X as c,y as d,le as i,B as l,Z as n,de as o,fe as r,ue as s,pe as t,v as u};
|
|
1
|
+
import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{f as i,p as a}from"./hooks-Cy_-oZ4o.js";import{Dr as o,t as s}from"./button-Dvcv1QSR.js";import{o as c,t as l}from"./use-settings-navigation-B-qrriKD.js";import{i as u,n as d,r as f,t as p}from"./action-list-C4v0-du8.js";import{t as ee}from"./use-host-limits-D0Dv3tKA.js";import{t as m}from"./brand-icon-CrIGOA3Z.js";import{n as h}from"./confirmation-context-DwXX_Y5h.js";import{n as te}from"./integrations-B4kuRBFY.js";import{t as ne}from"./api-keys-BoeacM-s.js";import{t as re}from"./integration-header-Bm6IDb1A.js";import{t as ie}from"./api-keys-BGPzLHzA.js";var ae=``+new URL(`zapier-logo-D8a11oW_.svg`,import.meta.url).href,g=e(n(),1),_=r(),v=(e,t)=>`${e}-${t}`,y=()=>{let[e,t]=(0,g.useState)(``),[n,r]=(0,g.useState)(!1),i=(0,g.useRef)(new Map),[a,o]=(0,g.useState)(new Set),s=t=>t.length?t.some(t=>t.toLowerCase().includes(e.toLowerCase())):!0,c=(0,g.useCallback)((t,n)=>{i.current.set(t,n),(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&o(e=>new Set(e).add(t))},[e]),l=(0,g.useCallback)(e=>{i.current.delete(e),o(t=>{let n=new Set(t);return n.delete(e),n})},[]);(0,g.useEffect)(()=>{let t=new Set;i.current.forEach((n,r)=>{(!e||n.some(t=>t.toLowerCase().includes(e.toLowerCase())))&&t.add(r)}),o(t)},[e]);let u=(0,g.useCallback)(e=>a.size===1&&a.has(e),[a]),d=(0,g.useCallback)(()=>a,[a]),f=t=>{if(!e)return t;if(typeof t==`string`){let n=e.split(/\s+/).map(e=>e.toLowerCase()),r=n.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),i=t.split(RegExp(`(${r})`,`gi`)),a=new Map;return i.map(e=>{if(!n.includes(e.toLowerCase()))return e;let t=(a.get(e)??0)+1;return a.set(e,t),(0,_.jsx)(`span`,{className:`bg-yellow-500/40`,children:e},`${e}-${t}`)})}else if(Array.isArray(t))return t.map(e=>f(e));else if(t&&typeof t==`object`&&t)return g.Children.map(t,e=>e&&typeof e==`object`&&`props`in e?f(e.props.children):e);else return t};return{filter:e,setFilter:t,checkVisible:s,highlightKeywords:f,noResult:n,setNoResult:r,registerComponent:c,unregisterComponent:l,getVisibleComponents:d,isOnlyVisibleComponent:u}},b=``+new URL(`Alto-DoS3yH_j.png`,import.meta.url).href,x=``+new URL(`Bulletin-BUpcurG5.png`,import.meta.url).href,S=``+new URL(`Casper-ASA9Ix4v.png`,import.meta.url).href,C=``+new URL(`Dawn-aeEVEPie.png`,import.meta.url).href,w=``+new URL(`Digest-DJl0U_FG.png`,import.meta.url).href,T=``+new URL(`Dope-D_CgP0p0.png`,import.meta.url).href,E=``+new URL(`Ease-B4NuA7sj.png`,import.meta.url).href,D=``+new URL(`Edge-BPZxvKka.png`,import.meta.url).href,O=``+new URL(`Edition-cIDLjlhj.png`,import.meta.url).href,k=``+new URL(`Episode-D7bgV2bY.png`,import.meta.url).href,A=``+new URL(`Headline-BFXOunIb.png`,import.meta.url).href,j=``+new URL(`Journal-D3UW9T2b.png`,import.meta.url).href,M=``+new URL(`London-CSCVHwS0.png`,import.meta.url).href,N=``+new URL(`Ruby-DVEXVMTx.png`,import.meta.url).href,P=``+new URL(`Solo-c-yPo0gw.png`,import.meta.url).href,F=``+new URL(`Source-V-WXZXnS.png`,import.meta.url).href,I=``+new URL(`Source-Magazine-Czq1p0a_.png`,import.meta.url).href,L=``+new URL(`Source-Newsletter-CwTcfhJ-.png`,import.meta.url).href,R=``+new URL(`Taste-U2cRR2yO.png`,import.meta.url).href,z=``+new URL(`Wave-DE2aI-FM.png`,import.meta.url).href,B=[{name:`Source`,category:`News`,previewUrl:`https://source.ghost.io/`,ref:`default`,image:F,variants:[{category:`Magazine`,previewUrl:`https://source-magazine.ghost.io/`,image:I},{category:`Newsletter`,previewUrl:`https://source-newsletter.ghost.io/`,image:L}]},{name:`Casper`,category:`Blog`,previewUrl:`https://demo.ghost.io/`,ref:`TryGhost/Casper`,image:S},{name:`Edition`,category:`Newsletter`,url:`https://github.com/TryGhost/Edition`,previewUrl:`https://edition.ghost.io/`,ref:`TryGhost/Edition`,image:O},{name:`Solo`,category:`Blog`,url:`https://github.com/TryGhost/Solo`,previewUrl:`https://solo.ghost.io`,ref:`TryGhost/Solo`,image:P},{name:`Taste`,category:`Blog`,url:`https://github.com/TryGhost/Taste`,previewUrl:`https://taste.ghost.io`,ref:`TryGhost/Taste`,image:R},{name:`Episode`,category:`Podcast`,url:`https://github.com/TryGhost/Episode`,previewUrl:`https://episode.ghost.io`,ref:`TryGhost/Episode`,image:k},{name:`Digest`,category:`Newsletter`,url:`https://github.com/TryGhost/Digest`,previewUrl:`https://digest.ghost.io/`,ref:`TryGhost/Digest`,image:w},{name:`Bulletin`,category:`Newsletter`,url:`https://github.com/TryGhost/Bulletin`,previewUrl:`https://bulletin.ghost.io/`,ref:`TryGhost/Bulletin`,image:x},{name:`Alto`,category:`Blog`,url:`https://github.com/TryGhost/Alto`,previewUrl:`https://alto.ghost.io`,ref:`TryGhost/Alto`,image:b},{name:`Dope`,category:`Magazine`,url:`https://github.com/TryGhost/Dope`,previewUrl:`https://dope.ghost.io`,ref:`TryGhost/Dope`,image:T},{name:`Wave`,category:`Podcast`,url:`https://github.com/TryGhost/Wave`,previewUrl:`https://wave.ghost.io`,ref:`TryGhost/Wave`,image:z},{name:`Edge`,category:`Photography`,url:`https://github.com/TryGhost/Edge`,previewUrl:`https://edge.ghost.io`,ref:`TryGhost/Edge`,image:D},{name:`Dawn`,category:`Newsletter`,url:`https://github.com/TryGhost/Dawn`,previewUrl:`https://dawn.ghost.io/`,ref:`TryGhost/Dawn`,image:C},{name:`Ease`,category:`Documentation`,url:`https://github.com/TryGhost/Ease`,previewUrl:`https://ease.ghost.io`,ref:`TryGhost/Ease`,image:E},{name:`Headline`,category:`News`,url:`https://github.com/TryGhost/Headline`,previewUrl:`https://headline.ghost.io`,ref:`TryGhost/Headline`,image:A},{name:`Ruby`,category:`Magazine`,url:`https://github.com/TryGhost/Ruby`,previewUrl:`https://ruby.ghost.io`,ref:`TryGhost/Ruby`,image:N},{name:`London`,category:`Photography`,url:`https://github.com/TryGhost/London`,previewUrl:`https://london.ghost.io`,ref:`TryGhost/London`,image:M},{name:`Journal`,category:`Newsletter`,url:`https://github.com/TryGhost/Journal`,previewUrl:`https://journal.ghost.io/`,ref:`TryGhost/Journal`,image:j}],V=``+new URL(`orb-black-1-bYPPSSAp.png`,import.meta.url).href,H=``+new URL(`orb-black-2-C-rcujeh.png`,import.meta.url).href,U=``+new URL(`orb-black-3-DTkwRv_1.png`,import.meta.url).href,W=``+new URL(`orb-black-4-BXF3fMuE.png`,import.meta.url).href,G=``+new URL(`orb-black-5-94Eda1ek.png`,import.meta.url).href,K=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201818.2%202500'%20style='enable-background:new%200%200%201818.2%202500'%20xml:space='preserve'%3e%3ctitle%3egoogle-docs%3c/title%3e%3cpath%20d='M1136.4%200h-966C79.6%200%200%2079.5%200%20170.5v2159.1c0%2090.9%2079.5%20170.5%20170.5%20170.5h1477.3c90.9%200%20170.5-79.5%20170.5-170.5V681.8l-397.7-284.1L1136.4%200z'%20style='fill:%234285f4'/%3e%3cpath%20d='M454.5%201818.2h909.1v-113.6h-909l-.1%20113.6zm0%20227.3h681.8v-113.6H454.5v113.6zm0-795.5v113.6h909.1V1250H454.5zm0%20340.9h909.1v-113.6h-909l-.1%20113.6z'%20style='fill:%23f1f1f1'/%3e%3cpath%20d='M1136.4%200v511.4c0%2090.9%2079.5%20170.4%20170.4%20170.4h511.4L1136.4%200z'%20style='fill:%23a1c2fa'/%3e%3c/svg%3e`,q=``+new URL(`mailchimp-DwTEN-tS.svg`,import.meta.url).href,J=`data:image/svg+xml,%3csvg%20height='546'%20viewBox='0%200%20569%20546'%20width='569'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epatreon%3c/title%3e%3cg%20fill='%23FF424D'%3e%3ccircle%20cx='362.59'%20cy='204.59'%20data-fill='1'%20r='204.59'/%3e%3cpath%20data-fill='1'%20d='M0%200h100v545.8H0z'/%3e%3c/g%3e%3c/svg%3e`,Y=`data:image/svg+xml,%3csvg%20width='152'%20height='179'%20viewBox='0%200%20152%20179'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3epaypal%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l-2.365%2015a4.168%204.168%200%200%200%204.118%204.818H69.76a6.948%206.948%200%200%200%206.863-5.865l.283-1.468%205.442-34.507.351-1.907a6.947%206.947%200%200%201%206.862-5.865h4.322c27.984%200%2049.896-11.37%2056.299-44.25%202.675-13.74%201.292-25.208-5.783-33.27-2.14-2.439-4.802-4.455-7.907-6.1'%20fill='%23238EC2'/%3e%3cpath%20d='M136.492%2045.453c2.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27l8.609-54.588-.267%201.711c.609-3.86%203.909-6.704%207.817-6.704h16.288c31.989%200%2057.037-12.996%2064.356-50.582.217-1.113.402-2.191.568-3.251'%20fill='%2320274F'/%3e%3cpath%20d='M56.978%2045.638a6.945%206.945%200%200%201%206.863-5.866h43.514c5.155%200%209.961.337%2014.356%201.045%201.256.202%202.478.435%203.665.698a53.92%2053.92%200%200%201%203.455.885c.558.162%201.106.333%201.646.512%202.157.717%204.166%201.562%206.015%202.541%202.179-13.894-.015-23.348-7.53-31.911C120.688%204.114%20105.741.075%2086.617.075H31.105a7.943%207.943%200%200%200-7.846%206.705L.144%20153.36a4.765%204.765%200%200%200%204.707%205.507h34.27L56.978%2045.638'%20fill='%23253667'/%3e%3c/g%3e%3c/svg%3e`,oe=``+new URL(`slackicon-37ETtpm7.png`,import.meta.url).href,se=`data:image/svg+xml,%3csvg%20width='86'%20height='89'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3etypeform%3c/title%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M40.28%2087.561c12.464.154%2021.16-3.994%2030.135-12.175%208.975-8.18%2014.306-16.867%2014.741-28.73.436-11.862-3.412-21.43-12.564-30.581C63.441%206.923%2051.64.9%2039.4.899%2027.158.898%2018.967%206.252%2011.385%2016.07c-7.581%209.818-9.237%2022.212-9.894%2033.921-.657%2011.71-1.15%2017.111%206.608%2024.625%207.758%207.514%2019.718%2012.791%2032.182%2012.945z'%20stroke='%23262627'/%3e%3cpath%20d='M29.136%2037.976v-4.885h25.918v4.885H44.679v27.998H39.51V37.976z'%20fill='%23262627'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/svg%3e`,ce=``+new URL(`zero-bounce-lzY95s9E.png`,import.meta.url).href,X=[{ghostImage:H,appImage:oe,title:`Share scheduled posts with your team in Slack`,url:`https://zapier.com/webintent/create-zap?template=359499`},{ghostImage:U,appImage:J,title:`Connect Patreon to your Ghost membership site`,url:`https://zapier.com/webintent/create-zap?template=75801`},{ghostImage:W,appImage:ce,title:`Protect email delivery with email verification`,url:`https://zapier.com/webintent/create-zap?template=359415`},{ghostImage:G,appImage:Y,title:`Add members for successful sales in PayPal`,url:`https://zapier.com/webintent/create-zap?template=184423`},{ghostImage:U,appImage:Y,title:`Unsubscribe members who cancel a subscription in PayPal`,url:`https://zapier.com/webintent/create-zap?template=359348`},{ghostImage:V,appImage:K,title:`Send new post drafts from Google Docs to Ghost`,url:`https://zapier.com/webintent/create-zap?template=50924`},{ghostImage:W,appImage:se,title:`Survey new members using Typeform`,url:`https://zapier.com/webintent/create-zap?template=359407`},{ghostImage:V,appImage:q,title:`Sync email subscribers in Ghost + Mailchimp`,url:`https://zapier.com/webintent/create-zap?template=359342`}],Z=(0,g.createContext)({officialThemes:B,zapierTemplates:X,search:{filter:``,setFilter:()=>{},checkVisible:()=>!0,highlightKeywords:()=>``,noResult:!1,setNoResult:()=>{},registerComponent:()=>{},unregisterComponent:()=>{},getVisibleComponents:()=>new Set,isOnlyVisibleComponent:()=>!1},sortingState:[],offersShowArchived:!1,setOffersShowArchived:()=>{}}),Q=()=>(0,g.useContext)(Z),le=()=>Q().officialThemes,$=()=>Q().search,ue=()=>Q().upgradeStatus,de=()=>{let{sortingState:e,setSortingState:t}=Q();return{sortingState:e,setSortingState:t}},fe=()=>{let{offersShowArchived:e,setOffersShowArchived:t}=Q();return{offersShowArchived:e,setOffersShowArchived:t}},pe=t({default:()=>me});function me(){let{updateRoute:e}=l(),{zapierTemplates:t}=Q(),{data:{integrations:n}={integrations:[]}}=te(),{mutateAsync:r}=ie(),v=a(),{confirm:y}=h(),[b,x]=(0,g.useState)(!1),S=ee()?.customIntegrations?.disabled,C=n.find(({slug:e})=>e===`zapier`),w=C?.api_keys?.find(e=>e.type===`admin`);return(0,g.useEffect)(()=>{S&&e(`integrations`)},[S,e]),(0,_.jsxs)(c,{cancelLabel:``,footer:(0,_.jsxs)(`div`,{className:`mx-8 flex w-full items-center justify-between`,children:[(0,_.jsxs)(`a`,{className:`mt-1 self-baseline font-bold`,href:`https://zapier.com/apps/ghost/integrations?utm_medium=partner_api&utm_source=widget&utm_campaign=Widget`,rel:`noopener noreferrer`,target:`_blank`,children:[`View more Ghost integrations powered by`,` `,(0,_.jsx)(`span`,{children:(0,_.jsx)(`img`,{alt:`Zapier`,className:`relative top-[-2px] inline-block`,src:ae})})]}),(0,_.jsx)(s,{type:`button`,onClick:()=>{e(`integrations`)},children:`Close`})]}),okLabel:`Close`,okVariant:`default`,testId:`zapier-modal`,title:``,stickyFooter:!0,onClose:()=>{e(`integrations`)},onOk:()=>{e(`integrations`)},children:[(0,_.jsx)(re,{detail:`Automation for your favorite apps`,extra:(0,_.jsx)(`div`,{className:`mt-1 -mb-4`,children:(0,_.jsx)(ne,{keys:[{id:`admin-api-key`,label:`Admin API key`,text:w?.secret,hint:b?(0,_.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>{!C||!w||(x(!1),y({title:`Regenerate Admin API Key`,prompt:`You will need to locate the Ghost App within your Zapier account and click on "Reconnect" to enter the new Admin API Key.`,okLabel:`Regenerate Admin API Key`,onOk:async e=>{try{await r({integrationId:C.id,apiKeyId:w.id}),x(!0),e?.remove()}catch(e){v(e)}}}))}},{id:`api-url`,label:`API URL`,text:window.location.origin+i().subdir}]})}),icon:(0,_.jsx)(m,{name:`zapier`,size:56}),title:`Zapier`}),(0,_.jsx)(p,{children:t.map(e=>(0,_.jsxs)(d,{hover:!1,children:[(0,_.jsx)(u,{className:`flex items-center gap-3 py-2 pl-3`,children:(0,_.jsxs)(`div`,{className:`flex flex-col gap-4 md:flex-row md:items-center`,children:[(0,_.jsxs)(`div`,{className:`flex shrink-0 flex-nowrap items-center gap-2`,children:[(0,_.jsx)(`img`,{className:`size-8 object-contain dark:invert`,role:`presentation`,src:e.ghostImage}),(0,_.jsx)(o,{className:`size-3`}),(0,_.jsx)(`img`,{className:`size-8 object-contain`,role:`presentation`,src:e.appImage})]}),(0,_.jsx)(`span`,{children:e.title})]})}),(0,_.jsx)(f,{visibility:`hover`,children:(0,_.jsx)(s,{className:`h-auto p-0 font-semibold whitespace-nowrap text-[#FF4A00] hover:text-[#FF4A00]`,variant:`link`,asChild:!0,children:(0,_.jsx)(`a`,{href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:`Use this Zap`})})})]},e.url))})]})}export{$ as a,X as c,y as d,le as i,B as l,Z as n,de as o,fe as r,ue as s,pe as t,v as u};
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<link rel="stylesheet" href="./assets/vendor-3bf602dfa6463c3400ffd81697767274.css">
|
|
5
|
-
<link rel="stylesheet" href="./assets/ghost-
|
|
6
|
-
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.
|
|
5
|
+
<link rel="stylesheet" href="./assets/ghost-8fd5bb799356bbefb254210ba7e1236d.css">
|
|
6
|
+
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.63%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22028fe71ec1%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%226cee18d2a5%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
|
|
7
7
|
|
|
8
8
|
<meta charset="UTF-8" />
|
|
9
9
|
|
|
@@ -20,37 +20,38 @@
|
|
|
20
20
|
|
|
21
21
|
<link rel="shortcut icon" href="./assets/favicon-C_q1KHzv.ico" />
|
|
22
22
|
<link rel="apple-touch-icon" href="./assets/apple-touch-icon-DhO18_4B.png" />
|
|
23
|
-
<script type="module" crossorigin src="./assets/index-
|
|
23
|
+
<script type="module" crossorigin src="./assets/index-CgMCwsxN.js"></script>
|
|
24
24
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-DAXXjFlN.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="./assets/react-Bb3IsNbi.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="./assets/jsx-runtime-DX3WBWVO.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="./assets/framework-provider-DqI25epG.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="./assets/dist-Ndy-PuGN.js">
|
|
29
|
-
<link rel="modulepreload" crossorigin href="./assets/hooks-
|
|
30
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
29
|
+
<link rel="modulepreload" crossorigin href="./assets/hooks-Cy_-oZ4o.js">
|
|
30
|
+
<link rel="modulepreload" crossorigin href="./assets/config-kSHvwdTG.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-DYl5dUZ5.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-DCsL4i4D.js">
|
|
33
|
+
<link rel="modulepreload" crossorigin href="./assets/feature-flag-overrides-context-DQjdJFAk.js">
|
|
33
34
|
<link rel="modulepreload" crossorigin href="./assets/dist-B3keLvjj.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="./assets/router-provider-
|
|
35
|
+
<link rel="modulepreload" crossorigin href="./assets/router-provider-BSvTXgZY.js">
|
|
35
36
|
<link rel="modulepreload" crossorigin href="./assets/text-BQDSDsKs.js">
|
|
36
37
|
<link rel="modulepreload" crossorigin href="./assets/heading-Dh5SFVjL.js">
|
|
37
38
|
<link rel="modulepreload" crossorigin href="./assets/lazy-component-COKiVB72.js">
|
|
38
39
|
<link rel="modulepreload" crossorigin href="./assets/dist-8YJUlf3B.js">
|
|
39
40
|
<link rel="modulepreload" crossorigin href="./assets/shade-app-CcS3f8MZ-vwURazk8.js">
|
|
40
41
|
<link rel="modulepreload" crossorigin href="./assets/overlay-escape-C7XYQuvP.js">
|
|
41
|
-
<link rel="modulepreload" crossorigin href="./assets/button-
|
|
42
|
+
<link rel="modulepreload" crossorigin href="./assets/button-Dvcv1QSR.js">
|
|
42
43
|
<link rel="modulepreload" crossorigin href="./assets/dist-Dgt2cr6a.js">
|
|
43
44
|
<link rel="modulepreload" crossorigin href="./assets/Combination-B0l4MKVh.js">
|
|
44
45
|
<link rel="modulepreload" crossorigin href="./assets/dist-Dcsslyo72.js">
|
|
45
46
|
<link rel="modulepreload" crossorigin href="./assets/input-surface-BsrIZeSF.js">
|
|
46
47
|
<link rel="modulepreload" crossorigin href="./assets/skeleton-Ce9GgUpf.js">
|
|
47
|
-
<link rel="modulepreload" crossorigin href="./assets/use-navigate-with-base-path-
|
|
48
|
+
<link rel="modulepreload" crossorigin href="./assets/use-navigate-with-base-path-BkxcPj5l.js">
|
|
48
49
|
<link rel="modulepreload" crossorigin href="./assets/update-queries-C4CnvJaW.js">
|
|
49
|
-
<link rel="modulepreload" crossorigin href="./assets/users-
|
|
50
|
-
<link rel="modulepreload" crossorigin href="./assets/onboarding-
|
|
51
|
-
<link rel="modulepreload" crossorigin href="./assets/onboarding-
|
|
52
|
-
<link rel="modulepreload" crossorigin href="./assets/schemas-
|
|
53
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
50
|
+
<link rel="modulepreload" crossorigin href="./assets/users-DVNWrqg9.js">
|
|
51
|
+
<link rel="modulepreload" crossorigin href="./assets/onboarding-pXyct0Jm.js">
|
|
52
|
+
<link rel="modulepreload" crossorigin href="./assets/onboarding-CUuy9unR.js">
|
|
53
|
+
<link rel="modulepreload" crossorigin href="./assets/schemas-BoYdB6YU.js">
|
|
54
|
+
<link rel="stylesheet" crossorigin href="./assets/index-BHHXtR5C.css">
|
|
54
55
|
</head>
|
|
55
56
|
<body class="react-admin">
|
|
56
57
|
<div id="ember-alerts-wormhole"></div>
|
|
@@ -69,10 +70,10 @@
|
|
|
69
70
|
<div id="ember-modal-wormhole"></div>
|
|
70
71
|
<div id="ember-liquid-wormhole"></div>
|
|
71
72
|
<div id="ember-notifications-wormhole"></div>
|
|
72
|
-
<script src="./assets/vendor-
|
|
73
|
-
<script src="./assets/chunk.
|
|
74
|
-
<script src="./assets/chunk.
|
|
75
|
-
<script src="./assets/chunk.524.
|
|
76
|
-
<script src="./assets/ghost-
|
|
73
|
+
<script src="./assets/vendor-2dd263291938d407802568d3357ec69e.js"></script>
|
|
74
|
+
<script src="./assets/chunk.901.4ccc639821020230bcca.js"></script>
|
|
75
|
+
<script src="./assets/chunk.254.035b85ec456ebbd7336b.js"></script>
|
|
76
|
+
<script src="./assets/chunk.524.e6975095fccdf22d90f8.js"></script>
|
|
77
|
+
<script src="./assets/ghost-b4e8a403baba61905cd7560e30b9732d.js"></script>
|
|
77
78
|
</body>
|
|
78
79
|
</html>
|
|
@@ -10,6 +10,9 @@ const later = require('@breejs/later');
|
|
|
10
10
|
const logging = require('@tryghost/logging');
|
|
11
11
|
const DEFAULT_SHUTDOWN_TIMEOUT_MS = 10000;
|
|
12
12
|
const DEFAULT_CONCURRENCY = 3;
|
|
13
|
+
// Envelopes with no routing share this lane; routing to "default" by name is
|
|
14
|
+
// the same lane, not a collision.
|
|
15
|
+
const DEFAULT_QUEUE = 'default';
|
|
13
16
|
function hasSeconds(cron) {
|
|
14
17
|
return cron.trim().split(/\s+/).length >= 6;
|
|
15
18
|
}
|
|
@@ -29,60 +32,99 @@ function delay(ms) {
|
|
|
29
32
|
setTimeout(resolve, ms);
|
|
30
33
|
});
|
|
31
34
|
}
|
|
35
|
+
// Work only flows between start() and shutdown(): boot starts the service
|
|
36
|
+
// before the web app is mounted or any recurring job is scheduled, so an
|
|
37
|
+
// enqueue or recurring registration before start() is a boot-ordering bug and
|
|
38
|
+
// throws, while an enqueue after shutdown() is a benign shutdown race and is
|
|
39
|
+
// dropped.
|
|
32
40
|
class InMemoryJobsBackend extends adapter_base_jobs_1.JobsBackendBase {
|
|
33
41
|
_processor;
|
|
34
42
|
_stopped;
|
|
35
|
-
|
|
36
|
-
|
|
43
|
+
_defaultConcurrency;
|
|
44
|
+
_queues;
|
|
37
45
|
_recurring;
|
|
38
46
|
constructor(config = {}) {
|
|
39
47
|
super();
|
|
40
48
|
this._processor = null;
|
|
41
49
|
this._stopped = false;
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
50
|
+
this._defaultConcurrency = resolveConcurrency(config.concurrency);
|
|
51
|
+
this._queues = new Map();
|
|
44
52
|
this._recurring = new Map();
|
|
45
53
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// Paused until start() attaches a processor; enqueue buffers meanwhile.
|
|
49
|
-
queue.pause();
|
|
50
|
-
return queue;
|
|
54
|
+
_makeQueue(concurrency) {
|
|
55
|
+
return fastq_1.default.promise((envelope) => this._deliver(envelope), concurrency);
|
|
51
56
|
}
|
|
52
|
-
start({ processor }) {
|
|
57
|
+
start({ processor, queues }) {
|
|
58
|
+
const declared = new Map();
|
|
59
|
+
for (const [name, { concurrency }] of Object.entries(queues ?? {})) {
|
|
60
|
+
// A declaration the backend cannot satisfy must fail loudly here, never
|
|
61
|
+
// silently fall back (see the jobs-base README).
|
|
62
|
+
if (concurrency !== undefined && (!Number.isInteger(concurrency) || concurrency < 1)) {
|
|
63
|
+
throw new errors_1.default.IncorrectUsageError({
|
|
64
|
+
message: `Invalid concurrency for declared queue "${name}": ${JSON.stringify(concurrency)}. Expected a positive integer.`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
declared.set(name, concurrency ?? this._defaultConcurrency);
|
|
68
|
+
}
|
|
69
|
+
// State only changes once every declaration is valid, so a rejected
|
|
70
|
+
// start() never leaves a partially started backend that accepts work.
|
|
53
71
|
this._processor = processor;
|
|
54
72
|
this._stopped = false;
|
|
55
|
-
|
|
73
|
+
for (const [name, concurrency] of declared) {
|
|
74
|
+
this._queues.set(name, this._makeQueue(concurrency));
|
|
75
|
+
}
|
|
56
76
|
}
|
|
57
|
-
enqueue(envelope) {
|
|
77
|
+
enqueue(envelope, routing) {
|
|
58
78
|
if (this._stopped) {
|
|
59
79
|
return;
|
|
60
80
|
}
|
|
61
|
-
this.
|
|
62
|
-
}
|
|
63
|
-
async _deliver(envelope) {
|
|
64
|
-
const processor = this._processor;
|
|
65
|
-
if (!processor) {
|
|
81
|
+
if (!this._processor) {
|
|
66
82
|
throw new errors_1.default.IncorrectUsageError({
|
|
67
|
-
message:
|
|
83
|
+
message: `Cannot enqueue job "${envelope.type}" before the jobs backend is started.`,
|
|
68
84
|
});
|
|
69
85
|
}
|
|
86
|
+
const name = routing?.queue ?? DEFAULT_QUEUE;
|
|
87
|
+
let queue = this._queues.get(name);
|
|
88
|
+
if (!queue) {
|
|
89
|
+
// Lanes are created lazily: the default lane, and any queue name no
|
|
90
|
+
// handler declared, each get their own lane at the default concurrency.
|
|
91
|
+
queue = this._makeQueue(this._defaultConcurrency);
|
|
92
|
+
this._queues.set(name, queue);
|
|
93
|
+
}
|
|
94
|
+
queue.push(envelope);
|
|
95
|
+
}
|
|
96
|
+
async _deliver(envelope) {
|
|
70
97
|
try {
|
|
71
|
-
await
|
|
98
|
+
await this._processor(envelope);
|
|
72
99
|
}
|
|
73
100
|
catch (err) {
|
|
74
101
|
logging.error(`Job "${envelope.type}" delivery failed`, err);
|
|
75
102
|
}
|
|
76
103
|
}
|
|
77
|
-
scheduleRecurring(envelope, { cron }) {
|
|
104
|
+
scheduleRecurring(envelope, { cron }, routing) {
|
|
105
|
+
if (this._stopped) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!this._processor) {
|
|
109
|
+
throw new errors_1.default.IncorrectUsageError({
|
|
110
|
+
message: `Cannot schedule recurring job "${envelope.type}" before the jobs backend is started.`,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
78
113
|
// First schedule per type wins; a re-registration must not disturb a
|
|
79
114
|
// schedule that is already running (parity with a durable backend).
|
|
80
|
-
if (this.
|
|
115
|
+
if (this._recurring.has(envelope.type)) {
|
|
81
116
|
return;
|
|
82
117
|
}
|
|
83
118
|
const parsed = later.parse.cron(cron, hasSeconds(cron));
|
|
84
119
|
const timer = later.setInterval(() => {
|
|
85
|
-
|
|
120
|
+
// A throw inside a later timer callback would be an uncaughtException;
|
|
121
|
+
// a recurring tick must never take the process down.
|
|
122
|
+
try {
|
|
123
|
+
this.enqueue(envelope, routing);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
logging.error(`Recurring job "${envelope.type}" tick failed to enqueue`, err);
|
|
127
|
+
}
|
|
86
128
|
}, parsed);
|
|
87
129
|
this._recurring.set(envelope.type, timer);
|
|
88
130
|
}
|
|
@@ -99,14 +141,17 @@ class InMemoryJobsBackend extends adapter_base_jobs_1.JobsBackendBase {
|
|
|
99
141
|
for (const type of [...this._recurring.keys()]) {
|
|
100
142
|
this._clearRecurring(type);
|
|
101
143
|
}
|
|
102
|
-
const
|
|
103
|
-
queue
|
|
104
|
-
|
|
105
|
-
|
|
144
|
+
const queues = [...this._queues.values()];
|
|
145
|
+
for (const queue of queues) {
|
|
146
|
+
queue.kill();
|
|
147
|
+
}
|
|
148
|
+
const draining = queues.filter((queue) => !queue.idle());
|
|
149
|
+
if (draining.length > 0) {
|
|
150
|
+
await Promise.race([Promise.all(draining.map((queue) => queue.drained())), delay(timeoutMs)]);
|
|
106
151
|
}
|
|
107
|
-
//
|
|
108
|
-
// abandoned in-flight deliveries against its concurrency
|
|
109
|
-
this.
|
|
152
|
+
// Discard the queues so a re-boot never inherits this lifecycle's
|
|
153
|
+
// abandoned in-flight deliveries against its concurrency limits.
|
|
154
|
+
this._queues = new Map();
|
|
110
155
|
this._processor = null;
|
|
111
156
|
}
|
|
112
157
|
}
|
|
@@ -7,11 +7,10 @@ const web = require('../../web');
|
|
|
7
7
|
const models = require('../../models');
|
|
8
8
|
const auth = require('../../services/auth');
|
|
9
9
|
const invitations = require('../../services/invitations');
|
|
10
|
-
const dbBackup = require('../../data/db/backup');
|
|
11
10
|
const apiMail = require('./index').mail;
|
|
12
11
|
const apiSettings = require('./index').settings;
|
|
13
12
|
const UsersService = require('../../services/users');
|
|
14
|
-
const userService = new UsersService({
|
|
13
|
+
const userService = new UsersService({ models, auth, apiMail, apiSettings });
|
|
15
14
|
const adapterManager = require('../../services/adapter-manager').default;
|
|
16
15
|
const schedulerAdapter = adapterManager.getAdapter('scheduling');
|
|
17
16
|
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
const tpl = require('@tryghost/tpl');
|
|
2
2
|
const errors = require('@tryghost/errors');
|
|
3
|
+
const pick = require('lodash/pick');
|
|
3
4
|
const models = require('../../models');
|
|
4
|
-
const {
|
|
5
|
+
const { rejectAuthorsContentApiRestrictedFieldsTransformer } = require('./utils/api-filter-utils');
|
|
5
6
|
|
|
6
7
|
const ALLOWED_INCLUDES = ['count.posts'];
|
|
8
|
+
const ALLOWED_READ_FIELDS = ['id', 'slug'];
|
|
7
9
|
|
|
8
10
|
const messages = {
|
|
9
11
|
notFound: 'Author not found.',
|
|
12
|
+
missingIdentifier: 'An author id or slug is required.',
|
|
10
13
|
};
|
|
11
14
|
|
|
12
15
|
/** @type {import('@tryghost/api-framework').Controller} */
|
|
@@ -29,7 +32,7 @@ const controller = {
|
|
|
29
32
|
query(frame) {
|
|
30
33
|
const options = {
|
|
31
34
|
...frame.options,
|
|
32
|
-
mongoTransformer:
|
|
35
|
+
mongoTransformer: rejectAuthorsContentApiRestrictedFieldsTransformer,
|
|
33
36
|
};
|
|
34
37
|
return models.Author.findPage(options);
|
|
35
38
|
},
|
|
@@ -40,7 +43,7 @@ const controller = {
|
|
|
40
43
|
cacheInvalidate: false,
|
|
41
44
|
},
|
|
42
45
|
options: ['include', 'filter', 'fields'],
|
|
43
|
-
data:
|
|
46
|
+
data: ALLOWED_READ_FIELDS,
|
|
44
47
|
validation: {
|
|
45
48
|
options: {
|
|
46
49
|
include: {
|
|
@@ -50,12 +53,19 @@ const controller = {
|
|
|
50
53
|
},
|
|
51
54
|
permissions: true,
|
|
52
55
|
async query(frame) {
|
|
56
|
+
// GET bodies bypass the framework's declared data fields. Restrict the
|
|
57
|
+
// actual lookup too, before the model turns it into SQL predicates.
|
|
58
|
+
const data = pick(frame.data, ALLOWED_READ_FIELDS);
|
|
59
|
+
if (!Object.values(data).some(Boolean)) {
|
|
60
|
+
throw new errors.BadRequestError({ message: tpl(messages.missingIdentifier) });
|
|
61
|
+
}
|
|
62
|
+
|
|
53
63
|
const options = {
|
|
54
64
|
...frame.options,
|
|
55
|
-
mongoTransformer:
|
|
65
|
+
mongoTransformer: rejectAuthorsContentApiRestrictedFieldsTransformer,
|
|
56
66
|
};
|
|
57
67
|
|
|
58
|
-
const model = await models.Author.findOne(
|
|
68
|
+
const model = await models.Author.findOne(data, options);
|
|
59
69
|
if (!model) {
|
|
60
70
|
throw new errors.NotFoundError({
|
|
61
71
|
message: tpl(messages.notFound),
|
|
@@ -51,6 +51,19 @@ const controller = {
|
|
|
51
51
|
},
|
|
52
52
|
},
|
|
53
53
|
|
|
54
|
+
sendingStatus: {
|
|
55
|
+
headers: {
|
|
56
|
+
cacheInvalidate: false,
|
|
57
|
+
},
|
|
58
|
+
data: ['id'],
|
|
59
|
+
permissions: {
|
|
60
|
+
method: 'read',
|
|
61
|
+
},
|
|
62
|
+
async query(frame) {
|
|
63
|
+
return await emailService.controller.getSendingStatus(frame);
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
|
|
54
67
|
retry: {
|
|
55
68
|
headers: {
|
|
56
69
|
cacheInvalidate: false,
|
|
@@ -312,6 +312,14 @@ module.exports = {
|
|
|
312
312
|
return apiFramework.pipeline(require('./feedback-members'), localUtils, 'members');
|
|
313
313
|
},
|
|
314
314
|
|
|
315
|
+
get membersAccount() {
|
|
316
|
+
return apiFramework.pipeline(require('./members-account'), localUtils, 'members');
|
|
317
|
+
},
|
|
318
|
+
|
|
319
|
+
get memberMetafieldsMembers() {
|
|
320
|
+
return apiFramework.pipeline(require('./member-metafields-members'), localUtils, 'members');
|
|
321
|
+
},
|
|
322
|
+
|
|
315
323
|
get giftsMembers() {
|
|
316
324
|
return apiFramework.pipeline(require('./gifts-members'), localUtils, 'members');
|
|
317
325
|
},
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const members_metafields_1 = require("../../services/members-metafields");
|
|
4
|
+
const controller = {
|
|
5
|
+
// The Admin resource's name, so the response Portal reads is the one Admin's
|
|
6
|
+
// serializer already produces. Only who may ask differs, and that is the route's
|
|
7
|
+
// business rather than the response's.
|
|
8
|
+
docName: 'members_metafields',
|
|
9
|
+
browse: {
|
|
10
|
+
headers: { cacheInvalidate: false },
|
|
11
|
+
options: ['namespace'],
|
|
12
|
+
validation: { options: { namespace: { required: true } } },
|
|
13
|
+
permissions: false,
|
|
14
|
+
query(frame) {
|
|
15
|
+
// No `filter`, which Admin offers: whether a field is archived is a
|
|
16
|
+
// publisher's business, and a member is only ever shown what they can still
|
|
17
|
+
// fill in.
|
|
18
|
+
return members_metafields_1.definitions.browse({ namespace: frame.options.namespace }, members_metafields_1.MEMBERS);
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
exports.default = controller;
|
|
23
|
+
module.exports = controller;
|
|
@@ -1,13 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const members_metafields_1 = require("../../services/members-metafields");
|
|
4
|
+
const namespaces_1 = require("../../services/members-metafields/namespaces");
|
|
4
5
|
const permissionsService = require('../../services/permissions');
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
6
|
+
// Reading a definition needs no permission. A definition says only that the site collects
|
|
7
|
+
// a shoe size, and every signed-in member is already shown the whole list, so there is
|
|
8
|
+
// nothing here to keep from staff. Defining one is the publisher's own, and with
|
|
9
|
+
// `permissions: true` the framework would check against the Bookshelf model named after
|
|
10
|
+
// the resource — these fields have no Bookshelf model, so each writing handler asks the
|
|
11
|
+
// permissions service directly.
|
|
8
12
|
function canThis(frame) {
|
|
9
13
|
return permissionsService.canThis(frame.options.context);
|
|
10
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Settle the namespace before the caller.
|
|
17
|
+
*
|
|
18
|
+
* Which namespace is being written to decides whose authority applies, so it is resolved
|
|
19
|
+
* first; only once the publisher turns out to own it does a staff role become the
|
|
20
|
+
* question. The other order answers a request to define a field somewhere nobody owns
|
|
21
|
+
* with "you lack a permission", which sends the caller after a permission that would not
|
|
22
|
+
* have helped.
|
|
23
|
+
*/
|
|
24
|
+
async function canDefine(frame, action) {
|
|
25
|
+
(0, namespaces_1.assertDefinable)(frame.options.namespace);
|
|
26
|
+
return action(frame);
|
|
27
|
+
}
|
|
11
28
|
const noCacheInvalidation = { cacheInvalidate: false };
|
|
12
29
|
const controller = {
|
|
13
30
|
docName: 'members_metafields',
|
|
@@ -15,11 +32,9 @@ const controller = {
|
|
|
15
32
|
headers: noCacheInvalidation,
|
|
16
33
|
options: ['namespace', 'filter'],
|
|
17
34
|
validation: { options: { namespace: { required: true } } },
|
|
18
|
-
permissions
|
|
19
|
-
return canThis(frame).browse.member_custom_field();
|
|
20
|
-
},
|
|
35
|
+
permissions: false,
|
|
21
36
|
query(frame) {
|
|
22
|
-
return
|
|
37
|
+
return members_metafields_1.definitions.browse({
|
|
23
38
|
namespace: frame.options.namespace,
|
|
24
39
|
filter: frame.options.filter,
|
|
25
40
|
});
|
|
@@ -29,11 +44,9 @@ const controller = {
|
|
|
29
44
|
headers: noCacheInvalidation,
|
|
30
45
|
options: ['namespace', 'key'],
|
|
31
46
|
validation: { options: { namespace: { required: true }, key: { required: true } } },
|
|
32
|
-
permissions
|
|
33
|
-
return canThis(frame).read.member_custom_field(frame.options.key);
|
|
34
|
-
},
|
|
47
|
+
permissions: false,
|
|
35
48
|
query(frame) {
|
|
36
|
-
return
|
|
49
|
+
return members_metafields_1.definitions.read(frame.options.namespace, frame.options.key);
|
|
37
50
|
},
|
|
38
51
|
},
|
|
39
52
|
add: {
|
|
@@ -42,10 +55,10 @@ const controller = {
|
|
|
42
55
|
options: ['namespace'],
|
|
43
56
|
validation: { options: { namespace: { required: true } } },
|
|
44
57
|
permissions(frame) {
|
|
45
|
-
return
|
|
58
|
+
return canDefine(frame, (f) => canThis(f).add.member_custom_field());
|
|
46
59
|
},
|
|
47
60
|
query(frame) {
|
|
48
|
-
return
|
|
61
|
+
return members_metafields_1.definitions.add((0, members_metafields_1.actingContext)(frame.options.context), frame.options.namespace, frame.data.members_metafields);
|
|
49
62
|
},
|
|
50
63
|
},
|
|
51
64
|
reorder: {
|
|
@@ -53,10 +66,10 @@ const controller = {
|
|
|
53
66
|
options: ['namespace'],
|
|
54
67
|
validation: { options: { namespace: { required: true } } },
|
|
55
68
|
permissions(frame) {
|
|
56
|
-
return
|
|
69
|
+
return canDefine(frame, (f) => canThis(f).edit.member_custom_field());
|
|
57
70
|
},
|
|
58
71
|
query(frame) {
|
|
59
|
-
return
|
|
72
|
+
return members_metafields_1.definitions.reorder((0, members_metafields_1.actingContext)(frame.options.context), frame.options.namespace, frame.data.members_metafields);
|
|
60
73
|
},
|
|
61
74
|
},
|
|
62
75
|
edit: {
|
|
@@ -64,10 +77,10 @@ const controller = {
|
|
|
64
77
|
options: ['namespace', 'key'],
|
|
65
78
|
validation: { options: { namespace: { required: true }, key: { required: true } } },
|
|
66
79
|
permissions(frame) {
|
|
67
|
-
return
|
|
80
|
+
return canDefine(frame, (f) => canThis(f).edit.member_custom_field(f.options.key));
|
|
68
81
|
},
|
|
69
82
|
query(frame) {
|
|
70
|
-
return
|
|
83
|
+
return members_metafields_1.definitions.edit((0, members_metafields_1.actingContext)(frame.options.context), frame.options.namespace, frame.options.key, frame.data.members_metafields[0]);
|
|
71
84
|
},
|
|
72
85
|
},
|
|
73
86
|
destroy: {
|
|
@@ -76,10 +89,10 @@ const controller = {
|
|
|
76
89
|
options: ['namespace', 'key'],
|
|
77
90
|
validation: { options: { namespace: { required: true }, key: { required: true } } },
|
|
78
91
|
permissions(frame) {
|
|
79
|
-
return
|
|
92
|
+
return canDefine(frame, (f) => canThis(f).destroy.member_custom_field(f.options.key));
|
|
80
93
|
},
|
|
81
94
|
async query(frame) {
|
|
82
|
-
await
|
|
95
|
+
await members_metafields_1.definitions.destroy((0, members_metafields_1.actingContext)(frame.options.context), frame.options.namespace, frame.options.key);
|
|
83
96
|
return null;
|
|
84
97
|
},
|
|
85
98
|
},
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const membersService = require('../../services/members');
|
|
4
|
+
const memberOf = (frame) => frame.options?.context?.member ?? null;
|
|
5
|
+
const controller = {
|
|
6
|
+
docName: 'members_account',
|
|
7
|
+
read: {
|
|
8
|
+
headers: { cacheInvalidate: false },
|
|
9
|
+
permissions: false,
|
|
10
|
+
query(frame) {
|
|
11
|
+
return membersService.api.account.read(memberOf(frame).id);
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
/**
|
|
15
|
+
* Let Ghost email this member again.
|
|
16
|
+
*
|
|
17
|
+
* Under the account rather than as a resource of its own: being emailable is a
|
|
18
|
+
* fact about a member, and the only person who can restore it here is the member
|
|
19
|
+
* themselves.
|
|
20
|
+
*/
|
|
21
|
+
destroySuppression: {
|
|
22
|
+
statusCode: 204,
|
|
23
|
+
headers: { cacheInvalidate: false },
|
|
24
|
+
permissions: false,
|
|
25
|
+
query(frame) {
|
|
26
|
+
const member = memberOf(frame);
|
|
27
|
+
return membersService.api.account.allowEmail(member.id, member.email);
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
// `update` rather than `edit`: the framework reserves `edit` for the Admin API's
|
|
31
|
+
// enveloped bodies, and this request has always carried a bare one. The
|
|
32
|
+
// members-facing gift endpoints name their own verbs for the same reason.
|
|
33
|
+
update: {
|
|
34
|
+
headers: { cacheInvalidate: false },
|
|
35
|
+
permissions: false,
|
|
36
|
+
query(frame) {
|
|
37
|
+
return membersService.api.account.edit(frame.data, memberOf(frame).id);
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
exports.default = controller;
|
|
42
|
+
module.exports = controller;
|