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.
- package/components/tryghost-i18n-6.0.0-alpha.2.tgz +0 -0
- package/core/boot.js +0 -2
- package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +1 -1
- package/core/built/admin/assets/admin-x-activitypub/{index-B8te98RZ.mjs → index-BZDwG-OG.mjs} +7397 -7385
- package/core/built/admin/assets/admin-x-activitypub/{index-C8qwgKWF.mjs → index-DTlSQCGz.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{CodeEditorView-CAtv7MlN.mjs → CodeEditorView-CCUvrZhe.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +3 -3
- package/core/built/admin/assets/admin-x-settings/{index-BVxh86CD.mjs → index-Cubs_8W6.mjs} +8088 -8532
- package/core/built/admin/assets/admin-x-settings/{index-DUhmXSBR.mjs → index-D0ejKdD5.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{modals-B5dtfzsB.mjs → modals-DSxs9dLy.mjs} +1676 -1614
- package/core/built/admin/assets/{chunk.524.1f2faf572078e5b86b09.js → chunk.524.0953dd72ae1efbabe0de.js} +7 -7
- package/core/built/admin/assets/{chunk.582.675905fe8f9be138fb19.js → chunk.582.3caa825c2a91efc48f1d.js} +8 -8
- package/core/built/admin/assets/{ghost-280b83af263b51bc4d6ce5bd8f536096.js → ghost-db0f84981913aec8a672c57aa22da07a.js} +40 -45
- package/core/built/admin/assets/posts/posts.js +6549 -6537
- package/core/built/admin/assets/stats/stats.js +8824 -8812
- package/core/built/admin/index.html +3 -3
- package/core/frontend/helpers/get.js +4 -2
- package/core/frontend/helpers/ghost_head.js +71 -77
- package/core/frontend/meta/canonical-url.js +1 -7
- package/core/frontend/meta/context-object.js +1 -1
- package/core/frontend/meta/get-meta.js +1 -4
- package/core/frontend/meta/og-image.js +1 -1
- package/core/frontend/meta/og-type.js +0 -2
- package/core/frontend/meta/schema.js +1 -1
- package/core/frontend/meta/twitter-image.js +1 -1
- package/core/frontend/meta/url.js +1 -12
- package/core/frontend/services/rendering/context.js +0 -8
- package/core/frontend/web/middleware/static-theme.js +20 -1
- package/core/server/api/endpoints/index.js +0 -4
- package/core/server/api/endpoints/session.js +0 -9
- package/core/server/api/endpoints/utils/serializers/input/settings.js +0 -2
- package/core/server/api/endpoints/utils/serializers/input/utils/settings-filter-type-group-mapper.js +0 -1
- package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.js +0 -1
- package/core/server/api/endpoints/utils/serializers/input/utils/settings-key-type-mapper.js +0 -1
- package/core/server/api/endpoints/utils/serializers/output/all.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/index.js +0 -4
- package/core/server/api/endpoints/utils/serializers/output/mappers/snippets.js +1 -5
- package/core/server/api/endpoints/utils/serializers/output/members.js +0 -2
- package/core/server/api/endpoints/utils/validators/input/index.js +0 -4
- package/core/server/data/importer/importers/data/Base.js +1 -3
- package/core/server/data/importer/importers/data/SettingsImporter.js +1 -3
- package/core/server/data/migrations/utils/index.js +1 -4
- package/core/server/data/migrations/utils/permissions.js +14 -6
- package/core/server/data/migrations/utils/settings.js +39 -22
- package/core/server/data/migrations/versions/4.47/2022-05-03-15-30-final-v4.js +2 -0
- package/core/server/data/migrations/versions/4.47/2022-05-04-10-03-no-op.js +6 -0
- package/core/server/data/migrations/versions/5.100/2024-11-06-04-45-15-add-activitypub-integration.js +4 -2
- package/core/server/data/migrations/versions/5.113/2025-03-07-12-24-00-add-super-editor.js +4 -2
- package/core/server/data/migrations/versions/5.3/2022-07-06-07-58-add-ghost-explore-integration-role.js +4 -2
- package/core/server/data/migrations/versions/5.3/2022-07-06-09-17-add-ghost-explore-integration.js +4 -2
- package/core/server/data/migrations/versions/5.3/2022-07-06-09-26-add-ghost-explore-integration-api-key.js +4 -2
- package/core/server/data/migrations/versions/5.40/2023-03-21-18-42-add-self-serve-integration-role.js +4 -2
- package/core/server/data/migrations/versions/5.40/2023-03-21-18-52-add-self-serve-integration.js +4 -2
- package/core/server/data/migrations/versions/5.40/2023-03-21-19-02-add-self-serve-integration-api-key.js +4 -2
- package/core/server/data/migrations/versions/5.63/2023-09-13-13-03-10-add-ghost-core-content-integration.js +4 -2
- package/core/server/data/migrations/versions/5.63/2023-09-13-13-34-11-add-ghost-core-content-integration-key.js +4 -2
- package/core/server/data/migrations/versions/6.0/2025-06-20-01-41-54-remove-updated-by-column.js +46 -0
- package/core/server/data/migrations/versions/6.0/2025-06-20-13-41-55-remove-created-by-column.js +47 -0
- package/core/server/data/migrations/versions/6.0/2025-06-23-09-49-25-add-missing-member-uuids.js +22 -0
- package/core/server/data/migrations/versions/6.0/2025-06-23-10-03-26-members-nullable-uuid.js +5 -0
- package/core/server/data/migrations/versions/6.0/2025-06-24-09-19-42-use-object-id-for-hardcoded-user-id.js +95 -0
- package/core/server/data/migrations/versions/6.0/2025-06-25-15-03-29-remove-amp-from-settings.js +6 -0
- package/core/server/data/migrations/versions/6.0/2025-06-30-13-59-10-remove-mail-events-table.js +3 -0
- package/core/server/data/migrations/versions/6.0/2025-06-30-14-00-00-update-feature-image-alt-length.js +25 -0
- package/core/server/data/schema/default-settings/default-settings.json +0 -13
- package/core/server/data/schema/fixtures/FixtureManager.js +128 -5
- package/core/server/data/schema/fixtures/fixtures.json +4 -6
- package/core/server/data/schema/fixtures/index.js +3 -1
- package/core/server/data/schema/schema.js +20 -65
- package/core/server/data/seeders/DataGenerator.js +11 -2
- package/core/server/data/seeders/importers/EmailsImporter.js +1 -3
- package/core/server/data/seeders/importers/LabelsImporter.js +1 -3
- package/core/server/data/seeders/importers/MembersImporter.js +0 -1
- package/core/server/data/seeders/importers/MembersStripeCustomersImporter.js +1 -2
- package/core/server/data/seeders/importers/MembersStripeCustomersSubscriptionsImporter.js +0 -1
- package/core/server/data/seeders/importers/PostsImporter.js +0 -1
- package/core/server/data/seeders/importers/RolesUsersImporter.js +6 -1
- package/core/server/data/seeders/importers/TagsImporter.js +1 -2
- package/core/server/data/seeders/importers/UsersImporter.js +1 -2
- package/core/server/data/tinybird/ARCHITECTURE.md +0 -4
- package/core/server/data/tinybird/DOCS.md +0 -4
- package/core/server/models/base/bookshelf.js +8 -1
- package/core/server/models/base/plugins/events.js +0 -28
- package/core/server/models/base/plugins/user-type.js +10 -36
- package/core/server/models/post.js +25 -10
- package/core/server/models/relations/authors.js +2 -2
- package/core/server/models/settings.js +1 -14
- package/core/server/models/user.js +33 -6
- package/core/server/services/activitypub/ActivityPubService.js +1 -2
- package/core/server/services/activitypub/ActivityPubService.ts +1 -2
- package/core/server/services/explore-ping/ExplorePingService.js +3 -1
- package/core/server/services/link-redirection/README.md +1 -1
- package/core/server/services/mentions/MentionSendingService.js +1 -1
- package/core/server/services/settings/SettingsBREADService.js +5 -1
- package/core/server/services/settings/settings-service.js +3 -1
- package/core/server/services/settings-helpers/SettingsHelpers.js +0 -12
- package/core/server/services/update-check/UpdateCheckService.js +18 -2
- package/core/server/services/url/config.js +0 -2
- package/core/server/web/api/app.js +4 -0
- package/core/server/web/api/endpoints/admin/middleware.js +8 -9
- package/core/server/web/api/endpoints/admin/routes.js +0 -2
- package/core/server/web/comments/routes.js +3 -0
- package/core/server/web/shared/middleware/index.js +4 -0
- package/core/server/web/shared/middleware/max-limit-cap.js +27 -0
- package/core/server/web/shared/middleware/pretty-urls.js +3 -1
- package/core/server/web/shared/middleware/redirect-amp-urls.js +36 -0
- package/core/shared/config/defaults.json +2 -0
- package/core/shared/config/overrides.json +1 -4
- package/core/shared/labs.js +2 -6
- package/core/shared/max-limit-cap.js +61 -0
- package/package.json +5 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/yarn.lock +18 -107
- package/components/tryghost-i18n-5.130.2.tgz +0 -0
- package/core/built/admin/assets/img/amp-d7b72aae3315fda95921fb575dfca100.svg +0 -4
- package/core/frontend/apps/amp/index.js +0 -30
- package/core/frontend/apps/amp/lib/helpers/amp_analytics.js +0 -32
- package/core/frontend/apps/amp/lib/helpers/amp_components.js +0 -48
- package/core/frontend/apps/amp/lib/helpers/amp_content.js +0 -214
- package/core/frontend/apps/amp/lib/helpers/amp_style.js +0 -8
- package/core/frontend/apps/amp/lib/router.js +0 -95
- package/core/frontend/apps/amp/lib/views/amp.hbs +0 -1046
- package/core/frontend/meta/amp-url.js +0 -14
- package/core/server/api/endpoints/mail-events.js +0 -17
- package/core/server/api/endpoints/utils/serializers/output/mail-events.js +0 -9
- package/core/server/api/endpoints/utils/validators/input/mail-events.js +0 -7
- package/core/server/data/migrations/utils/constants.js +0 -3
- package/core/server/data/migrations/versions/4.0/01-update-mobiledoc.js +0 -61
- package/core/server/data/migrations/versions/4.0/02-add-status-column-to-members.js +0 -11
- package/core/server/data/migrations/versions/4.0/03-populate-status-column-for-members.js +0 -81
- package/core/server/data/migrations/versions/4.0/04-drop-apps-related-tables.js +0 -10
- package/core/server/data/migrations/versions/4.0/05-add-members-subscribe-events-table.js +0 -9
- package/core/server/data/migrations/versions/4.0/06-populate-members-subscribe-events-table.js +0 -53
- package/core/server/data/migrations/versions/4.0/07-alter-unique-constraint-for-posts-slug.js +0 -7
- package/core/server/data/migrations/versions/4.0/08-add-members-login-events-table.js +0 -7
- package/core/server/data/migrations/versions/4.0/09-add-members-email-change-events-table.js +0 -9
- package/core/server/data/migrations/versions/4.0/10-add-members-status-events-table.js +0 -9
- package/core/server/data/migrations/versions/4.0/11-add-members-paid-subscription-events-table.js +0 -12
- package/core/server/data/migrations/versions/4.0/12-delete-apps-related-settings-keys.js +0 -16
- package/core/server/data/migrations/versions/4.0/13-add-members-payment-events-table.js +0 -10
- package/core/server/data/migrations/versions/4.0/14-remove-orphaned-stripe-records.js +0 -36
- package/core/server/data/migrations/versions/4.0/15-add-frontmatter-column-to-meta.js +0 -7
- package/core/server/data/migrations/versions/4.0/16-refactor-slack-setting.js +0 -96
- package/core/server/data/migrations/versions/4.0/17-populate-members-status-events-table.js +0 -41
- package/core/server/data/migrations/versions/4.0/18-transform-urls-absolute-to-transform-ready.js +0 -201
- package/core/server/data/migrations/versions/4.0/19-remove-labs-members-setting.js +0 -10
- package/core/server/data/migrations/versions/4.0/20-refactor-unsplash-setting.js +0 -41
- package/core/server/data/migrations/versions/4.0/21-sanitize-email-batches-provider-id.js +0 -8
- package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +0 -87
- package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +0 -66
- package/core/server/data/migrations/versions/4.0/24-add-missing-email-permissions.js +0 -36
- package/core/server/data/migrations/versions/4.0/25-populate-members-paid-subscription-events-table.js +0 -129
- package/core/server/data/migrations/versions/4.0/26-add-cascade-on-delete.js +0 -76
- package/core/server/data/migrations/versions/4.0/27-add-primary-key-brute-migrations-lock.js +0 -9
- package/core/server/data/migrations/versions/4.0/28-add-webhook-intergrations-foreign-key.js +0 -16
- package/core/server/data/migrations/versions/4.0/29-fix-foreign-key-for-members-stripe-customers-subscriptions.js +0 -35
- package/core/server/data/migrations/versions/4.0/30-set-default-accent-color.js +0 -21
- package/core/server/data/migrations/versions/4.1/01-fix-backup-content-permission-typo.js +0 -15
- package/core/server/data/migrations/versions/4.1/02-add-unique-constraint-for-member-stripe-tables.js +0 -21
- package/core/server/data/migrations/versions/4.11/01-add-oauth-user-data.js +0 -12
- package/core/server/data/migrations/versions/4.11/02-add-email-verification-required-setting.js +0 -43
- package/core/server/data/migrations/versions/4.12/01-add-email-only-column-to-posts-meta-table.js +0 -7
- package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +0 -39
- package/core/server/data/migrations/versions/4.13/01-add-members-stripe-connect-auth-permission-to-administrators.js +0 -6
- package/core/server/data/migrations/versions/4.13/02-add-members-products-events-table.js +0 -33
- package/core/server/data/migrations/versions/4.14/01-fix-comped-member-statuses.js +0 -73
- package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +0 -61
- package/core/server/data/migrations/versions/4.15/01-add-temp-members-analytic-events-table.js +0 -12
- package/core/server/data/migrations/versions/4.16/01-add-custom-theme-settings-table.js +0 -9
- package/core/server/data/migrations/versions/4.17/01-add-custom-theme-settings-permissions.js +0 -21
- package/core/server/data/migrations/versions/4.17/02-add-offers-table.js +0 -19
- package/core/server/data/migrations/versions/4.17/03-add-offers-permissions.js +0 -35
- package/core/server/data/migrations/versions/4.19/01-add-active-column-to-offers.js +0 -7
- package/core/server/data/migrations/versions/4.19/02-add-offer-redemptions-table.js +0 -8
- package/core/server/data/migrations/versions/4.2/01-fix-incorrect-mrr-delta-events.js +0 -13
- package/core/server/data/migrations/versions/4.20/01-remove-offer-redemptions-table.js +0 -19
- package/core/server/data/migrations/versions/4.20/02-remove-offers-table.js +0 -30
- package/core/server/data/migrations/versions/4.20/03-add-offers-table.js +0 -21
- package/core/server/data/migrations/versions/4.20/04-add-offer-redemptions-table.js +0 -9
- package/core/server/data/migrations/versions/4.20/05-remove-not-null-constraint-from-portal-title.js +0 -44
- package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +0 -8
- package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +0 -39
- package/core/server/data/migrations/versions/4.23/01-truncate-offer-names.js +0 -59
- package/core/server/data/migrations/versions/4.3/01-add-products-table.js +0 -9
- package/core/server/data/migrations/versions/4.3/02-add-members-products-table.js +0 -8
- package/core/server/data/migrations/versions/4.3/03-add-default-product.js +0 -39
- package/core/server/data/migrations/versions/4.3/04-attach-members-to-product.js +0 -50
- package/core/server/data/migrations/versions/4.3/05-add-stripe-products-table.js +0 -9
- package/core/server/data/migrations/versions/4.3/06-add-stripe-prices-table.js +0 -15
- package/core/server/data/migrations/versions/4.3/07-add-products-permissions.js +0 -29
- package/core/server/data/migrations/versions/4.3/08-migrate-members-signup-setting.js +0 -109
- package/core/server/data/migrations/versions/4.3/09-add-price-id-column-to-subscriptions-table.js +0 -10
- package/core/server/data/migrations/versions/4.3/10-populate-stripe-price-id-in-subscriptions.js +0 -20
- package/core/server/data/migrations/versions/4.33/2022-01-14-11-50-add-type-column-to-products.js +0 -12
- package/core/server/data/migrations/versions/4.33/2022-01-14-11-51-add-default-free-tier.js +0 -40
- package/core/server/data/migrations/versions/4.33/2022-01-18-09-07-remove-duplicate-offer-redemptions.js +0 -46
- package/core/server/data/migrations/versions/4.33/2022-01-19-10-43-add-active-column-to-products-table.js +0 -7
- package/core/server/data/migrations/versions/4.34/2022-01-25-13-53-add-welcome-page-url-column-to-products.js +0 -7
- package/core/server/data/migrations/versions/4.35/2022-01-20-05-55-add-post-products-table.js +0 -8
- package/core/server/data/migrations/versions/4.35/2022-01-30-15-17-set-welcome-page-url-from-settings.js +0 -45
- package/core/server/data/migrations/versions/4.35/2022-02-01-11-48-update-email-recipient-filter-column-type.js +0 -19
- package/core/server/data/migrations/versions/4.35/2022-02-01-12-03-update-recipient-filter-column-type.js +0 -19
- package/core/server/data/migrations/versions/4.35/2022-02-02-10-38-add-default-content-visibility-tiers-setting.js +0 -8
- package/core/server/data/migrations/versions/4.35/2022-02-02-13-10-transform-specific-tiers-default-content-visibility.js +0 -147
- package/core/server/data/migrations/versions/4.35/2022-02-04-04-34-populate-empty-portal-products.js +0 -60
- package/core/server/data/migrations/versions/4.36/2022-02-07-14-34-add-last-seen-at-column-to-members.js +0 -10
- package/core/server/data/migrations/versions/4.37/2022-02-21-09-53-backfill-members-last-seen-at-column.js +0 -32
- package/core/server/data/migrations/versions/4.38/2022-03-01-08-46-add-visibility-to-tiers.js +0 -11
- package/core/server/data/migrations/versions/4.38/2022-03-03-16-12-add-visibility-to-tiers.js +0 -8
- package/core/server/data/migrations/versions/4.38/2022-03-03-16-17-drop-tiers-visible-column.js +0 -7
- package/core/server/data/migrations/versions/4.39/2022-03-07-10-57-update-free-products-visibility-column.js +0 -66
- package/core/server/data/migrations/versions/4.39/2022-03-07-10-57-update-products-visibility-column.js +0 -36
- package/core/server/data/migrations/versions/4.4/01-restore-free-members-signup-setting-from-backup.js +0 -99
- package/core/server/data/migrations/versions/4.4/02-migrate-members-signup-access.js +0 -126
- package/core/server/data/migrations/versions/4.40/2022-03-07-14-37-add-members-cancel-events-table.js +0 -8
- package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-offers-admin-integration-permission-roles.js +0 -23
- package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-tiers-admin-integration-permission-roles.js +0 -20
- package/core/server/data/migrations/versions/4.42/2022-03-21-17-17-add.js +0 -25
- package/core/server/data/migrations/versions/4.42/2022-03-30-15-44-add-newsletter-permissions.js +0 -28
- package/core/server/data/migrations/versions/4.43/2022-03-28-19-26-recreate-newsletter-table.js +0 -29
- package/core/server/data/migrations/versions/4.43/2022-03-29-14-45-add-members-newsletters-table.js +0 -7
- package/core/server/data/migrations/versions/4.43/2022-04-01-10-13-add-post-newsletter-relation.js +0 -108
- package/core/server/data/migrations/versions/4.43/2022-04-06-09-47-add-type-column-to-paid-subscription-events.js +0 -7
- package/core/server/data/migrations/versions/4.43/2022-04-06-14-56-add-email-newsletter-relation.js +0 -8
- package/core/server/data/migrations/versions/4.43/2022-04-08-10-45-add-subscription-id-to-mrr-events.js +0 -7
- package/core/server/data/migrations/versions/4.44/2022-04-06-15-22-populate-type-column-for-paid-subscription-events.js +0 -21
- package/core/server/data/migrations/versions/4.44/2022-04-08-11-54-add-cancelled-events.js +0 -51
- package/core/server/data/migrations/versions/4.44/2022-04-11-08-24-add-newsletter-permissions.js +0 -33
- package/core/server/data/migrations/versions/4.44/2022-04-11-10-54-add-mrr-to-subscriptions.js +0 -8
- package/core/server/data/migrations/versions/4.44/2022-04-12-07-33-fill-mrr.js +0 -29
- package/core/server/data/migrations/versions/4.44/2022-04-13-12-00-remove-newsletter-sender-name-not-null-constraint.js +0 -33
- package/core/server/data/migrations/versions/4.44/2022-04-15-07-53-add-offer-id-to-subscriptions.js +0 -9
- package/core/server/data/migrations/versions/4.45/2022-04-19-12-23-backfill-subscriptions-offers.js +0 -60
- package/core/server/data/migrations/versions/4.45/2022-04-20-11-25-add-newsletter-read-permission.js +0 -9
- package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +0 -8
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-00-add-created-at-newsletters.js +0 -6
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-01-add-updated-at-newsletters.js +0 -6
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-02-fill-created-at-newsletters.js +0 -19
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-03-drop-nullable-created-at-newsletters.js +0 -3
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-08-newsletters-show-header-name.js +0 -7
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-57-add-uuid-column-to-newsletters.js +0 -8
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-58-fill-uuid-for-newsletters.js +0 -19
- package/core/server/data/migrations/versions/4.46/2022-04-13-12-59-drop-nullable-uuid-newsletters.js +0 -3
- package/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js +0 -92
- package/core/server/data/migrations/versions/4.46/2022-04-20-08-39-map-subscribers-to-default-newsletter.js +0 -66
- package/core/server/data/migrations/versions/4.46/2022-04-22-07-43-add-newsletter-id-to-subscribe-events.js +0 -9
- package/core/server/data/migrations/versions/4.46/2022-04-27-07-59-set-newsletter-id-subscribe-events.js +0 -31
- package/core/server/data/migrations/versions/4.47/2022-05-03-15-30-update-newsletter-sending-options.js +0 -34
- package/core/server/data/migrations/versions/4.47/2022-05-04-10-03-transform-newsletter-header-image.js +0 -26
- package/core/server/data/migrations/versions/4.5/01-add-stripe-price-description-column.js +0 -7
- package/core/server/data/migrations/versions/4.5/02-add-product-description-column.js +0 -7
- package/core/server/data/migrations/versions/4.5/03-give-label-read-permissions-to-editors.js +0 -14
- package/core/server/data/migrations/versions/4.5/04-remove-unique-constraint-from-product-name.js +0 -13
- package/core/server/data/migrations/versions/4.5/05-rename-default-product-to-site-title.js +0 -38
- package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +0 -47
- package/core/server/data/migrations/versions/4.7/01-add-monthly-price-column-to-products.js +0 -7
- package/core/server/data/migrations/versions/4.7/02-add-yearly-price-column-to-products.js +0 -7
- package/core/server/data/migrations/versions/4.7/03-add-labs-setting.js +0 -42
- package/core/server/data/migrations/versions/4.8/01-add-feature-image-alt-column-to-posts-meta.js +0 -7
- package/core/server/data/migrations/versions/4.8/02-add-feature-image-caption-column-to-posts-meta.js +0 -7
- package/core/server/data/migrations/versions/4.8/03-add-default-product-portal-products.js +0 -69
- package/core/server/data/migrations/versions/4.8/04-migrate-show-newsletter-header-setting.js +0 -124
- package/core/server/data/migrations/versions/4.9/01-add-reset-all-passwords-permission.js +0 -11
- package/core/server/data/migrations/versions/4.9/02-add-benefits-table.js +0 -9
- package/core/server/data/migrations/versions/4.9/03-add-products-benefits-table.js +0 -8
- package/core/server/data/migrations/versions/4.9/04-add-member-segment-to-email-batches.js +0 -7
- package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +0 -87
- package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +0 -47
- package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +0 -39
- package/core/server/models/mail-event.js +0 -12
- package/core/server/services/mail-events/BookshelfMailEventRepository.js +0 -40
- package/core/server/services/mail-events/InMemoryMailEventRepository.js +0 -10
- package/core/server/services/mail-events/InMemoryMailEventRepository.ts +0 -8
- package/core/server/services/mail-events/MailEvent.js +0 -20
- package/core/server/services/mail-events/MailEvent.ts +0 -10
- package/core/server/services/mail-events/MailEventRepository.js +0 -2
- package/core/server/services/mail-events/MailEventRepository.ts +0 -5
- package/core/server/services/mail-events/MailEventService.js +0 -124
- package/core/server/services/mail-events/MailEventService.ts +0 -169
- package/core/server/services/mail-events/index.js +0 -21
- package/core/server/services/mail-events/libraries.d.ts +0 -2
|
@@ -2,7 +2,7 @@ const ObjectId = require('bson-objectid').default;
|
|
|
2
2
|
const logging = require('@tryghost/logging');
|
|
3
3
|
|
|
4
4
|
const {createTransactionalMigration} = require('./migrations');
|
|
5
|
-
const
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Creates a migration which will insert a new setting in settings table
|
|
@@ -28,17 +28,25 @@ function addSetting({key, value, type, group, flags = null}) {
|
|
|
28
28
|
logging.info(`Adding setting: ${key}`);
|
|
29
29
|
const now = connection.raw('CURRENT_TIMESTAMP');
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
const data = {
|
|
32
|
+
id: ObjectId().toHexString(),
|
|
33
|
+
key,
|
|
34
|
+
value,
|
|
35
|
+
group,
|
|
36
|
+
type,
|
|
37
|
+
flags,
|
|
38
|
+
created_at: now
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
if (await connection.schema.hasColumn('settings', 'created_by')) {
|
|
42
|
+
data.created_by = MIGRATION_USER;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (await connection.schema.hasColumn('settings', 'updated_by')) {
|
|
46
|
+
data.updated_by = MIGRATION_USER;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return connection('settings').insert(data);
|
|
42
50
|
},
|
|
43
51
|
async function down(connection) {
|
|
44
52
|
const settingExists = await connection('settings')
|
|
@@ -99,17 +107,26 @@ function removeSetting(key) {
|
|
|
99
107
|
logging.info(`Restoring setting: ${key}`);
|
|
100
108
|
const now = connection.raw('CURRENT_TIMESTAMP');
|
|
101
109
|
|
|
110
|
+
const data = {
|
|
111
|
+
id: ObjectId().toHexString(),
|
|
112
|
+
key,
|
|
113
|
+
value: originalSetting.value,
|
|
114
|
+
group: originalSetting.group,
|
|
115
|
+
type: originalSetting.type,
|
|
116
|
+
flags: originalSetting.flags,
|
|
117
|
+
created_at: now
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
if (await connection.schema.hasColumn('settings', 'created_by')) {
|
|
121
|
+
data.created_by = MIGRATION_USER;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (await connection.schema.hasColumn('settings', 'updated_by')) {
|
|
125
|
+
data.updated_by = MIGRATION_USER;
|
|
126
|
+
}
|
|
127
|
+
|
|
102
128
|
return connection('settings')
|
|
103
|
-
.insert(
|
|
104
|
-
id: ObjectId().toHexString(),
|
|
105
|
-
key,
|
|
106
|
-
value: originalSetting.value,
|
|
107
|
-
group: originalSetting.group,
|
|
108
|
-
type: originalSetting.type,
|
|
109
|
-
flags: originalSetting.flags,
|
|
110
|
-
created_at: now,
|
|
111
|
-
created_by: MIGRATION_USER
|
|
112
|
-
});
|
|
129
|
+
.insert(data);
|
|
113
130
|
}
|
|
114
131
|
);
|
|
115
132
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
|
-
const {createTransactionalMigration
|
|
2
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
3
3
|
const ObjectID = require('bson-objectid').default;
|
|
4
4
|
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
6
|
+
|
|
5
7
|
module.exports = createTransactionalMigration(
|
|
6
8
|
async function up(knex) {
|
|
7
9
|
logging.info('Adding Ghost ActivityPub integration');
|
|
@@ -25,7 +27,7 @@ module.exports = createTransactionalMigration(
|
|
|
25
27
|
name: 'Ghost ActivityPub',
|
|
26
28
|
description: 'Internal Integration for ActivityPub',
|
|
27
29
|
created_at: knex.raw('current_timestamp'),
|
|
28
|
-
created_by:
|
|
30
|
+
created_by: MIGRATION_USER
|
|
29
31
|
})
|
|
30
32
|
.into('integrations');
|
|
31
33
|
},
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
const {default: ObjectID} = require('bson-objectid');
|
|
3
|
-
const {createTransactionalMigration
|
|
3
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
4
|
+
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
4
6
|
|
|
5
7
|
module.exports = createTransactionalMigration(
|
|
6
8
|
async function up(knex) {
|
|
@@ -18,7 +20,7 @@ module.exports = createTransactionalMigration(
|
|
|
18
20
|
id: (new ObjectID()).toHexString(),
|
|
19
21
|
name: 'Super Editor',
|
|
20
22
|
description: 'Editor plus member management',
|
|
21
|
-
created_by:
|
|
23
|
+
created_by: MIGRATION_USER,
|
|
22
24
|
created_at: knex.raw('current_timestamp')
|
|
23
25
|
});
|
|
24
26
|
},
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
const {default: ObjectID} = require('bson-objectid');
|
|
3
|
-
const {createTransactionalMigration
|
|
3
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
4
|
+
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
4
6
|
|
|
5
7
|
module.exports = createTransactionalMigration(
|
|
6
8
|
async function up(knex) {
|
|
@@ -18,7 +20,7 @@ module.exports = createTransactionalMigration(
|
|
|
18
20
|
id: (new ObjectID()).toHexString(),
|
|
19
21
|
name: 'Ghost Explore Integration',
|
|
20
22
|
description: 'Internal Integration for the Ghost Explore directory',
|
|
21
|
-
created_by:
|
|
23
|
+
created_by: MIGRATION_USER,
|
|
22
24
|
created_at: knex.raw('current_timestamp')
|
|
23
25
|
});
|
|
24
26
|
},
|
package/core/server/data/migrations/versions/5.3/2022-07-06-09-17-add-ghost-explore-integration.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
const {default: ObjectID} = require('bson-objectid');
|
|
3
|
-
const {createTransactionalMigration
|
|
3
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
4
|
+
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
4
6
|
|
|
5
7
|
module.exports = createTransactionalMigration(
|
|
6
8
|
async function up(knex) {
|
|
@@ -22,7 +24,7 @@ module.exports = createTransactionalMigration(
|
|
|
22
24
|
description: 'Internal Integration for the Ghost Explore directory',
|
|
23
25
|
slug: 'ghost-explore',
|
|
24
26
|
created_at: knex.raw('current_timestamp'),
|
|
25
|
-
created_by:
|
|
27
|
+
created_by: MIGRATION_USER
|
|
26
28
|
});
|
|
27
29
|
},
|
|
28
30
|
async function down(knex) {
|
|
@@ -2,7 +2,9 @@ const {InternalServerError} = require('@tryghost/errors');
|
|
|
2
2
|
const logging = require('@tryghost/logging');
|
|
3
3
|
const security = require('@tryghost/security');
|
|
4
4
|
const {default: ObjectID} = require('bson-objectid');
|
|
5
|
-
const {createTransactionalMigration
|
|
5
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
6
|
+
|
|
7
|
+
const MIGRATION_USER = 1;
|
|
6
8
|
|
|
7
9
|
module.exports = createTransactionalMigration(
|
|
8
10
|
async function up(knex) {
|
|
@@ -46,7 +48,7 @@ module.exports = createTransactionalMigration(
|
|
|
46
48
|
role_id: role.id,
|
|
47
49
|
integration_id: integration.id,
|
|
48
50
|
created_at: knex.raw('current_timestamp'),
|
|
49
|
-
created_by:
|
|
51
|
+
created_by: MIGRATION_USER
|
|
50
52
|
});
|
|
51
53
|
},
|
|
52
54
|
async function down(knex) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
const {default: ObjectID} = require('bson-objectid');
|
|
3
|
-
const {createTransactionalMigration
|
|
3
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
4
|
+
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
4
6
|
|
|
5
7
|
module.exports = createTransactionalMigration(
|
|
6
8
|
async function up(knex) {
|
|
@@ -18,7 +20,7 @@ module.exports = createTransactionalMigration(
|
|
|
18
20
|
id: (new ObjectID()).toHexString(),
|
|
19
21
|
name: 'Self-Serve Migration Integration',
|
|
20
22
|
description: 'Core Integration for the Ghost Explore directory',
|
|
21
|
-
created_by:
|
|
23
|
+
created_by: MIGRATION_USER,
|
|
22
24
|
created_at: knex.raw('current_timestamp')
|
|
23
25
|
});
|
|
24
26
|
},
|
package/core/server/data/migrations/versions/5.40/2023-03-21-18-52-add-self-serve-integration.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const logging = require('@tryghost/logging');
|
|
2
2
|
const {default: ObjectID} = require('bson-objectid');
|
|
3
|
-
const {createTransactionalMigration
|
|
3
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
4
|
+
|
|
5
|
+
const MIGRATION_USER = 1;
|
|
4
6
|
|
|
5
7
|
module.exports = createTransactionalMigration(
|
|
6
8
|
async function up(knex) {
|
|
@@ -22,7 +24,7 @@ module.exports = createTransactionalMigration(
|
|
|
22
24
|
description: 'Core Integration for the Self-Serve migration tool',
|
|
23
25
|
slug: 'self-serve-migration',
|
|
24
26
|
created_at: knex.raw('current_timestamp'),
|
|
25
|
-
created_by:
|
|
27
|
+
created_by: MIGRATION_USER
|
|
26
28
|
});
|
|
27
29
|
},
|
|
28
30
|
async function down(knex) {
|
|
@@ -2,7 +2,9 @@ const {InternalServerError} = require('@tryghost/errors');
|
|
|
2
2
|
const logging = require('@tryghost/logging');
|
|
3
3
|
const security = require('@tryghost/security');
|
|
4
4
|
const {default: ObjectID} = require('bson-objectid');
|
|
5
|
-
const {createTransactionalMigration
|
|
5
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
6
|
+
|
|
7
|
+
const MIGRATION_USER = 1;
|
|
6
8
|
|
|
7
9
|
module.exports = createTransactionalMigration(
|
|
8
10
|
async function up(knex) {
|
|
@@ -46,7 +48,7 @@ module.exports = createTransactionalMigration(
|
|
|
46
48
|
role_id: role.id,
|
|
47
49
|
integration_id: integration.id,
|
|
48
50
|
created_at: knex.raw('current_timestamp'),
|
|
49
|
-
created_by:
|
|
51
|
+
created_by: MIGRATION_USER
|
|
50
52
|
});
|
|
51
53
|
},
|
|
52
54
|
async function down(knex) {
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
const logging = require('@tryghost/logging');
|
|
4
4
|
const {default: ObjectID} = require('bson-objectid');
|
|
5
|
-
const {createTransactionalMigration
|
|
5
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
6
|
+
|
|
7
|
+
const MIGRATION_USER = 1;
|
|
6
8
|
|
|
7
9
|
const coreContentIntegration = {
|
|
8
10
|
slug: 'ghost-core-content',
|
|
@@ -26,7 +28,7 @@ const addIntegration = async (knex, integration) => {
|
|
|
26
28
|
const now = knex.raw('CURRENT_TIMESTAMP');
|
|
27
29
|
integration.id = (new ObjectID()).toHexString();
|
|
28
30
|
integration.created_at = now;
|
|
29
|
-
integration.created_by =
|
|
31
|
+
integration.created_by = MIGRATION_USER;
|
|
30
32
|
|
|
31
33
|
await knex('integrations').insert(integration);
|
|
32
34
|
};
|
|
@@ -4,7 +4,9 @@ const {InternalServerError} = require('@tryghost/errors');
|
|
|
4
4
|
const logging = require('@tryghost/logging');
|
|
5
5
|
const security = require('@tryghost/security');
|
|
6
6
|
const {default: ObjectID} = require('bson-objectid');
|
|
7
|
-
const {createTransactionalMigration
|
|
7
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
8
|
+
|
|
9
|
+
const MIGRATION_USER = 1;
|
|
8
10
|
|
|
9
11
|
const coreContentIntegration = {
|
|
10
12
|
slug: 'ghost-core-content',
|
|
@@ -45,7 +47,7 @@ const addIntegrationContentKey = async (knex, integration) => {
|
|
|
45
47
|
role_id: null,
|
|
46
48
|
integration_id: existingIntegration.id,
|
|
47
49
|
created_at: knex.raw('current_timestamp'),
|
|
48
|
-
created_by:
|
|
50
|
+
created_by: MIGRATION_USER
|
|
49
51
|
});
|
|
50
52
|
};
|
|
51
53
|
|
package/core/server/data/migrations/versions/6.0/2025-06-20-01-41-54-remove-updated-by-column.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const logging = require('@tryghost/logging');
|
|
2
|
+
const {createNonTransactionalMigration} = require('../../utils');
|
|
3
|
+
|
|
4
|
+
async function dropUpdatedBy(knex, table) {
|
|
5
|
+
const hasUpdatedBy = await knex.schema.hasColumn(table, 'updated_by');
|
|
6
|
+
|
|
7
|
+
if (hasUpdatedBy) {
|
|
8
|
+
logging.info(`Dropping updated_by from ${table}`);
|
|
9
|
+
|
|
10
|
+
await knex.schema.alterTable(table, function (t) {
|
|
11
|
+
t.dropColumn('updated_by');
|
|
12
|
+
});
|
|
13
|
+
} else {
|
|
14
|
+
logging.info(`${table} does not have updated_by - skipping`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = createNonTransactionalMigration(
|
|
19
|
+
async function up(knex) {
|
|
20
|
+
logging.info('Dropping updated_by from all tables');
|
|
21
|
+
|
|
22
|
+
await dropUpdatedBy(knex, 'posts');
|
|
23
|
+
await dropUpdatedBy(knex, 'users');
|
|
24
|
+
await dropUpdatedBy(knex, 'roles');
|
|
25
|
+
await dropUpdatedBy(knex, 'permissions');
|
|
26
|
+
await dropUpdatedBy(knex, 'settings');
|
|
27
|
+
await dropUpdatedBy(knex, 'tags');
|
|
28
|
+
await dropUpdatedBy(knex, 'invites');
|
|
29
|
+
await dropUpdatedBy(knex, 'integrations');
|
|
30
|
+
await dropUpdatedBy(knex, 'webhooks');
|
|
31
|
+
await dropUpdatedBy(knex, 'api_keys');
|
|
32
|
+
await dropUpdatedBy(knex, 'members');
|
|
33
|
+
await dropUpdatedBy(knex, 'labels');
|
|
34
|
+
await dropUpdatedBy(knex, 'members_stripe_customers');
|
|
35
|
+
await dropUpdatedBy(knex, 'members_stripe_customers_subscriptions');
|
|
36
|
+
await dropUpdatedBy(knex, 'emails');
|
|
37
|
+
await dropUpdatedBy(knex, 'snippets');
|
|
38
|
+
|
|
39
|
+
logging.info('updated_by dropped from all tables');
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
async function down() {
|
|
43
|
+
// Major version migrations are not reversible
|
|
44
|
+
logging.warn('Reverting removal of updated_by is not supported');
|
|
45
|
+
}
|
|
46
|
+
);
|
package/core/server/data/migrations/versions/6.0/2025-06-20-13-41-55-remove-created-by-column.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const logging = require('@tryghost/logging');
|
|
2
|
+
const {createNonTransactionalMigration} = require('../../utils');
|
|
3
|
+
|
|
4
|
+
async function dropCreatedBy(knex, table) {
|
|
5
|
+
const hasCreatedBy = await knex.schema.hasColumn(table, 'created_by');
|
|
6
|
+
|
|
7
|
+
if (hasCreatedBy) {
|
|
8
|
+
logging.info(`Dropping created_by from ${table}`);
|
|
9
|
+
|
|
10
|
+
await knex.schema.alterTable(table, function (t) {
|
|
11
|
+
t.dropColumn('created_by');
|
|
12
|
+
});
|
|
13
|
+
} else {
|
|
14
|
+
logging.info(`${table} does not have created_by - skipping`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = createNonTransactionalMigration(
|
|
19
|
+
async function up(knex) {
|
|
20
|
+
logging.info('Dropping created_by from all tables');
|
|
21
|
+
|
|
22
|
+
await dropCreatedBy(knex, 'posts');
|
|
23
|
+
await dropCreatedBy(knex, 'users');
|
|
24
|
+
await dropCreatedBy(knex, 'roles');
|
|
25
|
+
await dropCreatedBy(knex, 'permissions');
|
|
26
|
+
await dropCreatedBy(knex, 'settings');
|
|
27
|
+
await dropCreatedBy(knex, 'tags');
|
|
28
|
+
await dropCreatedBy(knex, 'invites');
|
|
29
|
+
await dropCreatedBy(knex, 'integrations');
|
|
30
|
+
await dropCreatedBy(knex, 'webhooks');
|
|
31
|
+
await dropCreatedBy(knex, 'api_keys');
|
|
32
|
+
await dropCreatedBy(knex, 'members');
|
|
33
|
+
await dropCreatedBy(knex, 'labels');
|
|
34
|
+
await dropCreatedBy(knex, 'members_stripe_customers');
|
|
35
|
+
await dropCreatedBy(knex, 'members_stripe_customers_subscriptions');
|
|
36
|
+
await dropCreatedBy(knex, 'emails');
|
|
37
|
+
await dropCreatedBy(knex, 'tokens');
|
|
38
|
+
await dropCreatedBy(knex, 'snippets');
|
|
39
|
+
|
|
40
|
+
logging.info('created_by dropped from all tables');
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
async function down() {
|
|
44
|
+
// Major version migrations are not reversible
|
|
45
|
+
logging.warn('Reverting removal of created_by is not supported');
|
|
46
|
+
}
|
|
47
|
+
);
|
package/core/server/data/migrations/versions/6.0/2025-06-23-09-49-25-add-missing-member-uuids.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// For information on writing migrations, see https://www.notion.so/ghost/Database-migrations-eb5b78c435d741d2b34a582d57c24253
|
|
2
|
+
|
|
3
|
+
const logging = require('@tryghost/logging');
|
|
4
|
+
const crypto = require('crypto');
|
|
5
|
+
|
|
6
|
+
// For DML - data changes
|
|
7
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
8
|
+
|
|
9
|
+
module.exports = createTransactionalMigration(
|
|
10
|
+
async function up(knex) {
|
|
11
|
+
const membersWithoutUUID = await knex.select('id').from('members').whereNull('uuid');
|
|
12
|
+
|
|
13
|
+
logging.info(`Adding uuid field value to ${membersWithoutUUID.length} members.`);
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
16
|
+
for (const member of membersWithoutUUID) {
|
|
17
|
+
await knex('members').update('uuid', crypto.randomUUID()).where('id', member.id);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
// down is a no-op
|
|
21
|
+
async function down() {}
|
|
22
|
+
);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const {createDropNullableMigration} = require('../../utils');
|
|
2
|
+
|
|
3
|
+
// Running drop nullable migration without foreign key checks disabled
|
|
4
|
+
// This is because uuid isn't used as a foreign key anywhere in the schema
|
|
5
|
+
module.exports = createDropNullableMigration('members', 'uuid');
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const logging = require('@tryghost/logging');
|
|
2
|
+
const ObjectID = require('bson-objectid').default;
|
|
3
|
+
|
|
4
|
+
const {createTransactionalMigration} = require('../../utils');
|
|
5
|
+
|
|
6
|
+
const LEGACY_HARDCODED_USER_ID = '1';
|
|
7
|
+
|
|
8
|
+
module.exports = createTransactionalMigration(
|
|
9
|
+
async function up(knex) {
|
|
10
|
+
const newId = (new ObjectID()).toHexString();
|
|
11
|
+
|
|
12
|
+
logging.info(`Updating hardcoded user ID ${LEGACY_HARDCODED_USER_ID} to ${newId}`);
|
|
13
|
+
|
|
14
|
+
const currentUserWithHardcodedId = await knex('users').where('id', LEGACY_HARDCODED_USER_ID).first();
|
|
15
|
+
|
|
16
|
+
if (!currentUserWithHardcodedId) {
|
|
17
|
+
logging.warn(`User with ID ${LEGACY_HARDCODED_USER_ID} not found, skipping migration`);
|
|
18
|
+
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
const email = currentUserWithHardcodedId.email;
|
|
24
|
+
const slug = currentUserWithHardcodedId.slug;
|
|
25
|
+
const temporaryEmail = `migrating-${now}@migration.local`;
|
|
26
|
+
const temporarySlug = `migrating-${now}`;
|
|
27
|
+
|
|
28
|
+
// Step 1: Create a clone of the current user using the new ID.
|
|
29
|
+
// This is so we can assign existing references to the new user ID
|
|
30
|
+
// without violating foreign key constraints. We also need to use a
|
|
31
|
+
// temporary email and slug to avoid duplicate constraint errors
|
|
32
|
+
const clonedUser = {
|
|
33
|
+
...currentUserWithHardcodedId,
|
|
34
|
+
id: newId,
|
|
35
|
+
slug: temporarySlug,
|
|
36
|
+
email: temporaryEmail
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
await knex('users').insert(clonedUser);
|
|
40
|
+
|
|
41
|
+
logging.info(`Cloned existing user with updated properties - ID: ${newId}, email: ${temporaryEmail}, slug: ${temporarySlug}`);
|
|
42
|
+
|
|
43
|
+
// Step 2: Update all references to the current user ID to point
|
|
44
|
+
// to the cloned user ID. The order matters to avoid foreign key
|
|
45
|
+
// constraint violations.
|
|
46
|
+
|
|
47
|
+
// 1. Tables with user_id column
|
|
48
|
+
await knex('roles_users').where('user_id', LEGACY_HARDCODED_USER_ID).update({user_id: newId});
|
|
49
|
+
await knex('permissions_users').where('user_id', LEGACY_HARDCODED_USER_ID).update({user_id: newId});
|
|
50
|
+
await knex('sessions').where('user_id', LEGACY_HARDCODED_USER_ID).update({user_id: newId});
|
|
51
|
+
await knex('api_keys').where('user_id', LEGACY_HARDCODED_USER_ID).update({user_id: newId});
|
|
52
|
+
|
|
53
|
+
// 2. Tables with author_id column
|
|
54
|
+
await knex('posts_authors').where('author_id', LEGACY_HARDCODED_USER_ID).update({author_id: newId});
|
|
55
|
+
await knex('post_revisions').where('author_id', LEGACY_HARDCODED_USER_ID).update({author_id: newId});
|
|
56
|
+
|
|
57
|
+
// 3. Tables with published_by column (nullable)
|
|
58
|
+
await knex('posts').where('published_by', LEGACY_HARDCODED_USER_ID).update({published_by: newId});
|
|
59
|
+
|
|
60
|
+
// 4. Actions table with actor_id
|
|
61
|
+
await knex('actions')
|
|
62
|
+
.where('actor_id', LEGACY_HARDCODED_USER_ID)
|
|
63
|
+
.where('actor_type', 'user')
|
|
64
|
+
.update({actor_id: newId});
|
|
65
|
+
|
|
66
|
+
// 5. Update user_id inside session_data JSON
|
|
67
|
+
await knex.raw(`
|
|
68
|
+
UPDATE sessions
|
|
69
|
+
SET session_data = JSON_SET(session_data, '$.user_id', ?)
|
|
70
|
+
WHERE JSON_VALID(session_data)
|
|
71
|
+
AND JSON_EXTRACT(session_data, '$.user_id') = ?
|
|
72
|
+
`, [newId, LEGACY_HARDCODED_USER_ID]);
|
|
73
|
+
|
|
74
|
+
// Step 3: Clean up the now redundant user record identified by the
|
|
75
|
+
// legacy user ID as there should be no references to it anymore
|
|
76
|
+
await knex('users').where('id', LEGACY_HARDCODED_USER_ID).del();
|
|
77
|
+
|
|
78
|
+
logging.info(`Removed user with ID ${LEGACY_HARDCODED_USER_ID}`);
|
|
79
|
+
|
|
80
|
+
// Step 4: Restore the original slug and email on the cloned user record
|
|
81
|
+
await knex('users').where('id', newId).update({
|
|
82
|
+
slug,
|
|
83
|
+
email
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
logging.info(`Restored user slug and email: ${slug}, ${email}`);
|
|
87
|
+
|
|
88
|
+
logging.info(`Successfully updated user ID from ${LEGACY_HARDCODED_USER_ID} to ${newId}`);
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
async function down() {
|
|
92
|
+
// Major version migrations are not reversible
|
|
93
|
+
logging.warn('Reverting migration of user ID to ObjectID is not supported');
|
|
94
|
+
}
|
|
95
|
+
);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const logging = require('@tryghost/logging');
|
|
2
|
+
const {createNonTransactionalMigration} = require('../../utils');
|
|
3
|
+
const DatabaseInfo = require('@tryghost/database-info');
|
|
4
|
+
|
|
5
|
+
module.exports = createNonTransactionalMigration(
|
|
6
|
+
async function up(knex) {
|
|
7
|
+
if (DatabaseInfo.isSQLite(knex)) {
|
|
8
|
+
logging.warn('Skipping migration for SQLite3 (fixed-length VARCHAR columns are not enforced)');
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
logging.info('Changing posts_meta.feature_image_alt column from VARCHAR(191) to VARCHAR(2000)');
|
|
13
|
+
await knex.schema.alterTable('posts_meta', function (table) {
|
|
14
|
+
table.string('feature_image_alt', 2000).alter();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
logging.info('Changing post_revisions.feature_image_alt column from VARCHAR(191) to VARCHAR(2000)');
|
|
18
|
+
await knex.schema.alterTable('post_revisions', function (table) {
|
|
19
|
+
table.string('feature_image_alt', 2000).alter();
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
async function down() {
|
|
23
|
+
logging.warn('Reverting posts_meta.feature_image_alt and post_revisions.feature_image_alt column length increases is not supported (major version migrations are not reversible)');
|
|
24
|
+
}
|
|
25
|
+
);
|
|
@@ -427,19 +427,6 @@
|
|
|
427
427
|
"flags": "RO"
|
|
428
428
|
}
|
|
429
429
|
},
|
|
430
|
-
"amp": {
|
|
431
|
-
"amp": {
|
|
432
|
-
"defaultValue": "false",
|
|
433
|
-
"validations": {
|
|
434
|
-
"isIn": [["true", "false"]]
|
|
435
|
-
},
|
|
436
|
-
"type": "boolean"
|
|
437
|
-
},
|
|
438
|
-
"amp_gtag_id": {
|
|
439
|
-
"defaultValue": null,
|
|
440
|
-
"type": "string"
|
|
441
|
-
}
|
|
442
|
-
},
|
|
443
430
|
"firstpromoter": {
|
|
444
431
|
"firstpromoter": {
|
|
445
432
|
"defaultValue": "false",
|