ghost 6.62.0 → 6.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (766) hide show
  1. package/bin/lib/duplicate-deps.js +204 -0
  2. package/bin/validate-adapters.js +50 -6
  3. package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
  4. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  5. package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
  6. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  7. package/components/tryghost-api-framework-0.0.0.tgz +0 -0
  8. package/components/tryghost-checkout-0.0.0.tgz +0 -0
  9. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  10. package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
  11. package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
  12. package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
  13. package/components/tryghost-kg-default-cards-10.3.6.tgz +0 -0
  14. package/components/tryghost-kg-default-nodes-2.2.1.tgz +0 -0
  15. package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
  16. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  17. package/components/tryghost-kg-lexical-html-renderer-1.5.1.tgz +0 -0
  18. package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
  19. package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
  20. package/components/tryghost-limit-service-0.0.0.tgz +0 -0
  21. package/components/tryghost-metafield-types-0.0.0.tgz +0 -0
  22. package/content/themes/source/assets/built/screen.css +1 -1
  23. package/content/themes/source/assets/css/screen.css +1 -1
  24. package/content/themes/source/package.json +7 -7
  25. package/content/themes/source/partials/post-card.hbs +1 -1
  26. package/core/boot.js +17 -9
  27. package/core/built/admin/assets/Combination-DWfJPcz9.js +41 -0
  28. package/core/built/admin/assets/{PolarAngleAxis-pkMyqz8g.js → PolarAngleAxis-a81ieQUO.js} +2 -2
  29. package/core/built/admin/assets/RadialBarChart-CHRBhiBN.js +1 -0
  30. package/core/built/admin/assets/_baseAssignValue-DcPokYW8.js +1 -0
  31. package/core/built/admin/assets/about-39CAfroa.js +1 -0
  32. package/core/built/admin/assets/accordion-CJmRaqK7.js +1 -0
  33. package/core/built/admin/assets/account-migration-DYf7skbb.js +1 -0
  34. package/core/built/admin/assets/action-list-Crnh-_UI.js +1 -0
  35. package/core/built/admin/assets/activitypub/{account-migration-By69CgCp.js → account-migration-KA6Jjf9L.js} +7 -7
  36. package/core/built/admin/assets/activitypub/activitypub.js +3 -3
  37. package/core/built/admin/assets/activitypub/{avatar-DLPL3Abs.js → avatar-DVJF5bxP.js} +2 -2
  38. package/core/built/admin/assets/activitypub/{avatar-flipboard-C9iDY-QV.js → avatar-flipboard-csQaNeYK.js} +2 -2
  39. package/core/built/admin/assets/activitypub/{bluesky-sharing-BJcPMrDd.js → bluesky-sharing-C7nTDMvw.js} +9 -9
  40. package/core/built/admin/assets/activitypub/{content-formatters-3rTHg3mp.js → content-formatters-CLcjaBwV.js} +4 -4
  41. package/core/built/admin/assets/activitypub/{copy-DIAOQoCZ.js → copy-DcOh8kXw.js} +2 -2
  42. package/core/built/admin/assets/activitypub/{domain-DUR4xSkV.js → domain-fZ-X8i4-.js} +9 -9
  43. package/core/built/admin/assets/activitypub/{edit-profile-BqtfzxCp.js → edit-profile-BqMLQV88.js} +6 -6
  44. package/core/built/admin/assets/activitypub/{explore-BxuJd-J4.js → explore-B4yPoP8E.js} +10 -10
  45. package/core/built/admin/assets/activitypub/{feed-BM1TcksA.js → feed-BRC_mvAe.js} +9 -9
  46. package/core/built/admin/assets/activitypub/{field-Dn7HHx2-.js → field-COacNgOt.js} +3 -3
  47. package/core/built/admin/assets/activitypub/{hash-Bm3WxYN4.js → hash-C7u-irQQ.js} +2 -2
  48. package/core/built/admin/assets/activitypub/{inbox-CCjkuow2.js → inbox-BW-yvUoN.js} +10 -10
  49. package/core/built/admin/assets/activitypub/{inbox-d8oJRTf4.js → inbox-CbTTdDQ3.js} +2 -2
  50. package/core/built/admin/assets/activitypub/{label-1AA_s9Fa.js → label-kPMmYI7l.js} +3 -3
  51. package/core/built/admin/assets/activitypub/layout-BL4_jtuV.js +1 -0
  52. package/core/built/admin/assets/activitypub/{moderation-CnmxEB8w.js → moderation-CuidJzc0.js} +10 -10
  53. package/core/built/admin/assets/activitypub/{note-ZKc_Bnba.js → note-CAMRRSqD.js} +7 -7
  54. package/core/built/admin/assets/activitypub/{notifications-CB2tJZau.js → notifications-BmNlXGgp.js} +9 -9
  55. package/core/built/admin/assets/activitypub/{onboarding-BsJ9E5qf.js → onboarding-Bqg7fh_L.js} +2 -2
  56. package/core/built/admin/assets/activitypub/{onboarding-CSUJJIlh.js → onboarding-Dmun9jr_.js} +2 -2
  57. package/core/built/admin/assets/activitypub/{preferences-0-JZnUkI.js → preferences--oH19wf9.js} +11 -11
  58. package/core/built/admin/assets/activitypub/{profile-C35cFIhM.js → profile-DH_tQx2D.js} +14 -14
  59. package/core/built/admin/assets/activitypub/{reply-DYK5vVqb.js → reply-Cap9PxSH.js} +2 -2
  60. package/core/built/admin/assets/activitypub/{routes-BD4vscyc.js → routes-DdyY9uFF.js} +30 -30
  61. package/core/built/admin/assets/activitypub/{separator-BbQqTm-p.js → separator-CAxxu8VV.js} +3 -3
  62. package/core/built/admin/assets/activitypub/{settings-BsMROdqh.js → settings-B6EEcVkW.js} +6 -6
  63. package/core/built/admin/assets/activitypub/{site-O0RL9YCN.js → site-BYps63oh.js} +2 -2
  64. package/core/built/admin/assets/activitypub/{step-1-BMSx7c_X.js → step-1-CKjR2KAm.js} +6 -6
  65. package/core/built/admin/assets/activitypub/{step-2-DtPQzlTH.js → step-2-B6PKfOUQ.js} +6 -6
  66. package/core/built/admin/assets/activitypub/{step-3-CLlOZTyt.js → step-3-C-qBbcUo.js} +11 -11
  67. package/core/built/admin/assets/activitypub/{tabs-Dxk-b9M-.js → tabs-DLhZtVde.js} +6 -6
  68. package/core/built/admin/assets/activitypub/{topic-filter-5yZH6tId.js → topic-filter-DsUOuu0k.js} +3 -3
  69. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CV50qe03.js → use-activity-pub-queries-CX9snsLs.js} +3 -3
  70. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-Bmk5h4lW.js → use-navigate-with-base-path-DsJTGDSS.js} +988 -959
  71. package/core/built/admin/assets/activitypub/{use-reply-chain-data-Cbvzgjzd.js → use-reply-chain-data-AJi9zkzm.js} +5 -5
  72. package/core/built/admin/assets/activitypub/{users-BjcoP_HC.js → users-inweyKL5.js} +186 -160
  73. package/core/built/admin/assets/activitypub/{x-DbQZOLiI.js → x-DR8AT3-4.js} +2 -2
  74. package/core/built/admin/assets/add-integration-modal-B12oRifD.js +1 -0
  75. package/core/built/admin/assets/add-newsletter-modal-CTvXiIqY.js +1 -0
  76. package/core/built/admin/assets/add-recommendation-modal-CJf92edY.js +1 -0
  77. package/core/built/admin/assets/analytics-PHR1Fggi.js +1 -0
  78. package/core/built/admin/assets/announcement-bar-modal-Bql0CXdp.js +1 -0
  79. package/core/built/admin/assets/api-keys-CubH-7_H.js +1 -0
  80. package/core/built/admin/assets/{api-keys-3-0vJC3Y.js → api-keys-omLA6iYn.js} +1 -1
  81. package/core/built/admin/assets/{audience-CtbA54Sn.js → audience-6GXevic-.js} +1 -1
  82. package/core/built/admin/assets/automated-emails-DJQ4uNZo.js +1 -0
  83. package/core/built/admin/assets/automations-DcZSLFDU.js +1 -0
  84. package/core/built/admin/assets/automations-hDVcRPjh.js +1 -0
  85. package/core/built/admin/assets/avatar-flipboard-DiAGgshK.js +1 -0
  86. package/core/built/admin/assets/badge-qP06OT7C.js +1 -0
  87. package/core/built/admin/assets/bluesky-sharing-CJw4d4Mf.js +1 -0
  88. package/core/built/admin/assets/box-CZ_LSVSy.js +1 -0
  89. package/core/built/admin/assets/brand-icon-D3ffDYaC.js +1 -0
  90. package/core/built/admin/assets/breadcrumb-Chn1Ip_q.js +1 -0
  91. package/core/built/admin/assets/button-DvIh2Bq-.js +1 -0
  92. package/core/built/admin/assets/calendar-1QGoStFM.js +1 -0
  93. package/core/built/admin/assets/card-FHQ4D10L.js +1 -0
  94. package/core/built/admin/assets/chart-helpers-CNpA7re_.js +1 -0
  95. package/core/built/admin/assets/{chart-BrhA41Zi.js → chart-jVz9Nf9t.js} +9 -9
  96. package/core/built/admin/assets/checkbox-DKht9xMl.js +1 -0
  97. package/core/built/admin/assets/{chunk-KS7C4IRE-DCsL4i4D.js → chunk-KS7C4IRE-DhOcHQOU.js} +1 -1
  98. package/core/built/admin/assets/chunk.368.22ce1b732c0b40abd3f1.js +479 -0
  99. package/core/built/admin/assets/chunk.524.cc9be98e44890cedc8c8.js +25 -0
  100. package/core/built/admin/assets/{chunk.582.5ed5d124cfca9c259b9c.js → chunk.582.e6fe742b3217207b11a6.js} +23 -30
  101. package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js → chunk.972.4b8c97f93d66db15e751.js} +13582 -11017
  102. package/core/built/admin/assets/clean-tracked-url-dkN05vOf.js +1 -0
  103. package/core/built/admin/assets/code-editor-view-BLQIV85-.js +1 -0
  104. package/core/built/admin/assets/code-editor-view-Cg5eJxcr.js +1 -0
  105. package/core/built/admin/assets/color-picker-DQoghc0t.js +3 -0
  106. package/core/built/admin/assets/color-picker-field-BbeK5RRs.js +1 -0
  107. package/core/built/admin/assets/combobox-weO4FBbv.js +1 -0
  108. package/core/built/admin/assets/command-DlLrCm9V.js +1 -0
  109. package/core/built/admin/assets/comments-BjTitLmP.js +1 -0
  110. package/core/built/admin/assets/components-CwL6a6As-CCRaoCeP.js +1 -0
  111. package/core/built/admin/assets/{config-DOMQDZGZ.js → config-BPljH6wF.js} +1 -1
  112. package/core/built/admin/assets/confirmation-context-IyqoXVk-.js +1 -0
  113. package/core/built/admin/assets/container-DAimjOF_.js +1 -0
  114. package/core/built/admin/assets/content-api-modal-0ZjuLcQ8.js +1 -0
  115. package/core/built/admin/assets/context-menu-BtioYFrg.js +1 -0
  116. package/core/built/admin/assets/copy-field-C6ujqJlP.js +1 -0
  117. package/core/built/admin/assets/create-ghost-browse-value-source-DAZMWZNq.js +1 -0
  118. package/core/built/admin/assets/custom-integration-modal-Dm8QI_J4.js +1 -0
  119. package/core/built/admin/assets/data-list-C0CKkeWW.js +1 -0
  120. package/core/built/admin/assets/date-range-select-DrjHQdgz.js +1 -0
  121. package/core/built/admin/assets/design-and-theme-modal-CXVOzBWu.js +2 -0
  122. package/core/built/admin/assets/detail-page-QpLIL-EO.js +1 -0
  123. package/core/built/admin/assets/dirty-confirm-dialog-DWwxREGh.js +1 -0
  124. package/core/built/admin/assets/disabled-sources-indicator-CLZhMv8J.js +1 -0
  125. package/core/built/admin/assets/dist-BRQkNYN1.js +11 -0
  126. package/core/built/admin/assets/{dist-B3keLvjj.js → dist-BXHrDV19.js} +2 -2
  127. package/core/built/admin/assets/dist-Bf-HQtVL.js +1 -0
  128. package/core/built/admin/assets/dist-Bm-PB47a.js +6 -0
  129. package/core/built/admin/assets/{dist-B6bJuxL3.js → dist-C2lYC76d.js} +1 -1
  130. package/core/built/admin/assets/dist-CUwte9v_.js +1 -0
  131. package/core/built/admin/assets/dist-Cm2qbZKL.js +1 -0
  132. package/core/built/admin/assets/{dist-BtaTA7Ii.js → dist-D7yMk931.js} +1 -1
  133. package/core/built/admin/assets/{dist-zwwGt8Yf.js → dist-DNAdeRyr.js} +1 -1
  134. package/core/built/admin/assets/dist-DS6zpxid.js +1 -0
  135. package/core/built/admin/assets/dist-DVVKsyPh.js +23 -0
  136. package/core/built/admin/assets/dist-DxfQlAmn.js +1 -0
  137. package/core/built/admin/assets/dist-DziNzWI2.js +1 -0
  138. package/core/built/admin/assets/dist-FEQQAwTe.js +1 -0
  139. package/core/built/admin/assets/dist-nmRzULcD.js +1 -0
  140. package/core/built/admin/assets/domain-DBrBic6q.js +1 -0
  141. package/core/built/admin/assets/dropzone-D61QVcEY.js +5 -0
  142. package/core/built/admin/assets/edit-profile-jCqJBxqw.js +1 -0
  143. package/core/built/admin/assets/editor-8Fm4UBEd.js +8 -0
  144. package/core/built/admin/assets/editor-screen-BSX_uC2B.js +27 -0
  145. package/core/built/admin/assets/email-previews-Bs-JDhIw.js +1 -0
  146. package/core/built/admin/assets/email-sending-status-context-C76KYL1V.js +1 -0
  147. package/core/built/admin/assets/email-sending-status-provider-DnNhlIvt.js +1 -0
  148. package/core/built/admin/assets/emails-CgvIIz3q.js +1 -0
  149. package/core/built/admin/assets/{embed-signup-form-modal-Ds6mPEi5.js → embed-signup-form-modal-DqtBs1WE.js} +1 -1
  150. package/core/built/admin/assets/empty-indicator-L4Ql5Db7.js +1 -0
  151. package/core/built/admin/assets/en-Cx75dJv5.js +1 -0
  152. package/core/built/admin/assets/esm--rhhUGIG.js +2 -0
  153. package/core/built/admin/assets/explore-DXhDCtKw.js +1 -0
  154. package/core/built/admin/assets/feature-flag-overrides-context-CrcQKm9Z.js +1 -0
  155. package/core/built/admin/assets/feature-image-placeholder-e2q6TcH6.js +1 -0
  156. package/core/built/admin/assets/feed-mmt4noNL.js +1 -0
  157. package/core/built/admin/assets/feedback-BTPBQLT5.js +1 -0
  158. package/core/built/admin/assets/field-p7KnP98B.js +1 -0
  159. package/core/built/admin/assets/filter-bar-CiIKBg3D.js +1 -0
  160. package/core/built/admin/assets/filter-sources-I-dRaQxl.js +1 -0
  161. package/core/built/admin/assets/filters-1injvyxJ.js +1 -0
  162. package/core/built/admin/assets/filters-DnpO6GWX.js +1 -0
  163. package/core/built/admin/assets/first-promoter-modal-wr73Dldc.js +1 -0
  164. package/core/built/admin/assets/focus-koenig-editor-on-bottom-click-CkFA8EkI.js +1 -0
  165. package/core/built/admin/assets/framework-provider-DB-svAju.js +4 -0
  166. package/core/built/admin/assets/{ghost-8eabfc1ece81b03cf7b90780d31487e8.css → ghost-8fd5bb799356bbefb254210ba7e1236d.css} +1 -1
  167. package/core/built/admin/assets/{ghost-c2848508292937415f20f5a830eea59e.js → ghost-a1e6e172c6917e8ef8fa6b0007756d9b.js} +71 -46
  168. package/core/built/admin/assets/{ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css → ghost-dark-cac0cb2d5bb78e9bd14d8d1c2768ed45.css} +1 -1
  169. package/core/built/admin/assets/gift-link-modal-C3H7YFXO.js +1 -0
  170. package/core/built/admin/assets/{gift-links-DLDS7ljO.js → gift-links-D8gl_yJS.js} +1 -1
  171. package/core/built/admin/assets/global-data-context-3MItMry2.js +1 -0
  172. package/core/built/admin/assets/grid-5vplBYri.js +1 -0
  173. package/core/built/admin/assets/growth-B1og1kQp.js +1 -0
  174. package/core/built/admin/assets/growth-Bf6OHZlK.js +3 -0
  175. package/core/built/admin/assets/heading-BB21QAbb.js +1 -0
  176. package/core/built/admin/assets/history-modal-t_qEnxPx.js +1 -0
  177. package/core/built/admin/assets/hooks-DYfTEQLk.js +2 -0
  178. package/core/built/admin/assets/html-field-COLQbV4r.js +1 -0
  179. package/core/built/admin/assets/iframe-buffering-Bq1el-gw.js +1 -0
  180. package/core/built/admin/assets/images-4mvoc3lB.js +1 -0
  181. package/core/built/admin/assets/{inbox-Mcp4DXZN.js → inbox-DgSZ6w2p.js} +34 -34
  182. package/core/built/admin/assets/index-B3HZU2i8.css +2 -0
  183. package/core/built/admin/assets/index-DDd-zhNL.js +4 -0
  184. package/core/built/admin/assets/index.es-Ct5XQNSj.js +1 -0
  185. package/core/built/admin/assets/inline-B8H6NzIw.js +1 -0
  186. package/core/built/admin/assets/input-group-CLIN2ykI.js +1 -0
  187. package/core/built/admin/assets/{input-surface-BsrIZeSF.js → input-surface-wSO5CRy5.js} +1 -1
  188. package/core/built/admin/assets/integration-header-CKGrXNVP.js +1 -0
  189. package/core/built/admin/assets/{integrations-Bjbu86Z0.js → integrations-DnJrZnHv.js} +1 -1
  190. package/core/built/admin/assets/invite-user-modal-BaN2mdhI.js +1 -0
  191. package/core/built/admin/assets/jsx-runtime-BlNNh7jY.js +1 -0
  192. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +4 -4
  193. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +2 -2
  194. package/core/built/admin/assets/{koenig-lexical-DBSqAuiI.js → koenig-lexical-CXVgQFUk.js} +2 -2
  195. package/core/built/admin/assets/koenig-loader-B1XPPY5C.js +2 -0
  196. package/core/built/admin/assets/kpi-card-CRLPVlFW.js +1 -0
  197. package/core/built/admin/assets/kpi-card-CRPbW8NZ.js +1 -0
  198. package/core/built/admin/assets/kpi-helpers-D7zT96bp.js +1 -0
  199. package/core/built/admin/assets/kpi-tabs-DE_yh9Go.js +1 -0
  200. package/core/built/admin/assets/label-CgeBxy4o.js +1 -0
  201. package/core/built/admin/assets/label-picker-DGDp4Vwr.js +1 -0
  202. package/core/built/admin/assets/labels-KMkFoRG6.js +1 -0
  203. package/core/built/admin/assets/layout-DWnOMly4.js +1 -0
  204. package/core/built/admin/assets/lib-_QYaUU89.js +2 -0
  205. package/core/built/admin/assets/link-helpers-8J7ixADV.js +1 -0
  206. package/core/built/admin/assets/links-FwNCVyVe.js +1 -0
  207. package/core/built/admin/assets/list-page-DLMP0PxC.js +1 -0
  208. package/core/built/admin/assets/luxon-BXCsmep3.js +1 -0
  209. package/core/built/admin/assets/member-activity-ClMWFyvN.js +1 -0
  210. package/core/built/admin/assets/member-activity-feed-BQY5Rwaj.js +1 -0
  211. package/core/built/admin/assets/member-custom-fields-Dd_ie1zG.js +1 -0
  212. package/core/built/admin/assets/member-detail-DjwkGVne.js +1 -0
  213. package/core/built/admin/assets/members--N9lhk1N.js +4 -0
  214. package/core/built/admin/assets/modal-page-Dz-9TP4E.js +1 -0
  215. package/core/built/admin/assets/moderation-DfYBKq9s.js +1 -0
  216. package/core/built/admin/assets/multi-select-combobox-BcBEzUW_.js +1 -0
  217. package/core/built/admin/assets/navigation-modal-Cd-scywg.js +1 -0
  218. package/core/built/admin/assets/newsletter-detail-modal-CFRY6vg_.js +1 -0
  219. package/core/built/admin/assets/newsletter-emails-4ntck1AC.js +1 -0
  220. package/core/built/admin/assets/newsletter-o6eCJtab.js +1 -0
  221. package/core/built/admin/assets/newsletters-Bmlv0edG.js +1 -0
  222. package/core/built/admin/assets/newsletters-Dz77m__5.js +1 -0
  223. package/core/built/admin/assets/note-CWs3LF-0.js +1 -0
  224. package/core/built/admin/assets/notifications-BjSvTJqh.js +1 -0
  225. package/core/built/admin/assets/{nql-BLpCn7qX.js → nql-DnDc7UuU.js} +1 -1
  226. package/core/built/admin/assets/nql-lang-CeTB_Bhv.js +19 -0
  227. package/core/built/admin/assets/{offers-9J1CSiLy.js → offers-ByWSK0rR.js} +1 -1
  228. package/core/built/admin/assets/offers-container-modal-Bc9A196w.js +1 -0
  229. package/core/built/admin/assets/onboarding-B4hfBi9a.js +1 -0
  230. package/core/built/admin/assets/onboarding-DV_XbHts.js +1 -0
  231. package/core/built/admin/assets/onboarding-route-Di1LJYEE.js +1 -0
  232. package/core/built/admin/assets/overview-DE7NHZQN.js +1 -0
  233. package/core/built/admin/assets/overview-DEF-ZY6x.js +1 -0
  234. package/core/built/admin/assets/page-header-B-G_g42C.js +1 -0
  235. package/core/built/admin/assets/pagemenu-CnkTDO71.js +1 -0
  236. package/core/built/admin/assets/pages-DZ_YGB1D.js +1 -0
  237. package/core/built/admin/assets/pages-route-VT7r7YhG.js +1 -0
  238. package/core/built/admin/assets/papaparse.min-BlhnCUXn.js +10 -0
  239. package/core/built/admin/assets/pintura-modal-BljM7hf8.js +1 -0
  240. package/core/built/admin/assets/portal-frame-D9V8iq5x.js +1 -0
  241. package/core/built/admin/assets/portal-modal-B5OOR9ZD.js +1 -0
  242. package/core/built/admin/assets/post-analytics-context-bt2YTBAC.js +1 -0
  243. package/core/built/admin/assets/post-analytics-header-J0WciLx6.js +1 -0
  244. package/core/built/admin/assets/post-analytics-provider-CgreZDjS.js +1 -0
  245. package/core/built/admin/assets/post-analytics-rGb-PgD-.js +1 -0
  246. package/core/built/admin/assets/post-helpers-C88JBa4D.js +1 -0
  247. package/core/built/admin/assets/post-share-modal-D0BbTo4W.js +1 -0
  248. package/core/built/admin/assets/post-utils-DKF4mfuo.js +1 -0
  249. package/core/built/admin/assets/posts-list-screen-CO5jAWoU.js +2 -0
  250. package/core/built/admin/assets/posts-route-DV-CXWK9.js +1 -0
  251. package/core/built/admin/assets/posts-tcoO3iRG.js +1 -0
  252. package/core/built/admin/assets/preferences-Tac29oG6.js +5 -0
  253. package/core/built/admin/assets/preview-chrome-C2lQgZBZ.js +1 -0
  254. package/core/built/admin/assets/preview-modal-CjRbBr8U.js +1 -0
  255. package/core/built/admin/assets/profile-yiM1f_Og.js +1 -0
  256. package/core/built/admin/assets/prop-types-6lTeqvom.js +1 -0
  257. package/core/built/admin/assets/radio-group-CKROWsw4.js +1 -0
  258. package/core/built/admin/assets/react-BXwhMTuc.js +1 -0
  259. package/core/built/admin/assets/{jsx-runtime-DX3WBWVO.js → react-dom-CMOtJ5MH.js} +2 -2
  260. package/core/built/admin/assets/{referrers-CnhCMWCs.js → referrers-1R8bPpoV.js} +1 -1
  261. package/core/built/admin/assets/router-provider-CU87qxXw.js +1 -0
  262. package/core/built/admin/assets/schemas-BoYdB6YU.js +64 -0
  263. package/core/built/admin/assets/select-CKaC4ggu.js +1 -0
  264. package/core/built/admin/assets/settings-81kxUa28.js +1 -0
  265. package/core/built/admin/assets/settings-BVXFqBVK.js +4 -0
  266. package/core/built/admin/assets/settings-breadcrumbs-czGRx-iu.js +1 -0
  267. package/core/built/admin/assets/{shade-app-CcS3f8MZ-vwURazk8.js → shade-app-CcS3f8MZ-D5BnfHck.js} +1 -1
  268. package/core/built/admin/assets/share-modal-BL-16PiB.js +1 -0
  269. package/core/built/admin/assets/skeleton-DwCva0-b.js +1 -0
  270. package/core/built/admin/assets/slack-modal-D7W_fNON.js +1 -0
  271. package/core/built/admin/assets/sort-button-Dquc83jY.js +1 -0
  272. package/core/built/admin/assets/source-icon-CQboPZQ3.js +1 -0
  273. package/core/built/admin/assets/stack-BURz77VS.js +1 -0
  274. package/core/built/admin/assets/stats-Cvp8Ep5m.js +1 -0
  275. package/core/built/admin/assets/stats-view-NDja_g96.js +1 -0
  276. package/core/built/admin/assets/step-1-BKhjy0PV.js +1 -0
  277. package/core/built/admin/assets/step-2-PxA1OM7R.js +1 -0
  278. package/core/built/admin/assets/step-3-BJbAiq16.js +2 -0
  279. package/core/built/admin/assets/stripe-button-C3cfCAou.js +1 -0
  280. package/core/built/admin/assets/stripe-connect-modal-FyE3Ey2c.js +1 -0
  281. package/core/built/admin/assets/style-Wd9nQubI.css +1 -0
  282. package/core/built/admin/assets/switch-zfUUy9Jh.js +1 -0
  283. package/core/built/admin/assets/table-dE4GTIRT.js +1 -0
  284. package/core/built/admin/assets/tabs-B3XK93sR.js +1 -0
  285. package/core/built/admin/assets/tag-detail-D4P-tZdM.js +2 -0
  286. package/core/built/admin/assets/tag-picker-BNSZ6Qxw.js +1 -0
  287. package/core/built/admin/assets/tags-BsZcaJ6h.js +1 -0
  288. package/core/built/admin/assets/{tags-zTFiKRpb.js → tags-NwZ7BPK6.js} +1 -1
  289. package/core/built/admin/assets/testimonials-modal-Dkt6ODLW.js +1 -0
  290. package/core/built/admin/assets/text-DC-ot6u2.js +1 -0
  291. package/core/built/admin/assets/textarea-B4FffFmE.js +1 -0
  292. package/core/built/admin/assets/themes-DtcEFQWm.js +1 -0
  293. package/core/built/admin/assets/tier-detail-modal-a77Z2VMH.js +1 -0
  294. package/core/built/admin/assets/tiers-6mPzCXlM.js +1 -0
  295. package/core/built/admin/assets/toggle-group-D2p4okmJ.js +1 -0
  296. package/core/built/admin/assets/topic-filter-DVOe3D-b.js +1 -0
  297. package/core/built/admin/assets/transistor-modal-C8RMkhOD.js +1 -0
  298. package/core/built/admin/assets/trend-badge-B9v7kMF8.js +1 -0
  299. package/core/built/admin/assets/unsplash-modal-DXt7Brum.js +1 -0
  300. package/core/built/admin/assets/use-analytics-data-ChHqiZXv.js +1 -0
  301. package/core/built/admin/assets/use-availability-hPdeG76y.js +1 -0
  302. package/core/built/admin/assets/{use-check-theme-limit-error-Cw3WQHy8.js → use-check-theme-limit-error-JD-J5aaZ.js} +2 -2
  303. package/core/built/admin/assets/use-email-sending-status-DNMtL5B9.js +1 -0
  304. package/core/built/admin/assets/use-filter-params-BSFigDIn.js +1 -0
  305. package/core/built/admin/assets/use-filterable-api-CEMSAYPg.js +1 -0
  306. package/core/built/admin/assets/use-form-DJKZJhQh.js +1 -0
  307. package/core/built/admin/assets/use-growth-stats-CqqdnESN.js +1 -0
  308. package/core/built/admin/assets/use-host-limits-mpTkZIq8.js +1 -0
  309. package/core/built/admin/assets/use-limiter-DBGjYqu7.js +19 -0
  310. package/core/built/admin/assets/use-navigate-with-base-path-88EQpw2k.js +1 -0
  311. package/core/built/admin/assets/use-pintura-config-BmU45Ruy.js +1 -0
  312. package/core/built/admin/assets/use-pintura-editor-Bz2bZ4iT.js +1 -0
  313. package/core/built/admin/assets/use-post-referrers-DyPjyBSN.js +1 -0
  314. package/core/built/admin/assets/use-query-params-DlOHCo-R.js +1 -0
  315. package/core/built/admin/assets/use-reply-chain-data-DmD2yX5D.js +1 -0
  316. package/core/built/admin/assets/use-router-history-entry-CKx9LhqD.js +1 -0
  317. package/core/built/admin/assets/use-sending-eta-CQeG6OP_.js +1 -0
  318. package/core/built/admin/assets/use-setting-group-Dza6bQ7W.js +1 -0
  319. package/core/built/admin/assets/use-settings-navigation-BIjI5mL3.js +1 -0
  320. package/core/built/admin/assets/use-simple-pagination-DwVxe-Lo.js +1 -0
  321. package/core/built/admin/assets/use-staff-users-i_Mq9OGR.js +1 -0
  322. package/core/built/admin/assets/{use-tinybird-query-CSnGXzZh.js → use-tinybird-query-DXoF74NM.js} +1 -1
  323. package/core/built/admin/assets/use-tinybird-token-Lk1RSn0t.js +1 -0
  324. package/core/built/admin/assets/use-unsaved-changes-guard-CKVPWz_F.js +1 -0
  325. package/core/built/admin/assets/use-upgrade-route-CVjDlNSs.js +1 -0
  326. package/core/built/admin/assets/{use-url-input-DFr8lCbS.js → use-url-input-DpmbDppC.js} +1 -1
  327. package/core/built/admin/assets/user-detail-modal-BU4QCHE7.js +1 -0
  328. package/core/built/admin/assets/{users-Cg-OeGzC.js → users-C60_hpn6.js} +1 -1
  329. package/core/built/admin/assets/{validator-Cr0sMKuW.js → validator-DlFQP70j.js} +1 -1
  330. package/core/built/admin/assets/{vendor-5753232c7d6ffb3c44e1eb0a02133953.js → vendor-2dd263291938d407802568d3357ec69e.js} +19 -17
  331. package/core/built/admin/assets/virtual-list-DScLNuU8.js +1 -0
  332. package/core/built/admin/assets/web-BZS-t4H0.js +1 -0
  333. package/core/built/admin/assets/web-DxAUxnK3.js +2 -0
  334. package/core/built/admin/assets/zapier-modal-BafLUO4R.js +1 -0
  335. package/core/built/admin/index.html +38 -34
  336. package/core/cli/command.js +17 -2
  337. package/core/frontend/meta/asset-url.js +1 -16
  338. package/core/frontend/services/asset-hash/index.js +32 -2
  339. package/core/frontend/services/routing/controllers/unsubscribe.js +2 -1
  340. package/core/frontend/services/rss/generate-feed.js +1 -1
  341. package/core/frontend/services/theme-engine/active.js +2 -4
  342. package/core/frontend/services/theme-engine/i18n/i18n.js +11 -1
  343. package/core/frontend/services/theme-engine/i18next/theme-i18n.js +1 -1
  344. package/core/frontend/web/middleware/llms-discovery.js +34 -43
  345. package/core/server/adapters/jobs/InMemoryJobsBackend.js +74 -29
  346. package/core/server/adapters/route-settings/S3RouteSettingsStore.js +1 -1
  347. package/core/server/adapters/storage/LocalFilesStorage.js +12 -2
  348. package/core/server/adapters/storage/LocalStorageBase.js +13 -0
  349. package/core/server/api/endpoints/actions.js +2 -1
  350. package/core/server/api/endpoints/authentication.js +1 -2
  351. package/core/server/api/endpoints/authors-public.js +15 -5
  352. package/core/server/api/endpoints/automated-emails.js +3 -2
  353. package/core/server/api/endpoints/automations.js +77 -49
  354. package/core/server/api/endpoints/emails.js +21 -3
  355. package/core/server/api/endpoints/index.js +9 -1
  356. package/core/server/api/endpoints/invites.js +2 -1
  357. package/core/server/api/endpoints/labels.js +6 -2
  358. package/core/server/api/endpoints/member-metafields-members.js +23 -0
  359. package/core/server/api/endpoints/member-metafields.js +34 -21
  360. package/core/server/api/endpoints/members-account.js +42 -0
  361. package/core/server/api/endpoints/members.js +22 -6
  362. package/core/server/api/endpoints/newsletters-public.js +10 -1
  363. package/core/server/api/endpoints/pages-public.js +15 -5
  364. package/core/server/api/endpoints/pages.js +2 -6
  365. package/core/server/api/endpoints/posts-public.js +15 -5
  366. package/core/server/api/endpoints/posts.js +3 -11
  367. package/core/server/api/endpoints/snippets.js +2 -1
  368. package/core/server/api/endpoints/tags-public.js +22 -3
  369. package/core/server/api/endpoints/tags.js +6 -2
  370. package/core/server/api/endpoints/tiers-checkout-config.js +2 -2
  371. package/core/server/api/endpoints/tiers-public.js +38 -1
  372. package/core/server/api/endpoints/users.js +4 -8
  373. package/core/server/api/endpoints/utils/api-filter-utils.js +232 -6
  374. package/core/server/api/endpoints/utils/public-cache-keys.js +3 -0
  375. package/core/server/api/endpoints/utils/serializers/input/authors.js +2 -0
  376. package/core/server/api/endpoints/utils/serializers/input/members.js +16 -2
  377. package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -0
  378. package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -0
  379. package/core/server/api/endpoints/utils/serializers/input/tags.js +2 -0
  380. package/core/server/api/endpoints/utils/serializers/output/emails.js +7 -0
  381. package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
  382. package/core/server/api/endpoints/utils/serializers/output/member-metafields.js +3 -3
  383. package/core/server/api/endpoints/utils/serializers/output/members-account.js +19 -0
  384. package/core/server/api/endpoints/utils/serializers/output/members-csv-transform.js +1 -1
  385. package/core/server/api/endpoints/utils/serializers/output/tiers.js +10 -2
  386. package/core/server/api/endpoints/utils/serializers/output/users.js +0 -10
  387. package/core/server/api/endpoints/utils/serializers/output/utils/clean.js +2 -0
  388. package/core/server/api/endpoints/utils/serializers/output/utils/extra-attrs.js +3 -0
  389. package/core/server/api/endpoints/utils/validators/input/settings.js +15 -1
  390. package/core/server/data/exporter/exporter.js +2 -1
  391. package/core/server/data/exporter/table-lists.js +6 -8
  392. package/core/server/data/importer/importers/data/settings-importer.js +8 -2
  393. package/core/server/data/migrations/versions/6.53/2026-07-15-20-22-53-add-members-custom-field-values.js +1 -1
  394. package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +10 -1
  395. package/core/server/data/migrations/versions/6.63/2026-09-03-10-07-03-rename-custom-field-tables-to-metafields.js +169 -0
  396. package/core/server/data/migrations/versions/6.63/2026-09-03-11-03-31-remove-member-custom-field-read-permissions.js +30 -0
  397. package/core/server/data/migrations/versions/6.64/2026-09-03-15-40-25-add-member-access-to-members-metafields.js +12 -0
  398. package/core/server/data/migrations/versions/6.64/2026-09-08-11-01-12-add-posts-auto-excerpt-and-reading-time-columns.js +17 -0
  399. package/core/server/data/migrations/versions/6.64/2026-09-09-13-56-18-add-automation-run-updated-at-indexes.js +6 -0
  400. package/core/server/data/migrations/versions/6.64/2026-09-09-13-56-18-add-tinybird-syncs-table.js +10 -0
  401. package/core/server/data/schema/fixtures/fixtures.json +0 -11
  402. package/core/server/data/schema/lib/default-index-name.js +8 -11
  403. package/core/server/data/schema/schema.js +46 -20
  404. package/core/server/data/seeders/README.md +48 -0
  405. package/core/server/data/seeders/importers/automations-importer.js +0 -1
  406. package/core/server/data/seeders/importers/comments-importer.js +1 -1
  407. package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
  408. package/core/server/data/seeders/importers/emails-importer.js +1 -1
  409. package/core/server/data/seeders/importers/members-importer.js +1 -1
  410. package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
  411. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
  412. package/core/server/data/seeders/utils/blog-info.js +4 -3
  413. package/core/server/data/seeders/utils/event-generator.js +72 -46
  414. package/core/server/data/tinybird/datasources/_mv_automation_run_steps.datasource +10 -0
  415. package/core/server/data/tinybird/datasources/_mv_automation_runs.datasource +10 -0
  416. package/core/server/data/tinybird/datasources/_mv_pending_automation_runs.datasource +10 -0
  417. package/core/server/data/tinybird/datasources/automation_run_events.datasource +12 -0
  418. package/core/server/data/tinybird/datasources/automation_run_step_events.datasource +12 -0
  419. package/core/server/data/tinybird/endpoints/api_automation_browse_stats.pipe +43 -0
  420. package/core/server/data/tinybird/fixtures/automation_run_events.ndjson +7 -0
  421. package/core/server/data/tinybird/fixtures/automation_run_step_events.ndjson +8 -0
  422. package/core/server/data/tinybird/pipes/mv_automation_run_steps.pipe +13 -0
  423. package/core/server/data/tinybird/pipes/mv_automation_runs.pipe +15 -0
  424. package/core/server/data/tinybird/pipes/mv_hits.pipe +86 -50
  425. package/core/server/data/tinybird/pipes/mv_pending_automation_runs.pipe +7 -0
  426. package/core/server/data/tinybird/tests/api_automation_browse_stats.yaml +18 -0
  427. package/core/server/ghost-server.js +3 -3
  428. package/core/server/lib/db-types/count.js +16 -0
  429. package/core/server/lib/generate-password.js +54 -0
  430. package/core/server/lib/public-jwk.js +77 -0
  431. package/core/server/lib/validate-password.js +81 -120
  432. package/core/server/models/action.js +4 -4
  433. package/core/server/models/base/plugins/filtered-collection.js +16 -0
  434. package/core/server/models/member.js +6 -6
  435. package/core/server/models/user.js +12 -10
  436. package/core/server/services/adapter-manager/base-classes.js +21 -3
  437. package/core/server/services/automations/automations-api.js +46 -1
  438. package/core/server/services/automations/database-automations-repository.js +11 -4
  439. package/core/server/services/automations/tinybird-automation-stats.js +56 -0
  440. package/core/server/services/content-import/import/media.js +1 -1
  441. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +15 -29
  442. package/core/server/services/email-analytics/email-analytics-service.js +19 -3
  443. package/core/server/services/email-analytics/index.js +9 -4
  444. package/core/server/services/email-rendering/finalize.js +7 -2
  445. package/core/server/services/email-service/CONTEXT.md +37 -0
  446. package/core/server/services/email-service/README.md +45 -0
  447. package/core/server/services/email-service/batch-sending-service.js +2 -0
  448. package/core/server/services/email-service/email-controller.js +18 -2
  449. package/core/server/services/email-service/email-renderer.js +7 -2
  450. package/core/server/services/email-service/email-service-wrapper.js +4 -1
  451. package/core/server/services/email-service/email-service.js +43 -34
  452. package/core/server/services/email-service/sending-status-schema.js +21 -0
  453. package/core/server/services/email-service/sending-status-serializers.js +33 -0
  454. package/core/server/services/email-service/sending-status-service.js +47 -0
  455. package/core/server/services/email-service/sending-status.js +117 -0
  456. package/core/server/services/email-suppression-list/email-suppression-list.js +0 -33
  457. package/core/server/services/email-suppression-list/mailgun-email-suppression-list.js +6 -7
  458. package/core/server/services/gifts/README.md +2 -2
  459. package/core/server/services/gifts/constants.js +1 -1
  460. package/core/server/services/gifts/gift-email-service.js +10 -3
  461. package/core/server/services/gifts/gift-service.js +19 -57
  462. package/core/server/services/gifts/index.js +1 -2
  463. package/core/server/services/i18n.js +1 -1
  464. package/core/server/services/identity-tokens/identity-token-service-wrapper.js +3 -4
  465. package/core/server/services/jobs-service/index.js +8 -0
  466. package/core/server/services/jobs-service/jobs-service.js +52 -3
  467. package/core/server/services/jobs-service/register-job-handlers.js +13 -2
  468. package/core/server/services/limits.js +17 -1
  469. package/core/server/services/member-welcome-emails/service.js +1 -1
  470. package/core/server/services/members/account-service.js +98 -0
  471. package/core/server/services/members/api.js +4 -4
  472. package/core/server/services/members/import-export/export/exporter.js +20 -20
  473. package/core/server/services/members/import-export/import/completion-email.js +6 -6
  474. package/core/server/services/members/import-export/import/importer.js +13 -13
  475. package/core/server/services/members/import-export/index.js +10 -9
  476. package/core/server/services/members/members-api/controllers/router-controller.js +7 -2
  477. package/core/server/services/members/members-api/controllers/well-known-controller.js +2 -1
  478. package/core/server/services/members/members-api/members-api.js +26 -6
  479. package/core/server/services/members/members-api/repositories/event-repository.js +4 -0
  480. package/core/server/services/members/members-api/repositories/member-repository.js +4 -4
  481. package/core/server/services/members/members-api/services/member-bread-service.js +57 -48
  482. package/core/server/services/members/members-api/services/token-service.js +11 -12
  483. package/core/server/services/members/members-ssr.js +18 -0
  484. package/core/server/services/members/middleware.js +104 -83
  485. package/core/server/services/members/request-integrity-token-provider.js +2 -1
  486. package/core/server/services/members/service.js +70 -42
  487. package/core/server/services/members/utils.js +9 -0
  488. package/core/server/services/members-metafields/access.js +39 -0
  489. package/core/server/services/{members-custom-fields → members-metafields}/actions.js +6 -5
  490. package/core/server/services/members-metafields/bindings-service.js +147 -0
  491. package/core/server/services/members-metafields/codec.js +21 -0
  492. package/core/server/services/{members-custom-fields → members-metafields}/config.js +1 -1
  493. package/core/server/services/{members-custom-fields → members-metafields}/definitions-service.js +71 -67
  494. package/core/server/services/{members-custom-fields → members-metafields}/filter.js +9 -9
  495. package/core/server/services/{members-custom-fields → members-metafields}/index.js +16 -7
  496. package/core/server/services/{members-custom-fields → members-metafields}/key.js +1 -1
  497. package/core/server/services/{members-custom-fields → members-metafields}/models.js +6 -4
  498. package/core/server/services/members-metafields/namespaces.js +34 -0
  499. package/core/server/services/members-metafields/queries.js +60 -0
  500. package/core/server/services/{members-custom-fields → members-metafields}/schema.js +18 -12
  501. package/core/server/services/{members-custom-fields → members-metafields}/serializers.js +7 -6
  502. package/core/server/services/{members-custom-fields → members-metafields}/values-service.js +46 -27
  503. package/core/server/services/mentions/mention-discovery-service.js +1 -1
  504. package/core/server/services/mentions/mention-sending-service.js +27 -10
  505. package/core/server/services/mentions/mention.js +1 -1
  506. package/core/server/services/mentions/send-webmentions-job.js +18 -0
  507. package/core/server/services/mentions/service.js +1 -31
  508. package/core/server/services/oembed/oembed-service.js +36 -11
  509. package/core/server/services/posts/post-scheduling.js +20 -0
  510. package/core/server/services/staff/staff-service-emails.js +5 -1
  511. package/core/server/services/stats/stats-service.js +12 -3
  512. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +2 -2
  513. package/core/server/services/stripe/stripe-service.js +4 -4
  514. package/core/server/services/tier-checkout-config/codec.js +2 -2
  515. package/core/server/services/tier-checkout-config/index.js +2 -1
  516. package/core/server/services/tier-checkout-config/models.js +2 -2
  517. package/core/server/services/tier-checkout-config/queries.js +8 -8
  518. package/core/server/services/tier-checkout-config/serializers.js +57 -0
  519. package/core/server/services/tier-checkout-config/service.js +18 -2
  520. package/core/server/services/tiers/service.js +3 -3
  521. package/core/server/services/tinybird/tinybird-service.js +1 -0
  522. package/core/server/services/tinybird-sync/get-ingest-config.js +39 -0
  523. package/core/server/services/tinybird-sync/index.js +28 -0
  524. package/core/server/services/tinybird-sync/sync-table-to-tinybird.js +149 -0
  525. package/core/server/services/tinybird-sync/tinybird-sync-service.js +62 -0
  526. package/core/server/services/url/router-filter.js +8 -10
  527. package/core/server/services/users.js +1 -19
  528. package/core/server/web/api/endpoints/admin/routes.js +34 -34
  529. package/core/server/web/members/account/index.js +2 -0
  530. package/core/server/web/members/account/routes.js +46 -0
  531. package/core/server/web/members/app.js +4 -18
  532. package/core/server/web/well-known.js +12 -16
  533. package/core/shared/config/defaults.json +2 -3
  534. package/core/shared/{flush-logs.js → flush.js} +7 -3
  535. package/core/shared/labs.js +6 -2
  536. package/core/shared/timing-safe-string-equal.js +26 -0
  537. package/package.json +46 -46
  538. package/patches/@elastic__elasticsearch@8.19.2.patch +67 -0
  539. package/patches/juice@11.1.1.patch +46 -0
  540. package/pnpm-lock.yaml +750 -1742
  541. package/pnpm-workspace.yaml +37 -24
  542. package/scripts/prune.mts +70 -3
  543. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  544. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  545. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  546. package/core/built/admin/assets/Combination-B0l4MKVh.js +0 -41
  547. package/core/built/admin/assets/RadialBarChart-JAKoS4KT.js +0 -1
  548. package/core/built/admin/assets/_baseAssignValue-C_vooEQc.js +0 -1
  549. package/core/built/admin/assets/about-Dyae_UT6.js +0 -1
  550. package/core/built/admin/assets/account-migration-CESa0mnX.js +0 -1
  551. package/core/built/admin/assets/action-list-C4v0-du8.js +0 -1
  552. package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +0 -1
  553. package/core/built/admin/assets/add-integration-modal-BlF6rs_f.js +0 -1
  554. package/core/built/admin/assets/add-newsletter-modal-CglVQqah.js +0 -1
  555. package/core/built/admin/assets/add-recommendation-modal-wz7BsuaG.js +0 -1
  556. package/core/built/admin/assets/analytics-C4HE1gBg.js +0 -1
  557. package/core/built/admin/assets/announcement-bar-modal-Ci4zz8jO.js +0 -1
  558. package/core/built/admin/assets/api-keys-Ck-Yteiv.js +0 -1
  559. package/core/built/admin/assets/automated-emails-D5VVMND9.js +0 -1
  560. package/core/built/admin/assets/automations-CzKt5fb8.js +0 -1
  561. package/core/built/admin/assets/automations-sAcJ1334.js +0 -1
  562. package/core/built/admin/assets/avatar-flipboard-C6Kj3Awu.js +0 -1
  563. package/core/built/admin/assets/bluesky-sharing-BEtJ_gL_.js +0 -1
  564. package/core/built/admin/assets/box-CdfQAP_F.js +0 -1
  565. package/core/built/admin/assets/brand-icon-CrIGOA3Z.js +0 -1
  566. package/core/built/admin/assets/breadcrumb-zUrZrBtW.js +0 -1
  567. package/core/built/admin/assets/build-CsiH26uS.js +0 -1
  568. package/core/built/admin/assets/button-eNMKQWXr.js +0 -1
  569. package/core/built/admin/assets/card--VNbfgo3.js +0 -1
  570. package/core/built/admin/assets/chart-helpers-CfBKt0vT.js +0 -1
  571. package/core/built/admin/assets/checkbox-CgOn_tKW.js +0 -1
  572. package/core/built/admin/assets/chunk.524.a697dee88db67fdf6021.js +0 -32
  573. package/core/built/admin/assets/chunk.598.7e056fabb47ce7dbd73f.js +0 -366
  574. package/core/built/admin/assets/code-editor-view-BYNoAoNV.js +0 -1
  575. package/core/built/admin/assets/code-editor-view-K2wI-I5f.js +0 -1
  576. package/core/built/admin/assets/color-picker-Ddw80xX6.js +0 -3
  577. package/core/built/admin/assets/color-picker-field-D9nUhvA7.js +0 -1
  578. package/core/built/admin/assets/combobox-w9j8PPQT.js +0 -1
  579. package/core/built/admin/assets/command-BfpHORBv.js +0 -1
  580. package/core/built/admin/assets/comments-BLmCmyCs.js +0 -1
  581. package/core/built/admin/assets/components-CwL6a6As-B0E0-NBJ.js +0 -1
  582. package/core/built/admin/assets/confirmation-context-CBM8G0Vj.js +0 -1
  583. package/core/built/admin/assets/container-BuQG1wuP.js +0 -1
  584. package/core/built/admin/assets/content-api-modal-TXRz3U7S.js +0 -1
  585. package/core/built/admin/assets/context-menu-_QMdd3kp.js +0 -1
  586. package/core/built/admin/assets/copy-field-6N01S07E.js +0 -1
  587. package/core/built/admin/assets/create-ghost-browse-value-source-qIBymvvf.js +0 -1
  588. package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +0 -1
  589. package/core/built/admin/assets/custom-integration-modal-DmNquxUV.js +0 -1
  590. package/core/built/admin/assets/data-list-CA2jYGPq.js +0 -1
  591. package/core/built/admin/assets/date-range-select-uvz_DtPh.js +0 -1
  592. package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +0 -2
  593. package/core/built/admin/assets/detail-page-Dnv-CdR1.js +0 -1
  594. package/core/built/admin/assets/dirty-confirm-dialog-BZ1iytEd.js +0 -1
  595. package/core/built/admin/assets/disabled-sources-indicator-DMRrxsiJ.js +0 -1
  596. package/core/built/admin/assets/dist-4m6pHdc0.js +0 -23
  597. package/core/built/admin/assets/dist-8YJUlf3B.js +0 -1
  598. package/core/built/admin/assets/dist-CZgIBXQN.js +0 -1
  599. package/core/built/admin/assets/dist-CiHx7vA5.js +0 -6
  600. package/core/built/admin/assets/dist-DIC8yz5C.js +0 -1
  601. package/core/built/admin/assets/dist-Dcsslyo72.js +0 -1
  602. package/core/built/admin/assets/dist-Dgt2cr6a.js +0 -1
  603. package/core/built/admin/assets/dist-ECAUrdGc.js +0 -1
  604. package/core/built/admin/assets/dist-JLOy8o0Q.js +0 -1
  605. package/core/built/admin/assets/dist-Ndy-PuGN.js +0 -1
  606. package/core/built/admin/assets/dist-Z97pCNqS.js +0 -11
  607. package/core/built/admin/assets/domain-BNYrt0aD.js +0 -1
  608. package/core/built/admin/assets/dropzone-D7nFdAe5.js +0 -5
  609. package/core/built/admin/assets/edit-profile-C5Asm4LA.js +0 -1
  610. package/core/built/admin/assets/editor-REokrzci.js +0 -8
  611. package/core/built/admin/assets/empty-indicator-D9QdpuNX.js +0 -1
  612. package/core/built/admin/assets/en-B1jX3WMs.js +0 -1
  613. package/core/built/admin/assets/esm-CXo5SEPy.js +0 -2
  614. package/core/built/admin/assets/explore-UY10Egsp.js +0 -1
  615. package/core/built/admin/assets/feature-image-placeholder-D1iF_8bc.js +0 -1
  616. package/core/built/admin/assets/feed-81C8mJWR.js +0 -1
  617. package/core/built/admin/assets/field-Dihp5p18.js +0 -1
  618. package/core/built/admin/assets/filter-bar-Da1qxybu.js +0 -1
  619. package/core/built/admin/assets/filter-sources-BO9xUPj7.js +0 -1
  620. package/core/built/admin/assets/filters-CRUWecfY.js +0 -1
  621. package/core/built/admin/assets/filters-DirqNXjH.js +0 -1
  622. package/core/built/admin/assets/first-promoter-modal-CT6MxYZb.js +0 -1
  623. package/core/built/admin/assets/framework-provider-DqI25epG.js +0 -4
  624. package/core/built/admin/assets/gift-link-modal-CQVAye17.js +0 -1
  625. package/core/built/admin/assets/global-data-context-gAMDH9u1.js +0 -1
  626. package/core/built/admin/assets/grid-Dj29PY05.js +0 -1
  627. package/core/built/admin/assets/growth-BWIu-6xj.js +0 -3
  628. package/core/built/admin/assets/growth-DU29oxeA.js +0 -1
  629. package/core/built/admin/assets/heading-Dh5SFVjL.js +0 -1
  630. package/core/built/admin/assets/history-modal-CFd1Hvx6.js +0 -1
  631. package/core/built/admin/assets/hooks-CuEZV2-q.js +0 -2
  632. package/core/built/admin/assets/html-field-CJBCLTvv.js +0 -1
  633. package/core/built/admin/assets/iframe-buffering-B2OKJzbz.js +0 -1
  634. package/core/built/admin/assets/images-scfkWZiK.js +0 -1
  635. package/core/built/admin/assets/index-6MkPdCtr.js +0 -4
  636. package/core/built/admin/assets/index-Bn7QhcZu.css +0 -2
  637. package/core/built/admin/assets/index.es-CNnuNH0d.js +0 -1
  638. package/core/built/admin/assets/inline-BWSs_VzR.js +0 -1
  639. package/core/built/admin/assets/input-group-CMhe2DvY.js +0 -1
  640. package/core/built/admin/assets/integration-header-Bm6IDb1A.js +0 -1
  641. package/core/built/admin/assets/invite-user-modal-DfheMXs0.js +0 -1
  642. package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +0 -2
  643. package/core/built/admin/assets/kpi-card-DBRMfGOW.js +0 -1
  644. package/core/built/admin/assets/kpi-card-DFafD1qq.js +0 -1
  645. package/core/built/admin/assets/kpi-helpers-Cv8i8hns.js +0 -1
  646. package/core/built/admin/assets/kpi-tabs-BJItvLYm.js +0 -1
  647. package/core/built/admin/assets/label-BnSCvffu.js +0 -1
  648. package/core/built/admin/assets/label-picker-KVoo91sh.js +0 -1
  649. package/core/built/admin/assets/labels-CH3Kn8RV.js +0 -1
  650. package/core/built/admin/assets/layout-Bjv2Ll-5.js +0 -1
  651. package/core/built/admin/assets/limit-service-BhiEvqcP.js +0 -20
  652. package/core/built/admin/assets/link-helpers-MVDdnFCY.js +0 -1
  653. package/core/built/admin/assets/list-page-BucXJ0hi.js +0 -1
  654. package/core/built/admin/assets/luxon-D1RVjjpq.js +0 -1
  655. package/core/built/admin/assets/member-custom-fields-DDQV6QeG.js +0 -1
  656. package/core/built/admin/assets/member-detail-CdJF6Agw.js +0 -1
  657. package/core/built/admin/assets/members-DjQbq9Z2.js +0 -4
  658. package/core/built/admin/assets/modal-page-xCivTMvI.js +0 -1
  659. package/core/built/admin/assets/moderation-AgCIEso4.js +0 -1
  660. package/core/built/admin/assets/multi-select-combobox-BcITkUVr.js +0 -1
  661. package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +0 -1
  662. package/core/built/admin/assets/newsletter-BMMAuvgq.js +0 -1
  663. package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +0 -1
  664. package/core/built/admin/assets/newsletter-emails-DKzwafuh.js +0 -1
  665. package/core/built/admin/assets/newsletters-BRBb_uQC.js +0 -1
  666. package/core/built/admin/assets/newsletters-DhNigJUh.js +0 -1
  667. package/core/built/admin/assets/note-DyGHtS9a.js +0 -1
  668. package/core/built/admin/assets/notifications-ZgWniKna.js +0 -1
  669. package/core/built/admin/assets/nql-lang-CaWrLesS.js +0 -19
  670. package/core/built/admin/assets/offers-container-modal-B-E8TIWr.js +0 -1
  671. package/core/built/admin/assets/onboarding-CzIsre-d.js +0 -1
  672. package/core/built/admin/assets/onboarding-qg8Akovm.js +0 -1
  673. package/core/built/admin/assets/onboarding-route-CaavZulg.js +0 -1
  674. package/core/built/admin/assets/overview-BW8GLeYi.js +0 -1
  675. package/core/built/admin/assets/overview-BkXZNzaZ.js +0 -1
  676. package/core/built/admin/assets/page-header-De0VzKBi.js +0 -1
  677. package/core/built/admin/assets/pagemenu-B5KKCpbA.js +0 -1
  678. package/core/built/admin/assets/pages-jgaFm69d.js +0 -1
  679. package/core/built/admin/assets/pages-route-CIUAQxtY.js +0 -1
  680. package/core/built/admin/assets/papaparse.min-cQwnxGCG.js +0 -10
  681. package/core/built/admin/assets/pintura-modal-BZ2J9w3n.js +0 -1
  682. package/core/built/admin/assets/portal-frame-B6Hr9wHc.js +0 -1
  683. package/core/built/admin/assets/portal-modal-D4ceei3t.js +0 -1
  684. package/core/built/admin/assets/post-analytics-context-D0Mw-Pmv.js +0 -1
  685. package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +0 -1
  686. package/core/built/admin/assets/post-analytics-ot7f6pih.js +0 -1
  687. package/core/built/admin/assets/post-analytics-provider-Bo1gmYaP.js +0 -1
  688. package/core/built/admin/assets/post-helpers-C5OQMBoi.js +0 -1
  689. package/core/built/admin/assets/post-share-modal-C-PaYZ_e.js +0 -1
  690. package/core/built/admin/assets/posts-DuGazgTb.js +0 -1
  691. package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +0 -2
  692. package/core/built/admin/assets/posts-route-D6xmS7Vf.js +0 -1
  693. package/core/built/admin/assets/preferences-C5YJLp74.js +0 -5
  694. package/core/built/admin/assets/preview-chrome-BljUBlOk.js +0 -1
  695. package/core/built/admin/assets/preview-modal-BfeFqi5y.js +0 -1
  696. package/core/built/admin/assets/profile-B8mx2yAu.js +0 -1
  697. package/core/built/admin/assets/prop-types-DeUPn3oD.js +0 -1
  698. package/core/built/admin/assets/radio-group-DczlLKOn.js +0 -1
  699. package/core/built/admin/assets/react-Bb3IsNbi.js +0 -1
  700. package/core/built/admin/assets/rolldown-runtime-DAXXjFlN.js +0 -1
  701. package/core/built/admin/assets/router-provider-B0gZyiGJ.js +0 -1
  702. package/core/built/admin/assets/schemas-DppqmpeJ.js +0 -64
  703. package/core/built/admin/assets/select-cb0t_TAJ.js +0 -1
  704. package/core/built/admin/assets/settings-DZqxR0Da.js +0 -1
  705. package/core/built/admin/assets/settings-DvfTNdHQ.js +0 -4
  706. package/core/built/admin/assets/settings-breadcrumbs-DLzbRRSt.js +0 -1
  707. package/core/built/admin/assets/share-modal-D2-Bz1_I.js +0 -1
  708. package/core/built/admin/assets/skeleton-Ce9GgUpf.js +0 -1
  709. package/core/built/admin/assets/slack-modal-DYDTUria.js +0 -1
  710. package/core/built/admin/assets/sort-button-VVeQjjbu.js +0 -1
  711. package/core/built/admin/assets/source-icon-Ck5_5Kgq.js +0 -1
  712. package/core/built/admin/assets/stack-B2eszIiq.js +0 -1
  713. package/core/built/admin/assets/stats-Rjmk5owg.js +0 -1
  714. package/core/built/admin/assets/stats-view-BGGmkmgv.js +0 -1
  715. package/core/built/admin/assets/step-1-CsaBjeN4.js +0 -1
  716. package/core/built/admin/assets/step-2-D2vnxOOM.js +0 -1
  717. package/core/built/admin/assets/step-3-wBoLdGEb.js +0 -2
  718. package/core/built/admin/assets/stripe-button-CDgLz0S0.js +0 -1
  719. package/core/built/admin/assets/stripe-connect-modal-CSjMJetP.js +0 -1
  720. package/core/built/admin/assets/switch-CI4gLWqb.js +0 -1
  721. package/core/built/admin/assets/table-Do6iQ83Q.js +0 -1
  722. package/core/built/admin/assets/tabs-D2yWLMp_.js +0 -1
  723. package/core/built/admin/assets/tag-detail-BhXlOsCa.js +0 -2
  724. package/core/built/admin/assets/tags-ldukRApe.js +0 -1
  725. package/core/built/admin/assets/testimonials-modal-CtnZBJKl.js +0 -1
  726. package/core/built/admin/assets/text-BQDSDsKs.js +0 -1
  727. package/core/built/admin/assets/textarea-DJ1Q5V39.js +0 -1
  728. package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +0 -1
  729. package/core/built/admin/assets/tiers-Nd_z4BZY.js +0 -1
  730. package/core/built/admin/assets/toggle-group-ByUJsxwD.js +0 -1
  731. package/core/built/admin/assets/topic-filter-BgC3g5_v.js +0 -1
  732. package/core/built/admin/assets/transistor-modal-Drr0SNfo.js +0 -1
  733. package/core/built/admin/assets/trend-badge-6ye93YAW.js +0 -1
  734. package/core/built/admin/assets/unsplash-modal-p6AoQoWp.js +0 -1
  735. package/core/built/admin/assets/use-analytics-data-CWCMAESo.js +0 -1
  736. package/core/built/admin/assets/use-filter-params-BIni9taJ.js +0 -1
  737. package/core/built/admin/assets/use-filterable-api-CzXcpUh8.js +0 -1
  738. package/core/built/admin/assets/use-form-vRjI0Kwk.js +0 -1
  739. package/core/built/admin/assets/use-growth-stats-DCVG3s9w.js +0 -1
  740. package/core/built/admin/assets/use-host-limits-DZtR08oa.js +0 -1
  741. package/core/built/admin/assets/use-limiter-D2WRRx0H.js +0 -2
  742. package/core/built/admin/assets/use-navigate-with-base-path-BHPA228f.js +0 -1
  743. package/core/built/admin/assets/use-pintura-config-h-J0Lvta.js +0 -1
  744. package/core/built/admin/assets/use-pintura-editor-BfN1UwzH.js +0 -1
  745. package/core/built/admin/assets/use-post-referrers-Czg47m8s.js +0 -1
  746. package/core/built/admin/assets/use-query-params-BfzuqbcD.js +0 -1
  747. package/core/built/admin/assets/use-reply-chain-data-ns0caK8k.js +0 -1
  748. package/core/built/admin/assets/use-router-history-entry-uldn7zJO.js +0 -1
  749. package/core/built/admin/assets/use-setting-group-DpcuCUDg.js +0 -1
  750. package/core/built/admin/assets/use-settings-navigation-CZjGrhsp.js +0 -1
  751. package/core/built/admin/assets/use-simple-pagination-DzJWobPR.js +0 -1
  752. package/core/built/admin/assets/use-staff-users-Csipb-O0.js +0 -1
  753. package/core/built/admin/assets/use-tinybird-token-DTOKRR7e.js +0 -1
  754. package/core/built/admin/assets/use-unsaved-changes-guard-CBzs-KPi.js +0 -1
  755. package/core/built/admin/assets/use-upgrade-route-DhRSo7at.js +0 -1
  756. package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +0 -1
  757. package/core/built/admin/assets/virtual-list-BW-padMe.js +0 -1
  758. package/core/built/admin/assets/web-C1v33ehA.js +0 -2
  759. package/core/built/admin/assets/web-C4BKzn2T.js +0 -1
  760. package/core/built/admin/assets/zapier-modal-BBFfI6Ml.js +0 -1
  761. package/core/server/services/email-suppression-list/in-memory-email-suppression-list.js +0 -39
  762. package/core/server/services/members-custom-fields/bindings-service.js +0 -120
  763. package/core/server/services/members-custom-fields/codec.js +0 -14
  764. package/core/server/services/members-custom-fields/queries.js +0 -32
  765. /package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js.LICENSE.txt → chunk.972.4b8c97f93d66db15e751.js.LICENSE.txt} +0 -0
  766. /package/core/server/services/{members-custom-fields → members-metafields}/storage.js +0 -0
