ghost 6.37.1 → 6.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/core/boot.js +13 -9
- package/core/bridge.js +10 -6
- package/core/built/admin/assets/{PolarAngleAxis-Cavik65s.js → PolarAngleAxis-CB-FJBDa.js} +1 -1
- package/core/built/admin/assets/{_baseAssignValue-CnqN6ZMT.js → _baseAssignValue-BEAjPAfy.js} +1 -1
- package/core/built/admin/assets/{a-large-small-Wi4LtZX-.js → a-large-small-L1BJa6mG.js} +1 -1
- package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
- package/core/built/admin/assets/admin-x-settings/{code-editor-view-Cf8T5Jfd.mjs → code-editor-view-bOZzJ3a1.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-BMWEh-vR.mjs → index-BRuMxaCz.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-Aj-hFSnY.mjs → index-CTAQj489.mjs} +5 -5
- package/core/built/admin/assets/admin-x-settings/{index-DjBJrXYn.mjs → index-WoKKBOe4.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{modals-8WpWZZdI.mjs → modals-BQ5M-RTA.mjs} +3 -3
- package/core/built/admin/assets/{arrow-right-BiAOKOto.js → arrow-right-B2j-ecEK.js} +1 -1
- package/core/built/admin/assets/{at-sign-z5gBMxDW.js → at-sign-CtAw8_lw.js} +1 -1
- package/core/built/admin/assets/{audience-DxNilLIv.js → audience-CvSOqHuo.js} +1 -1
- package/core/built/admin/assets/automations-BVUNuVOh.js +1 -0
- package/core/built/admin/assets/automations-Bi9RJq5E.js +1 -0
- package/core/built/admin/assets/{avatar-flipboard-5OzseZFV.js → avatar-flipboard-DocLTXLh.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-D9YcSpW8.js → bluesky-sharing-DafX2lE1.js} +1 -1
- package/core/built/admin/assets/chart-BRQeD9eh.js +67 -0
- package/core/built/admin/assets/{chevron-up-DVt6fhV3.js → chevron-up-v4_QwmnL.js} +1 -1
- package/core/built/admin/assets/{chunk.524.fcd26ef812d73e2b0620.js → chunk.524.c3d844070c24d7984fd7.js} +4 -4
- package/core/built/admin/assets/{chunk.582.b61ffaad1c2fa4aba820.js → chunk.582.0e0ede1eac12926acceb.js} +6 -6
- package/core/built/admin/assets/{chunk.383.adb5a3fe32b6b98c43ff.js → chunk.995.4b32363ab39da3e7f5d7.js} +3 -3
- package/core/built/admin/assets/circle-alert-Dbz54fYb.js +1 -0
- package/core/built/admin/assets/{code-editor-view-CbQIqTrK.js → code-editor-view-D-pYCcdu.js} +1 -1
- package/core/built/admin/assets/comments-DSv09jRn.js +1 -0
- package/core/built/admin/assets/{content-helpers-jANWGIfA.js → content-helpers-DQdPPDGb.js} +1 -1
- package/core/built/admin/assets/{copy-BBLeLEnG.js → copy-BULQsPZ4.js} +1 -1
- package/core/built/admin/assets/{data-list-BveeOSGI.js → data-list-WxXC0iKE.js} +1 -1
- package/core/built/admin/assets/{deleted-feed-item-DupAEk4P.js → deleted-feed-item-ZBLfgRkK.js} +1 -1
- package/core/built/admin/assets/{dropzone-D3PSdAHN.js → dropzone-B8mAoWrn.js} +1 -1
- package/core/built/admin/assets/{edit-profile-NrCR9_bi.js → edit-profile-Bj3th8H0.js} +1 -1
- package/core/built/admin/assets/editor-BZV40eAE.css +1 -0
- package/core/built/admin/assets/editor-u20VuPzn.js +7 -0
- package/core/built/admin/assets/{empty-indicator-Dhi_KeYX.js → empty-indicator-P3IsUguf.js} +1 -1
- package/core/built/admin/assets/{en-BontI3SP.js → en-C9bUnuy7.js} +1 -1
- package/core/built/admin/assets/{feed-B3Kfiz5R.js → feed-B94mO944.js} +1 -1
- package/core/built/admin/assets/{filter-query-core-Dwh4Qulu.js → filter-query-core-CM0KKIr2.js} +1 -1
- package/core/built/admin/assets/filters-D52FTE0z.js +1 -0
- package/core/built/admin/assets/gh-chart-Xa6Nvzwz.js +1 -0
- package/core/built/admin/assets/{ghost-c25434d5bbf5a5429883d4c3590f1946.js → ghost-82f1c4ffe0e1cd058ce4b66b5253b620.js} +159 -201
- package/core/built/admin/assets/{ghost-dark-52df27573e5f2a75e6cf4b1d06eea9e4.css → ghost-dark-9897cf5102772faedf566e5e54d4fbee.css} +1 -1
- package/core/built/admin/assets/{ghost-fcf460028e04192f392f16e173f2e3a8.css → ghost-e11f1814be0f38e98bb77b49eba11178.css} +1 -1
- package/core/built/admin/assets/{growth-DRH8zUIJ.js → growth-D3TW3JIB.js} +1 -1
- package/core/built/admin/assets/{hash-UvX5iOa9.js → hash-CstXS-iB.js} +1 -1
- package/core/built/admin/assets/{header-G1a38jnf.js → header-StkTITw-.js} +1 -1
- package/core/built/admin/assets/{inbox-By7HZskI.js → inbox-D1RM3kVF.js} +1 -1
- package/core/built/admin/assets/index-BEkJ9xtY.css +1 -0
- package/core/built/admin/assets/{index-CS_ZmI8F.js → index-BJx5Uas5.js} +1 -1
- package/core/built/admin/assets/index-BKzg6OE7.js +1 -0
- package/core/built/admin/assets/{index-D7JyKf1m.js → index-BM-MBdD0.js} +1 -1
- package/core/built/admin/assets/index-BRzvVuXt.js +2 -0
- package/core/built/admin/assets/index-B_3xqeM9.js +1 -0
- package/core/built/admin/assets/{index-ydyrczVl.js → index-C-OdR2wJ.js} +1 -1
- package/core/built/admin/assets/{index-X-MG1ikg.js → index-C59QlJqT.js} +1 -1
- package/core/built/admin/assets/{index-CJo0Qh4V.js → index-CCq_1tCo.js} +1 -1
- package/core/built/admin/assets/{index-qHUvPjQB.js → index-CYyEyBYw.js} +11 -11
- package/core/built/admin/assets/{index-CX4ztLSk.js → index-DHbiBjyq.js} +1 -1
- package/core/built/admin/assets/{index-BP6hBbPK.js → index-DTVgSMyL.js} +2 -2
- package/core/built/admin/assets/{index-vZMbI8e8.js → index-DiUjEgRw.js} +1 -1
- package/core/built/admin/assets/{index-YM4ZplGj.js → index-DugxKzA6.js} +1 -1
- package/core/built/admin/assets/{index-D8InZCr2.js → index-DzVHlhO1.js} +1 -1
- package/core/built/admin/assets/{index-D4b7U6K-.js → index-LsaD9Cq7.js} +1 -1
- package/core/built/admin/assets/{index-DRUPF8nN.js → index-x0hNfyqU.js} +1 -1
- package/core/built/admin/assets/{inline-Bc9zHR7e.js → inline-B4cWemrJ.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-B-ZnqRE1.js → koenig-lexical-BOdeH3QJ.js} +1 -1
- package/core/built/admin/assets/{kpi-card-zyi5Onb0.js → kpi-card-P7zSpcx0.js} +1 -1
- package/core/built/admin/assets/{kpi-card-CzlPIEPE.js → kpi-card-plhYOEtA.js} +1 -1
- package/core/built/admin/assets/{kpi-tabs-Dsa5ldXK.js → kpi-tabs-DZw2Qktb.js} +1 -1
- package/core/built/admin/assets/{kpis-Cw5ZRQhk.js → kpis-CDHM0xhW.js} +1 -1
- package/core/built/admin/assets/{label-BvxmsD1M.js → label-Ckacdx14.js} +1 -1
- package/core/built/admin/assets/{links-CiS5BPKS.js → links-BtXE5d0Y.js} +1 -1
- package/core/built/admin/assets/{list-filter-zmkB7rg4.js → list-filter-DLjjiktn.js} +1 -1
- package/core/built/admin/assets/{list-header-Cp779e3H.js → list-header-Cc7Ia3nr.js} +1 -1
- package/core/built/admin/assets/loader-circle-DLJd-dNm.js +1 -0
- package/core/built/admin/assets/{mail-i2qs8CIG.js → mail-B97w28e2.js} +1 -1
- package/core/built/admin/assets/{main-layout-KCvKOX8F.js → main-layout-bwWvzc9B.js} +1 -1
- package/core/built/admin/assets/{members-w601v5JJ.js → members-CokS8MI2.js} +5 -5
- package/core/built/admin/assets/{message-square-text-bG9IoWIt.js → message-square-text-D3rsjDFR.js} +1 -1
- package/core/built/admin/assets/minus-BzXQVmMw.js +1 -0
- package/core/built/admin/assets/{modals-lNzhiL0o.js → modals-D0lip-iy.js} +2 -2
- package/core/built/admin/assets/{moderation-CyfNRSWj.js → moderation-Dv7AadCV.js} +1 -1
- package/core/built/admin/assets/newsletter-BazC5rIj.js +1 -0
- package/core/built/admin/assets/{newsletters-B8xSXSr_.js → newsletters-m6HQgU5J.js} +1 -1
- package/core/built/admin/assets/{note-dNfKEpxw.js → note-CCGiEKz-.js} +1 -1
- package/core/built/admin/assets/{onboarding-route-Drbw0QtT.js → onboarding-route-Cbt7qWNE.js} +1 -1
- package/core/built/admin/assets/overview-TN50tzUh.js +1 -0
- package/core/built/admin/assets/{pagemenu-VJXMoMB4.js → pagemenu-BXrHWtsU.js} +1 -1
- package/core/built/admin/assets/{pencil-DHNmlLjO.js → pencil-BL1r8KVy.js} +1 -1
- package/core/built/admin/assets/{post-analytics-PsqLsS2e.js → post-analytics-BqEXi6Ps.js} +1 -1
- package/core/built/admin/assets/{post-analytics-context-QLZsZCFg.js → post-analytics-context-DekYNlb3.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-PecXsIT-.js → post-analytics-header-AkNbn6uc.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-B4Rvo7W1.js → post-share-modal-CXDGVKoQ.js} +1 -1
- package/core/built/admin/assets/posts/{app-utils-DIc5TmxO.mjs → app-utils-DxA7edI_.mjs} +2 -2
- package/core/built/admin/assets/posts/{automations-BZpT35kJ.mjs → automations-Cwu_gHl4.mjs} +64 -67
- package/core/built/admin/assets/posts/automations-D81hV_2c.mjs +13 -0
- package/core/built/admin/assets/posts/{avatar-K63cvqSS.mjs → avatar-IkjEzEjI.mjs} +19 -19
- package/core/built/admin/assets/posts/{button-ufGBCcsV.mjs → button-KaJZKcou.mjs} +21 -21
- package/core/built/admin/assets/posts/{check-IcEnuTpD.mjs → check-Cf74RvZ1.mjs} +21 -21
- package/core/built/admin/assets/posts/{comments-CyJU9Ums.mjs → comments-pdKhYbYG.mjs} +54 -52
- package/core/built/admin/assets/posts/createLucideIcon-Cj7h3r9g.mjs +320 -0
- package/core/built/admin/assets/posts/{dialog-D6_lBvtT.mjs → dialog-Ci3W8fjx.mjs} +71 -76
- package/core/built/admin/assets/posts/{dropdown-menu-BSSmAory.mjs → dropdown-menu-DZ9XCHSw.mjs} +5 -5
- package/core/built/admin/assets/posts/editor-Bb-xle0o.mjs +6084 -0
- package/core/built/admin/assets/posts/ellipsis-ChhZo9aT.mjs +10 -0
- package/core/built/admin/assets/posts/{empty-indicator-DvGCvRAX.mjs → empty-indicator-DnFs7hDy.mjs} +2 -2
- package/core/built/admin/assets/posts/{filters-BLBaHhJz.mjs → filters-CO_FUPX-.mjs} +42 -40
- package/core/built/admin/assets/posts/get-site-timezone-C21yKZT_.mjs +87 -0
- package/core/built/admin/assets/posts/{growth-Bz1ChJNB.mjs → growth-CtX9Efm2.mjs} +12 -12
- package/core/built/admin/assets/posts/heading-DZ_KtDTL.mjs +138 -0
- package/core/built/admin/assets/posts/{hooks-BEngBys9.mjs → hooks-DVhBDVlA.mjs} +3 -2
- package/core/built/admin/assets/posts/{index-BAF0YXsp.mjs → index-B4db8w_H.mjs} +181 -172
- package/core/built/admin/assets/posts/{inline-C2YFQAdU.mjs → inline-BfB-SNk0.mjs} +2 -2
- package/core/built/admin/assets/posts/{input-surface-TqJlNSp_.mjs → input-surface-CNwZJloi.mjs} +2 -2
- package/core/built/admin/assets/posts/{kpis-DAX5_0-Q.mjs → kpis-BvY_5Y1u.mjs} +8792 -8803
- package/core/built/admin/assets/posts/{links-A1YTsBbF.mjs → links-Ck-h7SKg.mjs} +57 -57
- package/core/built/admin/assets/posts/{loading-indicator-BZsjmp8g.mjs → loading-indicator-B_rU9Lie.mjs} +3 -3
- package/core/built/admin/assets/posts/mail-DiZ3oKEW.mjs +9 -0
- package/core/built/admin/assets/posts/{main-layout-D_HHTP_n.mjs → main-layout-aYo6qOBZ.mjs} +2 -2
- package/core/built/admin/assets/posts/{newsletter-BRzgjOIa.mjs → newsletter-BQc53TF2.mjs} +31 -30
- package/core/built/admin/assets/posts/{overview-C41VFjn7.mjs → overview-blz9Ak9q.mjs} +42 -41
- package/core/built/admin/assets/posts/plus-YVjtYaK3.mjs +15 -0
- package/core/built/admin/assets/posts/{post-analytics-DGgMkFaf.mjs → post-analytics-BQbWGoeu.mjs} +6 -6
- package/core/built/admin/assets/posts/{post-analytics-context-B1r3HBrp.mjs → post-analytics-context-Be7THgnd.mjs} +7 -7
- package/core/built/admin/assets/posts/{post-analytics-header-DTWSO0Aq.mjs → post-analytics-header-iDFy7Bao.mjs} +2762 -2764
- package/core/built/admin/assets/posts/{post-share-modal-ohHwk0Yt.mjs → post-share-modal-akP16idN.mjs} +50 -48
- package/core/built/admin/assets/posts/posts.js +2 -1
- package/core/built/admin/assets/posts/{settings-CZYL6Jhr.mjs → settings-BdQhfHxY.mjs} +2 -2
- package/core/built/admin/assets/posts/{sheet-D7YesQJE.mjs → sheet-3dBlKeXf.mjs} +14 -13
- package/core/built/admin/assets/posts/{skeleton-S1k58YKa.mjs → skeleton-DMgSvYqr.mjs} +11 -11
- package/core/built/admin/assets/posts/{source-icon-DnpCy5N4.mjs → source-icon-Bp5Qxq1E.mjs} +4 -4
- package/core/built/admin/assets/posts/{stats-CbOpowXb.mjs → stats-DJx9qc_u.mjs} +4 -4
- package/core/built/admin/assets/posts/{table-Cw3Wxf1C.mjs → table-BpVwuzeH.mjs} +2 -2
- package/core/built/admin/assets/posts/{data-list-BnZARP88.mjs → tabs-CbZCpxfI.mjs} +4885 -5284
- package/core/built/admin/assets/posts/{tags-BoMt6Ce3.mjs → tags-CNtvDS6f.mjs} +33 -33
- package/core/built/admin/assets/posts/{tags-CNdsvTtZ.mjs → tags-DFOoFZ_3.mjs} +2 -2
- package/core/built/admin/assets/posts/{tooltip-CTcyINxz.mjs → tooltip-Cc_09RDU.mjs} +106 -117
- package/core/built/admin/assets/posts/value-CwGM7M-1.mjs +410 -0
- package/core/built/admin/assets/posts/{virtual-list-window-Bs88yrut.mjs → virtual-list-window-D6nRoL0y.mjs} +5 -5
- package/core/built/admin/assets/posts/{web-Bsd8eTP6.mjs → web-yfPssEt8.mjs} +1042 -1040
- package/core/built/admin/assets/posts/x-DrUGcpfp.mjs +9 -0
- package/core/built/admin/assets/posts/zap-DAN0ur-o.mjs +24 -0
- package/core/built/admin/assets/posts-D-jyPPE6.js +1 -0
- package/core/built/admin/assets/power-Cc5ncYVl.js +1 -0
- package/core/built/admin/assets/{referrers-kcBT5smx.js → referrers-qnXsKsuv.js} +1 -1
- package/core/built/admin/assets/{repeat-Cn2sKd-L.js → repeat-BGIBynZH.js} +1 -1
- package/core/built/admin/assets/{reply-D7E-ZMd5.js → reply-DOKdAsL_.js} +1 -1
- package/core/built/admin/assets/{rocket-DnH0XAGW.js → rocket-CAN2NB82.js} +1 -1
- package/core/built/admin/assets/{select-f0MMMQWu.js → select-8S9kYGSM.js} +1 -1
- package/core/built/admin/assets/{settings-BAQNP3gU.js → settings-DeD-bmZc.js} +4 -4
- package/core/built/admin/assets/{settings-ORttG1jT.js → settings-e4IB9sx6.js} +1 -1
- package/core/built/admin/assets/{share-modal-CXU4tGY8.js → share-modal-CBavk20I.js} +1 -1
- package/core/built/admin/assets/{sort-button-BXMrChFu.js → sort-button-DlSKBzUq.js} +1 -1
- package/core/built/admin/assets/{source-icon-cjy79jGT.js → source-icon-27VIJSXr.js} +1 -1
- package/core/built/admin/assets/{sprout-DZ4tZ78G.js → sprout-D66nqc79.js} +1 -1
- package/core/built/admin/assets/{square-vOzqJf7x.js → square-DccaXQWe.js} +1 -1
- package/core/built/admin/assets/stats/{audience-5NeJICtP.mjs → audience-B84ClTDM.mjs} +3 -3
- package/core/built/admin/assets/stats/{content-helpers-DFSTl3uB.mjs → content-helpers-CBAddUg7.mjs} +4 -4
- package/core/built/admin/assets/stats/{index-C4T7u699.mjs → index-Bz5oVpED.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-B8bp6qe2.mjs → index-Cs8i1uR4.mjs} +74 -75
- package/core/built/admin/assets/stats/{index-wvi17m79.mjs → index-DEsP_Tbd.mjs} +8 -8
- package/core/built/admin/assets/stats/{index-CFfAYHdD.mjs → index-Ds-pM47x.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-Chqk7VlR.mjs → index-Wzk1IcAz.mjs} +6 -6
- package/core/built/admin/assets/stats/{kpi-tabs-Df9yOI2P.mjs → kpi-tabs-Cs4l8B_M.mjs} +7 -7
- package/core/built/admin/assets/stats/{sort-button-Doi8OgMU.mjs → sort-button-rR-GA9Hu.mjs} +3 -3
- package/core/built/admin/assets/stats/{stats-FXeCefyd.mjs → stats-RFpEJpEq.mjs} +34 -34
- package/core/built/admin/assets/stats/stats.js +1 -1
- package/core/built/admin/assets/stats/{use-growth-stats-93C_3EZk.mjs → use-growth-stats-DwgFzbq9.mjs} +3 -3
- package/core/built/admin/assets/{stats-CIGz2Win.js → stats-B4OybenW.js} +1 -1
- package/core/built/admin/assets/{stats-view-BTKRxYTQ.js → stats-view-BuExwFXa.js} +1 -1
- package/core/built/admin/assets/{step-1-BSMHbT-q.js → step-1-D_5LOQrC.js} +1 -1
- package/core/built/admin/assets/{step-2-_YC0LCZv.js → step-2-BZLBj8cj.js} +1 -1
- package/core/built/admin/assets/{step-3-DWMqP2bO.js → step-3-s5uNbcOH.js} +1 -1
- package/core/built/admin/assets/{table-mHKjXQba.js → table-pGS7EeJe.js} +1 -1
- package/core/built/admin/assets/{tabs-B93IVRBz.js → tabs-CjdKssUe.js} +1 -1
- package/core/built/admin/assets/{tags-DCb-x2ZB.js → tags-B0vRk0A6.js} +1 -1
- package/core/built/admin/assets/{tags-kUHJ1MZo.js → tags-Dso4-FA_.js} +1 -1
- package/core/built/admin/assets/{textarea-DswCtM7_.js → textarea-DzFnun0_.js} +1 -1
- package/core/built/admin/assets/{tiers-DueraQKd.js → tiers-4Vkr_D-L.js} +1 -1
- package/core/built/admin/assets/{toggle-group-ChTo8MPD.js → toggle-group-hDsr47IB.js} +1 -1
- package/core/built/admin/assets/{topic-filter-DrW3fYWo.js → topic-filter-C7TpPe1G.js} +1 -1
- package/core/built/admin/assets/{trash-B2ESGftj.js → trash-DCVuk7ZX.js} +1 -1
- package/core/built/admin/assets/{underline-vo-bPRac.js → underline-CjK8la2G.js} +1 -1
- package/core/built/admin/assets/{upload-DXQRkBBq.js → upload-CPYhmtWZ.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-CoB8-lsd.js → use-growth-stats-CaFSgp_R.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-Y_Wv2N6g.js → use-simple-pagination-D0vJBMvF.js} +1 -1
- package/core/built/admin/assets/{user-round-check-Dp9a2x-e.js → user-round-check-CzQQeFd8.js} +1 -1
- package/core/built/admin/assets/{user-round-x-DwCTGlxc.js → user-round-x-BDFm8yQj.js} +1 -1
- package/core/built/admin/assets/value-BGBiTkF3.js +1 -0
- package/core/built/admin/assets/{vendor-17f3b979ba6f3898d1a8c5249cc22ff1.js → vendor-ce3fc901ccbcf37f36eb791b4e454138.js} +29 -31
- package/core/built/admin/assets/{virtual-list-window-BF7IvGMC.js → virtual-list-window-EKtWZ5cP.js} +1 -1
- package/core/built/admin/assets/{wallet-cards-IEmcxJvG.js → wallet-cards-C1NOBbWE.js} +1 -1
- package/core/built/admin/assets/web-DCA7HR1S.js +1 -0
- package/core/built/admin/index.html +8 -8
- package/core/frontend/helpers/social_accounts.js +91 -0
- package/core/frontend/services/sitemap/handler.js +14 -2
- package/core/frontend/services/sitemap/site-map-manager.js +133 -9
- package/core/frontend/web/middleware/handle-image-sizes.js +4 -0
- package/core/server/api/endpoints/automations.js +38 -45
- package/core/server/models/member.js +30 -25
- package/core/server/services/automations/automations-api.js +58 -0
- package/core/server/services/automations/automations-api.ts +71 -0
- package/core/server/services/automations/automations-repository.js +2 -0
- package/core/server/services/automations/automations-repository.ts +63 -0
- package/core/server/services/automations/fake-database-automations-repository.js +210 -0
- package/core/server/services/automations/fake-database-automations-repository.ts +273 -0
- package/core/server/services/automations/temporary-fake-database.js +5 -4
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs +10 -32
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.js +6 -8
- package/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts +6 -8
- package/core/server/services/gifts/email-templates/gift-reminder.hbs +12 -37
- package/core/server/services/gifts/email-templates/gift-reminder.js +5 -9
- package/core/server/services/gifts/email-templates/gift-reminder.ts +5 -9
- package/core/server/services/gifts/gift-service.js +1 -1
- package/core/server/services/gifts/gift-service.ts +2 -2
- package/core/server/services/member-welcome-emails/service.js +0 -1
- package/core/server/services/members/members-api/controllers/router-controller.js +52 -7
- package/core/server/services/members/members-api/services/member-bread-service.js +0 -8
- package/core/server/services/route-settings/route-settings.js +18 -2
- package/core/server/services/staff/email-templates/gift.hbs +1 -1
- package/core/server/services/staff/email-templates/gift.txt.js +1 -1
- package/core/server/services/staff/email-templates/new-gift-subscription.hbs +1 -1
- package/core/server/services/staff/email-templates/new-gift-subscription.txt.js +1 -1
- package/core/server/services/staff/staff-service-emails.js +1 -1
- package/core/server/services/url/index.js +16 -1
- package/core/server/services/url/lazy-find-resource.js +49 -0
- package/core/server/services/url/lazy-find-resource.ts +62 -0
- package/core/server/services/url/lazy-url-service.js +220 -0
- package/core/server/services/url/lazy-url-service.ts +265 -0
- package/core/server/web/api/endpoints/admin/routes.js +1 -0
- package/core/server/web/gift-preview/Inter.ttf +0 -0
- package/core/server/web/gift-preview/controller.js +56 -6
- package/core/server/web/gift-preview/gift-card-noise.png +0 -0
- package/core/server/web/gift-preview/gift-card-orb.png +0 -0
- package/core/server/web/gift-preview/image.js +170 -43
- package/core/shared/config/defaults.json +1 -0
- package/core/shared/one-at-a-time.js +28 -33
- package/core/shared/one-at-a-time.ts +58 -0
- package/package.json +18 -16
- package/pnpm-lock.yaml +989 -356
- package/core/built/admin/assets/automations-D1uMjd06.js +0 -1
- package/core/built/admin/assets/chart-_EXssQtm.js +0 -67
- package/core/built/admin/assets/comments-E00h1SbR.js +0 -1
- package/core/built/admin/assets/filters-CC7XfjOS.js +0 -1
- package/core/built/admin/assets/gh-chart-B9_ywrJJ.js +0 -1
- package/core/built/admin/assets/index-AsV-aY0z.css +0 -1
- package/core/built/admin/assets/index-B0y_ynZw.js +0 -1
- package/core/built/admin/assets/index-Bs6wWbLA.js +0 -2
- package/core/built/admin/assets/index-Cb4641XW.js +0 -1
- package/core/built/admin/assets/loader-circle-B5UPqSok.js +0 -1
- package/core/built/admin/assets/minus-DWx9VUtr.js +0 -1
- package/core/built/admin/assets/newsletter-fkQye9OK.js +0 -1
- package/core/built/admin/assets/overview-CZ-VrnXy.js +0 -1
- package/core/built/admin/assets/posts/createLucideIcon-DcUfTBt_.mjs +0 -454
- package/core/built/admin/assets/posts/get-site-timezone-DlXmHA3y.mjs +0 -93
- package/core/built/admin/assets/posts-Bx1RWrub.js +0 -1
- package/core/built/admin/assets/web-DSME3e8c.js +0 -1
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
1
4
|
const CACHE_MAX_SIZE = 100;
|
|
5
|
+
const GIFT_CARD_NOISE_PATH = path.join(__dirname, 'gift-card-noise.png');
|
|
6
|
+
const GIFT_CARD_ORB_PATH = path.join(__dirname, 'gift-card-orb.png');
|
|
7
|
+
const INTER_FONT_PATH = path.join(__dirname, 'Inter.ttf');
|
|
2
8
|
|
|
3
9
|
const cache = new Map();
|
|
10
|
+
let giftCardNoiseTile;
|
|
11
|
+
let giftCardOrbImageHref;
|
|
4
12
|
|
|
5
13
|
function cacheResult(key, value) {
|
|
6
14
|
if (cache.size >= CACHE_MAX_SIZE) {
|
|
@@ -21,75 +29,194 @@ function escapeXml(str) {
|
|
|
21
29
|
.replaceAll('\'', ''');
|
|
22
30
|
}
|
|
23
31
|
|
|
24
|
-
function
|
|
25
|
-
|
|
32
|
+
function getGiftCardOrbImageHref() {
|
|
33
|
+
if (giftCardOrbImageHref !== undefined) {
|
|
34
|
+
return giftCardOrbImageHref;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const orbPng = fs.readFileSync(GIFT_CARD_ORB_PATH);
|
|
38
|
+
giftCardOrbImageHref = `data:image/png;base64,${orbPng.toString('base64')}`;
|
|
39
|
+
|
|
40
|
+
return giftCardOrbImageHref;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function getGiftCardNoiseTile() {
|
|
44
|
+
if (giftCardNoiseTile !== undefined) {
|
|
45
|
+
return giftCardNoiseTile;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const sharp = require('sharp');
|
|
49
|
+
|
|
50
|
+
giftCardNoiseTile = await sharp(GIFT_CARD_NOISE_PATH)
|
|
51
|
+
.resize(192, 192, {kernel: 'nearest'})
|
|
52
|
+
.png()
|
|
53
|
+
.toBuffer();
|
|
54
|
+
|
|
55
|
+
return giftCardNoiseTile;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function parseHexColor(color) {
|
|
59
|
+
const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(`${color || ''}`.trim());
|
|
26
60
|
|
|
27
|
-
if (!
|
|
28
|
-
return
|
|
61
|
+
if (!match) {
|
|
62
|
+
return null;
|
|
29
63
|
}
|
|
30
64
|
|
|
65
|
+
const hex = match[1].length === 3
|
|
66
|
+
? match[1].split('').map(char => char + char).join('')
|
|
67
|
+
: match[1];
|
|
68
|
+
|
|
31
69
|
return {
|
|
32
|
-
r:
|
|
33
|
-
g:
|
|
34
|
-
b:
|
|
70
|
+
r: parseInt(hex.slice(0, 2), 16),
|
|
71
|
+
g: parseInt(hex.slice(2, 4), 16),
|
|
72
|
+
b: parseInt(hex.slice(4, 6), 16)
|
|
35
73
|
};
|
|
36
74
|
}
|
|
37
75
|
|
|
38
|
-
function
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
76
|
+
function formatHexChannel(value) {
|
|
77
|
+
return Math.round(value).toString(16).padStart(2, '0');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function mixWithBlack(color, colorWeight = 0.65) {
|
|
81
|
+
const rgb = parseHexColor(color);
|
|
82
|
+
|
|
83
|
+
if (!rgb) {
|
|
84
|
+
return '#000000';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return `#${formatHexChannel(rgb.r * colorWeight)}${formatHexChannel(rgb.g * colorWeight)}${formatHexChannel(rgb.b * colorWeight)}`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function truncateText(str, maxLength) {
|
|
91
|
+
const text = `${str || ''}`.trim();
|
|
43
92
|
|
|
44
|
-
|
|
93
|
+
if (text.length <= maxLength) {
|
|
94
|
+
return text;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return `${text.slice(0, maxLength - 3).trim()}...`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function createTextInput({text, size, weight, width}) {
|
|
101
|
+
const escapedText = escapeXml(text);
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
text: {
|
|
105
|
+
text: `<span foreground="#FFFFFF" font_desc="Inter ${weight} ${size}">${escapedText}</span>`,
|
|
106
|
+
font: 'Inter',
|
|
107
|
+
fontfile: INTER_FONT_PATH,
|
|
108
|
+
width,
|
|
109
|
+
rgba: true,
|
|
110
|
+
dpi: 72
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function buildTextOverlays({siteTitle = 'Ghost', tierLabel = '', cadenceLabel = '1 year'}) {
|
|
116
|
+
const safeCadenceLabel = truncateText(cadenceLabel, 18);
|
|
117
|
+
const safeTierLabel = truncateText(tierLabel || 'Gift membership', 38);
|
|
118
|
+
const safeSiteTitle = truncateText(siteTitle, 40);
|
|
119
|
+
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
input: createTextInput({
|
|
123
|
+
text: safeCadenceLabel,
|
|
124
|
+
size: 84,
|
|
125
|
+
weight: 'Bold',
|
|
126
|
+
width: 1060
|
|
127
|
+
}),
|
|
128
|
+
left: 64,
|
|
129
|
+
top: 82
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
input: createTextInput({
|
|
133
|
+
text: safeTierLabel,
|
|
134
|
+
size: 44,
|
|
135
|
+
weight: 'Medium',
|
|
136
|
+
width: 1060
|
|
137
|
+
}),
|
|
138
|
+
left: 66,
|
|
139
|
+
top: 177
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
input: createTextInput({
|
|
143
|
+
text: safeSiteTitle,
|
|
144
|
+
size: 52,
|
|
145
|
+
weight: 'Bold',
|
|
146
|
+
width: 1060
|
|
147
|
+
}),
|
|
148
|
+
left: 66,
|
|
149
|
+
top: 500
|
|
150
|
+
}
|
|
151
|
+
];
|
|
45
152
|
}
|
|
46
153
|
|
|
47
154
|
function buildSvg({accentColor}) {
|
|
48
|
-
const bgColor = getBackgroundColor(accentColor);
|
|
49
155
|
const escapedAccentColor = escapeXml(accentColor);
|
|
50
|
-
|
|
51
|
-
// Gift box icon from Portal (apps/portal/src/images/icons/gift.svg)
|
|
52
|
-
// Original viewBox 0 0 24 24, scaled and centered in the seal.
|
|
53
|
-
const giftIcon = `
|
|
54
|
-
<g transform="translate(564, 279) scale(3)" fill="none" stroke="#FFFFFF"
|
|
55
|
-
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
56
|
-
<rect x="3" y="8" width="18" height="4" rx="1"/>
|
|
57
|
-
<path d="M12 8v13"/>
|
|
58
|
-
<path d="M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7"/>
|
|
59
|
-
<path d="M7.5 8a2.5 2.5 0 0 1 0-5C9 3 12 8 12 8"/>
|
|
60
|
-
<path d="M16.5 8a2.5 2.5 0 0 0 0-5C15 3 12 8 12 8"/>
|
|
61
|
-
</g>
|
|
62
|
-
`;
|
|
156
|
+
const orbImageHref = escapeXml(getGiftCardOrbImageHref());
|
|
63
157
|
|
|
64
158
|
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
65
159
|
<svg width="1200" height="630" viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg">
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
160
|
+
<defs>
|
|
161
|
+
<linearGradient id="cardShine" x1="120" y1="580" x2="980" y2="60" gradientUnits="userSpaceOnUse">
|
|
162
|
+
<stop stop-color="#FFFFFF" stop-opacity="0"/>
|
|
163
|
+
<stop offset="0.5" stop-color="#FFFFFF" stop-opacity="0.31"/>
|
|
164
|
+
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0"/>
|
|
165
|
+
</linearGradient>
|
|
166
|
+
</defs>
|
|
167
|
+
|
|
168
|
+
<rect width="1200" height="630" fill="${escapedAccentColor}"/>
|
|
169
|
+
<rect width="1200" height="630" fill="#FFFFFF" opacity="0.07"/>
|
|
170
|
+
<rect width="1200" height="630" fill="url(#cardShine)"/>
|
|
171
|
+
<image href="${orbImageHref}" x="0" y="0" width="1200" height="630" opacity="0.2" preserveAspectRatio="none"/>
|
|
172
|
+
</svg>`;
|
|
173
|
+
}
|
|
70
174
|
|
|
71
|
-
|
|
72
|
-
|
|
175
|
+
function buildNotchOverlay({accentColor}) {
|
|
176
|
+
const notchFill = escapeXml(mixWithBlack(accentColor));
|
|
73
177
|
|
|
74
|
-
|
|
178
|
+
const svg = `<?xml version="1.0" encoding="UTF-8"?>
|
|
179
|
+
<svg width="1200" height="630" viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg">
|
|
180
|
+
<rect x="505" y="42" width="190" height="36" rx="18" fill="${notchFill}"/>
|
|
181
|
+
<rect x="510" y="44" width="180" height="3" rx="1.5" fill="#FFFFFF" opacity="0.18"/>
|
|
75
182
|
</svg>`;
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
input: Buffer.from(svg)
|
|
186
|
+
};
|
|
76
187
|
}
|
|
77
188
|
|
|
78
|
-
async function generateGiftPreviewImage({accentColor}) {
|
|
79
|
-
const cacheKey =
|
|
189
|
+
async function generateGiftPreviewImage({accentColor = '#15171A', siteTitle, tierLabel, cadenceLabel}) {
|
|
190
|
+
const cacheKey = JSON.stringify({
|
|
191
|
+
accentColor,
|
|
192
|
+
siteTitle,
|
|
193
|
+
tierLabel,
|
|
194
|
+
cadenceLabel
|
|
195
|
+
});
|
|
80
196
|
|
|
81
197
|
if (cache.has(cacheKey)) {
|
|
82
198
|
return cache.get(cacheKey);
|
|
83
199
|
}
|
|
84
200
|
|
|
85
|
-
const
|
|
201
|
+
const sharp = require('sharp');
|
|
202
|
+
|
|
86
203
|
const svg = buildSvg({accentColor});
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
204
|
+
const noiseTile = await getGiftCardNoiseTile();
|
|
205
|
+
const image = await sharp(Buffer.from(svg), {animated: false})
|
|
206
|
+
.resize(1200, null, {
|
|
207
|
+
withoutEnlargement: false
|
|
208
|
+
})
|
|
209
|
+
.composite([
|
|
210
|
+
{
|
|
211
|
+
input: noiseTile,
|
|
212
|
+
tile: true
|
|
213
|
+
},
|
|
214
|
+
buildNotchOverlay({accentColor}),
|
|
215
|
+
...buildTextOverlays({siteTitle, tierLabel, cadenceLabel})
|
|
216
|
+
])
|
|
217
|
+
.png()
|
|
218
|
+
.timeout({seconds: 10})
|
|
219
|
+
.toBuffer();
|
|
93
220
|
|
|
94
221
|
cacheResult(cacheKey, image);
|
|
95
222
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.oneAtATime = void 0;
|
|
4
|
+
const errors_1 = require("@tryghost/errors");
|
|
4
5
|
/**
|
|
5
6
|
* Wraps an async function so it runs at most one invocation at a time, with at
|
|
6
7
|
* most one additional invocation queued.
|
|
@@ -13,50 +14,44 @@ const {InternalServerError} = require('@tryghost/errors');
|
|
|
13
14
|
*
|
|
14
15
|
* Errors are silently swallowed.
|
|
15
16
|
*
|
|
16
|
-
* @param {() => PromiseLike<unknown>} fn
|
|
17
|
-
* @returns {() => void}
|
|
18
17
|
*/
|
|
19
18
|
const oneAtATime = (fn) => {
|
|
20
|
-
/** @type {'idle' | 'running' | 'running+queued'} */
|
|
21
19
|
let state = 'idle';
|
|
22
|
-
|
|
23
20
|
const run = async () => {
|
|
24
21
|
try {
|
|
25
22
|
await fn();
|
|
26
|
-
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
27
25
|
// noop
|
|
28
26
|
}
|
|
29
|
-
|
|
30
27
|
switch (state) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
case 'running+queued':
|
|
29
|
+
state = 'running';
|
|
30
|
+
run();
|
|
31
|
+
break;
|
|
32
|
+
case 'running':
|
|
33
|
+
state = 'idle';
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
throw new errors_1.InternalServerError({ message: `Unexpected state: ${state}` });
|
|
40
37
|
}
|
|
41
38
|
};
|
|
42
|
-
|
|
43
39
|
return () => {
|
|
44
40
|
switch (state) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
case 'idle':
|
|
42
|
+
state = 'running';
|
|
43
|
+
run();
|
|
44
|
+
break;
|
|
45
|
+
case 'running':
|
|
46
|
+
state = 'running+queued';
|
|
47
|
+
break;
|
|
48
|
+
case 'running+queued':
|
|
49
|
+
break;
|
|
50
|
+
default: {
|
|
51
|
+
const _exhaustive = state;
|
|
52
|
+
throw new errors_1.InternalServerError({ message: `Unexpected state: ${_exhaustive}` });
|
|
53
|
+
}
|
|
58
54
|
}
|
|
59
55
|
};
|
|
60
56
|
};
|
|
61
|
-
|
|
62
57
|
exports.oneAtATime = oneAtATime;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {InternalServerError} from '@tryghost/errors';
|
|
2
|
+
|
|
3
|
+
type State = 'idle' | 'running' | 'running+queued';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Wraps an async function so it runs at most one invocation at a time, with at
|
|
7
|
+
* most one additional invocation queued.
|
|
8
|
+
*
|
|
9
|
+
* Possible states:
|
|
10
|
+
*
|
|
11
|
+
* - idle: nothing is running
|
|
12
|
+
* - running: function is active, nothing is queued
|
|
13
|
+
* - running + queued: function is active, another invocation enqueued
|
|
14
|
+
*
|
|
15
|
+
* Errors are silently swallowed.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
export const oneAtATime = (fn: () => PromiseLike<unknown>): () => void => {
|
|
19
|
+
let state: State = 'idle';
|
|
20
|
+
|
|
21
|
+
const run = async () => {
|
|
22
|
+
try {
|
|
23
|
+
await fn();
|
|
24
|
+
} catch {
|
|
25
|
+
// noop
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
switch (state) {
|
|
29
|
+
case 'running+queued':
|
|
30
|
+
state = 'running';
|
|
31
|
+
run();
|
|
32
|
+
break;
|
|
33
|
+
case 'running':
|
|
34
|
+
state = 'idle';
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
throw new InternalServerError({message: `Unexpected state: ${state}`});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
return () => {
|
|
42
|
+
switch (state) {
|
|
43
|
+
case 'idle':
|
|
44
|
+
state = 'running';
|
|
45
|
+
run();
|
|
46
|
+
break;
|
|
47
|
+
case 'running':
|
|
48
|
+
state = 'running+queued';
|
|
49
|
+
break;
|
|
50
|
+
case 'running+queued':
|
|
51
|
+
break;
|
|
52
|
+
default: {
|
|
53
|
+
const _exhaustive: never = state;
|
|
54
|
+
throw new InternalServerError({message: `Unexpected state: ${_exhaustive}`});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.38.0",
|
|
4
4
|
"description": "The professional publishing platform",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"homepage": "https://ghost.org",
|
|
@@ -88,15 +88,15 @@
|
|
|
88
88
|
"@faker-js/faker": "7.6.0",
|
|
89
89
|
"@isaacs/ttlcache": "1.4.1",
|
|
90
90
|
"@sentry/node": "7.120.4",
|
|
91
|
-
"@tryghost/adapter-base-cache": "0.1.
|
|
92
|
-
"@tryghost/admin-api-schema": "4.7.
|
|
91
|
+
"@tryghost/adapter-base-cache": "0.1.25",
|
|
92
|
+
"@tryghost/admin-api-schema": "4.7.4",
|
|
93
93
|
"@tryghost/api-framework": "1.0.7",
|
|
94
|
-
"@tryghost/bookshelf-plugins": "2.0
|
|
94
|
+
"@tryghost/bookshelf-plugins": "2.2.0",
|
|
95
95
|
"@tryghost/color-utils": "0.2.16",
|
|
96
96
|
"@tryghost/config-url-helpers": "1.0.23",
|
|
97
97
|
"@tryghost/custom-fonts": "1.0.8",
|
|
98
98
|
"@tryghost/database-info": "0.3.35",
|
|
99
|
-
"@tryghost/debug": "2.
|
|
99
|
+
"@tryghost/debug": "2.2.0",
|
|
100
100
|
"@tryghost/domain-events": "1.0.8",
|
|
101
101
|
"@tryghost/email-mock-receiver": "2.1.0",
|
|
102
102
|
"@tryghost/errors": "1.3.13",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"@tryghost/kg-markdown-html-renderer": "7.2.1",
|
|
117
117
|
"@tryghost/kg-mobiledoc-html-renderer": "7.2.1",
|
|
118
118
|
"@tryghost/limit-service": "1.5.2",
|
|
119
|
-
"@tryghost/logging": "4.
|
|
119
|
+
"@tryghost/logging": "4.2.0",
|
|
120
120
|
"@tryghost/members-csv": "2.0.7",
|
|
121
121
|
"@tryghost/metrics": "1.0.43",
|
|
122
122
|
"@tryghost/mongo-utils": "0.6.3",
|
|
@@ -126,20 +126,20 @@
|
|
|
126
126
|
"@tryghost/nql": "0.12.10",
|
|
127
127
|
"@tryghost/nql-lang": "0.6.4",
|
|
128
128
|
"@tryghost/parse-email-address": "file:components/tryghost-parse-email-address-0.0.0.tgz",
|
|
129
|
-
"@tryghost/pretty-cli": "3.
|
|
129
|
+
"@tryghost/pretty-cli": "3.2.0",
|
|
130
130
|
"@tryghost/prometheus-metrics": "1.0.8",
|
|
131
|
-
"@tryghost/promise": "2.
|
|
132
|
-
"@tryghost/referrer-parser": "0.1.
|
|
131
|
+
"@tryghost/promise": "2.2.0",
|
|
132
|
+
"@tryghost/referrer-parser": "0.1.17",
|
|
133
133
|
"@tryghost/request": "1.0.12",
|
|
134
|
-
"@tryghost/root-utils": "2.
|
|
134
|
+
"@tryghost/root-utils": "2.2.0",
|
|
135
135
|
"@tryghost/security": "1.0.6",
|
|
136
|
-
"@tryghost/social-urls": "0.1.
|
|
136
|
+
"@tryghost/social-urls": "0.1.62",
|
|
137
137
|
"@tryghost/string": "0.3.2",
|
|
138
|
-
"@tryghost/tpl": "2.
|
|
138
|
+
"@tryghost/tpl": "2.2.0",
|
|
139
139
|
"@tryghost/url-utils": "5.1.2",
|
|
140
140
|
"@tryghost/validator": "0.2.22",
|
|
141
|
-
"@tryghost/version": "2.
|
|
142
|
-
"@tryghost/zip": "3.
|
|
141
|
+
"@tryghost/version": "2.2.0",
|
|
142
|
+
"@tryghost/zip": "3.2.0",
|
|
143
143
|
"body-parser": "1.20.4",
|
|
144
144
|
"bookshelf": "1.2.0",
|
|
145
145
|
"bookshelf-relations": "2.8.0",
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
"ghost-storage-base": "1.1.2",
|
|
179
179
|
"glob": "8.1.0",
|
|
180
180
|
"got": "13.0.0",
|
|
181
|
-
"gscan": "
|
|
181
|
+
"gscan": "6.0.2",
|
|
182
182
|
"handlebars": "4.7.9",
|
|
183
183
|
"heic-convert": "2.1.0",
|
|
184
184
|
"html-to-text": "5.1.1",
|
|
@@ -228,6 +228,7 @@
|
|
|
228
228
|
"rss": "1.2.2",
|
|
229
229
|
"sanitize-html": "2.17.0",
|
|
230
230
|
"semver": "7.7.4",
|
|
231
|
+
"sharp": "0.34.5",
|
|
231
232
|
"simple-dom": "1.4.0",
|
|
232
233
|
"stoppable": "1.1.0",
|
|
233
234
|
"stripe": "8.222.0",
|
|
@@ -264,6 +265,7 @@
|
|
|
264
265
|
"@types/node-jose": "1.1.13",
|
|
265
266
|
"@types/nodemailer": "6.4.23",
|
|
266
267
|
"@types/on-headers": "1.0.4",
|
|
268
|
+
"@types/papaparse": "5.5.2",
|
|
267
269
|
"@types/sinon": "17.0.4",
|
|
268
270
|
"@types/supertest": "6.0.3",
|
|
269
271
|
"@typescript-eslint/parser": "8.49.0",
|
|
@@ -375,7 +377,7 @@
|
|
|
375
377
|
],
|
|
376
378
|
"overrides": {
|
|
377
379
|
"@tryghost/errors": "^1.3.7",
|
|
378
|
-
"@tryghost/logging": "4.
|
|
380
|
+
"@tryghost/logging": "4.2.0",
|
|
379
381
|
"jackspeak": "2.3.6",
|
|
380
382
|
"moment": "2.30.1",
|
|
381
383
|
"moment-timezone": "0.5.45",
|