ghost 6.60.0 → 6.61.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 (399) hide show
  1. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  2. package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
  3. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  4. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  5. package/core/boot.js +13 -4
  6. package/core/built/admin/assets/{Combination-gnJO3vIw.js → Combination-5fYEzgbs.js} +1 -1
  7. package/core/built/admin/assets/{PolarAngleAxis-C4qtHy1B.js → PolarAngleAxis-pkMyqz8g.js} +1 -1
  8. package/core/built/admin/assets/{RadialBarChart-Bh09Stsj.js → RadialBarChart-JAKoS4KT.js} +1 -1
  9. package/core/built/admin/assets/{about-BgpmhCuM.js → about-Bve7IJS2.js} +1 -1
  10. package/core/built/admin/assets/{account-migration-8qTEI1i1.js → account-migration-DRhAehfw.js} +1 -1
  11. package/core/built/admin/assets/{action-list-lGzZLHc8.js → action-list-C4v0-du8.js} +1 -1
  12. package/core/built/admin/assets/activitypub/{account-migration-DMHuPnJn.js → account-migration-C-aej4x_.js} +7 -7
  13. package/core/built/admin/assets/activitypub/activitypub.js +3 -4
  14. package/core/built/admin/assets/activitypub/{avatar-DhTo5D1B.js → avatar-DLPL3Abs.js} +59 -68
  15. package/core/built/admin/assets/activitypub/{avatar-flipboard-DnVgbEfa.js → avatar-flipboard-C9iDY-QV.js} +2 -2
  16. package/core/built/admin/assets/activitypub/{bluesky-sharing-BT4zAlW7.js → bluesky-sharing-BXkA5mqV.js} +8 -8
  17. package/core/built/admin/assets/activitypub/{content-formatters-BeDZ-DIa.js → content-formatters-CHcyMFk4.js} +17 -17
  18. package/core/built/admin/assets/activitypub/{copy-8sqxUuNd.js → copy-DIAOQoCZ.js} +2 -2
  19. package/core/built/admin/assets/activitypub/{domain-xQDDu1CS.js → domain-B3ihkPde.js} +8 -8
  20. package/core/built/admin/assets/activitypub/{edit-profile-BXdF_r2G.js → edit-profile-DsZM3rTX.js} +5 -5
  21. package/core/built/admin/assets/activitypub/{explore-CMt7gKlL.js → explore-BodNrZgR.js} +8 -8
  22. package/core/built/admin/assets/activitypub/{feed-Bwqdddp_.js → feed-PwH1iJ84.js} +9 -9
  23. package/core/built/admin/assets/activitypub/{field-4co_8FVg.js → field-D06-kmOJ.js} +3 -3
  24. package/core/built/admin/assets/activitypub/{hash-DwakMs4X.js → hash-Bm3WxYN4.js} +2 -2
  25. package/core/built/admin/assets/activitypub/{inbox-DQ5CwLma.js → inbox-BluD2ucT.js} +16 -16
  26. package/core/built/admin/assets/activitypub/{inbox-ckD4wo_r.js → inbox-d8oJRTf4.js} +2 -2
  27. package/core/built/admin/assets/activitypub/{label-B72sfvEU.js → label-FHSh6ZAw.js} +3 -3
  28. package/core/built/admin/assets/activitypub/layout-Cq4NG0Xr.js +1 -0
  29. package/core/built/admin/assets/activitypub/{moderation-KCCO7L2J.js → moderation-D1Yapsod.js} +9 -9
  30. package/core/built/admin/assets/activitypub/{note-BX_Bz5A0.js → note-C5zjqq5C.js} +8 -8
  31. package/core/built/admin/assets/activitypub/{notifications-BQOYGvRv.js → notifications-B9p8eCHD.js} +9 -9
  32. package/core/built/admin/assets/activitypub/{preferences-6h43G9_q.js → preferences-BCqUdC3v.js} +9 -9
  33. package/core/built/admin/assets/activitypub/{profile-BMN9VVZ2.js → profile-BRCWoFem.js} +178 -178
  34. package/core/built/admin/assets/activitypub/{reply-ZNo04xsO.js → reply-DYK5vVqb.js} +2 -2
  35. package/core/built/admin/assets/activitypub/{routes-3B9mUQ7i.js → routes-BSXT992i.js} +81 -84
  36. package/core/built/admin/assets/activitypub/{separator-D9taVCCa.js → separator-BbQqTm-p.js} +3 -3
  37. package/core/built/admin/assets/activitypub/{settings-71gCm3SO.js → settings-DQDkr06X.js} +6 -6
  38. package/core/built/admin/assets/activitypub/{step-1-BsGGnBuT.js → step-1-B-YfsVeO.js} +5 -5
  39. package/core/built/admin/assets/activitypub/{step-2-teosIS0k.js → step-2-DtPQzlTH.js} +6 -6
  40. package/core/built/admin/assets/activitypub/{step-3-BjD5TokC.js → step-3-D6BFMXL_.js} +10 -10
  41. package/core/built/admin/assets/activitypub/{tabs-Cvwl1wXU.js → tabs-GpNecvfB.js} +6 -6
  42. package/core/built/admin/assets/activitypub/{topic-filter-C3LZJc2X.js → topic-filter-BPDeQQys.js} +3 -3
  43. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-Dp9f0gov.js → use-activity-pub-queries-BoVOxXkV.js} +2 -2
  44. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-C4RI0sa9.js → use-navigate-with-base-path-Bmk5h4lW.js} +220 -220
  45. package/core/built/admin/assets/activitypub/{use-reply-chain-data-C2oNDMUH.js → use-reply-chain-data-wVBX7swM.js} +5 -5
  46. package/core/built/admin/assets/activitypub/{x-Dxm6pV9X.js → x-DbQZOLiI.js} +2 -2
  47. package/core/built/admin/assets/{add-integration-modal--YpTq3c0.js → add-integration-modal-BC0jExDZ.js} +1 -1
  48. package/core/built/admin/assets/{add-newsletter-modal-C8Ix2hol.js → add-newsletter-modal-DchTkA7l.js} +1 -1
  49. package/core/built/admin/assets/{add-recommendation-modal-CScuNFz4.js → add-recommendation-modal-DMvaJZKp.js} +1 -1
  50. package/core/built/admin/assets/alert-dialog-QhXzdHfc.js +1 -0
  51. package/core/built/admin/assets/{analytics-Cnji45H5.js → analytics-No1DDY3A.js} +1 -1
  52. package/core/built/admin/assets/{announcement-bar-modal-BTHiy1ZO.js → announcement-bar-modal-DM3cYOpo.js} +1 -1
  53. package/core/built/admin/assets/{api-keys-Boy5pLbD.js → api-keys-BLm2NDBh.js} +1 -1
  54. package/core/built/admin/assets/audience-9mwU5TW6.js +1 -0
  55. package/core/built/admin/assets/{automations-BWpRCZ_f.js → automations-DpUNUdcZ.js} +1 -1
  56. package/core/built/admin/assets/{bluesky-sharing-DHOpQxff.js → bluesky-sharing-Cjrv_f62.js} +1 -1
  57. package/core/built/admin/assets/{box-By_EgGtm.js → box-CdfQAP_F.js} +1 -1
  58. package/core/built/admin/assets/{brand-icon-09YqFZjV.js → brand-icon-CrIGOA3Z.js} +1 -1
  59. package/core/built/admin/assets/{breadcrumb-CcFr_ltt.js → breadcrumb-DLiqCyFc.js} +1 -1
  60. package/core/built/admin/assets/{button-BshWPHvn.js → button-B2jcu6bk.js} +1 -1
  61. package/core/built/admin/assets/{card-CiiE7QfM.js → card--VNbfgo3.js} +1 -1
  62. package/core/built/admin/assets/{chart-BnXyfH11.js → chart-BrhA41Zi.js} +1 -1
  63. package/core/built/admin/assets/chart-helpers-Fo3bUL3K.js +1 -0
  64. package/core/built/admin/assets/{checkbox-Dwwr_3Py.js → checkbox-BfKktMph.js} +1 -1
  65. package/core/built/admin/assets/{chunk.524.91ecb33e6afc3bd8949b.js → chunk.524.60ca4692d91c6022042f.js} +4 -4
  66. package/core/built/admin/assets/{chunk.582.512549909741883f960c.js → chunk.582.525c7617c2d9e94c940a.js} +6 -6
  67. package/core/built/admin/assets/{chunk.16.f76a6314082d813d67e0.js → chunk.896.435fe0637944d4a69810.js} +3 -3
  68. package/core/built/admin/assets/{code-editor-view-BwIdPy_k.js → code-editor-view-CYVu4EW6.js} +1 -1
  69. package/core/built/admin/assets/{code-editor-view-CtkF82Fv.js → code-editor-view-DCQJxsfU.js} +1 -1
  70. package/core/built/admin/assets/{color-picker-Bmo1r9Fc.js → color-picker-BTY_NdEm.js} +1 -1
  71. package/core/built/admin/assets/{color-picker-field-DywowPhF.js → color-picker-field-CPlkzOH0.js} +1 -1
  72. package/core/built/admin/assets/{combobox-C4QCh6Yw.js → combobox-DrMtv_4P.js} +1 -1
  73. package/core/built/admin/assets/command-ZdgYJpoI.js +1 -0
  74. package/core/built/admin/assets/comments-kidj60-h.js +1 -0
  75. package/core/built/admin/assets/{confirmation-context-CLFHhyyH.js → confirmation-context-BhbmQQEl.js} +1 -1
  76. package/core/built/admin/assets/{container-LiZf3XdY.js → container-BuQG1wuP.js} +1 -1
  77. package/core/built/admin/assets/{content-api-modal-BtpNI92-.js → content-api-modal-CyQEC3fr.js} +1 -1
  78. package/core/built/admin/assets/{copy-field-CglgRZyG.js → copy-field-B3M1s78L.js} +1 -1
  79. package/core/built/admin/assets/{custom-field-type-option-D0PXoSnP.js → custom-field-type-option-CsGIZk1J.js} +1 -1
  80. package/core/built/admin/assets/{custom-integration-modal-DCIHKN33.js → custom-integration-modal-BY37O_9X.js} +1 -1
  81. package/core/built/admin/assets/{data-list-CupF7bjM.js → data-list-CA2jYGPq.js} +1 -1
  82. package/core/built/admin/assets/{date-range-select-JPwM0yUj.js → date-range-select-DD2RKkgB.js} +1 -1
  83. package/core/built/admin/assets/design-and-theme-modal-DUSKM4uC.js +22 -0
  84. package/core/built/admin/assets/{detail-page-D8lx2SdP.js → detail-page-Dnv-CdR1.js} +1 -1
  85. package/core/built/admin/assets/dialog-B44iRwlc.js +1 -0
  86. package/core/built/admin/assets/{dirty-confirm-dialog-CmARpZQS.js → dirty-confirm-dialog-BxgQgQ6H.js} +1 -1
  87. package/core/built/admin/assets/{disabled-sources-indicator-BTJ2ClQu.js → disabled-sources-indicator-Cvy47bE2.js} +1 -1
  88. package/core/built/admin/assets/{dist-DzcfoDJ3.js → dist-8YJUlf3B.js} +1 -1
  89. package/core/built/admin/assets/{dist-Cb5RSHSg.js → dist-B3keLvjj.js} +1 -1
  90. package/core/built/admin/assets/{dist-QLZuGq7o2.js → dist-Cy8tfrp_.js} +1 -1
  91. package/core/built/admin/assets/{dist-BT_Z-eCn.js → dist-Dgt2cr6a.js} +1 -1
  92. package/core/built/admin/assets/{domain-D0SAtc-T.js → domain-Ca6KhoQt.js} +1 -1
  93. package/core/built/admin/assets/{dropzone-CaPOeDRZ.js → dropzone-Bb-5zQTk.js} +1 -1
  94. package/core/built/admin/assets/edit-profile-BdupLlus.js +1 -0
  95. package/core/built/admin/assets/{editor-COXn4Atu.js → editor-BP883Lpn.js} +3 -3
  96. package/core/built/admin/assets/{embed-signup-form-modal-BFTPf04i.js → embed-signup-form-modal-DeBMLxlL.js} +1 -1
  97. package/core/built/admin/assets/{empty-indicator-WB1WgT9h.js → empty-indicator-D9QdpuNX.js} +1 -1
  98. package/core/built/admin/assets/{explore-BsNYrubV.js → explore-FB-CimXw.js} +1 -1
  99. package/core/built/admin/assets/{feed-8RR1O1bK.js → feed-C1GxsmI2.js} +1 -1
  100. package/core/built/admin/assets/{field-LmNk7wZh.js → field-Cj8lmDOo.js} +1 -1
  101. package/core/built/admin/assets/{filter-sources-4C0kF1NU.js → filter-sources-D5n5bFA2.js} +1 -1
  102. package/core/built/admin/assets/{filters-CV5jCb9n.js → filters-DJEzkMUK.js} +1 -1
  103. package/core/built/admin/assets/{filters-Dmr0PoqU.js → filters-MZXvdH5D.js} +1 -1
  104. package/core/built/admin/assets/{first-promoter-modal-OCzSaL3B.js → first-promoter-modal-CGTGLCr5.js} +1 -1
  105. package/core/built/admin/assets/{ghost-403cb39badad3df411fc0ba27d220047.js → ghost-3894eedcc6968f658578c0abfe942aab.js} +2 -2
  106. package/core/built/admin/assets/{gift-link-modal-0mzjn5oF.js → gift-link-modal-B6v0tnRN.js} +1 -1
  107. package/core/built/admin/assets/{grid-CUciBfjf.js → grid-Dj29PY05.js} +1 -1
  108. package/core/built/admin/assets/growth-BGAJD1rs.js +3 -0
  109. package/core/built/admin/assets/growth-D6mhcx3q.js +1 -0
  110. package/core/built/admin/assets/{heading-CRZZ2FUe.js → heading-Dh5SFVjL.js} +1 -1
  111. package/core/built/admin/assets/history-modal-iKwUY3XR.js +1 -0
  112. package/core/built/admin/assets/html-field-C8qVGGC1.js +1 -0
  113. package/core/built/admin/assets/{images-C0XvUYMb.js → images-h8VZEQ9k.js} +1 -1
  114. package/core/built/admin/assets/{inbox-DZXDUt4s.js → inbox-BYd1M06Q.js} +13 -13
  115. package/core/built/admin/assets/index-DjQe-e5s.js +4 -0
  116. package/core/built/admin/assets/{index.es-BMUCj9TR.js → index.es-VihPwfeH.js} +1 -1
  117. package/core/built/admin/assets/{inline-Cw-gigDW.js → inline-BWSs_VzR.js} +1 -1
  118. package/core/built/admin/assets/{input-UHrKuvBT.js → input--W-rCTrX.js} +1 -1
  119. package/core/built/admin/assets/{input-group-BPAxETpQ.js → input-group-D8sCXRF5.js} +1 -1
  120. package/core/built/admin/assets/{input-surface-BdOe4KzO.js → input-surface-BsrIZeSF.js} +1 -1
  121. package/core/built/admin/assets/{integration-header-B4DyXV06.js → integration-header-Bm6IDb1A.js} +1 -1
  122. package/core/built/admin/assets/{invite-user-modal-BrAkxEO3.js → invite-user-modal-MdImLCaJ.js} +1 -1
  123. package/core/built/admin/assets/{koenig-lexical-60O_8aiO.js → koenig-lexical-_-IsVI7E.js} +1 -1
  124. package/core/built/admin/assets/koenig-loader-DYZpm6El.js +2 -0
  125. package/core/built/admin/assets/{kpi-card-fUHZlzBX.js → kpi-card-DW_2y3ug.js} +1 -1
  126. package/core/built/admin/assets/kpi-card-DZQk_0W8.js +1 -0
  127. package/core/built/admin/assets/kpi-helpers-PueTKuA6.js +1 -0
  128. package/core/built/admin/assets/kpi-tabs-CojDs-Qz.js +1 -0
  129. package/core/built/admin/assets/{label-VIG969IC.js → label-DjbT91GM.js} +1 -1
  130. package/core/built/admin/assets/{label-picker-BBWykUeA.js → label-picker-cB51xl1r.js} +1 -1
  131. package/core/built/admin/assets/layout-c_B_1hax.js +1 -0
  132. package/core/built/admin/assets/{link-helpers-Dtq9fxQg.js → link-helpers-MVDdnFCY.js} +1 -1
  133. package/core/built/admin/assets/{list-page-CdsnQR9N.js → list-page-BucXJ0hi.js} +1 -1
  134. package/core/built/admin/assets/{loading-indicator-SFTqyYVE.js → loading-indicator-BpFWTVgh.js} +1 -1
  135. package/core/built/admin/assets/{member-custom-fields-gOv6Hoh3.js → member-custom-fields-qs0dIkxM.js} +1 -1
  136. package/core/built/admin/assets/member-detail-B6uec2a6.js +1 -0
  137. package/core/built/admin/assets/members-BQF3CqhI.js +2 -0
  138. package/core/built/admin/assets/{modal-page-BMTzFHVO.js → modal-page-xCivTMvI.js} +1 -1
  139. package/core/built/admin/assets/{moderation-DzzPLDyl.js → moderation-DY4wF1Q3.js} +1 -1
  140. package/core/built/admin/assets/{multi-select-combobox-CGohnsxJ.js → multi-select-combobox-B6LiRzDO.js} +1 -1
  141. package/core/built/admin/assets/navigation-modal-DX-gNF3X.js +1 -0
  142. package/core/built/admin/assets/newsletter-CyQA7m3m.js +1 -0
  143. package/core/built/admin/assets/{newsletter-detail-modal-DQU3r4g2.js → newsletter-detail-modal-BDrptuxn.js} +1 -1
  144. package/core/built/admin/assets/{newsletter-emails-D5ql1rud.js → newsletter-emails-CFeLlt4z.js} +1 -1
  145. package/core/built/admin/assets/newsletters-DXuNmC42.js +1 -0
  146. package/core/built/admin/assets/{note-i8k6pjaw.js → note-Cgo2LCJ6.js} +1 -1
  147. package/core/built/admin/assets/notifications-BC50AMku.js +1 -0
  148. package/core/built/admin/assets/{offers-container-modal-BWfjSdyg.js → offers-container-modal-DWycIMzT.js} +1 -1
  149. package/core/built/admin/assets/{onboarding-route-Cu_ROWPn.js → onboarding-route-Dmc4IPm3.js} +1 -1
  150. package/core/built/admin/assets/overview-CVbFtn-k.js +1 -0
  151. package/core/built/admin/assets/overview-YKj7SZaK.js +1 -0
  152. package/core/built/admin/assets/{page-header-Cfds8pCg.js → page-header-BR_nbIPp.js} +1 -1
  153. package/core/built/admin/assets/{pintura-modal-TDTrJ89x.js → pintura-modal-BR9hEvS8.js} +1 -1
  154. package/core/built/admin/assets/popover-CCy0h5rq.js +1 -0
  155. package/core/built/admin/assets/{portal-frame-DjBF-uy2.js → portal-frame-dc4XKr0e.js} +1 -1
  156. package/core/built/admin/assets/portal-modal-BvvdF_B9.js +1 -0
  157. package/core/built/admin/assets/{post-analytics-Buz1COoY.js → post-analytics-DX470WRG.js} +1 -1
  158. package/core/built/admin/assets/{post-analytics-header-B-P0eFnT.js → post-analytics-header-CXpJmdDv.js} +1 -1
  159. package/core/built/admin/assets/{post-analytics-provider-Cu3jNeFh.js → post-analytics-provider-CLfKGWZy.js} +1 -1
  160. package/core/built/admin/assets/{post-share-modal-P1_M6o-H.js → post-share-modal-Cl0NXRJr.js} +1 -1
  161. package/core/built/admin/assets/{preferences-Cq1aOiLy.js → preferences-DO0UUWFp.js} +2 -2
  162. package/core/built/admin/assets/{preview-chrome-BOVO6_PE.js → preview-chrome-BljUBlOk.js} +1 -1
  163. package/core/built/admin/assets/{preview-modal-MlTjP8UU.js → preview-modal-C-BL-F9k.js} +1 -1
  164. package/core/built/admin/assets/profile-CxT-0l4d.js +1 -0
  165. package/core/built/admin/assets/radio-group-Bgz60i81.js +1 -0
  166. package/core/built/admin/assets/{router-provider-CJC58zTy.js → router-provider-B0gZyiGJ.js} +1 -1
  167. package/core/built/admin/assets/{schemas-CRsC53ls.js → schemas-4UPic-oD.js} +2 -2
  168. package/core/built/admin/assets/select-DuDUFdPq.js +1 -0
  169. package/core/built/admin/assets/{settings-B5hJKZ5C.js → settings-BjCii7BM.js} +1 -1
  170. package/core/built/admin/assets/settings-b8kNzZSQ.js +4 -0
  171. package/core/built/admin/assets/{settings-breadcrumbs-sLDNedBW.js → settings-breadcrumbs-CyP_9zTo.js} +1 -1
  172. package/core/built/admin/assets/{shade-app-F7WxOyfk-nufqw1hd.js → shade-app-CcS3f8MZ-vwURazk8.js} +2 -2
  173. package/core/built/admin/assets/{share-modal-CLBfj377.js → share-modal-BV70mr9k.js} +1 -1
  174. package/core/built/admin/assets/{skeleton-D7hwjdry.js → skeleton-Ce9GgUpf.js} +1 -1
  175. package/core/built/admin/assets/{slack-modal-Bt9I_tEo.js → slack-modal-Be2_KK-z.js} +1 -1
  176. package/core/built/admin/assets/sort-button-Cc-Z96sA.js +1 -0
  177. package/core/built/admin/assets/{source-icon-BPsD5ees.js → source-icon-v6PUnmyM.js} +1 -1
  178. package/core/built/admin/assets/{stack-CIfOAAVf.js → stack-B2eszIiq.js} +1 -1
  179. package/core/built/admin/assets/{stats-B_YkF7bp.js → stats-C4reGh9O.js} +1 -1
  180. package/core/built/admin/assets/{stats-view-BOCp9RG8.js → stats-view-DP9pQ62k.js} +1 -1
  181. package/core/built/admin/assets/{step-1-CMta6YFO.js → step-1-DSRp2vBj.js} +1 -1
  182. package/core/built/admin/assets/{step-2-BG04nh5q.js → step-2-COqv2g0u.js} +1 -1
  183. package/core/built/admin/assets/{step-3-ZnMaVIPj.js → step-3-6W1NMVQc.js} +2 -2
  184. package/core/built/admin/assets/{stripe-button-DDoUKN5a.js → stripe-button-D2K42Uty.js} +1 -1
  185. package/core/built/admin/assets/{stripe-connect-modal-BeSukI8q.js → stripe-connect-modal-Z-UT_BGc.js} +1 -1
  186. package/core/built/admin/assets/{switch-C9djUIMO.js → switch-CI4gLWqb.js} +1 -1
  187. package/core/built/admin/assets/{table-CrqQtkR2.js → table-B2pIKjVh.js} +1 -1
  188. package/core/built/admin/assets/{tabs-CGisSbWq.js → tabs-SaW_UT-Q.js} +1 -1
  189. package/core/built/admin/assets/tag-detail-Dc0nTOtU.js +2 -0
  190. package/core/built/admin/assets/tags-BLaXBwnb.js +1 -0
  191. package/core/built/admin/assets/testimonials-modal-sFwRnNLh.js +1 -0
  192. package/core/built/admin/assets/{text-DU9Hv33_.js → text-BQDSDsKs.js} +1 -1
  193. package/core/built/admin/assets/{textarea-d9qEkMOP.js → textarea-DJ1Q5V39.js} +1 -1
  194. package/core/built/admin/assets/{tier-detail-modal-CxRwgTPR.js → tier-detail-modal-BCFpWwUS.js} +1 -1
  195. package/core/built/admin/assets/{toggle-group-CtKZURJd.js → toggle-group-EM9WpESu.js} +1 -1
  196. package/core/built/admin/assets/{topic-filter-D8JT8Tq1.js → topic-filter-DY4gNHn2.js} +1 -1
  197. package/core/built/admin/assets/{transistor-modal-6PUf0idx.js → transistor-modal-CpyPG-MH.js} +1 -1
  198. package/core/built/admin/assets/trend-badge-ByMkuAuH.js +1 -0
  199. package/core/built/admin/assets/{unsplash-modal-BPuDBPja.js → unsplash-modal-Cv2Q6GtY.js} +1 -1
  200. package/core/built/admin/assets/{use-analytics-data--opuzwcz.js → use-analytics-data-CHvjMYuT.js} +1 -1
  201. package/core/built/admin/assets/use-check-theme-limit-error-Qv4SVXqw.js +2 -0
  202. package/core/built/admin/assets/use-filter-params-CAvfDvf1.js +1 -0
  203. package/core/built/admin/assets/use-growth-stats-D6mZXGhK.js +1 -0
  204. package/core/built/admin/assets/{use-limiter-TDSNiHPB.js → use-limiter-cwJvsNBo.js} +1 -1
  205. package/core/built/admin/assets/{use-navigate-with-base-path-CK989MlC.js → use-navigate-with-base-path-BHPA228f.js} +1 -1
  206. package/core/built/admin/assets/{use-pintura-config-CnCGrDFk.js → use-pintura-config-CzTfnufz.js} +1 -1
  207. package/core/built/admin/assets/{use-pintura-editor-ntphvtUd.js → use-pintura-editor-BDBXWUYq.js} +1 -1
  208. package/core/built/admin/assets/{use-post-referrers-CbXLFIex.js → use-post-referrers-DbY-mzci.js} +1 -1
  209. package/core/built/admin/assets/{use-reply-chain-data-JYFKSO83.js → use-reply-chain-data-BeQwz8oF.js} +1 -1
  210. package/core/built/admin/assets/{use-router-history-entry-BwfQS2mq.js → use-router-history-entry-Bg6BhBQQ.js} +1 -1
  211. package/core/built/admin/assets/{use-setting-group-DQxV42-O.js → use-setting-group-VM7FQwMY.js} +1 -1
  212. package/core/built/admin/assets/{use-settings-navigation-BBzro2-V.js → use-settings-navigation-BbrSUVcf.js} +1 -1
  213. package/core/built/admin/assets/{use-simple-pagination-B2TdNX67.js → use-simple-pagination-Dum6Irbs.js} +1 -1
  214. package/core/built/admin/assets/{use-staff-users-QrR9voeC.js → use-staff-users-cZg4ugOF.js} +1 -1
  215. package/core/built/admin/assets/{use-tinybird-query-D2Aeoty5.js → use-tinybird-query-B1IMyAcv.js} +1 -1
  216. package/core/built/admin/assets/{use-tinybird-token-DBuwMmln.js → use-tinybird-token-Bow0Zwn8.js} +1 -1
  217. package/core/built/admin/assets/{use-unsaved-changes-guard-DpYJcj1d.js → use-unsaved-changes-guard-BAy0RANR.js} +1 -1
  218. package/core/built/admin/assets/{use-url-input-WnIqckzS.js → use-url-input-Df5QzNa7.js} +1 -1
  219. package/core/built/admin/assets/user-detail-modal-yipSoQfv.js +1 -0
  220. package/core/built/admin/assets/{virtual-list-D3MfPNOh.js → virtual-list-DEx8WgiO.js} +1 -1
  221. package/core/built/admin/assets/web-CKcXAu86.js +1 -0
  222. package/core/built/admin/assets/web-DR4TqM3E.js +2 -0
  223. package/core/built/admin/assets/{zapier-modal-BO6PS_Vd.js → zapier-modal-Cw3BTBUu.js} +1 -1
  224. package/core/built/admin/index.html +24 -25
  225. package/core/frontend/services/rendering/renderer.js +15 -0
  226. package/core/server/adapters/storage/LocalStorageBase.js +8 -5
  227. package/core/server/api/endpoints/db.js +19 -5
  228. package/core/server/api/endpoints/index.js +4 -0
  229. package/core/server/api/endpoints/member-custom-fields.js +4 -14
  230. package/core/server/api/endpoints/posts.js +1 -0
  231. package/core/server/api/endpoints/tiers-checkout-config.js +59 -0
  232. package/core/server/api/endpoints/utils/serializers/output/config.js +1 -0
  233. package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
  234. package/core/server/api/endpoints/utils/serializers/output/tiers-checkout-config.js +12 -0
  235. package/core/server/data/exporter/table-lists.js +3 -0
  236. package/core/server/data/importer/content-files.js +57 -0
  237. package/core/server/data/importer/handlers/image.js +2 -2
  238. package/core/server/data/importer/import-archive.js +131 -0
  239. package/core/server/data/importer/import-manager.js +18 -180
  240. package/core/server/data/importer/importers/content-file-importer.js +66 -4
  241. package/core/server/data/migrations/versions/6.61/2026-08-19-14-30-20-add-written-by-to-members-custom-field-values.js +42 -0
  242. package/core/server/data/migrations/versions/6.61/2026-08-19-14-38-53-add-members-custom-field-bindings-table.js +26 -0
  243. package/core/server/data/migrations/versions/6.61/2026-08-19-14-48-06-add-tier-checkout-field-tables.js +35 -0
  244. package/core/server/data/schema/schema.js +90 -0
  245. package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -3
  246. package/core/server/data/seeders/importers/automation-actions-importer.js +3 -3
  247. package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -3
  248. package/core/server/data/seeders/importers/automation-runs-importer.js +5 -5
  249. package/core/server/data/seeders/importers/automations-importer.js +3 -3
  250. package/core/server/data/seeders/importers/comment-reports-importer.js +1 -1
  251. package/core/server/data/seeders/importers/comments-importer.js +1 -1
  252. package/core/server/data/seeders/importers/email-batches-importer.js +1 -1
  253. package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
  254. package/core/server/data/seeders/importers/emails-importer.js +1 -1
  255. package/core/server/data/seeders/importers/labels-importer.js +1 -1
  256. package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
  257. package/core/server/data/seeders/importers/members-created-events-importer.js +1 -1
  258. package/core/server/data/seeders/importers/members-feedback-importer.js +1 -1
  259. package/core/server/data/seeders/importers/members-importer.js +1 -1
  260. package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
  261. package/core/server/data/seeders/importers/members-products-importer.js +1 -1
  262. package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
  263. package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
  264. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
  265. package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -1
  266. package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
  267. package/core/server/data/seeders/importers/offer-redemptions-importer.js +1 -1
  268. package/core/server/data/seeders/importers/offers-importer.js +1 -1
  269. package/core/server/data/seeders/importers/posts-importer.js +1 -1
  270. package/core/server/data/seeders/importers/table-importer.js +2 -2
  271. package/core/server/data/seeders/importers/tags-importer.js +1 -1
  272. package/core/server/data/seeders/importers/users-importer.js +1 -1
  273. package/core/server/data/seeders/importers/web-mentions-importer.js +1 -1
  274. package/core/server/data/seeders/utils/random.js +3 -3
  275. package/core/server/ghost-server.js +3 -2
  276. package/core/server/lib/db-types/boolean.js +18 -0
  277. package/core/server/lib/promise-pool.js +31 -0
  278. package/core/server/services/automations/database-automations-repository.js +26 -26
  279. package/core/server/services/automations/poll.js +1 -0
  280. package/core/server/services/content-import/import/assets.js +74 -0
  281. package/core/server/services/content-import/import/importer.js +57 -14
  282. package/core/server/services/content-import/import/post-data.js +1 -0
  283. package/core/server/services/content-import/import/post-repository.js +78 -0
  284. package/core/server/services/content-import/import/relations.js +149 -0
  285. package/core/server/services/content-import/import/row.js +11 -0
  286. package/core/server/services/content-import/import/schema.js +29 -0
  287. package/core/server/services/content-import/import/source.js +125 -0
  288. package/core/server/services/content-import/index.js +6 -28
  289. package/core/server/services/email-analytics/email-analytics-service.js +8 -1
  290. package/core/server/services/email-analytics/lib/queries.js +7 -1
  291. package/core/server/services/gift-links/schema.js +3 -3
  292. package/core/server/services/gifts/CONTEXT.md +1 -1
  293. package/core/server/services/gifts/constants.js +1 -1
  294. package/core/server/services/gifts/gift-bookshelf-repository.js +2 -2
  295. package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +18 -9
  296. package/core/server/services/gifts/gift-delivery-schema.js +5 -5
  297. package/core/server/services/gifts/gift-delivery-service.js +4 -0
  298. package/core/server/services/gifts/gift-schema.js +10 -10
  299. package/core/server/services/gifts/gift-service.js +4 -2
  300. package/core/server/services/jobs-service/register-job-handlers.js +5 -5
  301. package/core/server/services/lib/mailgun-client.js +44 -8
  302. package/core/server/services/media-inliner/external-media-inliner-job.js +12 -0
  303. package/core/server/services/media-inliner/external-media-inliner.js +103 -29
  304. package/core/server/services/media-inliner/service.js +13 -41
  305. package/core/server/services/media-inliner/types.js +2 -0
  306. package/core/server/services/members/import-export/export/exporter.js +4 -6
  307. package/core/server/services/members/import-export/import/importer.js +21 -5
  308. package/core/server/services/members/import-export/import/stripe-utils.js +6 -1
  309. package/core/server/services/members/import-export/index.js +6 -1
  310. package/core/server/services/members/members-api/members-api.js +5 -0
  311. package/core/server/services/members/members-api/services/member-bread-service.js +19 -1
  312. package/core/server/services/members/members-api/services/payments-service.js +47 -1
  313. package/core/server/services/members-custom-fields/actions.js +27 -1
  314. package/core/server/services/members-custom-fields/bindings-service.js +119 -0
  315. package/core/server/services/members-custom-fields/definitions-service.js +104 -13
  316. package/core/server/services/members-custom-fields/index.js +11 -4
  317. package/core/server/services/members-custom-fields/queries.js +5 -0
  318. package/core/server/services/members-custom-fields/schema.js +37 -6
  319. package/core/server/services/members-custom-fields/values-service.js +15 -3
  320. package/core/server/services/public-config/config.js +7 -0
  321. package/core/server/services/stripe/services/checkout/allowed-countries.js +267 -0
  322. package/core/server/services/stripe/services/checkout/completed-session.js +68 -0
  323. package/core/server/services/stripe/services/checkout/field-ports.js +34 -0
  324. package/core/server/services/stripe/services/checkout/session-options.js +97 -0
  325. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +49 -0
  326. package/core/server/services/stripe/stripe-api.js +29 -0
  327. package/core/server/services/stripe/stripe-service.js +7 -0
  328. package/core/server/services/tier-checkout-config/codec.js +95 -0
  329. package/core/server/services/tier-checkout-config/destinations.js +17 -0
  330. package/core/server/services/tier-checkout-config/index.js +26 -0
  331. package/core/server/services/tier-checkout-config/models.js +57 -0
  332. package/core/server/services/tier-checkout-config/queries.js +80 -0
  333. package/core/server/services/tier-checkout-config/schema.js +33 -0
  334. package/core/server/services/tier-checkout-config/serializers.js +122 -0
  335. package/core/server/services/tier-checkout-config/service.js +303 -0
  336. package/core/server/services/tiers/service.js +21 -0
  337. package/core/server/web/api/endpoints/admin/routes.js +24 -13
  338. package/core/server/web/api/middleware/upload.js +2 -2
  339. package/core/server/web/parent/app.js +5 -0
  340. package/core/server/web/parent/middleware/filter-query-parameters.js +94 -0
  341. package/core/server/web/parent/middleware/index.js +1 -0
  342. package/core/server/web/query-parameter-policy/index.js +9 -0
  343. package/core/server/web/query-parameter-policy/policy.json +58 -0
  344. package/core/server/web/query-parameter-policy/schema.js +38 -0
  345. package/core/shared/config/defaults.json +3 -0
  346. package/core/shared/config/env/config.testing-mysql.json +3 -0
  347. package/core/shared/config/env/config.testing.json +3 -0
  348. package/core/shared/config/overrides.json +4 -2
  349. package/core/shared/labs.js +5 -14
  350. package/package.json +12 -13
  351. package/pnpm-lock.yaml +44 -46
  352. package/pnpm-workspace.yaml +6 -6
  353. package/tsconfig.json +2 -3
  354. package/core/built/admin/assets/activitypub/layout-CXajhRsL.js +0 -1
  355. package/core/built/admin/assets/alert-dialog-wEbVxANM.js +0 -1
  356. package/core/built/admin/assets/app-utils-D2Wp7ZSS.js +0 -1
  357. package/core/built/admin/assets/audience-DTLMXAFH.js +0 -1
  358. package/core/built/admin/assets/chart-helpers-B3OqQ6Ez.js +0 -1
  359. package/core/built/admin/assets/command-DcLbSifC.js +0 -1
  360. package/core/built/admin/assets/comments-Bxy_3WyE.js +0 -1
  361. package/core/built/admin/assets/design-and-theme-modal-CZ-PkW7o.js +0 -23
  362. package/core/built/admin/assets/dialog-Db7c164G.js +0 -1
  363. package/core/built/admin/assets/edit-profile-By7v5XW5.js +0 -1
  364. package/core/built/admin/assets/growth-55vWlGT_.js +0 -1
  365. package/core/built/admin/assets/growth-DA5AluYw.js +0 -3
  366. package/core/built/admin/assets/history-modal-G1s5hHz7.js +0 -1
  367. package/core/built/admin/assets/html-field-BegxsWpw.js +0 -1
  368. package/core/built/admin/assets/index-CDP9tIOk.js +0 -4
  369. package/core/built/admin/assets/koenig-loader-DwVY_V-H.js +0 -1
  370. package/core/built/admin/assets/kpi-card-LERqWBoY.js +0 -1
  371. package/core/built/admin/assets/kpi-helpers-DB3ouhYF.js +0 -1
  372. package/core/built/admin/assets/kpi-tabs-BGvtMD8S.js +0 -1
  373. package/core/built/admin/assets/layout-Di5K7doM.js +0 -1
  374. package/core/built/admin/assets/member-detail-D7mZDDp3.js +0 -1
  375. package/core/built/admin/assets/member-route-0Aa52Ntz.js +0 -1
  376. package/core/built/admin/assets/members-DvZG9t69.js +0 -2
  377. package/core/built/admin/assets/navigation-modal-CI8Bx5vn.js +0 -1
  378. package/core/built/admin/assets/newsletter-Bg3cq5U-.js +0 -1
  379. package/core/built/admin/assets/newsletters-DMDfZbMS.js +0 -1
  380. package/core/built/admin/assets/notifications-psA_2Ph4.js +0 -1
  381. package/core/built/admin/assets/overview-C-6xOLaf.js +0 -1
  382. package/core/built/admin/assets/overview-DaLhpRrC.js +0 -1
  383. package/core/built/admin/assets/popover-CFgqFDvC.js +0 -1
  384. package/core/built/admin/assets/portal-modal-Cf0pBAk8.js +0 -1
  385. package/core/built/admin/assets/profile-D6dHYf2o.js +0 -1
  386. package/core/built/admin/assets/radio-group-CjtmsCPl.js +0 -1
  387. package/core/built/admin/assets/select-D_RQaXgt.js +0 -1
  388. package/core/built/admin/assets/settings-DIo_F-MF.js +0 -4
  389. package/core/built/admin/assets/sort-button-DMBXF7tP.js +0 -1
  390. package/core/built/admin/assets/tag-detail-2a3BfzTW.js +0 -2
  391. package/core/built/admin/assets/tags-Dp2_8UzL.js +0 -1
  392. package/core/built/admin/assets/testimonials-modal-C9nrypNo.js +0 -1
  393. package/core/built/admin/assets/use-check-theme-limit-error-C9-QhGdV.js +0 -1
  394. package/core/built/admin/assets/use-filter-params-CSpAvgD2.js +0 -1
  395. package/core/built/admin/assets/use-growth-stats-BOmoPDHJ.js +0 -1
  396. package/core/built/admin/assets/user-detail-modal-59mBJqxN.js +0 -1
  397. package/core/built/admin/assets/web-DUuX7nE2.js +0 -2
  398. package/core/built/admin/assets/web-N8ucs2aG.js +0 -1
  399. /package/core/server/lib/{db-date.js → db-types/date.js} +0 -0
