ghost 5.130.0 → 6.0.0-alpha.1

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 (274) hide show
  1. package/components/tryghost-i18n-6.0.0-alpha.1.tgz +0 -0
  2. package/core/boot.js +0 -2
  3. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-bO8i1M7l.mjs → CodeEditorView-CA2VVtOE.mjs} +2 -2
  4. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
  5. package/core/built/admin/assets/admin-x-settings/{index-BeD9DTp3.mjs → index-Dl3F40x5.mjs} +2 -2
  6. package/core/built/admin/assets/admin-x-settings/{index-DIak5kz8.mjs → index-KA2tjCkS.mjs} +5 -5
  7. package/core/built/admin/assets/admin-x-settings/{modals-DLPpqlUq.mjs → modals-B0zezufO.mjs} +8130 -8122
  8. package/core/built/admin/assets/{chunk.524.2443bfd380e6da0cbabd.js → chunk.524.996c1c4d269fa6a50e90.js} +7 -7
  9. package/core/built/admin/assets/{chunk.582.434476dff5ddc79ed054.js → chunk.582.75cf44e5d1b925adf16d.js} +9 -9
  10. package/core/built/admin/assets/{chunk.728.214803966b81ffdb1acd.js → chunk.728.985c45ad584b4b91ca60.js} +124 -124
  11. package/core/built/admin/assets/{ghost-5d9c65b5c4ef960a664cd664b2616dea.js → ghost-5a5b2112df68dfaf6813ce38cad16847.js} +28 -29
  12. package/core/built/admin/assets/posts/posts.js +1 -1
  13. package/core/built/admin/assets/stats/stats.js +1 -1
  14. package/core/built/admin/index.html +4 -4
  15. package/core/frontend/helpers/get.js +4 -2
  16. package/core/frontend/helpers/ghost_head.js +71 -77
  17. package/core/frontend/meta/canonical-url.js +1 -7
  18. package/core/frontend/meta/context-object.js +1 -1
  19. package/core/frontend/meta/get-meta.js +1 -4
  20. package/core/frontend/meta/og-image.js +1 -1
  21. package/core/frontend/meta/og-type.js +0 -2
  22. package/core/frontend/meta/schema.js +1 -1
  23. package/core/frontend/meta/twitter-image.js +1 -1
  24. package/core/frontend/meta/url.js +1 -12
  25. package/core/frontend/services/rendering/context.js +0 -8
  26. package/core/server/api/endpoints/index.js +0 -4
  27. package/core/server/api/endpoints/session.js +0 -9
  28. package/core/server/api/endpoints/utils/serializers/input/settings.js +0 -2
  29. package/core/server/api/endpoints/utils/serializers/input/utils/settings-filter-type-group-mapper.js +0 -1
  30. package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.js +0 -1
  31. package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-type-mapper.js +0 -1
  32. package/core/server/api/endpoints/utils/serializers/output/all.js +1 -1
  33. package/core/server/api/endpoints/utils/serializers/output/index.js +0 -4
  34. package/core/server/api/endpoints/utils/serializers/output/mappers/snippets.js +1 -5
  35. package/core/server/api/endpoints/utils/serializers/output/members.js +0 -2
  36. package/core/server/api/endpoints/utils/validators/input/index.js +0 -4
  37. package/core/server/data/importer/importers/data/Base.js +1 -3
  38. package/core/server/data/importer/importers/data/SettingsImporter.js +1 -3
  39. package/core/server/data/migrations/utils/index.js +1 -4
  40. package/core/server/data/migrations/utils/permissions.js +14 -6
  41. package/core/server/data/migrations/utils/settings.js +39 -22
  42. package/core/server/data/migrations/versions/4.47/2022-05-03-15-30-final-v4.js +2 -0
  43. package/core/server/data/migrations/versions/4.47/2022-05-04-10-03-no-op.js +6 -0
  44. package/core/server/data/migrations/versions/5.100/2024-11-06-04-45-15-add-activitypub-integration.js +4 -2
  45. package/core/server/data/migrations/versions/5.113/2025-03-07-12-24-00-add-super-editor.js +4 -2
  46. package/core/server/data/migrations/versions/5.3/2022-07-06-07-58-add-ghost-explore-integration-role.js +4 -2
  47. package/core/server/data/migrations/versions/5.3/2022-07-06-09-17-add-ghost-explore-integration.js +4 -2
  48. package/core/server/data/migrations/versions/5.3/2022-07-06-09-26-add-ghost-explore-integration-api-key.js +4 -2
  49. package/core/server/data/migrations/versions/5.40/2023-03-21-18-42-add-self-serve-integration-role.js +4 -2
  50. package/core/server/data/migrations/versions/5.40/2023-03-21-18-52-add-self-serve-integration.js +4 -2
  51. package/core/server/data/migrations/versions/5.40/2023-03-21-19-02-add-self-serve-integration-api-key.js +4 -2
  52. package/core/server/data/migrations/versions/5.63/2023-09-13-13-03-10-add-ghost-core-content-integration.js +4 -2
  53. package/core/server/data/migrations/versions/5.63/2023-09-13-13-34-11-add-ghost-core-content-integration-key.js +4 -2
  54. package/core/server/data/migrations/versions/6.0/2025-06-20-01-41-54-remove-updated-by-column.js +46 -0
  55. package/core/server/data/migrations/versions/6.0/2025-06-20-13-41-55-remove-created-by-column.js +47 -0
  56. package/core/server/data/migrations/versions/6.0/2025-06-23-09-49-25-add-missing-member-uuids.js +22 -0
  57. package/core/server/data/migrations/versions/6.0/2025-06-23-10-03-26-members-nullable-uuid.js +5 -0
  58. package/core/server/data/migrations/versions/6.0/2025-06-24-09-19-42-use-object-id-for-hardcoded-user-id.js +95 -0
  59. package/core/server/data/migrations/versions/6.0/2025-06-25-15-03-29-remove-amp-from-settings.js +6 -0
  60. package/core/server/data/migrations/versions/6.0/2025-06-30-13-59-10-remove-mail-events-table.js +3 -0
  61. package/core/server/data/migrations/versions/6.0/2025-06-30-14-00-00-update-feature-image-alt-length.js +25 -0
  62. package/core/server/data/schema/default-settings/default-settings.json +0 -13
  63. package/core/server/data/schema/fixtures/FixtureManager.js +128 -5
  64. package/core/server/data/schema/fixtures/fixtures.json +4 -6
  65. package/core/server/data/schema/fixtures/index.js +3 -1
  66. package/core/server/data/schema/schema.js +20 -65
  67. package/core/server/data/seeders/DataGenerator.js +11 -2
  68. package/core/server/data/seeders/importers/EmailsImporter.js +1 -3
  69. package/core/server/data/seeders/importers/LabelsImporter.js +1 -3
  70. package/core/server/data/seeders/importers/MembersImporter.js +0 -1
  71. package/core/server/data/seeders/importers/MembersStripeCustomersImporter.js +1 -2
  72. package/core/server/data/seeders/importers/MembersStripeCustomersSubscriptionsImporter.js +0 -1
  73. package/core/server/data/seeders/importers/PostsImporter.js +0 -1
  74. package/core/server/data/seeders/importers/RolesUsersImporter.js +6 -1
  75. package/core/server/data/seeders/importers/TagsImporter.js +1 -2
  76. package/core/server/data/seeders/importers/UsersImporter.js +1 -2
  77. package/core/server/data/tinybird/README.md +9 -14
  78. package/core/server/models/base/bookshelf.js +8 -1
  79. package/core/server/models/base/plugins/events.js +0 -28
  80. package/core/server/models/base/plugins/user-type.js +10 -36
  81. package/core/server/models/post.js +25 -10
  82. package/core/server/models/relations/authors.js +2 -2
  83. package/core/server/models/settings.js +1 -14
  84. package/core/server/models/user.js +33 -6
  85. package/core/server/services/activitypub/ActivityPubService.js +1 -2
  86. package/core/server/services/activitypub/ActivityPubService.ts +1 -2
  87. package/core/server/services/link-redirection/README.md +1 -1
  88. package/core/server/services/mentions/MentionSendingService.js +1 -1
  89. package/core/server/services/update-check/UpdateCheckService.js +18 -2
  90. package/core/server/services/url/config.js +0 -2
  91. package/core/server/web/api/app.js +4 -0
  92. package/core/server/web/api/endpoints/admin/middleware.js +8 -9
  93. package/core/server/web/api/endpoints/admin/routes.js +0 -2
  94. package/core/server/web/comments/routes.js +3 -0
  95. package/core/server/web/shared/middleware/index.js +4 -0
  96. package/core/server/web/shared/middleware/max-limit-cap.js +27 -0
  97. package/core/server/web/shared/middleware/pretty-urls.js +3 -1
  98. package/core/server/web/shared/middleware/redirect-amp-urls.js +36 -0
  99. package/core/shared/config/defaults.json +2 -0
  100. package/core/shared/config/overrides.json +1 -4
  101. package/core/shared/labs.js +5 -6
  102. package/core/shared/max-limit-cap.js +61 -0
  103. package/package.json +4 -5
  104. package/tsconfig.tsbuildinfo +1 -1
  105. package/yarn.lock +18 -107
  106. package/components/tryghost-i18n-5.130.0.tgz +0 -0
  107. package/core/built/admin/assets/img/amp-d7b72aae3315fda95921fb575dfca100.svg +0 -4
  108. package/core/frontend/apps/amp/index.js +0 -30
  109. package/core/frontend/apps/amp/lib/helpers/amp_analytics.js +0 -32
  110. package/core/frontend/apps/amp/lib/helpers/amp_components.js +0 -48
  111. package/core/frontend/apps/amp/lib/helpers/amp_content.js +0 -214
  112. package/core/frontend/apps/amp/lib/helpers/amp_style.js +0 -8
  113. package/core/frontend/apps/amp/lib/router.js +0 -95
  114. package/core/frontend/apps/amp/lib/views/amp.hbs +0 -1046
  115. package/core/frontend/meta/amp-url.js +0 -14
  116. package/core/server/api/endpoints/mail-events.js +0 -17
  117. package/core/server/api/endpoints/utils/serializers/output/mail-events.js +0 -9
  118. package/core/server/api/endpoints/utils/validators/input/mail-events.js +0 -7
  119. package/core/server/data/migrations/utils/constants.js +0 -3
  120. package/core/server/data/migrations/versions/4.0/01-update-mobiledoc.js +0 -61
  121. package/core/server/data/migrations/versions/4.0/02-add-status-column-to-members.js +0 -11
  122. package/core/server/data/migrations/versions/4.0/03-populate-status-column-for-members.js +0 -81
  123. package/core/server/data/migrations/versions/4.0/04-drop-apps-related-tables.js +0 -10
  124. package/core/server/data/migrations/versions/4.0/05-add-members-subscribe-events-table.js +0 -9
  125. package/core/server/data/migrations/versions/4.0/06-populate-members-subscribe-events-table.js +0 -53
  126. package/core/server/data/migrations/versions/4.0/07-alter-unique-constraint-for-posts-slug.js +0 -7
  127. package/core/server/data/migrations/versions/4.0/08-add-members-login-events-table.js +0 -7
  128. package/core/server/data/migrations/versions/4.0/09-add-members-email-change-events-table.js +0 -9
  129. package/core/server/data/migrations/versions/4.0/10-add-members-status-events-table.js +0 -9
  130. package/core/server/data/migrations/versions/4.0/11-add-members-paid-subscription-events-table.js +0 -12
  131. package/core/server/data/migrations/versions/4.0/12-delete-apps-related-settings-keys.js +0 -16
  132. package/core/server/data/migrations/versions/4.0/13-add-members-payment-events-table.js +0 -10
  133. package/core/server/data/migrations/versions/4.0/14-remove-orphaned-stripe-records.js +0 -36
  134. package/core/server/data/migrations/versions/4.0/15-add-frontmatter-column-to-meta.js +0 -7
  135. package/core/server/data/migrations/versions/4.0/16-refactor-slack-setting.js +0 -96
  136. package/core/server/data/migrations/versions/4.0/17-populate-members-status-events-table.js +0 -41
  137. package/core/server/data/migrations/versions/4.0/18-transform-urls-absolute-to-transform-ready.js +0 -201
  138. package/core/server/data/migrations/versions/4.0/19-remove-labs-members-setting.js +0 -10
  139. package/core/server/data/migrations/versions/4.0/20-refactor-unsplash-setting.js +0 -41
  140. package/core/server/data/migrations/versions/4.0/21-sanitize-email-batches-provider-id.js +0 -8
  141. package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +0 -87
  142. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +0 -66
  143. package/core/server/data/migrations/versions/4.0/24-add-missing-email-permissions.js +0 -36
  144. package/core/server/data/migrations/versions/4.0/25-populate-members-paid-subscription-events-table.js +0 -129
  145. package/core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js +0 -76
  146. package/core/server/data/migrations/versions/4.0/27-add-primary-key-brute-migrations-lock.js +0 -9
  147. package/core/server/data/migrations/versions/4.0/28-add-webhook-intergrations-foreign-key.js +0 -16
  148. package/core/server/data/migrations/versions/4.0/29-fix-foreign-key-for-members-stripe-customers-subscriptions.js +0 -35
  149. package/core/server/data/migrations/versions/4.0/30-set-default-accent-color.js +0 -21
  150. package/core/server/data/migrations/versions/4.1/01-fix-backup-content-permission-typo.js +0 -15
  151. package/core/server/data/migrations/versions/4.1/02-add-unique-constraint-for-member-stripe-tables.js +0 -21
  152. package/core/server/data/migrations/versions/4.11/01-add-oauth-user-data.js +0 -12
  153. package/core/server/data/migrations/versions/4.11/02-add-email-verification-required-setting.js +0 -43
  154. package/core/server/data/migrations/versions/4.12/01-add-email-only-column-to-posts-meta-table.js +0 -7
  155. package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +0 -39
  156. package/core/server/data/migrations/versions/4.13/01-add-members-stripe-connect-auth-permission-to-administrators.js +0 -6
  157. package/core/server/data/migrations/versions/4.13/02-add-members-products-events-table.js +0 -33
  158. package/core/server/data/migrations/versions/4.14/01-fix-comped-member-statuses.js +0 -73
  159. package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +0 -61
  160. package/core/server/data/migrations/versions/4.15/01-add-temp-members-analytic-events-table.js +0 -12
  161. package/core/server/data/migrations/versions/4.16/01-add-custom-theme-settings-table.js +0 -9
  162. package/core/server/data/migrations/versions/4.17/01-add-custom-theme-settings-permissions.js +0 -21
  163. package/core/server/data/migrations/versions/4.17/02-add-offers-table.js +0 -19
  164. package/core/server/data/migrations/versions/4.17/03-add-offers-permissions.js +0 -35
  165. package/core/server/data/migrations/versions/4.19/01-add-active-column-to-offers.js +0 -7
  166. package/core/server/data/migrations/versions/4.19/02-add-offer-redemptions-table.js +0 -8
  167. package/core/server/data/migrations/versions/4.2/01-fix-incorrect-mrr-delta-events.js +0 -13
  168. package/core/server/data/migrations/versions/4.20/01-remove-offer-redemptions-table.js +0 -19
  169. package/core/server/data/migrations/versions/4.20/02-remove-offers-table.js +0 -30
  170. package/core/server/data/migrations/versions/4.20/03-add-offers-table.js +0 -21
  171. package/core/server/data/migrations/versions/4.20/04-add-offer-redemptions-table.js +0 -9
  172. package/core/server/data/migrations/versions/4.20/05-remove-not-null-constraint-from-portal-title.js +0 -44
  173. package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +0 -8
  174. package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +0 -39
  175. package/core/server/data/migrations/versions/4.23/01-truncate-offer-names.js +0 -59
  176. package/core/server/data/migrations/versions/4.3/01-add-products-table.js +0 -9
  177. package/core/server/data/migrations/versions/4.3/02-add-members-products-table.js +0 -8
  178. package/core/server/data/migrations/versions/4.3/03-add-default-product.js +0 -39
  179. package/core/server/data/migrations/versions/4.3/04-attach-members-to-product.js +0 -50
  180. package/core/server/data/migrations/versions/4.3/05-add-stripe-products-table.js +0 -9
  181. package/core/server/data/migrations/versions/4.3/06-add-stripe-prices-table.js +0 -15
  182. package/core/server/data/migrations/versions/4.3/07-add-products-permissions.js +0 -29
  183. package/core/server/data/migrations/versions/4.3/08-migrate-members-signup-setting.js +0 -109
  184. package/core/server/data/migrations/versions/4.3/09-add-price-id-column-to-subscriptions-table.js +0 -10
  185. package/core/server/data/migrations/versions/4.3/10-populate-stripe-price-id-in-subscriptions.js +0 -20
  186. package/core/server/data/migrations/versions/4.33/2022-01-14-11-50-add-type-column-to-products.js +0 -12
  187. package/core/server/data/migrations/versions/4.33/2022-01-14-11-51-add-default-free-tier.js +0 -40
  188. package/core/server/data/migrations/versions/4.33/2022-01-18-09-07-remove-duplicate-offer-redemptions.js +0 -46
  189. package/core/server/data/migrations/versions/4.33/2022-01-19-10-43-add-active-column-to-products-table.js +0 -7
  190. package/core/server/data/migrations/versions/4.34/2022-01-25-13-53-add-welcome-page-url-column-to-products.js +0 -7
  191. package/core/server/data/migrations/versions/4.35/2022-01-20-05-55-add-post-products-table.js +0 -8
  192. package/core/server/data/migrations/versions/4.35/2022-01-30-15-17-set-welcome-page-url-from-settings.js +0 -45
  193. package/core/server/data/migrations/versions/4.35/2022-02-01-11-48-update-email-recipient-filter-column-type.js +0 -19
  194. package/core/server/data/migrations/versions/4.35/2022-02-01-12-03-update-recipient-filter-column-type.js +0 -19
  195. package/core/server/data/migrations/versions/4.35/2022-02-02-10-38-add-default-content-visibility-tiers-setting.js +0 -8
  196. package/core/server/data/migrations/versions/4.35/2022-02-02-13-10-transform-specific-tiers-default-content-visibility.js +0 -147
  197. package/core/server/data/migrations/versions/4.35/2022-02-04-04-34-populate-empty-portal-products.js +0 -60
  198. package/core/server/data/migrations/versions/4.36/2022-02-07-14-34-add-last-seen-at-column-to-members.js +0 -10
  199. package/core/server/data/migrations/versions/4.37/2022-02-21-09-53-backfill-members-last-seen-at-column.js +0 -32
  200. package/core/server/data/migrations/versions/4.38/2022-03-01-08-46-add-visibility-to-tiers.js +0 -11
  201. package/core/server/data/migrations/versions/4.38/2022-03-03-16-12-add-visibility-to-tiers.js +0 -8
  202. package/core/server/data/migrations/versions/4.38/2022-03-03-16-17-drop-tiers-visible-column.js +0 -7
  203. package/core/server/data/migrations/versions/4.39/2022-03-07-10-57-update-free-products-visibility-column.js +0 -66
  204. package/core/server/data/migrations/versions/4.39/2022-03-07-10-57-update-products-visibility-column.js +0 -36
  205. package/core/server/data/migrations/versions/4.4/01-restore-free-members-signup-setting-from-backup.js +0 -99
  206. package/core/server/data/migrations/versions/4.4/02-migrate-members-signup-access.js +0 -126
  207. package/core/server/data/migrations/versions/4.40/2022-03-07-14-37-add-members-cancel-events-table.js +0 -8
  208. package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-offers-admin-integration-permission-roles.js +0 -23
  209. package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-tiers-admin-integration-permission-roles.js +0 -20
  210. package/core/server/data/migrations/versions/4.42/2022-03-21-17-17-add.js +0 -25
  211. package/core/server/data/migrations/versions/4.42/2022-03-30-15-44-add-newsletter-permissions.js +0 -28
  212. package/core/server/data/migrations/versions/4.43/2022-03-28-19-26-recreate-newsletter-table.js +0 -29
  213. package/core/server/data/migrations/versions/4.43/2022-03-29-14-45-add-members-newsletters-table.js +0 -7
  214. package/core/server/data/migrations/versions/4.43/2022-04-01-10-13-add-post-newsletter-relation.js +0 -108
  215. package/core/server/data/migrations/versions/4.43/2022-04-06-09-47-add-type-column-to-paid-subscription-events.js +0 -7
  216. package/core/server/data/migrations/versions/4.43/2022-04-06-14-56-add-email-newsletter-relation.js +0 -8
  217. package/core/server/data/migrations/versions/4.43/2022-04-08-10-45-add-subscription-id-to-mrr-events.js +0 -7
  218. package/core/server/data/migrations/versions/4.44/2022-04-06-15-22-populate-type-column-for-paid-subscription-events.js +0 -21
  219. package/core/server/data/migrations/versions/4.44/2022-04-08-11-54-add-cancelled-events.js +0 -51
  220. package/core/server/data/migrations/versions/4.44/2022-04-11-08-24-add-newsletter-permissions.js +0 -33
  221. package/core/server/data/migrations/versions/4.44/2022-04-11-10-54-add-mrr-to-subscriptions.js +0 -8
  222. package/core/server/data/migrations/versions/4.44/2022-04-12-07-33-fill-mrr.js +0 -29
  223. package/core/server/data/migrations/versions/4.44/2022-04-13-12-00-remove-newsletter-sender-name-not-null-constraint.js +0 -33
  224. package/core/server/data/migrations/versions/4.44/2022-04-15-07-53-add-offer-id-to-subscriptions.js +0 -9
  225. package/core/server/data/migrations/versions/4.45/2022-04-19-12-23-backfill-subscriptions-offers.js +0 -60
  226. package/core/server/data/migrations/versions/4.45/2022-04-20-11-25-add-newsletter-read-permission.js +0 -9
  227. package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +0 -8
  228. package/core/server/data/migrations/versions/4.46/2022-04-13-12-00-add-created-at-newsletters.js +0 -6
  229. package/core/server/data/migrations/versions/4.46/2022-04-13-12-01-add-updated-at-newsletters.js +0 -6
  230. package/core/server/data/migrations/versions/4.46/2022-04-13-12-02-fill-created-at-newsletters.js +0 -19
  231. package/core/server/data/migrations/versions/4.46/2022-04-13-12-03-drop-nullable-created-at-newsletters.js +0 -3
  232. package/core/server/data/migrations/versions/4.46/2022-04-13-12-08-newsletters-show-header-name.js +0 -7
  233. package/core/server/data/migrations/versions/4.46/2022-04-13-12-57-add-uuid-column-to-newsletters.js +0 -8
  234. package/core/server/data/migrations/versions/4.46/2022-04-13-12-58-fill-uuid-for-newsletters.js +0 -19
  235. package/core/server/data/migrations/versions/4.46/2022-04-13-12-59-drop-nullable-uuid-newsletters.js +0 -3
  236. package/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js +0 -92
  237. package/core/server/data/migrations/versions/4.46/2022-04-20-08-39-map-subscribers-to-default-newsletter.js +0 -66
  238. package/core/server/data/migrations/versions/4.46/2022-04-22-07-43-add-newsletter-id-to-subscribe-events.js +0 -9
  239. package/core/server/data/migrations/versions/4.46/2022-04-27-07-59-set-newsletter-id-subscribe-events.js +0 -31
  240. package/core/server/data/migrations/versions/4.47/2022-05-03-15-30-update-newsletter-sending-options.js +0 -34
  241. package/core/server/data/migrations/versions/4.47/2022-05-04-10-03-transform-newsletter-header-image.js +0 -26
  242. package/core/server/data/migrations/versions/4.5/01-add-stripe-price-description-column.js +0 -7
  243. package/core/server/data/migrations/versions/4.5/02-add-product-description-column.js +0 -7
  244. package/core/server/data/migrations/versions/4.5/03-give-label-read-permissions-to-editors.js +0 -14
  245. package/core/server/data/migrations/versions/4.5/04-remove-unique-constraint-from-product-name.js +0 -13
  246. package/core/server/data/migrations/versions/4.5/05-rename-default-product-to-site-title.js +0 -38
  247. package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +0 -47
  248. package/core/server/data/migrations/versions/4.7/01-add-monthly-price-column-to-products.js +0 -7
  249. package/core/server/data/migrations/versions/4.7/02-add-yearly-price-column-to-products.js +0 -7
  250. package/core/server/data/migrations/versions/4.7/03-add-labs-setting.js +0 -42
  251. package/core/server/data/migrations/versions/4.8/01-add-feature-image-alt-column-to-posts-meta.js +0 -7
  252. package/core/server/data/migrations/versions/4.8/02-add-feature-image-caption-column-to-posts-meta.js +0 -7
  253. package/core/server/data/migrations/versions/4.8/03-add-default-product-portal-products.js +0 -69
  254. package/core/server/data/migrations/versions/4.8/04-migrate-show-newsletter-header-setting.js +0 -124
  255. package/core/server/data/migrations/versions/4.9/01-add-reset-all-passwords-permission.js +0 -11
  256. package/core/server/data/migrations/versions/4.9/02-add-benefits-table.js +0 -9
  257. package/core/server/data/migrations/versions/4.9/03-add-products-benefits-table.js +0 -8
  258. package/core/server/data/migrations/versions/4.9/04-add-member-segment-to-email-batches.js +0 -7
  259. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +0 -87
  260. package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +0 -47
  261. package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +0 -39
  262. package/core/server/models/mail-event.js +0 -12
  263. package/core/server/services/mail-events/BookshelfMailEventRepository.js +0 -40
  264. package/core/server/services/mail-events/InMemoryMailEventRepository.js +0 -10
  265. package/core/server/services/mail-events/InMemoryMailEventRepository.ts +0 -8
  266. package/core/server/services/mail-events/MailEvent.js +0 -20
  267. package/core/server/services/mail-events/MailEvent.ts +0 -10
  268. package/core/server/services/mail-events/MailEventRepository.js +0 -2
  269. package/core/server/services/mail-events/MailEventRepository.ts +0 -5
  270. package/core/server/services/mail-events/MailEventService.js +0 -124
  271. package/core/server/services/mail-events/MailEventService.ts +0 -169
  272. package/core/server/services/mail-events/index.js +0 -21
  273. package/core/server/services/mail-events/libraries.d.ts +0 -2
  274. /package/core/built/admin/assets/{chunk.728.214803966b81ffdb1acd.js.LICENSE.txt → chunk.728.985c45ad584b4b91ca60.js.LICENSE.txt} +0 -0