@@ -3,21 +3,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CustomFieldValuesService = void 0;
6
+ exports.MetafieldValuesService = void 0;
7
7
  const bson_objectid_1 = __importDefault(require("bson-objectid"));
8
8
  const errors_1 = __importDefault(require("@tryghost/errors"));
9
9
  const logging_1 = __importDefault(require("@tryghost/logging"));
10
10
  const zod_1 = require("zod");
11
- const custom_field_types_1 = require("@tryghost/custom-field-types");
12
- const identity_1 = require("@tryghost/custom-field-types/identity");
11
+ const metafield_types_1 = require("@tryghost/metafield-types");
12
+ const identity_1 = require("@tryghost/metafield-types/identity");
13
13
  const schema_1 = require("./schema");
14
14
  const queries_1 = require("./queries");
15
+ const access_1 = require("./access");
15
16
  const storage_1 = require("./storage");
16
- const FIELDS_TABLE = 'members_custom_fields';
17
- const VALUES_TABLE = 'members_custom_field_values';
17
+ const FIELDS_TABLE = 'members_metafields';
18
+ const VALUES_TABLE = 'members_metafield_values';
18
19
  /**
19
20
  * From the canonical schema, the same source definitions-service reads, so no key a site
20
- * could hold is refused and this cannot drift from the `members_custom_fields.key` column.
21
+ * could hold is refused and this cannot drift from the `members_metafields.key` column.
21
22
  */
