ghost 5.130.2 → 6.0.0-alpha.2

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 (281) hide show
  1. package/components/tryghost-i18n-6.0.0-alpha.2.tgz +0 -0
  2. package/core/boot.js +0 -2
  3. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +1 -1
  4. package/core/built/admin/assets/admin-x-activitypub/{index-B8te98RZ.mjs → index-BZDwG-OG.mjs} +7397 -7385
  5. package/core/built/admin/assets/admin-x-activitypub/{index-C8qwgKWF.mjs → index-DTlSQCGz.mjs} +2 -2
  6. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-CAtv7MlN.mjs → CodeEditorView-CCUvrZhe.mjs} +2 -2
  7. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +3 -3
  8. package/core/built/admin/assets/admin-x-settings/{index-BVxh86CD.mjs → index-Cubs_8W6.mjs} +8088 -8532
  9. package/core/built/admin/assets/admin-x-settings/{index-DUhmXSBR.mjs → index-D0ejKdD5.mjs} +2 -2
  10. package/core/built/admin/assets/admin-x-settings/{modals-B5dtfzsB.mjs → modals-DSxs9dLy.mjs} +1676 -1614
  11. package/core/built/admin/assets/{chunk.524.1f2faf572078e5b86b09.js → chunk.524.0953dd72ae1efbabe0de.js} +7 -7
  12. package/core/built/admin/assets/{chunk.582.675905fe8f9be138fb19.js → chunk.582.3caa825c2a91efc48f1d.js} +8 -8
  13. package/core/built/admin/assets/{ghost-280b83af263b51bc4d6ce5bd8f536096.js → ghost-db0f84981913aec8a672c57aa22da07a.js} +40 -45
  14. package/core/built/admin/assets/posts/posts.js +6549 -6537
  15. package/core/built/admin/assets/stats/stats.js +8824 -8812
  16. package/core/built/admin/index.html +3 -3
  17. package/core/frontend/helpers/get.js +4 -2
  18. package/core/frontend/helpers/ghost_head.js +71 -77
  19. package/core/frontend/meta/canonical-url.js +1 -7
  20. package/core/frontend/meta/context-object.js +1 -1
  21. package/core/frontend/meta/get-meta.js +1 -4
  22. package/core/frontend/meta/og-image.js +1 -1
  23. package/core/frontend/meta/og-type.js +0 -2
  24. package/core/frontend/meta/schema.js +1 -1
  25. package/core/frontend/meta/twitter-image.js +1 -1
  26. package/core/frontend/meta/url.js +1 -12
  27. package/core/frontend/services/rendering/context.js +0 -8
  28. package/core/frontend/web/middleware/static-theme.js +20 -1
  29. package/core/server/api/endpoints/index.js +0 -4
  30. package/core/server/api/endpoints/session.js +0 -9
  31. package/core/server/api/endpoints/utils/serializers/input/settings.js +0 -2
  32. package/core/server/api/endpoints/utils/serializers/input/utils/settings-filter-type-group-mapper.js +0 -1
  33. package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.js +0 -1
  34. package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-type-mapper.js +0 -1
  35. package/core/server/api/endpoints/utils/serializers/output/all.js +1 -1
  36. package/core/server/api/endpoints/utils/serializers/output/index.js +0 -4
  37. package/core/server/api/endpoints/utils/serializers/output/mappers/snippets.js +1 -5
  38. package/core/server/api/endpoints/utils/serializers/output/members.js +0 -2
  39. package/core/server/api/endpoints/utils/validators/input/index.js +0 -4
  40. package/core/server/data/importer/importers/data/Base.js +1 -3
  41. package/core/server/data/importer/importers/data/SettingsImporter.js +1 -3
  42. package/core/server/data/migrations/utils/index.js +1 -4
  43. package/core/server/data/migrations/utils/permissions.js +14 -6
  44. package/core/server/data/migrations/utils/settings.js +39 -22
  45. package/core/server/data/migrations/versions/4.47/2022-05-03-15-30-final-v4.js +2 -0
  46. package/core/server/data/migrations/versions/4.47/2022-05-04-10-03-no-op.js +6 -0
  47. package/core/server/data/migrations/versions/5.100/2024-11-06-04-45-15-add-activitypub-integration.js +4 -2
  48. package/core/server/data/migrations/versions/5.113/2025-03-07-12-24-00-add-super-editor.js +4 -2
  49. package/core/server/data/migrations/versions/5.3/2022-07-06-07-58-add-ghost-explore-integration-role.js +4 -2
  50. package/core/server/data/migrations/versions/5.3/2022-07-06-09-17-add-ghost-explore-integration.js +4 -2
  51. package/core/server/data/migrations/versions/5.3/2022-07-06-09-26-add-ghost-explore-integration-api-key.js +4 -2
  52. package/core/server/data/migrations/versions/5.40/2023-03-21-18-42-add-self-serve-integration-role.js +4 -2
  53. package/core/server/data/migrations/versions/5.40/2023-03-21-18-52-add-self-serve-integration.js +4 -2
  54. package/core/server/data/migrations/versions/5.40/2023-03-21-19-02-add-self-serve-integration-api-key.js +4 -2
  55. package/core/server/data/migrations/versions/5.63/2023-09-13-13-03-10-add-ghost-core-content-integration.js +4 -2
  56. package/core/server/data/migrations/versions/5.63/2023-09-13-13-34-11-add-ghost-core-content-integration-key.js +4 -2
  57. package/core/server/data/migrations/versions/6.0/2025-06-20-01-41-54-remove-updated-by-column.js +46 -0
  58. package/core/server/data/migrations/versions/6.0/2025-06-20-13-41-55-remove-created-by-column.js +47 -0
  59. package/core/server/data/migrations/versions/6.0/2025-06-23-09-49-25-add-missing-member-uuids.js +22 -0
  60. package/core/server/data/migrations/versions/6.0/2025-06-23-10-03-26-members-nullable-uuid.js +5 -0
  61. package/core/server/data/migrations/versions/6.0/2025-06-24-09-19-42-use-object-id-for-hardcoded-user-id.js +95 -0
  62. package/core/server/data/migrations/versions/6.0/2025-06-25-15-03-29-remove-amp-from-settings.js +6 -0
  63. package/core/server/data/migrations/versions/6.0/2025-06-30-13-59-10-remove-mail-events-table.js +3 -0
  64. package/core/server/data/migrations/versions/6.0/2025-06-30-14-00-00-update-feature-image-alt-length.js +25 -0
  65. package/core/server/data/schema/default-settings/default-settings.json +0 -13
  66. package/core/server/data/schema/fixtures/FixtureManager.js +128 -5
  67. package/core/server/data/schema/fixtures/fixtures.json +4 -6
  68. package/core/server/data/schema/fixtures/index.js +3 -1
  69. package/core/server/data/schema/schema.js +20 -65
  70. package/core/server/data/seeders/DataGenerator.js +11 -2
  71. package/core/server/data/seeders/importers/EmailsImporter.js +1 -3
  72. package/core/server/data/seeders/importers/LabelsImporter.js +1 -3
  73. package/core/server/data/seeders/importers/MembersImporter.js +0 -1
  74. package/core/server/data/seeders/importers/MembersStripeCustomersImporter.js +1 -2
  75. package/core/server/data/seeders/importers/MembersStripeCustomersSubscriptionsImporter.js +0 -1
  76. package/core/server/data/seeders/importers/PostsImporter.js +0 -1
  77. package/core/server/data/seeders/importers/RolesUsersImporter.js +6 -1
  78. package/core/server/data/seeders/importers/TagsImporter.js +1 -2
  79. package/core/server/data/seeders/importers/UsersImporter.js +1 -2
  80. package/core/server/data/tinybird/ARCHITECTURE.md +0 -4
  81. package/core/server/data/tinybird/DOCS.md +0 -4
  82. package/core/server/models/base/bookshelf.js +8 -1
  83. package/core/server/models/base/plugins/events.js +0 -28
  84. package/core/server/models/base/plugins/user-type.js +10 -36
  85. package/core/server/models/post.js +25 -10
  86. package/core/server/models/relations/authors.js +2 -2
  87. package/core/server/models/settings.js +1 -14
  88. package/core/server/models/user.js +33 -6
  89. package/core/server/services/activitypub/ActivityPubService.js +1 -2
  90. package/core/server/services/activitypub/ActivityPubService.ts +1 -2
  91. package/core/server/services/explore-ping/ExplorePingService.js +3 -1
  92. package/core/server/services/link-redirection/README.md +1 -1
  93. package/core/server/services/mentions/MentionSendingService.js +1 -1
  94. package/core/server/services/settings/SettingsBREADService.js +5 -1
  95. package/core/server/services/settings/settings-service.js +3 -1
  96. package/core/server/services/settings-helpers/SettingsHelpers.js +0 -12
  97. package/core/server/services/update-check/UpdateCheckService.js +18 -2
  98. package/core/server/services/url/config.js +0 -2
  99. package/core/server/web/api/app.js +4 -0
  100. package/core/server/web/api/endpoints/admin/middleware.js +8 -9
  101. package/core/server/web/api/endpoints/admin/routes.js +0 -2
  102. package/core/server/web/comments/routes.js +3 -0
  103. package/core/server/web/shared/middleware/index.js +4 -0
  104. package/core/server/web/shared/middleware/max-limit-cap.js +27 -0
  105. package/core/server/web/shared/middleware/pretty-urls.js +3 -1
  106. package/core/server/web/shared/middleware/redirect-amp-urls.js +36 -0
  107. package/core/shared/config/defaults.json +2 -0
  108. package/core/shared/config/overrides.json +1 -4
  109. package/core/shared/labs.js +2 -6
  110. package/core/shared/max-limit-cap.js +61 -0
  111. package/package.json +5 -6
  112. package/tsconfig.tsbuildinfo +1 -1
  113. package/yarn.lock +18 -107
  114. package/components/tryghost-i18n-5.130.2.tgz +0 -0
  115. package/core/built/admin/assets/img/amp-d7b72aae3315fda95921fb575dfca100.svg +0 -4
  116. package/core/frontend/apps/amp/index.js +0 -30
  117. package/core/frontend/apps/amp/lib/helpers/amp_analytics.js +0 -32
  118. package/core/frontend/apps/amp/lib/helpers/amp_components.js +0 -48
  119. package/core/frontend/apps/amp/lib/helpers/amp_content.js +0 -214
  120. package/core/frontend/apps/amp/lib/helpers/amp_style.js +0 -8
  121. package/core/frontend/apps/amp/lib/router.js +0 -95
  122. package/core/frontend/apps/amp/lib/views/amp.hbs +0 -1046
  123. package/core/frontend/meta/amp-url.js +0 -14
  124. package/core/server/api/endpoints/mail-events.js +0 -17
  125. package/core/server/api/endpoints/utils/serializers/output/mail-events.js +0 -9
  126. package/core/server/api/endpoints/utils/validators/input/mail-events.js +0 -7
  127. package/core/server/data/migrations/utils/constants.js +0 -3
  128. package/core/server/data/migrations/versions/4.0/01-update-mobiledoc.js +0 -61
  129. package/core/server/data/migrations/versions/4.0/02-add-status-column-to-members.js +0 -11
  130. package/core/server/data/migrations/versions/4.0/03-populate-status-column-for-members.js +0 -81
  131. package/core/server/data/migrations/versions/4.0/04-drop-apps-related-tables.js +0 -10
  132. package/core/server/data/migrations/versions/4.0/05-add-members-subscribe-events-table.js +0 -9
  133. package/core/server/data/migrations/versions/4.0/06-populate-members-subscribe-events-table.js +0 -53
  134. package/core/server/data/migrations/versions/4.0/07-alter-unique-constraint-for-posts-slug.js +0 -7
  135. package/core/server/data/migrations/versions/4.0/08-add-members-login-events-table.js +0 -7
  136. package/core/server/data/migrations/versions/4.0/09-add-members-email-change-events-table.js +0 -9
  137. package/core/server/data/migrations/versions/4.0/10-add-members-status-events-table.js +0 -9
  138. package/core/server/data/migrations/versions/4.0/11-add-members-paid-subscription-events-table.js +0 -12
  139. package/core/server/data/migrations/versions/4.0/12-delete-apps-related-settings-keys.js +0 -16
  140. package/core/server/data/migrations/versions/4.0/13-add-members-payment-events-table.js +0 -10
  141. package/core/server/data/migrations/versions/4.0/14-remove-orphaned-stripe-records.js +0 -36
  142. package/core/server/data/migrations/versions/4.0/15-add-frontmatter-column-to-meta.js +0 -7
  143. package/core/server/data/migrations/versions/4.0/16-refactor-slack-setting.js +0 -96
  144. package/core/server/data/migrations/versions/4.0/17-populate-members-status-events-table.js +0 -41
  145. package/core/server/data/migrations/versions/4.0/18-transform-urls-absolute-to-transform-ready.js +0 -201
  146. package/core/server/data/migrations/versions/4.0/19-remove-labs-members-setting.js +0 -10
  147. package/core/server/data/migrations/versions/4.0/20-refactor-unsplash-setting.js +0 -41
  148. package/core/server/data/migrations/versions/4.0/21-sanitize-email-batches-provider-id.js +0 -8
  149. package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +0 -87
  150. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +0 -66
  151. package/core/server/data/migrations/versions/4.0/24-add-missing-email-permissions.js +0 -36
  152. package/core/server/data/migrations/versions/4.0/25-populate-members-paid-subscription-events-table.js +0 -129
  153. package/core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js +0 -76
  154. package/core/server/data/migrations/versions/4.0/27-add-primary-key-brute-migrations-lock.js +0 -9
  155. package/core/server/data/migrations/versions/4.0/28-add-webhook-intergrations-foreign-key.js +0 -16
  156. package/core/server/data/migrations/versions/4.0/29-fix-foreign-key-for-members-stripe-customers-subscriptions.js +0 -35
  157. package/core/server/data/migrations/versions/4.0/30-set-default-accent-color.js +0 -21
  158. package/core/server/data/migrations/versions/4.1/01-fix-backup-content-permission-typo.js +0 -15
  159. package/core/server/data/migrations/versions/4.1/02-add-unique-constraint-for-member-stripe-tables.js +0 -21
  160. package/core/server/data/migrations/versions/4.11/01-add-oauth-user-data.js +0 -12
  161. package/core/server/data/migrations/versions/4.11/02-add-email-verification-required-setting.js +0 -43
  162. package/core/server/data/migrations/versions/4.12/01-add-email-only-column-to-posts-meta-table.js +0 -7
  163. package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +0 -39
  164. package/core/server/data/migrations/versions/4.13/01-add-members-stripe-connect-auth-permission-to-administrators.js +0 -6
  165. package/core/server/data/migrations/versions/4.13/02-add-members-products-events-table.js +0 -33
  166. package/core/server/data/migrations/versions/4.14/01-fix-comped-member-statuses.js +0 -73
  167. package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +0 -61
  168. package/core/server/data/migrations/versions/4.15/01-add-temp-members-analytic-events-table.js +0 -12
  169. package/core/server/data/migrations/versions/4.16/01-add-custom-theme-settings-table.js +0 -9
  170. package/core/server/data/migrations/versions/4.17/01-add-custom-theme-settings-permissions.js +0 -21
  171. package/core/server/data/migrations/versions/4.17/02-add-offers-table.js +0 -19
  172. package/core/server/data/migrations/versions/4.17/03-add-offers-permissions.js +0 -35
  173. package/core/server/data/migrations/versions/4.19/01-add-active-column-to-offers.js +0 -7
  174. package/core/server/data/migrations/versions/4.19/02-add-offer-redemptions-table.js +0 -8
  175. package/core/server/data/migrations/versions/4.2/01-fix-incorrect-mrr-delta-events.js +0 -13
  176. package/core/server/data/migrations/versions/4.20/01-remove-offer-redemptions-table.js +0 -19
  177. package/core/server/data/migrations/versions/4.20/02-remove-offers-table.js +0 -30
  178. package/core/server/data/migrations/versions/4.20/03-add-offers-table.js +0 -21
  179. package/core/server/data/migrations/versions/4.20/04-add-offer-redemptions-table.js +0 -9
  180. package/core/server/data/migrations/versions/4.20/05-remove-not-null-constraint-from-portal-title.js +0 -44
  181. package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +0 -8
  182. package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +0 -39
  183. package/core/server/data/migrations/versions/4.23/01-truncate-offer-names.js +0 -59
  184. package/core/server/data/migrations/versions/4.3/01-add-products-table.js +0 -9
  185. package/core/server/data/migrations/versions/4.3/02-add-members-products-table.js +0 -8
  186. package/core/server/data/migrations/versions/4.3/03-add-default-product.js +0 -39
  187. package/core/server/data/migrations/versions/4.3/04-attach-members-to-product.js +0 -50
  188. package/core/server/data/migrations/versions/4.3/05-add-stripe-products-table.js +0 -9
  189. package/core/server/data/migrations/versions/4.3/06-add-stripe-prices-table.js +0 -15
  190. package/core/server/data/migrations/versions/4.3/07-add-products-permissions.js +0 -29
  191. package/core/server/data/migrations/versions/4.3/08-migrate-members-signup-setting.js +0 -109
  192. package/core/server/data/migrations/versions/4.3/09-add-price-id-column-to-subscriptions-table.js +0 -10
  193. package/core/server/data/migrations/versions/4.3/10-populate-stripe-price-id-in-subscriptions.js +0 -20
  194. package/core/server/data/migrations/versions/4.33/2022-01-14-11-50-add-type-column-to-products.js +0 -12
  195. package/core/server/data/migrations/versions/4.33/2022-01-14-11-51-add-default-free-tier.js +0 -40
  196. package/core/server/data/migrations/versions/4.33/2022-01-18-09-07-remove-duplicate-offer-redemptions.js +0 -46
  197. package/core/server/data/migrations/versions/4.33/2022-01-19-10-43-add-active-column-to-products-table.js +0 -7
  198. package/core/server/data/migrations/versions/4.34/2022-01-25-13-53-add-welcome-page-url-column-to-products.js +0 -7
  199. package/core/server/data/migrations/versions/4.35/2022-01-20-05-55-add-post-products-table.js +0 -8
  200. package/core/server/data/migrations/versions/4.35/2022-01-30-15-17-set-welcome-page-url-from-settings.js +0 -45
  201. package/core/server/data/migrations/versions/4.35/2022-02-01-11-48-update-email-recipient-filter-column-type.js +0 -19
  202. package/core/server/data/migrations/versions/4.35/2022-02-01-12-03-update-recipient-filter-column-type.js +0 -19
  203. package/core/server/data/migrations/versions/4.35/2022-02-02-10-38-add-default-content-visibility-tiers-setting.js +0 -8
  204. package/core/server/data/migrations/versions/4.35/2022-02-02-13-10-transform-specific-tiers-default-content-visibility.js +0 -147
  205. package/core/server/data/migrations/versions/4.35/2022-02-04-04-34-populate-empty-portal-products.js +0 -60
  206. package/core/server/data/migrations/versions/4.36/2022-02-07-14-34-add-last-seen-at-column-to-members.js +0 -10
  207. package/core/server/data/migrations/versions/4.37/2022-02-21-09-53-backfill-members-last-seen-at-column.js +0 -32
  208. package/core/server/data/migrations/versions/4.38/2022-03-01-08-46-add-visibility-to-tiers.js +0 -11
  209. package/core/server/data/migrations/versions/4.38/2022-03-03-16-12-add-visibility-to-tiers.js +0 -8
  210. package/core/server/data/migrations/versions/4.38/2022-03-03-16-17-drop-tiers-visible-column.js +0 -7
  211. package/core/server/data/migrations/versions/4.39/2022-03-07-10-57-update-free-products-visibility-column.js +0 -66
  212. package/core/server/data/migrations/versions/4.39/2022-03-07-10-57-update-products-visibility-column.js +0 -36
  213. package/core/server/data/migrations/versions/4.4/01-restore-free-members-signup-setting-from-backup.js +0 -99
  214. package/core/server/data/migrations/versions/4.4/02-migrate-members-signup-access.js +0 -126
  215. package/core/server/data/migrations/versions/4.40/2022-03-07-14-37-add-members-cancel-events-table.js +0 -8
  216. package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-offers-admin-integration-permission-roles.js +0 -23
  217. package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-tiers-admin-integration-permission-roles.js +0 -20
  218. package/core/server/data/migrations/versions/4.42/2022-03-21-17-17-add.js +0 -25
  219. package/core/server/data/migrations/versions/4.42/2022-03-30-15-44-add-newsletter-permissions.js +0 -28
  220. package/core/server/data/migrations/versions/4.43/2022-03-28-19-26-recreate-newsletter-table.js +0 -29
  221. package/core/server/data/migrations/versions/4.43/2022-03-29-14-45-add-members-newsletters-table.js +0 -7
  222. package/core/server/data/migrations/versions/4.43/2022-04-01-10-13-add-post-newsletter-relation.js +0 -108
  223. package/core/server/data/migrations/versions/4.43/2022-04-06-09-47-add-type-column-to-paid-subscription-events.js +0 -7
  224. package/core/server/data/migrations/versions/4.43/2022-04-06-14-56-add-email-newsletter-relation.js +0 -8
  225. package/core/server/data/migrations/versions/4.43/2022-04-08-10-45-add-subscription-id-to-mrr-events.js +0 -7
  226. package/core/server/data/migrations/versions/4.44/2022-04-06-15-22-populate-type-column-for-paid-subscription-events.js +0 -21
  227. package/core/server/data/migrations/versions/4.44/2022-04-08-11-54-add-cancelled-events.js +0 -51
  228. package/core/server/data/migrations/versions/4.44/2022-04-11-08-24-add-newsletter-permissions.js +0 -33
  229. package/core/server/data/migrations/versions/4.44/2022-04-11-10-54-add-mrr-to-subscriptions.js +0 -8
  230. package/core/server/data/migrations/versions/4.44/2022-04-12-07-33-fill-mrr.js +0 -29
  231. package/core/server/data/migrations/versions/4.44/2022-04-13-12-00-remove-newsletter-sender-name-not-null-constraint.js +0 -33
  232. package/core/server/data/migrations/versions/4.44/2022-04-15-07-53-add-offer-id-to-subscriptions.js +0 -9
  233. package/core/server/data/migrations/versions/4.45/2022-04-19-12-23-backfill-subscriptions-offers.js +0 -60
  234. package/core/server/data/migrations/versions/4.45/2022-04-20-11-25-add-newsletter-read-permission.js +0 -9
  235. package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +0 -8
  236. package/core/server/data/migrations/versions/4.46/2022-04-13-12-00-add-created-at-newsletters.js +0 -6
  237. package/core/server/data/migrations/versions/4.46/2022-04-13-12-01-add-updated-at-newsletters.js +0 -6
  238. package/core/server/data/migrations/versions/4.46/2022-04-13-12-02-fill-created-at-newsletters.js +0 -19
  239. package/core/server/data/migrations/versions/4.46/2022-04-13-12-03-drop-nullable-created-at-newsletters.js +0 -3
  240. package/core/server/data/migrations/versions/4.46/2022-04-13-12-08-newsletters-show-header-name.js +0 -7
  241. package/core/server/data/migrations/versions/4.46/2022-04-13-12-57-add-uuid-column-to-newsletters.js +0 -8
  242. package/core/server/data/migrations/versions/4.46/2022-04-13-12-58-fill-uuid-for-newsletters.js +0 -19
  243. package/core/server/data/migrations/versions/4.46/2022-04-13-12-59-drop-nullable-uuid-newsletters.js +0 -3
  244. package/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js +0 -92
  245. package/core/server/data/migrations/versions/4.46/2022-04-20-08-39-map-subscribers-to-default-newsletter.js +0 -66
  246. package/core/server/data/migrations/versions/4.46/2022-04-22-07-43-add-newsletter-id-to-subscribe-events.js +0 -9
  247. package/core/server/data/migrations/versions/4.46/2022-04-27-07-59-set-newsletter-id-subscribe-events.js +0 -31
  248. package/core/server/data/migrations/versions/4.47/2022-05-03-15-30-update-newsletter-sending-options.js +0 -34
  249. package/core/server/data/migrations/versions/4.47/2022-05-04-10-03-transform-newsletter-header-image.js +0 -26
  250. package/core/server/data/migrations/versions/4.5/01-add-stripe-price-description-column.js +0 -7
  251. package/core/server/data/migrations/versions/4.5/02-add-product-description-column.js +0 -7
  252. package/core/server/data/migrations/versions/4.5/03-give-label-read-permissions-to-editors.js +0 -14
  253. package/core/server/data/migrations/versions/4.5/04-remove-unique-constraint-from-product-name.js +0 -13
  254. package/core/server/data/migrations/versions/4.5/05-rename-default-product-to-site-title.js +0 -38
  255. package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +0 -47
  256. package/core/server/data/migrations/versions/4.7/01-add-monthly-price-column-to-products.js +0 -7
  257. package/core/server/data/migrations/versions/4.7/02-add-yearly-price-column-to-products.js +0 -7
  258. package/core/server/data/migrations/versions/4.7/03-add-labs-setting.js +0 -42
  259. package/core/server/data/migrations/versions/4.8/01-add-feature-image-alt-column-to-posts-meta.js +0 -7
  260. package/core/server/data/migrations/versions/4.8/02-add-feature-image-caption-column-to-posts-meta.js +0 -7
  261. package/core/server/data/migrations/versions/4.8/03-add-default-product-portal-products.js +0 -69
  262. package/core/server/data/migrations/versions/4.8/04-migrate-show-newsletter-header-setting.js +0 -124
  263. package/core/server/data/migrations/versions/4.9/01-add-reset-all-passwords-permission.js +0 -11
  264. package/core/server/data/migrations/versions/4.9/02-add-benefits-table.js +0 -9
  265. package/core/server/data/migrations/versions/4.9/03-add-products-benefits-table.js +0 -8
  266. package/core/server/data/migrations/versions/4.9/04-add-member-segment-to-email-batches.js +0 -7
  267. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +0 -87
  268. package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +0 -47
  269. package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +0 -39
  270. package/core/server/models/mail-event.js +0 -12
  271. package/core/server/services/mail-events/BookshelfMailEventRepository.js +0 -40
  272. package/core/server/services/mail-events/InMemoryMailEventRepository.js +0 -10
  273. package/core/server/services/mail-events/InMemoryMailEventRepository.ts +0 -8
  274. package/core/server/services/mail-events/MailEvent.js +0 -20
  275. package/core/server/services/mail-events/MailEvent.ts +0 -10
  276. package/core/server/services/mail-events/MailEventRepository.js +0 -2
  277. package/core/server/services/mail-events/MailEventRepository.ts +0 -5
  278. package/core/server/services/mail-events/MailEventService.js +0 -124
  279. package/core/server/services/mail-events/MailEventService.ts +0 -169
  280. package/core/server/services/mail-events/index.js +0 -21
  281. package/core/server/services/mail-events/libraries.d.ts +0 -2