@@ -722,7 +722,7 @@
722
722
  "name": "User",
723
723
  "entries": [
724
724
  {
725
- "id": 1,
725
+ "id": "__OWNER_USER_ID__",
726
726
  "name": "Ghost",
727
727
  "email": "ghost@example.com",
728
728
  "status": "inactive",
@@ -746,8 +746,7 @@
746
746
  "type": "post",
747
747
  "status": "published",
748
748
  "visibility": "public",
749
- "created_by": "1",
750
- "published_by": "1"
749
+ "published_by": "__OWNER_USER_ID__"
751
750
  },
752
751
  {
753
752
  "title": "About this site",
@@ -757,8 +756,7 @@
757
756
  "type": "page",
758
757
  "status": "published",
759
758
  "visibility": "public",
760
- "created_by": "1",
761
- "published_by": "1"
759
+ "published_by": "__OWNER_USER_ID__"
762
760
  }
763
761
  ]
764
762
  },
@@ -1023,7 +1021,7 @@
1023
1021
  "match": "name"
1024
1022
  },
1025
1023
  "entries": {
1026
- "1": ["Owner"]
1024
+ "__OWNER_USER_ID__": ["Owner"]
1027
1025
  }
1028
1026
  }
1029
1027
  ]
@@ -5,4 +5,6 @@ const fixturePath = config.get('paths').fixtures;
5
5
  const fixtures = require(fixturePath);