22
23
  const MAX_KEY_LENGTH = require('../../data/schema').tables[FIELDS_TABLE].key.maxlength;
23
24
  /**
@@ -38,7 +39,7 @@ const wireProperty = (identity) => [identity_1.QUALIFIER, identity].join('.');
38
39
  * because a value belongs to the member and a definition belongs to the site's settings,
39
40
  * which are different aggregates rather than different layers.
40
41
  */
41
- class CustomFieldValuesService {
42
+ class MetafieldValuesService {
42
43
  knex;
43
44
  /** A getter, not a number: the ceiling is an operator setting that changes between requests. */
44
45
  getMaxDefinitions;
@@ -46,7 +47,11 @@ class CustomFieldValuesService {
46
47
  this.knex = knex;
47
48
  this.getMaxDefinitions = getMaxDefinitions;
48
49
  }
49
- async activeFieldsByIdentity(identities) {
50
+ // The query is scoped to the audience, so a field they may not see is absent from
51
+ // the map and the caller reports it as unknown. Looking up unscoped and rejecting
52
+ // afterwards would let a member tell a hidden field from an undefined one by the
53
+ // reply they got.
54
+ async allowedFieldsByIdentity(identities, audience) {
50
55
  const keys = identities
51
56
  .map((identity) => (0, identity_1.parseIdentity)(identity))
52
57
  .filter((parsed) => parsed !== null && parsed.namespace === identity_1.CUSTOM_NAMESPACE)
@@ -54,23 +59,29 @@ class CustomFieldValuesService {
54
59
  if (keys.length === 0) {
55
60
  return new Map();
56
61
  }
57
- const fields = await (0, queries_1.activeFields)(this.knex)
62
+ const fields = await (0, queries_1.definitions)(this.knex, { audience, status: queries_1.ACTIVE_ONLY })
58
63
  .whereIn('key', keys)
59
- .select('id', 'key', 'name', 'type');
64
+ .select('id', 'key', 'name', 'type', 'member_access');
60
65
  return new Map(fields.map((field) => [
61
66
  (0, identity_1.formatIdentity)({ namespace: identity_1.CUSTOM_NAMESPACE, key: field.key, partPath: null }),
62
- { ...field, namespace: identity_1.CUSTOM_NAMESPACE },
67
+ {
68
+ id: field.id,
69
+ key: field.key,
70
+ name: field.name,
71
+ type: field.type,
72
+ namespace: identity_1.CUSTOM_NAMESPACE,
73
+ memberAccess: field.member_access,
74
+ },
63
75
  ]));
64
76
  }
65
- async getValuesForMembers(memberIds) {
77
+ async getValuesForMembers(memberIds, audience) {
66
78
  if (memberIds.length === 0) {
67
79
  return new Map();
68
80
  }
69
81
  // Not ordered by field: these rows become an object keyed by field, and an object
70
82
  // cannot carry an order. `path` is ordered so composite parts assemble the same
71
83
  // way every time.
72
- const rows = await this.knex(VALUES_TABLE)
73
- .join(FIELDS_TABLE, `${VALUES_TABLE}.custom_field_key`, `${FIELDS_TABLE}.key`)
84
+ const rows = await (0, queries_1.readableBy)(this.knex(VALUES_TABLE).join(FIELDS_TABLE, `${VALUES_TABLE}.metafield_key`, `${FIELDS_TABLE}.key`), audience)
74
85
  .whereIn(`${VALUES_TABLE}.member_id`, memberIds)
75
86
  .where(`${FIELDS_TABLE}.status`, schema_1.FIELD_STATUS.active)
76
87
  .orderBy(`${VALUES_TABLE}.path`, 'asc')
@@ -78,15 +89,15 @@ class CustomFieldValuesService {
78
89
  const leaves = [];
79
90
  for (const row of rows) {
80
91
  try {
81
- leaves.push(schema_1.DbCustomFieldLeaf.parse(row));
92
+ leaves.push(schema_1.DbMetafieldLeaf.parse(row));
82
93
  }
83
94
  catch (err) {
84
95
  logging_1.default.warn({
85
- event: { name: 'members.custom_fields.value_unreadable' },
96
+ event: { name: 'members.metafields.value_unreadable' },
86
97
  err,
87
- customFieldKey: row.key,
98
+ metafieldKey: row.key,
88
99
  path: row.path,
89
- }, 'Skipping an unreadable custom field value');
100
+ }, 'Skipping an unreadable metafield value');
90
101
  }
91
102
  }
92
103
  const flat = (0, storage_1.valuesFromLeaves)(leaves);
@@ -141,7 +152,7 @@ class CustomFieldValuesService {
141
152
  * validate before opening a transaction it would otherwise have to unwind, then apply
142
153
  * the same plan without re-resolving it.
143
154
  */
144
- async planWrite(input) {
155
+ async planWrite(input, audience) {
145
156
  const values = this.parseValues(input);
146
157
  const identities = Object.keys(values);
147
158
  // Bounded by the definitions ceiling, which also holds the lookup below inside
@@ -153,7 +164,7 @@ class CustomFieldValuesService {
153
164
  property: identity_1.QUALIFIER,
154
165
  });
155
166
  }
156
- const byIdentity = await this.activeFieldsByIdentity(identities);
167
+ const byIdentity = await this.allowedFieldsByIdentity(identities, audience);
157
168
  const writes = [];
158
169
  for (const [identity, raw] of Object.entries(values)) {
159
170
  const field = byIdentity.get(identity);
@@ -163,10 +174,18 @@ class CustomFieldValuesService {
163
174
  property: wireProperty(identity),
164
175
  });
165
176
  }
177
+ // A different refusal from the unknown-field one above: this audience can
178
+ // already see the field, so naming it discloses nothing.
179
+ if (!(0, access_1.canWrite)(audience, field)) {
180
+ throw new errors_1.default.ValidationError({
181
+ message: `Cannot set custom field: ${identity}`,
182
+ property: wireProperty(identity),
183
+ });
184
+ }
166
185
  // `null` clears any field, and `''` clears one with no parts. For a value
167
186
  // with parts `''` names nothing, so it is left to fail validation rather than
168
187
  // being read as a silent delete.
169
- if (raw === null || (raw === '' && (0, custom_field_types_1.subFieldsOf)(field.type) === null)) {
188
+ if (raw === null || (raw === '' && (0, metafield_types_1.subFieldsOf)(field.type) === null)) {
170
189
  writes.push({ field });
171
190
  continue;
172
191
  }
@@ -174,7 +193,7 @@ class CustomFieldValuesService {
174
193
  // `context` when `context` is empty and prepends it when it is not, so
175
194
  // anything added here reaches the client glued to the front of the reason.
176
195
  // Which field failed rides in `property`.
177
- const value = custom_field_types_1.FIELD_TYPES[field.type].value.safeParse(raw);
196
+ const value = metafield_types_1.FIELD_TYPES[field.type].value.safeParse(raw);
178
197
  if (!value.success) {
179
198
  const issue = value.error.issues[0];
180
199
  throw new errors_1.default.ValidationError({
@@ -224,7 +243,7 @@ class CustomFieldValuesService {
224
243
  rows.push(...set.map((leaf) => ({
225
244
  id: new bson_objectid_1.default().toHexString(),
226
245
  member_id: memberId,
227
- custom_field_key: field.key,
246
+ metafield_key: field.key,
228
247
  path: leaf.path,
229
248
  value_text: leaf.value_text,
230
249
  written_by_type: writtenBy.type,
@@ -236,7 +255,7 @@ class CustomFieldValuesService {
236
255
  if (clearedKeys.length > 0) {
237
256
  await trx(VALUES_TABLE)
238
257
  .where('member_id', memberId)
239
- .whereIn('custom_field_key', clearedKeys)
258
+ .whereIn('metafield_key', clearedKeys)
240
259
  .del();
241
260
  }
242
261
  if (clearedPaths.length > 0) {
@@ -245,7 +264,7 @@ class CustomFieldValuesService {
245
264
  .where('member_id', memberId)
246
265
  .where((builder) => {
247
266
  for (const { fieldKey, paths } of clearedPaths) {
248
- builder.orWhere((pair) => pair.where('custom_field_key', fieldKey).whereIn('path', paths));
267
+ builder.orWhere((pair) => pair.where('metafield_key', fieldKey).whereIn('path', paths));
249
268
  }
250
269
  })
251
270
  .del();
@@ -258,7 +277,7 @@ class CustomFieldValuesService {
258
277
  .insert(rows.slice(from, from + UPSERT_CHUNK))
259
278
  // Naming the columns rather than giving values takes each from the row
260
279
  // that lost the conflict, so every part updates to its own value.
261
- .onConflict(['member_id', 'custom_field_key', 'path'])
280
+ .onConflict(['member_id', 'metafield_key', 'path'])
262
281
  // The writer is merged with the value, so a leaf names who wrote what
263
282
  // it currently holds rather than who wrote its first value.
264
283
  .merge(['value_text', 'written_by_type', 'written_by_id', 'updated_at']);
@@ -273,4 +292,4 @@ class CustomFieldValuesService {
273
292
  }
274
293
  }
275
294
  }
276
- exports.CustomFieldValuesService = CustomFieldValuesService;
295
+ exports.MetafieldValuesService = MetafieldValuesService;
@@ -63,7 +63,7 @@ module.exports = class MentionDiscoveryService {
63
63
  return null;
64
64
  }
65
65
 
66
- const cheerio = require('cheerio');
66
+ const cheerio = require('cheerio/slim');
67
67
  const $ = cheerio.load(response.body);
68
68
 
69
69
  // must be first <link> OR <a> element with rel=webmention
@@ -1,5 +1,6 @@
1
1
  const errors = require('@tryghost/errors');
2
2
  const logging = require('@tryghost/logging');
3
+ const SendWebmentionsJob = require('./send-webmentions-job').default;
3
4
 
4
5
  module.exports = class MentionSendingService {
5
6
  #discoveryService;
@@ -8,8 +9,12 @@ module.exports = class MentionSendingService {
8
9
  #getPostData;
9
10
  #getPostUrl;
10
11
  #isEnabled;
11
- #jobService;
12
+ #jobsService;
12
13
 
14
+ /**
15
+ * @param {object} deps
16
+ * @param {import('../jobs-service/jobs-service').JobsService} deps.jobsService
17
+ */
13
18
  constructor({
14
19
  discoveryService,
15
20
  externalRequest,
@@ -17,7 +22,7 @@ module.exports = class MentionSendingService {
17
22
  getPostData,
18
23
  getPostUrl,
19
24
  isEnabled,
20
- jobService,
25
+ jobsService,
21
26
  }) {
22
27
  this.#discoveryService = discoveryService;
23
28
  this.#externalRequest = externalRequest;
@@ -25,7 +30,7 @@ module.exports = class MentionSendingService {
25
30
  this.#getPostData = getPostData;
26
31
  this.#getPostUrl = getPostUrl;
27
32
  this.#isEnabled = isEnabled;
28
- this.#jobService = jobService;
33
+ this.#jobsService = jobsService;
29
34
  }
30
35
 
31
36
  get siteUrl() {
@@ -82,13 +87,13 @@ module.exports = class MentionSendingService {
82
87
  // Capture the source URL now, from the event's data, rather than
83
88
  // deferring the model into the job.
84
89
  const url = new URL(await this.#resolvePostUrl(post));
85
- await this.#jobService.addJob('sendWebmentions', async () => {
86
- await this.sendForHTMLResource({
87
- url,
90
+ await this.#jobsService.dispatch(
91
+ new SendWebmentionsJob({
92
+ sourceUrl: url.href,
88
93
  html: html,
89
94
  previousHtml: previousHtml,
90
- });
91
- });
95
+ }),
96
+ );
92
97
  }
93
98
  } catch (e) {
94
99
  logging.error('Error in webmention sending service post update event handler:');
@@ -157,11 +162,23 @@ module.exports = class MentionSendingService {
157
162
  });
158
163
  }
159
164
 
165
+ /**
166
+ * Send the webmentions for a delivered job.
167
+ * @param {import('./send-webmentions-job').default} job
168
+ */
169
+ async sendWebmentions(job) {
170
+ await this.sendForHTMLResource({
171
+ url: new URL(job.sourceUrl),
172
+ html: job.html,
173
+ previousHtml: job.previousHtml,
174
+ });
175
+ }
176
+
160
177
  /**
161
178
  * Send a webmention call for the links in a resource.
162
179
  * @param {object} resource
163
180
  * @param {URL} resource.url
164
- * @param {string} resource.html
181
+ * @param {string|null} resource.html
165
182
  * @param {string|null} [resource.previousHtml]
166
183
  */
167
184
  async sendForHTMLResource(resource) {
@@ -225,7 +242,7 @@ module.exports = class MentionSendingService {
225
242
  * @returns {URL[]}
226
243
  */
227
244
  getLinks(html) {
228
- const cheerio = require('cheerio');
245
+ const cheerio = require('cheerio/slim');
229
246
  const $ = cheerio.load(html);
230
247
  const urls = [];
231
248
  const siteUrl = this.siteUrl;
@@ -61,7 +61,7 @@ module.exports = class Mention {
61
61
 
62
62
  if (contentType.includes('text/html')) {
63
63
  try {
64
- const cheerio = require('cheerio');
64
+ const cheerio = require('cheerio/slim');
65
65
  const $ = cheerio.load(html);
66
66
  const hasTargetUrl =
67
67
  $(
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const job_1 = require("../jobs-service/job");
4
+ // Carries the post's full html twice - the largest job payload in the system;
5
+ // revisit if a durable backend puts size limits on envelopes.
6
+ class SendWebmentionsJob extends job_1.Job {
7
+ static type = 'send-webmentions';
8
+ sourceUrl;
9
+ html;
10
+ previousHtml;
11
+ constructor({ sourceUrl, html, previousHtml, }) {
12
+ super();
13
+ this.sourceUrl = sourceUrl;
14
+ this.html = html ?? null;
15
+ this.previousHtml = previousHtml ?? null;
16
+ }
17
+ }
18
+ exports.default = SendWebmentionsJob;
@@ -14,8 +14,6 @@ const outputSerializerUrlUtil = require('../../../server/api/endpoints/utils/ser
14
14
  const urlService = require('../url');
15
15
  const settingsCache = require('../../../shared/settings-cache');
16
16
  const DomainEvents = require('@tryghost/domain-events');
17
- const logging = require('@tryghost/logging');
18
- const mentionsJobService = require('../mentions-jobs');
19
17
 
20
18
  // Serializes a post model to the data the URL service needs, loading the
21
19
  // relations it reads for filtered collections (event-emitted models don't
@@ -38,33 +36,6 @@ function getPostUrl(id, postData) {
38
36
  return jsonModel.url;
39
37
  }
40
38
 
41
- // Reports the same queued/started/finished/failed lifecycle for every mentions
42
- // background job. The wrapped callback's result and errors pass through unchanged,
43
- // so job manager outcomes and retries are unaffected.
44
- function makeLoggingJobService() {
45
- return {
46
- async addJob(name, fn) {
47
- logging.info(`[Background Job] ${name} queued`);
48
- mentionsJobService.addJob({
49
- name,
50
- job: async () => {
51
- const startedAt = Date.now();
52
- logging.info(`[Background Job] ${name} started`);
53
- try {
54
- const result = await fn();
55
- logging.info(`[Background Job] ${name} completed in ${Date.now() - startedAt}ms`);
56
- return result;
57
- } catch (err) {
58
- logging.error(err, `[Background Job] ${name} failed after ${Date.now() - startedAt}ms`);
59
- throw err;
60
- }
61
- },
62
- offloaded: false,
63
- });
64
- },
65
- };
66
- }
67
-
68
39
  module.exports = {
69
40
  /** @type {import('./mentions-api')} */
70
41
  api: null,
@@ -141,7 +112,7 @@ module.exports = {
141
112
  getPostData: (post) => getPostData(post),
142
113
  getPostUrl: (id, data) => getPostUrl(id, data),
143
114
  isEnabled: () => !settingsCache.get('is_private'),
144
- jobService: makeLoggingJobService(),
115
+ jobsService,
145
116
  });
146
117
  sendingService.listen(events);
147
118
 
@@ -152,4 +123,3 @@ module.exports = {
152
123
  // exposed for testing
153
124
  module.exports.getPostData = getPostData;
154
125
  module.exports.getPostUrl = getPostUrl;
155
- module.exports.makeLoggingJobService = makeLoggingJobService;
@@ -42,6 +42,7 @@ const messages = {
42
42
  unableToFetchOembed: 'Unable to fetch requested embed.',
43
43
  unauthorized: 'URL contains a private resource.',
44
44
  unconvertibleSvg: 'SVG image is too large or compressed to convert.',
45
+ unsupportedImage: 'Image is not a supported file type.',
45
46
  };
46
47
 
47
48
  const SVG_RASTER_SIZE = 256;
@@ -68,6 +69,16 @@ const shouldRasterize = (buffer, ext) => {
68
69
  return head.startsWith('<') && /<svg[\s:>]/i.test(head);
69
70
  };
70
71
 
72
+ let fileTypeFromBuffer;
73
+
74
+ const detectFileType = async (buffer) => {
75
+ if (!fileTypeFromBuffer) {
76
+ ({ fileTypeFromBuffer } = await import('file-type'));
77
+ }
78
+
79
+ return fileTypeFromBuffer(buffer);
80
+ };
81
+
71
82
  /**
72
83
  * @param {string} url
73
84
  * @returns {{url: string, provider: boolean}}
@@ -234,6 +245,20 @@ class OEmbedService {
234
245
  });
235
246
 
236
247
  ext = '.png';
248
+ } else {
249
+ // The URL's extension is attacker-controlled and decides the
250
+ // Content-Type the stored file is later served with, so name the
251
+ // file after its contents and hold it to the same allowlist as image
252
+ // uploads. `file-type` never reports SVG, which is handled above.
253
+ const fileType = await detectFileType(imageBuffer);
254
+ ext = fileType ? `.${fileType.ext}` : '';
255
+
256
+ if (!this.config.get('uploads').images.extensions.includes(ext)) {
257
+ throw new errors.ValidationError({
258
+ message: tpl(messages.unsupportedImage),
259
+ context: imageUrl,
260
+ });
261
+ }
237
262
  }
238
263
 
239
264
  const uniqueFileName = `${name}-${crypto.randomUUID()}${ext}`;
@@ -561,12 +586,12 @@ class OEmbedService {
561
586
  */
562
587
  async fetchOembedData(url, html, cardType) {
563
588
  // Lazy require the library to keep boot quick
564
- const cheerio = require('cheerio');
589
+ const cheerio = require('cheerio/slim');
565
590
 
566
591
  // check for <link rel="alternate" type="application/json+oembed"> element
567
592
  let oembedUrl;
568
593
  try {
569
- oembedUrl = cheerio('link[type="application/json+oembed"]', html).attr('href');
594
+ oembedUrl = cheerio.load(html)('link[type="application/json+oembed"]').attr('href');
570
595
  } catch (e) {
571
596
  return this.unknownProvider(url);
572
597
  }
@@ -622,15 +647,15 @@ class OEmbedService {
622
647
  return;
623
648
  }
624
649
 
625
- // `rich` and `video` responses ship provider-supplied HTML that gets
626
- // stored in the post's Lexical payload and rendered into the admin
627
- // editor preview (via srcdoc) and into public themes (via innerHTML).
628
- // Known providers (YouTube, Twitter, etc.) go through `knownProvider`
629
- // with @extractus/oembed-extractor's allowlist — anything reaching
630
- // here is an arbitrary site's self-declared oEmbed endpoint, which we
631
- // must not trust. Drop the response and let the caller fall back to
632
- // a bookmark card.
633
- if (oembed.type === 'video' || oembed.type === 'rich') {
650
+ // `rich`, `video` and `photo` responses can all ship provider-supplied
651
+ // HTML that gets stored in the post's Lexical payload and rendered
652
+ // into the admin editor preview (via srcdoc) and into public themes
653
+ // and emails (via innerHTML). Known providers (YouTube, Twitter, etc.)
654
+ // go through `knownProvider` with @extractus/oembed-extractor's
655
+ // allowlist — anything reaching here is an arbitrary site's
656
+ // self-declared oEmbed endpoint, which we must not trust. Drop the
657
+ // response and let the caller fall back to a bookmark card.
658
+ if (oembed.type === 'video' || oembed.type === 'rich' || oembed.type === 'photo') {
634
659
  return;
635
660
  }
636
661
 
@@ -16,6 +16,10 @@ const messages = {
16
16
  // retrying a publish that will never happen.
17
17
  const NO_OP = { scheduledResource: null, preScheduledResource: null };
18
18
 
19
+ // Ignore overlapping deliveries for the same resource. The scheduler owns
20
+ // retries if the active publish fails; always release the guard when it settles.
21
+ const inFlight = new Set();
22
+
19
23
  /**
20
24
  * Publishes scheduled resource (a post or a page at the moment of writing)
21
25
  *
@@ -27,6 +31,22 @@ const NO_OP = { scheduledResource: null, preScheduledResource: null };
27
31
  * `scheduledResource: null` when there was nothing to publish yet
28
32
  */
29
33
  exports.publish = async (resourceType, id, force, options) => {
34
+ const key = `${resourceType}:${id}`;
35
+
36
+ if (inFlight.has(key)) {
37
+ return NO_OP;
38
+ }
39
+
40
+ inFlight.add(key);
41
+
42
+ try {
43
+ return await publishNow(resourceType, id, force, options);
44
+ } finally {
45
+ inFlight.delete(key);
46
+ }
47
+ };
48
+
49
+ const publishNow = async (resourceType, id, force, options) => {
30
50
  const publishAPostBySchedulerToleranceInMinutes =
31
51
  config.get('times').publishAPostBySchedulerToleranceInMinutes;
32
52
 
@@ -669,7 +669,11 @@ class StaffServiceEmails {
669
669
 
670
670
  const juice = require('juice');
671
671
 
672
- return juice(html, { inlinePseudoElements: true, removeStyleTags: true });
672
+ return juice(html, {
673
+ inlinePseudoElements: true,
674
+ removeStyleTags: true,
675
+ resolveCSSVariables: false,
676
+ });
673
677
  }
674
678
 
675
679
  async renderText(templateName, data) {
@@ -246,10 +246,19 @@ class StatsService {
246
246
  const request = deps.request || require('../../lib/request-external');
247
247
  const settingsCache = deps.settingsCache || require('../../../shared/settings-cache');
248
248
 
249
- if (settingsCache.get('web_analytics_enabled')) {
250
- // TODO: move the tinybird client to the tinybird service
251
- const TinybirdServiceWrapper = require('../tinybird');
249
+ const labs = deps.labs || require('../../../shared/labs');
250
+ const webAnalyticsEnabled = settingsCache.get('web_analytics_enabled');
251
+ const TinybirdServiceWrapper = require('../tinybird');
252
+
253
+ if (
254
+ webAnalyticsEnabled ||
255
+ (labs.isSet('automationsTinybirdSync') && config.get('tinybird:stats'))
256
+ ) {
252
257
  TinybirdServiceWrapper.init();
258
+ }
259
+
260
+ if (webAnalyticsEnabled) {
261
+ // TODO: move the tinybird client to the tinybird service
253
262
  tinybirdClient = require('./utils/tinybird').create({
254
263
  config,
255
264
  request,
@@ -453,7 +453,7 @@ module.exports = class CheckoutSessionEventService {
453
453
 
454
454
  /**
455
455
  * This service knows how to read a completed Stripe session. It does not know, and must
456
- * not know, which custom field any of those values belongs in — that is what a binding
456
+ * not know, which metafield any of those values belongs in — that is what a binding
457
457
  * decides, so no field key appears anywhere in this code.
458
458
  *
459
459
  * Nothing here may be fatal: a throw fails the webhook, which makes Stripe retry it and
@@ -493,7 +493,7 @@ module.exports = class CheckoutSessionEventService {
493
493
  return;
494
494
  }
495
495
 
496
- await this.deps.customFieldBindings.writeCollected(
496
+ await this.deps.metafieldBindings.writeCollected(
497
497
  memberId,
498
498
  tierId,
499
499
  collectedByPort.parse(session),
@@ -10,7 +10,7 @@ const InvoiceEventService = require('./services/webhook/invoice-event-service');
10
10
  const CheckoutSessionEventService = require('./services/webhook/checkout-session-event-service');
11
11
  const ChargeRefundedEventService = require('./services/webhook/charge-refunded-event-service');
12
12
  const memberWelcomeEmailService = require('../member-welcome-emails/service');
13
- const customFields = require('../members-custom-fields');
13
+ const metafields = require('../members-metafields');
14
14
 
15
15
  /**
16
16
  * @typedef {object} IStripeServiceConfig
@@ -135,10 +135,10 @@ module.exports = class StripeService {
135
135
  memberWelcomeEmailService.init();
136
136
  return memberWelcomeEmailService.api.isMemberWelcomeEmailActive('paid');
137
137
  },
138
- // A getter because the custom field services are built during boot: reading the
138
+ // A getter because the metafields services are built during boot: reading the
139
139
  // binding at construction would capture the empty value it had beforehand.
140
- get customFieldBindings() {
141
- return customFields.bindings;
140
+ get metafieldBindings() {
141
+ return metafields.bindings;
142
142
  },
143
143
  });
144
144
 
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.questionRowCodec = exports.QuestionRow = exports.collectionRowCodec = exports.CollectionRow = exports.optionsCodec = void 0;
4
4
  const zod_1 = require("zod");
5
- const custom_field_types_1 = require("@tryghost/custom-field-types");
5
+ const metafield_types_1 = require("@tryghost/metafield-types");
6
6
  const boolean_1 = require("../../lib/db-types/boolean");
7
7
  const schema_1 = require("./schema");
8
8
  const models_1 = require("./models");
@@ -67,7 +67,7 @@ exports.QuestionRow = zod_1.z.object({
67
67
  label: schema_1.DbCheckoutQuestion.shape.label,
68
68
  optional: schema_1.DbCheckoutQuestion.shape.optional,
69
69
  question_name: zod_1.z.string().nullable(),
70
- question_type: custom_field_types_1.FieldTypeSchema.nullable(),
70
+ question_type: metafield_types_1.FieldTypeSchema.nullable(),
71
71
  });
72
72
  exports.questionRowCodec = exports.QuestionRow.transform((row) => ({
73
73
  tierId: row.product_id,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toCheckoutConfigResponse = exports.TierCheckoutConfig = exports.ShippingCollection = exports.ResolvedQuestion = exports.ResolvedCheckout = exports.PhoneCollection = exports.emptyCheckoutConfig = exports.CheckoutQuestion = exports.TierCheckoutConfigService = void 0;
3
+ exports.requirementsByTier = exports.toCheckoutConfigResponse = exports.TierCheckoutConfig = exports.ShippingCollection = exports.ResolvedQuestion = exports.ResolvedCheckout = exports.PhoneCollection = exports.emptyCheckoutConfig = exports.CheckoutQuestion = exports.TierCheckoutConfigService = void 0;
4
4
  /**
5
5
  * What a tier's checkout asks and collects.
6
6
  *
@@ -24,3 +24,4 @@ Object.defineProperty(exports, "ShippingCollection", { enumerable: true, get: fu
24
24
  Object.defineProperty(exports, "TierCheckoutConfig", { enumerable: true, get: function () { return models_1.TierCheckoutConfig; } });
25
25
  var serializers_1 = require("./serializers");
26
26
  Object.defineProperty(exports, "toCheckoutConfigResponse", { enumerable: true, get: function () { return serializers_1.toCheckoutConfigResponse; } });
27
+ Object.defineProperty(exports, "requirementsByTier", { enumerable: true, get: function () { return serializers_1.requirementsByTier; } });
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResolvedCheckout = exports.ResolvedQuestion = exports.CheckoutOptions = exports.emptyCheckoutConfig = exports.emptyCollection = exports.TierCheckoutConfig = exports.PhoneCollection = exports.ShippingCollection = exports.CheckoutQuestion = void 0;
4
4
  const zod_1 = require("zod");
5
- const custom_field_types_1 = require("@tryghost/custom-field-types");
5
+ const metafield_types_1 = require("@tryghost/metafield-types");
6
6
  exports.CheckoutQuestion = zod_1.z.object({
7
7
  key: zod_1.z.string(),
8
8
  label: zod_1.z.string().nullable(),
@@ -53,7 +53,7 @@ exports.CheckoutOptions = zod_1.z.object({
53
53
  });
54
54
  exports.ResolvedQuestion = exports.CheckoutQuestion.extend({
55
55
  prompt: zod_1.z.string(),
56
- type: custom_field_types_1.FieldTypeSchema,
56
+ type: metafield_types_1.FieldTypeSchema,
57
57
  });
58
58
  exports.ResolvedCheckout = zod_1.z.object({
59
59
  customFields: zod_1.z.array(exports.ResolvedQuestion),