@@ -1,92 +0,0 @@
1
- const ObjectId = require('bson-objectid').default;
2
- const crypto = require('crypto');
3
- const logging = require('@tryghost/logging');
4
- const startsWith = require('lodash/startsWith');
5
- const {createTransactionalMigration} = require('../../utils');
6
-
7
- module.exports = createTransactionalMigration(
8
- async function up(knex) {
9
- // This uses the default settings from core/server/data/schema/default-settings/default-settings.json
10
- const newsletter = {
11
- id: (new ObjectId()).toHexString(),
12
- uuid: crypto.randomUUID(),
13
- name: 'Ghost',
14
- description: '',
15
- slug: 'default-newsletter',
16
- sender_name: null,
17
- sender_email: null,
18
- sender_reply_to: 'newsletter',
19
- status: 'active',
20
- visibility: 'members',
21
- subscribe_on_signup: true,
22
- sort_order: 0,
23
- body_font_category: 'sans_serif',
24
- footer_content: '',
25
- header_image: null,
26
- show_badge: true,
27
- show_feature_image: true,
28
- show_header_icon: true,
29
- show_header_title: true,
30
- show_header_name: false,
31
- title_alignment: 'center',
32
- title_font_category: 'sans_serif',
33
- created_at: knex.raw('CURRENT_TIMESTAMP')
34
- };
35
-
36
- // Make sure the newsletter table is empty
37
- const newsletters = await knex('newsletters').count('*', {as: 'total'});
38
-
39
- if (newsletters[0].total !== 0) {
40
- logging.warn('Skipping adding the default newsletter - There is already at least one newsletter');
41
- return;
42
- }
43
-
44
- // Get all settings in one query
45
- const settings = await knex('settings')
46
- .whereIn('key', [
47
- 'title',
48
- 'description',
49
- 'newsletter_body_font_category',
50
- 'newsletter_footer_content',
51
- 'newsletter_header_image',
52
- 'newsletter_show_badge',
53
- 'newsletter_show_feature_image',
54
- 'newsletter_show_header_icon',
55
- 'newsletter_show_header_title',
56
- 'newsletter_title_alignment',
57
- 'newsletter_title_font_category'
58
- ])
59
- .select(['key', 'value']);
60
-
61
- // eslint-disable-next-line no-restricted-syntax
62
- for (let {key, value} of settings) {
63
- // Use site title for the newsletter name
64
- if (key === 'title') {
65
- key = 'name';
66
- }
67
- // Settings have a `newsletter_` prefix which isn't present on the newsletters table
68
- if (startsWith(key, 'newsletter_')) {
69
- key = key.slice(11);
70
- }
71
-
72
- if (value === null && ['name', 'body_font_category', 'show_badge', 'show_feature_image', 'show_header_icon', 'show_header_title', 'title_alignment', 'title_font_category'].includes(key)) {
73
- // Prevent setting null to non-nullable columns
74
- // Default to defaults above in that case
75
- continue;
76
- }
77
-
78
- if (typeof newsletter[key] === 'boolean') {
79
- newsletter[key] = value === 'true';
80
- } else {
81
- newsletter[key] = value;
82
- }
83
- }
84
-
85
- logging.info('Adding the default newsletter');
86
- await knex('newsletters').insert(newsletter);
87
- },
88
- async function down(knex) {
89
- logging.info(`Removing newsletters`);
90
- await knex('newsletters').delete();
91
- }
92
- );
@@ -1,66 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const ObjectID = require('bson-objectid').default;
3
-
4
- const {createTransactionalMigration} = require('../../utils');
5
-
6
- module.exports = createTransactionalMigration(
7
- async function up(knex) {
8
- logging.info('Adding existing subscribers to default newsletter');
9
-
10
- const newsletter = await knex('newsletters')
11
- .orderBy('sort_order', 'asc')
12
- .orderBy('created_at', 'asc')
13
- .first('id', 'name');
14
-
15
- if (!newsletter) {
16
- logging.info(`Default newsletter not found - skipping`);
17
- return;
18
- }
19
-
20
- // This is at the start of the up() instead of at the end of the down()
21
- // to maintain idempotency
22
- logging.info('Removing existing newsletter subscriptions');
23
- await knex('members_newsletters').delete();
24
-
25
- logging.info(`Subscribing members to newsletter '${newsletter.name}'`);
26
-
27
- const memberIds = await knex('members')
28
- .where({subscribed: true})
29
- .pluck('id');
30
-
31
- if (!memberIds.length) {
32
- logging.info(`No members to subscribe - skipping`);
33
- return;
34
- }
35
-
36
- logging.info(`Found ${memberIds.length} members to subscribe`);
37
-
38
- const pivotRows = memberIds.map((memberId) => {
39
- return {
40
- id: ObjectID().toHexString(),
41
- member_id: memberId,
42
- newsletter_id: newsletter.id
43
- };
44
- });
45
-
46
- await knex.batchInsert('members_newsletters', pivotRows);
47
- },
48
- async function down(knex) {
49
- logging.info('Syncing subscriptions from newsletters -> members.subscribed');
50
- await knex('members')
51
- .whereIn('id', function () {
52
- this.select('member_id').from('members_newsletters');
53
- })
54
- .update({
55
- subscribed: true
56
- });
57
- logging.info('Syncing unsubscribes from newsletters -> members.subscribed');
58
- await knex('members')
59
- .whereNotIn('id', function () {
60
- this.select('member_id').from('members_newsletters');
61
- })
62
- .update({
63
- subscribed: false
64
- });
65
- }
66
- );
@@ -1,9 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('members_subscribe_events', 'newsletter_id', {
4
- type: 'string',
5
- maxlength: 24,
6
- nullable: true,
7
- references: 'newsletters.id',
8
- cascadeDelete: false
9
- });
@@ -1,31 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const {createTransactionalMigration} = require('../../utils');
3
-
4
- module.exports = createTransactionalMigration(
5
- async function up(knex) {
6
- // Get the default newsletter
7
- const newsletter = await knex('newsletters')
8
- .where('status', 'active')
9
- .orderBy('sort_order', 'asc')
10
- .orderBy('created_at', 'asc')
11
- .orderBy('id', 'asc')
12
- .first('id');
13
-
14
- if (!newsletter) {
15
- logging.error(`Default newsletter not found - skipping`);
16
- return;
17
- }
18
-
19
- // Set subscribe events
20
- const updatedRows = await knex('members_subscribe_events')
21
- .update({
22
- newsletter_id: newsletter.id
23
- })
24
- .where('newsletter_id', null);
25
-
26
- logging.info(`Updated ${updatedRows} members_subscribe_events with default newsletter id`);
27
- },
28
- async function down() {
29
- // Not required
30
- }
31
- );
@@ -1,34 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const {createTransactionalMigration} = require('../../utils');
3
- const find = require('lodash/find');
4
-
5
- module.exports = createTransactionalMigration(
6
- async function up(knex) {
7
- logging.info('Migrating sender settings to default newsletter');
8
-
9
- // Get all settings in one query
10
- const settings = await knex('settings')
11
- .whereIn('key', [
12
- 'members_from_address',
13
- 'members_reply_address'
14
- ])
15
- .select(['key', 'value']);
16
-
17
- // sender_reply_to and members_reply_address are both enums ['newsletter', 'support']
18
- const replyTo = find(settings, {key: 'members_reply_address'});
19
- const fromAddress = find(settings, {key: 'members_from_address'});
20
-
21
- // Update all newsletters that haven't been (re)configured already
22
- await knex('newsletters')
23
- .update({
24
- // CASE: members_from_address is 'noreply' - we leave it as null to maintain fallback behaviour
25
- sender_email: !fromAddress || fromAddress.value === 'noreply' ? null : fromAddress.value,
26
- sender_reply_to: replyTo ? replyTo.value : undefined
27
- })
28
- .whereNull('sender_email')
29
- .where('sender_reply_to', 'newsletter');
30
- },
31
- async function down() {
32
- // no-op
33
- }
34
- );
@@ -1,26 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const urlUtils = require('../../../../../shared/url-utils');
3
- const {createTransactionalMigration} = require('../../utils');
4
-
5
- module.exports = createTransactionalMigration(
6
- async function up(knex) {
7
- const newsletters = await knex.select('id', 'header_image').from('newsletters').whereNotNull('header_image');
8
-
9
- logging.info(`Transforming header_image to transformReady format for ${newsletters.length} newsletters.`);
10
-
11
- // eslint-disable-next-line no-restricted-syntax
12
- for (const newsletter of newsletters) {
13
- await knex('newsletters').update('header_image', urlUtils.toTransformReady(newsletter.header_image)).where('id', newsletter.id);
14
- }
15
- },
16
- async function down(knex) {
17
- const newsletters = await knex.select('id', 'header_image').from('newsletters').whereNotNull('header_image');
18
-
19
- logging.info(`Transforming header_image to absolute format for ${newsletters.length} newsletters.`);
20
-
21
- // eslint-disable-next-line no-restricted-syntax
22
- for (const newsletter of newsletters) {
23
- await knex('newsletters').update('header_image', urlUtils.transformReadyToAbsolute(newsletter.header_image)).where('id', newsletter.id);
24
- }
25
- }
26
- );
@@ -1,7 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('stripe_prices', 'description', {
4
- type: 'string',
5
- maxlength: 191,
6
- nullable: true
7
- });
@@ -1,7 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('products', 'description', {
4
- type: 'string',
5
- maxlength: 191,
6
- nullable: true
7
- });
@@ -1,14 +0,0 @@
1
- const {combineTransactionalMigrations, addPermissionWithRoles} = require('../../utils');
2
-
3
- module.exports = combineTransactionalMigrations(
4
- addPermissionWithRoles({
5
- name: 'Browse labels',
6
- action: 'browse',
7
- object: 'label'
8
- }, ['Editor']),
9
- addPermissionWithRoles({
10
- name: 'Read labels',
11
- action: 'read',
12
- object: 'label'
13
- }, ['Editor'])
14
- );
@@ -1,13 +0,0 @@
1
- const {createNonTransactionalMigration} = require('../../utils');
2
- const {dropUnique} = require('../../../schema/commands');
3
-
4
- module.exports = createNonTransactionalMigration(
5
- async function up(knex) {
6
- return await dropUnique('products', 'name', knex);
7
- },
8
- async function down() {
9
- // We cannot roll back this migration because adding a unique constraint
10
- // could error if we have duplicate names already in the table.
11
- return;
12
- }
13
- );
@@ -1,38 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const {createTransactionalMigration} = require('../../utils');
3
-
4
- module.exports = createTransactionalMigration(
5
- async function up(connection) {
6
- const defaultProduct = await connection('products')
7
- .where({name: 'Default Product'})
8
- .select('id')
9
- .first();
10
-
11
- const siteTitleSetting = await connection('settings')
12
- .where('key', 'title')
13
- .select('value')
14
- .first();
15
-
16
- if (!defaultProduct) {
17
- logging.warn('Skipping rename of default product to site title, default product doesn\'t exist or already renamed');
18
- return;
19
- }
20
-
21
- if (!siteTitleSetting || !siteTitleSetting.value) {
22
- logging.warn('Skipping rename of default product to site title, no site title found');
23
- return;
24
- }
25
- logging.info(`Renaming default product name to ${siteTitleSetting.value}`);
26
- await connection('products')
27
- .update({
28
- name: siteTitleSetting.value
29
- })
30
- .where({
31
- id: defaultProduct.id
32
- });
33
- },
34
-
35
- async function down() {
36
- // noop: We don't want to rename existing product back to 'Default Product'
37
- }
38
- );
@@ -1,47 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const {createTransactionalMigration} = require('../../utils');
3
-
4
- module.exports = createTransactionalMigration(
5
- async function up(knex) {
6
- logging.info('Updating all member "comped" statuses to "paid"');
7
- await knex('members')
8
- .update('status', 'paid')
9
- .where('status', 'comped');
10
- },
11
- async function down(knex) {
12
- // eslint-disable-next-line no-restricted-syntax
13
- const compedMemberIds = (await knex('members')
14
- .select('members.id')
15
- .innerJoin(
16
- 'members_stripe_customers',
17
- 'members.id',
18
- 'members_stripe_customers.member_id'
19
- ).innerJoin(
20
- 'members_stripe_customers_subscriptions',
21
- function () {
22
- this.on(
23
- 'members_stripe_customers.customer_id',
24
- 'members_stripe_customers_subscriptions.customer_id'
25
- ).onIn(
26
- 'members_stripe_customers_subscriptions.status',
27
- ['active', 'trialing', 'past_due', 'unpaid']
28
- );
29
- }
30
- ).where(
31
- 'members_stripe_customers_subscriptions.plan_nickname',
32
- '=',
33
- 'Complimentary'
34
- )).map(({id}) => id);
35
-
36
- if (compedMemberIds.length === 0) {
37
- logging.info('No Members found with Complimentary subscriptions');
38
- return;
39
- }
40
-
41
- logging.info(`Updating ${compedMemberIds.length} Members status from 'paid' -> 'comped'`);
42
-
43
- await knex('members')
44
- .update('status', 'comped')
45
- .whereIn('id', compedMemberIds);
46
- }
47
- );
@@ -1,7 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('products', 'monthly_price_id', {
4
- type: 'string',
5
- maxlength: 24,
6
- nullable: true
7
- });
@@ -1,7 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('products', 'yearly_price_id', {
4
- type: 'string',
5
- maxlength: 24,
6
- nullable: true
7
- });
@@ -1,42 +0,0 @@
1
- const ObjectID = require('bson-objectid').default;
2
- const logging = require('@tryghost/logging');
3
- const {createTransactionalMigration} = require('../../utils');
4
-
5
- const MIGRATION_USER = 1;
6
-
7
- module.exports = createTransactionalMigration(
8
- async function up(knex) {
9
- const labsExists = await knex('settings')
10
- .where('key', '=', 'labs')
11
- .first();
12
-
13
- if (!labsExists) {
14
- logging.info('Adding "labs" record to "settings" table');
15
-
16
- const now = knex.raw('CURRENT_TIMESTAMP');
17
-
18
- await knex('settings')
19
- .insert({
20
- id: ObjectID().toHexString(),
21
- key: 'labs',
22
- value: JSON.stringify({}),
23
- group: 'labs',
24
- type: 'object',
25
- created_at: now,
26
- created_by: MIGRATION_USER,
27
- updated_at: now,
28
- updated_by: MIGRATION_USER
29
- });
30
- } else {
31
- logging.warn('Skipped adding "labs" record to "settings" table. Record already exists!');
32
- }
33
- },
34
-
35
- async function down(knex) {
36
- logging.info('Removing "labs" record from "settings" table');
37
-
38
- await knex('settings')
39
- .where('key', '=', 'labs')
40
- .del();
41
- }
42
- );
@@ -1,7 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('posts_meta', 'feature_image_alt', {
4
- type: 'string',
5
- maxlength: 191,
6
- nullable: true
7
- });
@@ -1,7 +0,0 @@
1
- const {createAddColumnMigration} = require('../../utils');
2
-
3
- module.exports = createAddColumnMigration('posts_meta', 'feature_image_caption', {
4
- type: 'text',
5
- maxlength: 65535,
6
- nullable: true
7
- });
@@ -1,69 +0,0 @@
1
- const ObjectID = require('bson-objectid').default;
2
- const {createTransactionalMigration} = require('../../utils');
3
- const logging = require('@tryghost/logging');
4
-
5
- const MIGRATION_USER = 1;
6
-
7
- module.exports = createTransactionalMigration(
8
- async function up(knex) {
9
- const products = await knex
10
- .select('id')
11
- .from('products');
12
-
13
- if (products.length === 0) {
14
- logging.warn(`Skipping adding default product to portal_products, no default product exists`);
15
- return;
16
- }
17
-
18
- const defaultProduct = products[0];
19
- const portalProductsValue = [defaultProduct.id];
20
-
21
- const portalProductsSetting = await knex('settings')
22
- .where('key', 'portal_products')
23
- .select('value')
24
- .first();
25
-
26
- if (!portalProductsSetting) {
27
- logging.info(`Adding "portal_products" record to "settings" table with product - ${defaultProduct.id}`);
28
-
29
- const now = knex.raw('CURRENT_TIMESTAMP');
30
-
31
- await knex('settings')
32
- .insert({
33
- id: ObjectID().toHexString(),
34
- key: 'portal_products',
35
- value: JSON.stringify(portalProductsValue),
36
- group: 'portal',
37
- type: 'array',
38
- created_at: now,
39
- created_by: MIGRATION_USER,
40
- updated_at: now,
41
- updated_by: MIGRATION_USER
42
- });
43
- return;
44
- }
45
-
46
- logging.info(`Setting portal_products setting to have product - ${defaultProduct.id}`);
47
-
48
- await knex('settings')
49
- .where('key', 'portal_products')
50
- .update({value: JSON.stringify(portalProductsValue)});
51
- },
52
- async function down(knex) {
53
- const portalProductSetting = await knex('settings')
54
- .where('key', 'portal_products')
55
- .select('value')
56
- .first();
57
-
58
- if (!portalProductSetting) {
59
- logging.info('Skipping revert of portal_products setting, setting does not exist');
60
- return;
61
- }
62
-
63
- logging.info(`Reverting portal_products setting to empty array`);
64
-
65
- await knex('settings')
66
- .where('key', 'portal_products')
67
- .update({value: JSON.stringify([])});
68
- }
69
- );
@@ -1,124 +0,0 @@
1
- const logging = require('@tryghost/logging');
2
- const {createTransactionalMigration} = require('../../utils');
3
- const ObjectId = require('bson-objectid').default;
4
-
5
- // newsletter_show_header = false ->
6
- // newsletter_show_header_title = false
7
- // newsletter_show_header_icon = false
8
- //
9
- // the default for both of the new settings is true so there's no need to migrate
10
- // anything if previously showing the header
11
-
12
- module.exports = createTransactionalMigration(
13
- async function up(connection) {
14
- const oldSetting = await connection('settings')
15
- .where('key', 'newsletter_show_header')
16
- .select(['value', 'created_by'])
17
- .first();
18
-
19
- if (!oldSetting) {
20
- logging.info('Skipping migration of newsletter_show_header setting. Does not exist');
21
- return;
22
- }
23
-
24
- if (oldSetting.value === 'false') {
25
- logging.info('Migrating newsletter_show_header setting. Disabling title and logo');
26
-
27
- const newSettingKeys = ['newsletter_show_header_title', 'newsletter_show_header_icon'];
28
- const now = connection.raw('CURRENT_TIMESTAMP');
29
-
30
- // eslint-disable-next-line no-restricted-syntax
31
- for (const settingKey of newSettingKeys) {
32
- const existingSetting = await connection('settings').where('key', settingKey).first();
33
-
34
- if (!existingSetting) {
35
- // insert default setting - migrations are run before default settings are created
36
- await connection('settings')
37
- .insert({
38
- id: ObjectId().toHexString(),
39
- key: settingKey,
40
- group: 'newsletter',
41
- type: 'boolean',
42
- value: 'true',
43
- created_at: now,
44
- updated_at: now,
45
- created_by: oldSetting.created_by,
46
- updated_by: oldSetting.created_by
47
- });
48
- }
49
- }
50
-
51
- await connection('settings')
52
- .whereIn('key', ['newsletter_show_header_title', 'newsletter_show_header_icon'])
53
- .update({value: 'false'});
54
- } else {
55
- logging.info('Skipping migration of newsletter_show_header setting. Matches new defaults');
56
- }
57
-
58
- logging.info('Deleting newsletter_show_header setting');
59
- await connection('settings')
60
- .where('key', 'newsletter_show_header')
61
- .del();
62
- },
63
-
64
- async function down(connection) {
65
- logging.info('Adding newsletter_show_header setting');
66
-
67
- const oldSetting = await connection('settings')
68
- .where('key', '=', 'newsletter_show_header')
69
- .select('value')
70
- .first();
71
-
72
- const showTitle = await connection('settings')
73
- .where('key', '=', 'newsletter_show_header_title')
74
- .select(['value', 'created_by'])
75
- .first();
76
-
77
- const showIcon = await connection('settings')
78
- .where('key', '=', 'newsletter_show_header_icon')
79
- .select(['value', 'created_by'])
80
- .first();
81
-
82
- if (oldSetting) {
83
- logging.warn('Skipping rollback of newsletter_show_header setting. Already exists');
84
- } else {
85
- const [{id: ownerId} = {id: 1}] = await connection('users')
86
- .select('users.id')
87
- .innerJoin(
88
- 'roles_users',
89
- 'users.id',
90
- 'roles_users.user_id'
91
- )
92
- .where(
93
- 'roles_users.role_id',
94
- connection('roles').select('id').where('name', 'Owner')
95
- );
96
-
97
- let showHeader = 'true'; // default
98
-
99
- if (showTitle && showIcon) {
100
- showHeader = showTitle.value === 'false' && showIcon.value === 'false' ? 'false' : 'true';
101
- }
102
-
103
- const now = connection.raw('CURRENT_TIMESTAMP');
104
-
105
- await connection('settings')
106
- .insert({
107
- id: ObjectId().toHexString(),
108
- key: 'newsletter_show_header',
109
- group: 'newsletter',
110
- type: 'boolean',
111
- value: showHeader,
112
- created_at: now,
113
- updated_at: now,
114
- created_by: ownerId,
115
- updated_by: ownerId
116
- });
117
- }
118
-
119
- logging.info('Deleting newsletter_show_header_{title,icon} settings');
120
- await connection('settings')
121
- .whereIn('key', ['newsletter_show_header_title', 'newsletter_show_header_icon'])
122
- .del();
123
- }
124
- );