6
6
 
7
7
  module.exports.FixtureManager = FixtureManager;
8
- module.exports.fixtureManager = new FixtureManager(fixtures);
8
+ module.exports.fixtureManager = new FixtureManager(fixtures, {
9
+ __OWNER_USER_ID__: models => models.User.generateId()
10
+ });
@@ -1,9 +1,10 @@
1
1
  /* String Column Sizes Information
2
2
  * (From: https://github.com/TryGhost/Ghost/pull/7932)
3
- *
3
+ * New/Updated column maxlengths should meet these guidlines
4
+ *
4
5
  * Small strings = length 50
5
6
  * Medium strings = length 191
6
- * Large strings = length 1000-2000
7
+ * Large strings = length 2000 (use soft limits via validation for 191-2000)
7
8
  * Text = length 65535 (64 KiB)
8
9
  * Long text = length 1,000,000,000
9
10
  */
@@ -85,14 +86,7 @@ module.exports = {
85
86
  nullable: false
86
87
  },
87
88
  created_at: {type: 'dateTime', nullable: false},
88
- /**
89
- * @deprecated: https://github.com/TryGhost/Ghost/issues/10286
90
- *
91
- * This is valid for all x_by fields.
92
- */
93
- created_by: {type: 'string', maxlength: 24, nullable: false},
94
89
  updated_at: {type: 'dateTime', nullable: true, index: true},