@@ -1064,6 +1064,79 @@ module.exports = {
1064
1064
  created_at: { type: 'dateTime', nullable: false },
1065
1065
  updated_at: { type: 'dateTime', nullable: true },
1066
1066
  },
1067
+ // Where a source sends what it collected. The source is who collects, the port is that
1068
+ // source's own name for the thing, and the destination is the publisher's field, which
1069
+ // they can repoint without the source knowing. The row is the collecting: there is one
1070
+ // and the source writes through it, or there is none and it does not.
1071
+ //
1072
+ // A second kind of source becomes a `source_type` beside a widened id. What it must not
1073
+ // become is a second table holding destinations.
1074
+ members_custom_field_bindings: {
1075
+ id: { type: 'string', maxlength: 24, nullable: false, primary: true },
1076
+ product_id: {
1077
+ type: 'string',
1078
+ maxlength: 24,
1079
+ nullable: false,
1080
+ references: 'products.id',
1081
+ cascadeDelete: true,
1082
+ },
1083
+ port: { type: 'string', maxlength: 191, nullable: false },
1084
+ // Indexed rather than unique: several sources landing in one field is expected.
1085
+ custom_field_key: {
1086
+ type: 'string',
1087
+ maxlength: 191,
1088
+ nullable: false,
1089
+ references: 'members_custom_fields.key',
1090
+ cascadeDelete: true,
1091
+ },
1092
+ created_at: { type: 'dateTime', nullable: false },
1093
+ updated_at: { type: 'dateTime', nullable: true },
1094
+ '@@UNIQUE_CONSTRAINTS@@': [
1095
+ { columns: ['product_id', 'port'], indexName: 'members_custom_field_bindings_unique' },
1096
+ ],
1097
+ '@@INDEXES@@': [['custom_field_key']],
1098
+ },
1099
+ // How a tier's checkout question is asked. Where the answer lands is the binding it
1100
+ // hangs off.
1101
+ products_checkout_fields: {
1102
+ id: { type: 'string', maxlength: 24, nullable: false, primary: true },
1103
+ binding_id: {
1104
+ type: 'string',
1105
+ maxlength: 24,
1106
+ nullable: false,
1107
+ unique: true,
1108
+ references: 'members_custom_field_bindings.id',
1109
+ cascadeDelete: true,
1110
+ },
1111
+ sort_order: { type: 'integer', nullable: false, unsigned: true, defaultTo: 0 },
1112
+ // Processors cap a label far shorter than a field name may be. Null asks under the
1113
+ // field's own name.
1114
+ label: { type: 'string', maxlength: 191, nullable: true },
1115
+ optional: { type: 'boolean', nullable: false, defaultTo: true },
1116
+ created_at: { type: 'dateTime', nullable: false },
1117
+ updated_at: { type: 'dateTime', nullable: true },
1118
+ },
1119
+ // The options a tier's collection needs, and the one thing it collects without keeping.
1120
+ // Whether it collects anything it *does* keep is the binding above.
1121
+ products_checkout_config: {
1122
+ id: { type: 'string', maxlength: 24, nullable: false, primary: true },
1123
+ product_id: {
1124
+ type: 'string',
1125
+ maxlength: 24,
1126
+ nullable: false,
1127
+ unique: true,
1128
+ references: 'products.id',
1129
+ cascadeDelete: true,
1130
+ },
1131
+ // ISO 3166-1 alpha-2, comma-joined. A processor will not render an address form
1132
+ // without them, and a wrong code fails the session create.
1133
+ shipping_allowed_countries: { type: 'string', maxlength: 2000, nullable: true },
1134
+ // Stripe keeps a tax number against the customer it invoices, so there is no
1135
+ // destination to bind and nothing to record but whether to ask.
1136
+ tax_number_collect: { type: 'boolean', nullable: false, defaultTo: false },
1137
+ created_at: { type: 'dateTime', nullable: false },
1138
+ updated_at: { type: 'dateTime', nullable: true },
1139
+ },
1067
1140
  members_custom_field_values: {
1068
1141
  id: { type: 'string', maxlength: 24, nullable: false, primary: true },
1069
1142
  // The field's stable key, not its id: a value is addressed by key everywhere it
@@ -1096,6 +1169,23 @@ module.exports = {
1096
1169
  // column a fresh install bounds at 65,535 bytes. The bound matching long_text's
1097
1170
  // exactly is worth more than the schema restating what the write path enforces.
1098
1171
  value_text: { type: 'text', maxlength: 65535, nullable: true },
1172
+ // Who wrote the value that is here now.
1173
+ //
1174
+ // Shaped like `actions`: a type and an id, no foreign key. A type because not every
1175
+ // write comes through a binding — a person edits a member's fields, an import reads a
1176
+ // file — and an id so the writer can be resolved back rather than merely named. A
1177
+ // binding id resolves to the tier, the port and the field it routed into, which is
1178
+ // everything worth knowing about how a value got here.
1179
+ //
1180
+ // No foreign key, because provenance has to outlive its cause: that a value arrived
1181
+ // through a tier's shipping port stays true after someone deletes that binding, even
1182
+ // though it stops being joinable.
1183
+ //
1184
+ // The type is the namespace the id resolves in, so every row carries one. The id is
1185
+ // nullable for the one writer that resolves in no table: an import has none to give
1186
+ // until runs are tracked.
1187
+ written_by_type: { type: 'string', maxlength: 50, nullable: false },
1188
+ written_by_id: { type: 'string', maxlength: 24, nullable: true },
1099
1189
  created_at: { type: 'dateTime', nullable: false },
1100
1190
  updated_at: { type: 'dateTime', nullable: true },
1101
1191
  // Named, because the name knex derives from the table and all three columns
@@ -7,7 +7,7 @@ exports.AutomationActionRevisionsImporter = void 0;
7
7
  const faker_1 = require("@faker-js/faker");
8
8
  const errors_1 = __importDefault(require("@tryghost/errors"));
9
9
  const table_importer_1 = require("./table-importer");
10
- const db_date_1 = require("../../../lib/db-date");
10
+ const date_1 = require("../../../lib/db-types/date");
11
11
  const constants_1 = require("../../../services/member-welcome-emails/constants");
12
12
  class AutomationActionRevisionsImporter extends table_importer_1.TableImporter {
13
13
  static table = 'automation_action_revisions';
@@ -48,12 +48,12 @@ class AutomationActionRevisionsImporter extends table_importer_1.TableImporter {
48
48
  message: 'Cannot generate automation action revision without an action',
49
49
  });
50
50
  }
51
- const createdAt = (0, db_date_1.fromDatabaseDate)(this.#action.created_at);
51
+ const createdAt = (0, date_1.fromDatabaseDate)(this.#action.created_at);
52
52
  createdAt.setSeconds(createdAt.getSeconds() + this.#revisionIndex);
53
53
  this.#revisionIndex += 1;
54
54
  const common = {
55
55
  id: this.fastFakeObjectId(),
56
- created_at: (0, db_date_1.toDatabaseDate)(createdAt),
56
+ created_at: (0, date_1.toDatabaseDate)(createdAt),
57
57
  action_id: this.#action.id,
58
58
  email_sent_count: null,
59
59
  email_opened_count: null,
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AutomationActionsImporter = void 0;
7
7
  const errors_1 = __importDefault(require("@tryghost/errors"));
8
8
  const table_importer_1 = require("./table-importer");
9
- const db_date_1 = require("../../../lib/db-date");
9
+ const date_1 = require("../../../lib/db-types/date");
10
10
  const random_1 = require("../utils/random");
11
11
  class AutomationActionsImporter extends table_importer_1.TableImporter {
12
12
  static table = 'automation_actions';
@@ -41,8 +41,8 @@ class AutomationActionsImporter extends table_importer_1.TableImporter {
41
41
  this.#actionIndex += 1;
42
42
  return {
43
43
  id: this.fastFakeObjectId(),
44
- created_at: (0, db_date_1.toDatabaseDate)(createdAt),
45
- updated_at: (0, db_date_1.toDatabaseDate)(createdAt),
44
+ created_at: (0, date_1.toDatabaseDate)(createdAt),
45
+ updated_at: (0, date_1.toDatabaseDate)(createdAt),
46
46
  deleted_at: null,
47
47
  automation_id: this.#automation.id,
48
48
  type,
@@ -8,7 +8,7 @@ const faker_1 = require("@faker-js/faker");
8
8
  const errors_1 = __importDefault(require("@tryghost/errors"));
9
9
  const lodash_1 = require("lodash");
10
10
  const table_importer_1 = require("./table-importer");
11
- const db_date_1 = require("../../../lib/db-date");
11
+ const date_1 = require("../../../lib/db-types/date");
12
12
  class AutomationRunStepsImporter extends table_importer_1.TableImporter {
13
13
  static table = 'automation_run_steps';
14
14
  static dependencies = [
@@ -86,12 +86,12 @@ class AutomationRunStepsImporter extends table_importer_1.TableImporter {
86
86
  ? requestedStepCount
87
87
  : actionCount;
88
88
  fullPathGeneratedForAutomation.add(run.automation_id);
89
- const runCreatedAt = (0, db_date_1.fromDatabaseDate)(run.created_at);
89
+ const runCreatedAt = (0, date_1.fromDatabaseDate)(run.created_at);
90
90
  const lastStepStatus = faker_1.faker.helpers.arrayElement(['pending', 'finished', 'failed']);
91
91
  for (let index = 0; index < runStepCount; index += 1) {
92
92
  const createdAt = new Date(runCreatedAt);
93
93
  createdAt.setHours(createdAt.getHours() + index);
94
- const createdAtString = (0, db_date_1.toDatabaseDate)(createdAt);
94
+ const createdAtString = (0, date_1.toDatabaseDate)(createdAt);
95
95
  const status = index === runStepCount - 1 ? lastStepStatus : 'finished';
96
96
  const isTerminal = status !== 'pending';
97
97
  steps.push({
@@ -9,7 +9,7 @@ const errors_1 = __importDefault(require("@tryghost/errors"));
9
9
  const strict_1 = __importDefault(require("node:assert/strict"));
10
10
  const table_importer_1 = require("./table-importer");
11
11
  const parse_email_address_1 = require("@tryghost/parse-email-address");
12
- const db_date_1 = require("../../../lib/db-date");
12
+ const date_1 = require("../../../lib/db-types/date");
13
13
  const random_1 = require("../utils/random");
14
14
  const assertExampleEmailDomain = (email) => {
15
15
  const { domain } = (0, parse_email_address_1.parseEmailAddress)(email) ?? {};
@@ -51,14 +51,14 @@ class AutomationRunsImporter extends table_importer_1.TableImporter {
51
51
  });
52
52
  }
53
53
  const member = faker_1.faker.helpers.arrayElement(this.#members);
54
- const automationCreatedAt = (0, db_date_1.fromDatabaseDate)(this.#automation.created_at);
55
- const memberCreatedAt = (0, db_date_1.fromDatabaseDate)(member.created_at);
54
+ const automationCreatedAt = (0, date_1.fromDatabaseDate)(this.#automation.created_at);
55
+ const memberCreatedAt = (0, date_1.fromDatabaseDate)(member.created_at);
56
56
  const createdAt = (0, random_1.randomDateBetween)(new Date(Math.max(automationCreatedAt.valueOf(), memberCreatedAt.valueOf())), new Date());
57
57
  assertExampleEmailDomain(member.email);
58
58
  return {
59
59
  id: this.fastFakeObjectId(),
60
- created_at: (0, db_date_1.toDatabaseDate)(createdAt),
61
- updated_at: (0, db_date_1.toDatabaseDate)(createdAt),
60
+ created_at: (0, date_1.toDatabaseDate)(createdAt),
61
+ updated_at: (0, date_1.toDatabaseDate)(createdAt),
62
62
  automation_id: this.#automation.id,
63
63
  member_id: member.id,
64
64
  member_email: member.email,
@@ -7,7 +7,7 @@ const string_1 = require("@tryghost/string");
7
7
  const table_importer_1 = require("./table-importer");
8
8
  // @ts-expect-error This module currently lacks type definitions.
9
9
  const blog_info_1 = require("../utils/blog-info");
10
- const db_date_1 = require("../../../lib/db-date");
10
+ const date_1 = require("../../../lib/db-types/date");
11
11
  const constants_1 = require("../../../services/member-welcome-emails/constants");
12
12
  const defaultAutomations = [
13
13
  {
@@ -40,8 +40,8 @@ class AutomationsImporter extends table_importer_1.TableImporter {
40
40
  status: faker_1.faker.helpers.arrayElement(['active', 'inactive']),
41
41
  name,
42
42
  slug,
43
- created_at: (0, db_date_1.toDatabaseDate)(createdAt),
44
- updated_at: (0, db_date_1.toDatabaseDate)(createdAt),
43
+ created_at: (0, date_1.toDatabaseDate)(createdAt),
44
+ updated_at: (0, date_1.toDatabaseDate)(createdAt),
45
45
  };
46
46
  }
47
47
  }
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { luck, randomDateBetween } = require('../utils/random');
4
- const { toDatabaseDate } = require('../../../lib/db-date');
4
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class CommentReportsImporter extends TableImporter {
7
7
  static table = 'comment_reports';
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
2
2
  const { TableImporter } = require('./table-importer');
3
3
  const { luck } = require('../utils/random');
4
4
  const generateEvents = require('../utils/event-generator');
5
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
5
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class CommentsImporter extends TableImporter {
8
8
  static table = 'comments';
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { randomDateBetween } = require('../utils/random');
4
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
4
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class EmailBatchesImporter extends TableImporter {
7
7
  static table = 'email_batches';
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const generateEvents = require('../utils/event-generator');
4
4
  const { randomDateBetween } = require('../utils/random');
5
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
5
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
6
6
  const debug = require('@tryghost/debug')('EmailRecipientsImporter');
7
7
 
8
8
  const emailStatus = {
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const generateEvents = require('../utils/event-generator');
4
4
  const { luck } = require('../utils/random');
5
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
5
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class EmailsImporter extends TableImporter {
8
8
  static table = 'emails';
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { slugify } = require('@tryghost/string');
4
4
  const { blogStartDate } = require('../utils/blog-info');
5
- const { toDatabaseDate } = require('../../../lib/db-date');
5
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class LabelsImporter extends TableImporter {
8
8
  static table = 'labels';
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { luck, randomDateBetween } = require('../utils/random');
4
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
4
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class MembersClickEventsImporter extends TableImporter {
7
7
  static table = 'members_click_events';
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { luck } = require('../utils/random');
4
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
4
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class MembersCreatedEventsImporter extends TableImporter {
7
7
  static table = 'members_created_events';
@@ -1,6 +1,6 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { luck, randomDateBetween } = require('../utils/random');
3
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
3
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
4
4
 
5
5
  class MembersFeedbackImporter extends TableImporter {
6
6
  static table = 'members_feedback';
@@ -4,7 +4,7 @@ const { faker: americanFaker } = require('@faker-js/faker/locale/en_US');
4
4
  const { blogStartDate: startTime } = require('../utils/blog-info');
5
5
  const generateEvents = require('../utils/event-generator');
6
6
  const { luck } = require('../utils/random');
7
- const { toDatabaseDate } = require('../../../lib/db-date');
7
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
8
8
  const debug = require('@tryghost/debug')('MembersImporter');
9
9
 
10
10
  class MembersImporter extends TableImporter {
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { luck } = require('../utils/random');
3
3
  const generateEvents = require('../utils/event-generator');
4
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
4
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class MembersLoginEventsImporter extends TableImporter {
7
7
  static table = 'members_login_events';
@@ -1,7 +1,7 @@
1
1
  const { faker } = require('@faker-js/faker');
2
2
  const { TableImporter } = require('./table-importer');
3
3
  const { luck } = require('../utils/random');
4
- const { toDatabaseDate } = require('../../../lib/db-date');
4
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class MembersProductsImporter extends TableImporter {
7
7
  static table = 'members_products';
@@ -1,6 +1,6 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { randomDateBetween } = require('../utils/random');
3
- const { toDatabaseDate } = require('../../../lib/db-date');
3
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
4
4
 
5
5
  class MembersStatusEventsImporter extends TableImporter {
6
6
  static table = 'members_status_events';
@@ -1,6 +1,6 @@
1
1
  const { faker } = require('@faker-js/faker');
2
2
  const { TableImporter } = require('./table-importer');
3
- const { fromDatabaseDate } = require('../../../lib/db-date');
3
+ const { fromDatabaseDate } = require('../../../lib/db-types/date');
4
4
 
5
5
  class MembersStripeCustomersImporter extends TableImporter {
6
6
  static table = 'members_stripe_customers';
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
2
2
  const { TableImporter } = require('./table-importer');
3
3
  const generateEvents = require('../utils/event-generator');
4
4
  const { luck } = require('../utils/random');
5
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
5
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class MembersStripeCustomersSubscriptionsImporter extends TableImporter {
8
8
  static table = 'members_stripe_customers_subscriptions';
@@ -1,6 +1,6 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { luck, randomDateBetween } = require('../utils/random');
3
- const { toDatabaseDate } = require('../../../lib/db-date');
3
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
4
4
 
5
5
  class MembersSubscribeEventsImporter extends TableImporter {
6
6
  static table = 'members_subscribe_events';
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { luck } = require('../utils/random');
4
- const { fromDatabaseDate } = require('../../../lib/db-date');
4
+ const { fromDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class MembersSubscriptionCreatedEventsImporter extends TableImporter {
7
7
  static table = 'members_subscription_created_events';
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
2
2
  const errors = require('@tryghost/errors');
3
3
  const { TableImporter } = require('./table-importer');
4
4
  const { randomDateBetween } = require('../utils/random');
5
- const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-date');
5
+ const { fromDatabaseDate, toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class OfferRedemptionsImporter extends TableImporter {
8
8
  static table = 'offer_redemptions';
@@ -1,7 +1,7 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { slugify } = require('@tryghost/string');
3
3
  const { blogStartDate } = require('../utils/blog-info');
4
- const { toDatabaseDate } = require('../../../lib/db-date');
4
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  const offerTemplates = [
7
7
  {
@@ -2,7 +2,7 @@ const { faker } = require('@faker-js/faker');
2
2
  const { slugify } = require('@tryghost/string');
3
3
  const { luck } = require('../utils/random');
4
4
  const { TableImporter } = require('./table-importer');
5
- const { toDatabaseDate } = require('../../../lib/db-date');
5
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class PostsImporter extends TableImporter {
8
8
  static table = 'posts';
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TableImporter = void 0;
7
7
  const debug_1 = __importDefault(require("@tryghost/debug"));
8
- const db_date_1 = require("../../../lib/db-date");
8
+ const date_1 = require("../../../lib/db-types/date");
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  const node_fs_1 = __importDefault(require("node:fs"));
11
11
  const papaparse_1 = __importDefault(require("papaparse"));
@@ -101,7 +101,7 @@ class TableImporter {
101
101
  mutableObj[key] = value ? 1 : 0;
102
102
  }
103
103
  else if (value instanceof Date) {
104
- mutableObj[key] = (0, db_date_1.toDatabaseDate)(value);
104
+ mutableObj[key] = (0, date_1.toDatabaseDate)(value);
105
105
  }
106
106
  else if (value === null) {
107
107
  mutableObj[key] = '\\N';
@@ -1,7 +1,7 @@
1
1
  const { faker } = require('@faker-js/faker');
2
2
  const { slugify } = require('@tryghost/string');
3
3
  const { TableImporter } = require('./table-importer');
4
- const { toDatabaseDate } = require('../../../lib/db-date');
4
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
5
5
 
6
6
  class TagsImporter extends TableImporter {
7
7
  static table = 'tags';
@@ -2,7 +2,7 @@ const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
3
  const { slugify } = require('@tryghost/string');
4
4
  const security = require('@tryghost/security');
5
- const { toDatabaseDate } = require('../../../lib/db-date');
5
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
6
6
 
7
7
  class UsersImporter extends TableImporter {
8
8
  static table = 'users';
@@ -1,6 +1,6 @@
1
1
  const { TableImporter } = require('./table-importer');
2
2
  const { faker } = require('@faker-js/faker');
3
- const { toDatabaseDate } = require('../../../lib/db-date');
3
+ const { toDatabaseDate } = require('../../../lib/db-types/date');
4
4
 
5
5
  class WebMentionsImporter extends TableImporter {
6
6
  static table = 'mentions';
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.luck = void 0;
4
4
  exports.randomDateBetween = randomDateBetween;
5
5
  const faker_1 = require("@faker-js/faker");
6
- const db_date_1 = require("../../../lib/db-date");
6
+ const date_1 = require("../../../lib/db-types/date");
7
7
  /**
8
8
  * Adds another degree of randomness into some decisions
9
9
  * @param lowerThan Only this % of people will achieve this luck
@@ -15,7 +15,7 @@ const luck = (lowerThan) => faker_1.faker.number.int({
15
15
  }) <= lowerThan;
16
16
  exports.luck = luck;
17
17
  function randomDateBetween(start, end) {
18
- const earliest = (0, db_date_1.fromDatabaseDate)(start);
19
- const latest = (0, db_date_1.fromDatabaseDate)(end);
18
+ const earliest = (0, date_1.fromDatabaseDate)(start);
19
+ const latest = (0, date_1.fromDatabaseDate)(end);
20
20
  return latest > earliest ? faker_1.faker.date.between({ from: earliest, to: latest }) : earliest;
21
21
  }
@@ -18,6 +18,7 @@ const flush_logs_1 = require("../shared/flush-logs");
18
18
  const moment_1 = __importDefault(require("moment"));
19
19
  const stoppable_1 = __importDefault(require("stoppable"));
20
20
  const node_util_1 = require("node:util");
21
+ const node_assert_1 = __importDefault(require("node:assert"));
21
22
  const debug = (0, debug_1.default)('server');
22
23
  const messages = {
23
24
  cantTouchThis: "Can't touch this",
@@ -216,7 +217,7 @@ class GhostServer {
216
217
  */
217
218
  async _stopServer() {
218
219
  const { httpServer } = this;
219
- assert(httpServer, 'httpServer must be set before stopping server');
220
+ (0, node_assert_1.default)(httpServer, 'httpServer must be set before stopping server');
220
221
  const startTime = Date.now();
221
222
  try {
222
223
  return await (0, node_util_1.promisify)(httpServer.stop.bind(httpServer))();
@@ -280,7 +281,7 @@ class GhostServer {
280
281
  const connectionInterval = setInterval(() => this.httpServer?.getConnections((_err, connections) => logging_1.default.warn(`${connections} connections currently open`)), 5000);
281
282
  // Output a notice when the server closes
282
283
  const { httpServer } = this;
283
- assert(httpServer, 'httpServer must be set before starting test mode');
284
+ (0, node_assert_1.default)(httpServer, 'httpServer must be set before starting test mode');
284
285
  httpServer.on('close', function () {
285
286
  clearInterval(connectionInterval);
286
287
  logging_1.default.warn('Server has fully closed');
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DbBoolean = void 0;
4
+ const zod_1 = require("zod");
5
+ /**
6
+ * A boolean column, whichever engine handed it back.
7
+ *
8
+ * SQLite has no boolean type and answers with 0 or 1; MySQL answers with a boolean. Every
9
+ * read normalises so nothing downstream has to know which database it is talking to, and
10
+ * so a falsy check never has to reason about the number zero.
11
+ *
12
+ * Encoding leaves the value alone: a boolean column takes a boolean, and takes the 0 or 1
13
+ * it gave us just as happily.
14
+ */
15
+ exports.DbBoolean = zod_1.z.codec(zod_1.z.union([zod_1.z.boolean(), zod_1.z.number()]), zod_1.z.boolean(), {
16
+ decode: (stored) => Boolean(stored),
17
+ encode: (value) => value,
18
+ });
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.promisePool = void 0;
7
+ const errors_1 = __importDefault(require("@tryghost/errors"));
8
+ const validateMaxConcurrency = (maxConcurrency) => {
9
+ if (maxConcurrency < 1 || !Number.isSafeInteger(maxConcurrency)) {
10
+ throw new errors_1.default.IncorrectUsageError({
11
+ message: 'Concurrency must be a positive integer',
12
+ });
13
+ }
14
+ };
15
+ /**
16
+ * Run promise-returning tasks with a bounded level of concurrency.
17
+ */
18
+ const promisePool = async (tasks, maxConcurrency) => {
19
+ validateMaxConcurrency(maxConcurrency);
20
+ const taskIterator = tasks.values();
21
+ const concurrency = Math.min(maxConcurrency, tasks.length);
22
+ const workers = Array(concurrency)
23
+ .fill(taskIterator)
24
+ .map(async (workerIterator) => {
25
+ for (const task of workerIterator) {
26
+ await task();
27
+ }
28
+ });
29
+ await Promise.all(workers);
30
+ };
31
+ exports.promisePool = promisePool;