95
- updated_by: {type: 'string', maxlength: 24, nullable: true},
96
90
  published_at: {type: 'dateTime', nullable: true, index: true},
97
91
  published_by: {type: 'string', maxlength: 24, nullable: true},
98
92
  custom_excerpt: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 300}}},
@@ -122,7 +116,7 @@ module.exports = {
122
116
  meta_description: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 500}}},
123
117
  email_subject: {type: 'string', maxlength: 300, nullable: true},
124
118
  frontmatter: {type: 'text', maxlength: 65535, nullable: true},
125
- feature_image_alt: {type: 'string', maxlength: 191, nullable: true},
119
+ feature_image_alt: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 191}}},
126
120
  feature_image_caption: {type: 'text', maxlength: 65535, nullable: true},
127
121
  email_only: {type: 'boolean', nullable: false, defaultTo: false}
128
122
  },
@@ -188,9 +182,7 @@ module.exports = {
188
182
  milestone_notifications: {type: 'boolean', nullable: false, defaultTo: true},
189
183
  donation_notifications: {type: 'boolean', nullable: false, defaultTo: true},
190
184
  created_at: {type: 'dateTime', nullable: false},
191
- created_by: {type: 'string', maxlength: 24, nullable: false},
192
- updated_at: {type: 'dateTime', nullable: true},
193
- updated_by: {type: 'string', maxlength: 24, nullable: true}
185
+ updated_at: {type: 'dateTime', nullable: true}
194
186
  },
195
187
  posts_authors: {
196
188
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -203,9 +195,7 @@ module.exports = {
203
195
  name: {type: 'string', maxlength: 50, nullable: false, unique: true},
204
196
  description: {type: 'string', maxlength: 2000, nullable: true},
205
197
  created_at: {type: 'dateTime', nullable: false},
206
- created_by: {type: 'string', maxlength: 24, nullable: false},
207
- updated_at: {type: 'dateTime', nullable: true},
208
- updated_by: {type: 'string', maxlength: 24, nullable: true}
198
+ updated_at: {type: 'dateTime', nullable: true}
209
199
  },
210
200
  roles_users: {
211
201
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -219,9 +209,7 @@ module.exports = {
219
209
  action_type: {type: 'string', maxlength: 50, nullable: false},
220
210
  object_id: {type: 'string', maxlength: 24, nullable: true},
221
211
  created_at: {type: 'dateTime', nullable: false},
222
- created_by: {type: 'string', maxlength: 24, nullable: false},
223
- updated_at: {type: 'dateTime', nullable: true},
224
- updated_by: {type: 'string', maxlength: 24, nullable: true}
212
+ updated_at: {type: 'dateTime', nullable: true}
225
213
  },
226
214
  permissions_users: {
227
215
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -242,7 +230,6 @@ module.exports = {
242
230
  defaultTo: 'core',
243
231
  validations: {
244
232
  isIn: [[
245
- 'amp',
246
233
  'core',
247
234
  'email',
248
235
  'labs',
@@ -276,9 +263,7 @@ module.exports = {
276
263
  },
277
264
  flags: {type: 'string', maxlength: 50, nullable: true},
278
265
  created_at: {type: 'dateTime', nullable: false},
279
- created_by: {type: 'string', maxlength: 24, nullable: false},
280
- updated_at: {type: 'dateTime', nullable: true},
281
- updated_by: {type: 'string', maxlength: 24, nullable: true}
266
+ updated_at: {type: 'dateTime', nullable: true}
282
267
  },
283
268
  tags: {
284
269
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -307,9 +292,7 @@ module.exports = {
307
292
  canonical_url: {type: 'string', maxlength: 2000, nullable: true},
308
293
  accent_color: {type: 'string', maxlength: 50, nullable: true},
309
294
  created_at: {type: 'dateTime', nullable: false},
310
- created_by: {type: 'string', maxlength: 24, nullable: false},
311
- updated_at: {type: 'dateTime', nullable: true},
312
- updated_by: {type: 'string', maxlength: 24, nullable: true}
295
+ updated_at: {type: 'dateTime', nullable: true}
313
296
  },
314
297
  posts_tags: {
315
298
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -334,9 +317,7 @@ module.exports = {
334
317
  email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
335
318
  expires: {type: 'bigInteger', nullable: false},
336
319
  created_at: {type: 'dateTime', nullable: false},
337
- created_by: {type: 'string', maxlength: 24, nullable: false},
338
- updated_at: {type: 'dateTime', nullable: true},
339
- updated_by: {type: 'string', maxlength: 24, nullable: true}
320
+ updated_at: {type: 'dateTime', nullable: true}
340
321
  },
341
322
  brute: {
342
323
  key: {type: 'string', maxlength: 191, primary: true},
@@ -367,9 +348,7 @@ module.exports = {
367
348
  icon_image: {type: 'string', maxlength: 2000, nullable: true},
368
349
  description: {type: 'string', maxlength: 2000, nullable: true},
369
350
  created_at: {type: 'dateTime', nullable: false},
370
- created_by: {type: 'string', maxlength: 24, nullable: false},
371
- updated_at: {type: 'dateTime', nullable: true},
372
- updated_by: {type: 'string', maxlength: 24, nullable: true}
351
+ updated_at: {type: 'dateTime', nullable: true}
373
352
  },
374
353
  webhooks: {
375
354
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -387,9 +366,7 @@ module.exports = {
387
366
  last_triggered_status: {type: 'string', maxlength: 50, nullable: true},
388
367
  last_triggered_error: {type: 'string', maxlength: 50, nullable: true},
389
368
  created_at: {type: 'dateTime', nullable: false},
390
- created_by: {type: 'string', maxlength: 24, nullable: false},
391
- updated_at: {type: 'dateTime', nullable: true},
392
- updated_by: {type: 'string', maxlength: 24, nullable: true}
369
+ updated_at: {type: 'dateTime', nullable: true}
393
370
  },
394
371
  api_keys: {
395
372
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -413,9 +390,7 @@ module.exports = {
413
390
  last_seen_at: {type: 'dateTime', nullable: true},
414
391
  last_seen_version: {type: 'string', maxlength: 50, nullable: true},
415
392
  created_at: {type: 'dateTime', nullable: false},
416
- created_by: {type: 'string', maxlength: 24, nullable: false},
417
- updated_at: {type: 'dateTime', nullable: true},
418
- updated_by: {type: 'string', maxlength: 24, nullable: true}
393
+ updated_at: {type: 'dateTime', nullable: true}
419
394
  },
420
395
  mobiledoc_revisions: {
421
396
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -435,13 +410,13 @@ module.exports = {
435
410
  post_status: {type: 'string', maxlength: 50, nullable: true, validations: {isIn: [['draft', 'published', 'scheduled', 'sent']]}},
436
411
  reason: {type: 'string', maxlength: 50, nullable: true},
437
412
  feature_image: {type: 'string', maxlength: 2000, nullable: true},
438
- feature_image_alt: {type: 'string', maxlength: 191, nullable: true},
413
+ feature_image_alt: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 191}}},
439
414
  feature_image_caption: {type: 'text', maxlength: 65535, nullable: true},
440
415
  custom_excerpt: {type: 'string', maxlength: 2000, nullable: true, validations: {isLength: {max: 300}}}
441
416
  },
442
417
  members: {
443
418
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
444
- uuid: {type: 'string', maxlength: 36, nullable: true, unique: true, validations: {isUUID: true}},
419
+ uuid: {type: 'string', maxlength: 36, nullable: false, unique: true, validations: {isUUID: true}},
445
420
  transient_id: {type: 'string', maxlength: 191, nullable: false, unique: true},
446
421
  email: {type: 'string', maxlength: 191, nullable: false, unique: true, validations: {isEmail: true}},
447
422
  status: {
@@ -461,9 +436,7 @@ module.exports = {
461
436
  last_seen_at: {type: 'dateTime', nullable: true},
462
437
  last_commented_at: {type: 'dateTime', nullable: true},
463
438
  created_at: {type: 'dateTime', nullable: false},
464
- created_by: {type: 'string', maxlength: 24, nullable: false},
465
439
  updated_at: {type: 'dateTime', nullable: true},
466
- updated_by: {type: 'string', maxlength: 24, nullable: true},
467
440
  '@@INDEXES@@': [
468
441
  ['email_disabled']
469
442
  ]
@@ -646,9 +619,7 @@ module.exports = {
646
619
  name: {type: 'string', maxlength: 191, nullable: false, unique: true},
647
620
  slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
648
621
  created_at: {type: 'dateTime', nullable: false},
649
- created_by: {type: 'string', maxlength: 24, nullable: false},
650
- updated_at: {type: 'dateTime', nullable: true},
651
- updated_by: {type: 'string', maxlength: 24, nullable: true}
622
+ updated_at: {type: 'dateTime', nullable: true}
652
623
  },
653
624
  members_labels: {
654
625
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -663,9 +634,7 @@ module.exports = {
663
634
  name: {type: 'string', maxlength: 191, nullable: true},
664
635
  email: {type: 'string', maxlength: 191, nullable: true},
665
636
  created_at: {type: 'dateTime', nullable: false},
666
- created_by: {type: 'string', maxlength: 24, nullable: false},
667
- updated_at: {type: 'dateTime', nullable: true},
668
- updated_by: {type: 'string', maxlength: 24, nullable: true}
637
+ updated_at: {type: 'dateTime', nullable: true}
669
638
  },
670
639
  subscriptions: {
671
640
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -717,9 +686,7 @@ module.exports = {
717
686
  start_date: {type: 'dateTime', nullable: false},
718
687
  default_payment_card_last4: {type: 'string', maxlength: 4, nullable: true},
719
688
  created_at: {type: 'dateTime', nullable: false},
720
- created_by: {type: 'string', maxlength: 24, nullable: false},
721
689
  updated_at: {type: 'dateTime', nullable: true},
722
- updated_by: {type: 'string', maxlength: 24, nullable: true},
723
690
  mrr: {type: 'integer', unsigned: true, nullable: false, defaultTo: 0},
724
691
  offer_id: {type: 'string', maxlength: 24, nullable: true, unique: false, references: 'offers.id'},
725
692
  trial_start_at: {type: 'dateTime', nullable: true},
@@ -869,9 +836,7 @@ module.exports = {
869
836
  submitted_at: {type: 'dateTime', nullable: false},
870
837
  newsletter_id: {type: 'string', maxlength: 24, nullable: true, references: 'newsletters.id'},
871
838
  created_at: {type: 'dateTime', nullable: false},
872
- created_by: {type: 'string', maxlength: 24, nullable: false},
873
- updated_at: {type: 'dateTime', nullable: true},
874
- updated_by: {type: 'string', maxlength: 24, nullable: true}
839
+ updated_at: {type: 'dateTime', nullable: true}
875
840
  },
876
841
  email_batches: {
877
842
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -935,8 +900,7 @@ module.exports = {
935
900
  created_at: {type: 'dateTime', nullable: false},
936
901
  updated_at: {type: 'dateTime', nullable: true},
937
902
  first_used_at: {type: 'dateTime', nullable: true},
938
- used_count: {type: 'integer', nullable: false, unsigned: true, defaultTo: 0},
939
- created_by: {type: 'string', maxlength: 24, nullable: false}
903
+ used_count: {type: 'integer', nullable: false, unsigned: true, defaultTo: 0}
940
904
  },
941
905
  snippets: {
942
906
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -944,9 +908,7 @@ module.exports = {
944
908
  mobiledoc: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: false},
945
909
  lexical: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true},
946
910
  created_at: {type: 'dateTime', nullable: false},
947
- created_by: {type: 'string', maxlength: 24, nullable: false},
948
- updated_at: {type: 'dateTime', nullable: true},
949
- updated_by: {type: 'string', maxlength: 24, nullable: true}
911
+ updated_at: {type: 'dateTime', nullable: true}
950
912
  },
951
913
  custom_theme_settings: {
952
914
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
@@ -1087,13 +1049,6 @@ module.exports = {
1087
1049
  created_at: {type: 'dateTime', nullable: false},
1088
1050
  email_sent_at: {type: 'dateTime', nullable: true}
1089
1051
  },
1090
- temp_mail_events: {
1091
- id: {type: 'string', maxlength: 100, nullable: false, primary: true},
1092
- type: {type: 'string', maxlength: 50, nullable: false},
1093
- message_id: {type: 'string', maxlength: 150, nullable: false},
1094
- recipient: {type: 'string', maxlength: 191, nullable: false},
1095
- occurred_at: {type: 'dateTime', nullable: false}
1096
- },
1097
1052
  collections: {
1098
1053
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
1099
1054
  title: {type: 'string', maxlength: 191, nullable: false},
@@ -88,6 +88,15 @@ class DataGenerator {
88
88
  async clearData(transaction) {
89
89
  const tables = this.tableList.map(t => t.name).reverse();
90
90
 
91
+ const ownerUser = await transaction('roles_users')
92
+ .join('roles', 'roles.id', 'roles_users.role_id')
93
+ .where('roles.name', 'Owner')
94
+ .first();
95
+
96
+ if (!ownerUser) {
97
+ this.logger.warn('Owner user not found, selective user clearing will not be possible');
98
+ }
99
+
91
100
  // TODO: Remove this once we import posts_meta
92
101
  tables.unshift('posts_meta');
93
102
 
@@ -96,10 +105,10 @@ class DataGenerator {
96
105
  this.logger.debug(`Clearing table ${table}`);
97
106
 
98
107
  if (table === 'roles_users') {
99
- await transaction(table).del().whereNot('user_id', '1');
108
+ await transaction(table).del().whereNot('user_id', ownerUser?.user_id || null);
100
109
  } else if (table === 'users') {
101
110
  // Avoid deleting the admin user
102
- await transaction(table).del().whereNot('id', '1');
111
+ await transaction(table).del().whereNot('id', ownerUser?.user_id || null);
103
112
  } else {
104
113
  await transaction(table).truncate();
105
114
  }
@@ -89,9 +89,7 @@ class EmailsImporter extends TableImporter {
89
89
  submitted_at: dateToDatabaseString(timestamp),
90
90
  newsletter_id: newsletter.id,
91
91
  created_at: dateToDatabaseString(timestamp),
92
- created_by: 'unused',
93
- updated_at: dateToDatabaseString(timestamp),
94
- updated_by: 'unused'
92
+ updated_at: dateToDatabaseString(timestamp)
95
93
  };
96
94
  }
97
95
  }
@@ -31,9 +31,7 @@ class LabelsImporter extends TableImporter {
31
31
  name: name,
32
32
  slug: `${slugify(name)}`,
33
33
  created_at: dateToDatabaseString(blogStartDate),
34
- created_by: '1',
35
- updated_at: dateToDatabaseString(blogStartDate),
36
- updated_by: '1'
34
+ updated_at: dateToDatabaseString(blogStartDate)
37
35
  };
38
36
  }
39
37
  }
@@ -102,7 +102,6 @@ class MembersImporter extends TableImporter {
102
102
  // 40% of users logged in within a week, 60% sometime since registering
103
103
  last_seen_at: luck(40) ? dateToDatabaseString(faker.date.recent(7)) : dateToDatabaseString(faker.date.between(timestamp, new Date())),
104
104
  created_at: dateToDatabaseString(timestamp),
105
- created_by: id,
106
105
  updated_at: dateToDatabaseString(timestamp)
107
106
  };
108
107
  }
@@ -51,8 +51,7 @@ class MembersStripeCustomersImporter extends TableImporter {
51
51
  })}`,
52
52
  name: this.model.name,
53
53
  email: this.model.email,
54
- created_at: this.model.created_at,
55
- created_by: 'unused'
54
+ created_at: this.model.created_at
56
55
  };
57
56
  }
58
57
  }
@@ -237,7 +237,6 @@ class MembersStripeCustomersSubscriptionsImporter extends TableImporter {
237
237
  stripe_price_id: stripePrice.stripe_price_id,
238
238
  start_date: dateToDatabaseString(startDate),
239
239
  created_at: dateToDatabaseString(startDate),
240
- created_by: 'unused',
241
240
  mrr,
242
241
  plan_id: stripeProduct.stripe_product_id,
243
242
  plan_nickname: `${ghostProduct.name} - ${stripePrice.nickname}`,
@@ -53,7 +53,6 @@ class PostsImporter extends TableImporter {
53
53
  return {
54
54
  id: this.fastFakeObjectId(),
55
55
  created_at: dateToDatabaseString(timestamp),
56
- created_by: '1',
57
56
  updated_at: dateToDatabaseString(timestamp),
58
57
  published_at: status === 'published' ? dateToDatabaseString(timestamp) : status === 'scheduled' ? dateToDatabaseString(faker.date.soon(5, timestamp)) : null,
59
58
  uuid: faker.datatype.uuid(),
@@ -14,7 +14,12 @@ class RolesUsersImporter extends TableImporter {
14
14
  * Ignore overriden quantity for 1:1 relationship
15
15
  */
16
16
  async import() {
17
- const users = await this.transaction.select('id').from('users').whereNot('id', 1);
17
+ const ownerUser = await this.transaction('roles_users')
18
+ .join('roles', 'roles.id', 'roles_users.role_id')
19
+ .where('roles.name', 'Owner')
20
+ .first();
21
+
22
+ const users = await this.transaction.select('id').from('users').whereNot('id', ownerUser?.user_id || null);
18
23
  this.roles = await this.transaction.select('id', 'name').from('roles');
19
24
 
20
25
  await this.importForEach(users, 1);
@@ -32,8 +32,7 @@ class TagsImporter extends TableImporter {
32
32
  name: name,
33
33
  slug: slugify(name),
34
34
  description: faker.lorem.sentence(),
35
- created_at: dateToDatabaseString(faker.date.between(threeYearsAgo, twoYearsAgo)),
36
- created_by: this.users[faker.datatype.number(this.users.length - 1)].id
35
+ created_at: dateToDatabaseString(faker.date.between(threeYearsAgo, twoYearsAgo))
37
36
  };
38
37
  }
39
38
  }
@@ -22,8 +22,7 @@ class UsersImporter extends TableImporter {
22
22
  password: await security.password.hash(faker.color.human()),
23
23
  email: faker.internet.email(name),
24
24
  profile_image: faker.internet.avatar(),
25
- created_at: dateToDatabaseString(faker.date.between(new Date(2016, 0), new Date())),
26
- created_by: 'unused'
25
+ created_at: dateToDatabaseString(faker.date.between(new Date(2016, 0), new Date()))
27
26
  };
28
27
  }
29
28
  }
@@ -31,7 +31,7 @@ with the following information.
31
31
 
32
32
  ### Config
33
33
  Sample config:
34
- ```json
34
+ ```jsonc
35
35
  {
36
36
  "someOtherConfigurationForEmail": {
37
37
  "transport": "SMTP",
@@ -40,25 +40,20 @@ Sample config:
40
40
  }
41
41
  },
42
42
  "tinybird": {
43
+ "workspaceId": "workspace-id-from-tinybird",
44
+ "adminToken": "admin-token-from-tinybird",
43
45
  "tracker": {
44
- "endpoint": "https://e.ghost.org/tb/web_analytics",
45
- "token": "xxxxx",
46
- "datasource": "analytics_events",
47
- "local": {
48
- "enabled": true,
49
- "token": "xxxxx",
50
- "endpoint": "http://localhost:7181/v0/events",
51
- "datasource": "analytics_events"
52
- }
46
+ // -- needs to be present, and required Traffic Analytics service running with correct setup
47
+ "endpoint": "http://localhost:3000/tb/web_analytics"
53
48
  },
54
49
  "stats": {
50
+ // -- optional override for site uuid
51
+ // "id": "106a623d-9792-4b63-acde-4a0c28ead3dc",
55
52
  "endpoint": "https://api.tinybird.co",
56
- "token": "xxxxx",
53
+ // -- tinybird local configuration (optional)
57
54
  "local": {
58
55
  "enabled": true,
59
- "token": "xxxxx",
60
- "endpoint": "http://localhost:7181",
61
- "datasource": "analytics_events"
56
+ "token": "local-stats-or-admin-token",
62
57
  }
63
58
  }
64
59
  }
@@ -54,7 +54,14 @@ ghostBookshelf.plugin(require('./plugins/bulk-operations'));
54
54
 
55
55
  ghostBookshelf.plugin(require('./plugins/filtered-collection'));
56
56
 
57
- ghostBookshelf.plugin(require('./plugins/user-type'));
57
+ ghostBookshelf.plugin(require('./plugins/user-type'), {
58
+ resolveIntegrationUserId: function resolveIntegrationUserId(options) {
59
+ return ghostBookshelf.model('User').getOwnerId(options);
60
+ },
61
+ resolveInternalUserId: function resolveInternalUserId(options) {
62
+ return ghostBookshelf.model('User').getOwnerId(options);
63
+ }
64
+ });
58
65
 
59
66
  ghostBookshelf.plugin(require('./plugins/data-manipulation'));
60
67
 
@@ -138,26 +138,12 @@ module.exports = function (Bookshelf) {
138
138
 
139
139
  /**
140
140
  * Adding resources implies setting these properties on the server side
141
- * - set `created_by` based on the context
142
- * - set `updated_by` based on the context
143
141
  * - the bookshelf `timestamps` plugin sets `created_at` and `updated_at`
144
142
  * - if plugin is disabled (e.g. import) we have a fallback condition
145
143
  *
146
144
  * Exceptions: internal context or importing
147
145
  */
148
146
  onCreating: function onCreating(model, attr, options) {
149
- if (Object.prototype.hasOwnProperty.call(schema.tables[this.tableName], 'created_by')) {
150
- if (!options.importing || (options.importing && !this.get('created_by'))) {
151
- this.set('created_by', String(this.contextUser(options)));
152
- }
153
- }
154
-
155
- if (Object.prototype.hasOwnProperty.call(schema.tables[this.tableName], 'updated_by')) {
156
- if (!options.importing) {
157
- this.set('updated_by', String(this.contextUser(options)));
158
- }
159
- }
160
-
161
147
  if (Object.prototype.hasOwnProperty.call(schema.tables[this.tableName], 'created_at')) {
162
148
  if (!model.get('created_at')) {
163
149
  model.set('created_at', new Date());
@@ -199,9 +185,7 @@ module.exports = function (Bookshelf) {
199
185
 
200
186
  /**
201
187
  * Changing resources implies setting these properties on the server side
202
- * - set `updated_by` based on the context
203
188
  * - ensure `created_at` never changes
204
- * - ensure `created_by` never changes
205
189
  * - the bookshelf `timestamps` plugin sets `updated_at` automatically
206
190
  *
207
191
  * Exceptions:
@@ -216,24 +200,12 @@ module.exports = function (Bookshelf) {
216
200
  model.changed = _.omit(model.changed, this.relationships);
217
201
  }
218
202
 
219
- if (Object.prototype.hasOwnProperty.call(schema.tables[this.tableName], 'updated_by')) {
220
- if (!options.importing && !options.migrating) {
221
- this.set('updated_by', String(this.contextUser(options)));
222
- }
223
- }
224
-
225
203
  if (options && options.context && !options.context.internal && !options.importing) {
226
204
  if (Object.prototype.hasOwnProperty.call(schema.tables[this.tableName], 'created_at')) {
227
205
  if (model.hasDateChanged('created_at', {beforeWrite: true})) {
228
206
  model.set('created_at', this.previous('created_at'));
229
207
  }
230
208
  }
231
-
232
- if (Object.prototype.hasOwnProperty.call(schema.tables[this.tableName], 'created_by')) {
233
- if (model.hasChanged('created_by')) {
234
- model.set('created_by', String(this.previous('created_by')));
235
- }
236
- }
237
209
  }
238
210
 
239
211
  // CASE: do not allow setting only the `updated_at` field, exception: importing
@@ -8,7 +8,7 @@ const messages = {
8
8
  /**
9
9
  * @param {import('bookshelf')} Bookshelf
10
10
  */
11
- module.exports = function (Bookshelf) {
11
+ module.exports = function (Bookshelf, pluginOptions) {
12
12
  Bookshelf.Model = Bookshelf.Model.extend({
13
13
  getActor(options = {context: {}}) {
14
14
  if (options.context && options.context.integration) {
@@ -29,37 +29,22 @@ module.exports = function (Bookshelf) {
29
29
  },
30
30
 
31
31
  // Get the user from the options object
32
- contextUser: function contextUser(options) {
32
+ contextUser: async function contextUser(options) {
33
33
  options = options || {};
34
34
  options.context = options.context || {};
35
35
 
36
36
  if (options.context.user) {
37
37
  return options.context.user;
38
38
  } else if (options.context.integration) {
39
- /**
40
- * @NOTE:
41
- *
42
- * This is a dirty fix until we get rid of all the x_by columns
43
- * @deprecated x_by columns are deprecated as of v1.0 - instead we should use the actions table
44
- * see https://github.com/TryGhost/Ghost/issues/10286.
45
- *
46
- * We return the owner ID '1' in case an integration updates or creates resources.
47
- *
48
- * ---
49
- *
50
- * Why using ID '1'? WAIT. What???????
51
- *
52
- * See https://github.com/TryGhost/Ghost/issues/9299.
53
- *
54
- * We currently don't read the correct owner ID from the database and assume it's '1'.
55
- * This is a leftover from switching from auto increment ID's to Object ID's.
56
- * But this takes too long to refactor out now. If an internal update happens, we also
57
- * use ID '1'. This logic exists for a LONG while now. The owner ID only changes from '1' to something else,
58
- * if you transfer ownership.
59
- */
60
- return Bookshelf.Model.internalUser;
39
+ return pluginOptions.resolveIntegrationUserId({
40
+ transacting: options.transacting,
41
+ context: options.context
42
+ });
61
43
  } else if (options.context.internal) {
62
- return Bookshelf.Model.internalUser;
44
+ return pluginOptions.resolveInternalUserId({
45
+ transacting: options.transacting,
46
+ context: options.context
47
+ });
63
48
  } else if (this.get('id')) {
64
49
  return this.get('id');
65
50
  } else {
@@ -69,16 +54,5 @@ module.exports = function (Bookshelf) {
69
54
  });
70
55
  }
71
56
  }
72
- }, {
73
- /**
74
- * please use these static definitions when comparing id's
75
- * we keep type Number, because we have too many check's where we rely on Number
76
- * context.user ? true : false (if context.user is 0 as number, this condition is false)
77
- */
78
- internalUser: 1,
79
-
80
- isInternalUser: function isInternalUser(id) {
81
- return id === Bookshelf.Model.internalUser || id === Bookshelf.Model.internalUser.toString();
82
- }
83
57
  });
84
58
  };