ghost 4.47.4 → 5.0.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.
- package/Gruntfile.js +24 -24
- package/README.md +3 -2
- package/content/themes/casper/assets/built/global.css +1 -1
- package/content/themes/casper/assets/built/global.css.map +1 -1
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/built/screen.css.map +1 -1
- package/content/themes/casper/assets/css/global.css +2 -2
- package/content/themes/casper/assets/css/screen.css +412 -664
- package/content/themes/casper/author.hbs +48 -35
- package/content/themes/casper/default.hbs +5 -23
- package/content/themes/casper/error-404.hbs +1 -1
- package/content/themes/casper/index.hbs +29 -22
- package/content/themes/casper/package.json +25 -37
- package/content/themes/casper/page.hbs +12 -12
- package/content/themes/casper/partials/icons/facebook.hbs +1 -1
- package/content/themes/casper/partials/icons/twitter.hbs +1 -1
- package/content/themes/casper/partials/post-card.hbs +26 -40
- package/content/themes/casper/post.hbs +54 -50
- package/content/themes/casper/tag.hbs +42 -47
- package/core/boot.js +18 -15
- package/core/bridge.js +24 -25
- package/core/built/assets/ghost-dark-b6e3268bcae976a8675b0d9ae54540f2.css +1 -0
- package/core/built/assets/{ghost.min-a2a47979b0b61d15a3914042a7b1cd20.js → ghost.min-2cc3688ea6600a54e0cd83107a8577e8.js} +1138 -1212
- package/core/built/assets/ghost.min-a40c7b301c702bd84c2fae19366ab5d7.css +1 -0
- package/core/built/assets/icons/analytics.svg +14 -0
- package/core/built/assets/icons/calendar.svg +4 -1
- package/core/built/assets/icons/email-at.svg +1 -1
- package/core/built/assets/icons/email-name.svg +1 -1
- package/core/built/assets/icons/info.svg +1 -1
- package/core/built/assets/icons/twitter-logo.svg +3 -0
- package/core/built/assets/{vendor.min-97fd438f4772c5ec6bb30ad779b8530e.js → vendor.min-2bca41946dea27dc292428db605d466d.js} +99 -93
- package/core/cli/README.md +88 -0
- package/core/cli/command.js +129 -0
- package/core/cli/repl.js +32 -0
- package/core/cli/timetravel.js +87 -0
- package/core/frontend/apps/amp/lib/helpers/amp_content.js +10 -12
- package/core/frontend/apps/amp/lib/router.js +2 -3
- package/core/frontend/helpers/body_class.js +2 -2
- package/core/frontend/helpers/excerpt.js +0 -2
- package/core/frontend/helpers/get.js +23 -24
- package/core/frontend/helpers/ghost_head.js +104 -108
- package/core/frontend/helpers/navigation.js +0 -2
- package/core/frontend/helpers/prev_post.js +20 -26
- package/core/frontend/helpers/price.js +2 -2
- package/core/frontend/meta/author-url.js +2 -2
- package/core/frontend/meta/description.js +3 -3
- package/core/frontend/meta/excerpt.js +1 -2
- package/core/frontend/meta/generate-excerpt.js +2 -11
- package/core/frontend/meta/paginated-url.js +1 -1
- package/core/frontend/meta/rss-url.js +0 -1
- package/core/frontend/meta/url.js +4 -4
- package/core/frontend/services/data/entry-lookup.js +1 -1
- package/core/frontend/services/data/fetch-data.js +1 -1
- package/core/frontend/services/helpers/handlebars.js +11 -12
- package/core/frontend/services/proxy.js +11 -1
- package/core/frontend/services/rendering/context.js +1 -5
- package/core/frontend/services/rendering/format-response.js +9 -2
- package/core/frontend/services/rendering/index.js +0 -4
- package/core/frontend/services/rendering/render-entry.js +1 -1
- package/core/frontend/services/rendering/templates.js +15 -5
- package/core/frontend/services/routing/CollectionRouter.js +2 -2
- package/core/frontend/services/routing/EmailRouter.js +2 -2
- package/core/frontend/services/routing/ParentRouter.js +1 -1
- package/core/frontend/services/routing/PreviewRouter.js +3 -3
- package/core/frontend/services/routing/{config/v4.js → config.js} +3 -5
- package/core/frontend/services/routing/controllers/channel.js +0 -10
- package/core/frontend/services/routing/controllers/collection.js +0 -9
- package/core/frontend/services/routing/controllers/email-post.js +2 -7
- package/core/frontend/services/routing/controllers/entry.js +1 -3
- package/core/frontend/services/routing/controllers/index.js +2 -2
- package/core/frontend/services/routing/controllers/{preview.js → previews.js} +3 -8
- package/core/frontend/services/routing/controllers/static.js +1 -6
- package/core/frontend/services/routing/router-manager.js +38 -20
- package/core/frontend/services/rss/generate-feed.js +7 -9
- package/core/frontend/services/theme-engine/active.js +0 -8
- package/core/frontend/services/theme-engine/config/defaults.json +1 -3
- package/core/frontend/services/theme-engine/middleware/index.js +0 -1
- package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +0 -69
- package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +3 -6
- package/core/frontend/web/middleware/static-theme.js +14 -6
- package/core/frontend/web/routes.js +9 -9
- package/core/frontend/web/site.js +15 -18
- package/core/server/adapters/scheduling/post-scheduling/index.js +1 -1
- package/core/server/api/README.md +2 -6
- package/core/server/api/canary/authentication.js +4 -3
- package/core/server/api/canary/{email-preview.js → email-previews.js} +9 -8
- package/core/server/api/canary/index.js +14 -18
- package/core/server/api/canary/members.js +4 -24
- package/core/server/api/{v3/actions.js → canary/newsletters-public.js} +6 -6
- package/core/server/api/canary/newsletters.js +1 -13
- package/core/server/api/canary/notifications.js +17 -22
- package/core/server/api/canary/offers-public.js +28 -0
- package/core/server/api/canary/pages.js +1 -1
- package/core/server/api/canary/posts.js +4 -8
- package/core/server/api/canary/{preview.js → previews.js} +1 -1
- package/core/server/api/canary/schedules.js +1 -1
- package/core/server/api/canary/session.js +1 -1
- package/core/server/api/canary/settings-public.js +3 -1
- package/core/server/api/canary/settings.js +30 -16
- package/core/server/api/canary/utils/index.js +2 -4
- package/core/server/api/canary/utils/serializers/input/index.js +0 -4
- package/core/server/api/canary/utils/serializers/input/members.js +46 -17
- package/core/server/api/canary/utils/serializers/input/pages.js +0 -17
- package/core/server/api/canary/utils/serializers/input/posts.js +1 -28
- package/core/server/api/canary/utils/serializers/input/settings.js +61 -142
- package/core/server/api/canary/utils/serializers/input/tiers.js +56 -12
- package/core/server/api/canary/utils/serializers/output/authentication.js +2 -6
- package/core/server/api/canary/utils/serializers/output/index.js +2 -10
- package/core/server/api/canary/utils/serializers/output/mappers/index.js +1 -0
- package/core/server/api/canary/utils/serializers/output/mappers/newsletters.js +24 -0
- package/core/server/api/canary/utils/serializers/output/mappers/pages.js +1 -1
- package/core/server/api/canary/utils/serializers/output/mappers/posts.js +9 -7
- package/core/server/api/canary/utils/serializers/output/mappers/settings.js +5 -31
- package/core/server/api/canary/utils/serializers/output/members.js +21 -11
- package/core/server/api/canary/utils/serializers/output/offers.js +9 -1
- package/core/server/api/canary/utils/serializers/output/{preview.js → previews.js} +2 -2
- package/core/server/api/canary/utils/serializers/output/settings.js +6 -14
- package/core/server/api/canary/utils/serializers/output/site.js +0 -1
- package/core/server/api/canary/utils/serializers/output/tiers.js +35 -75
- package/core/server/api/canary/utils/serializers/output/utils/clean.js +5 -10
- package/core/server/api/canary/utils/serializers/output/utils/extra-attrs.js +0 -126
- package/core/server/api/canary/utils/serializers/output/utils/post-gating.js +1 -1
- package/core/server/api/canary/utils/serializers/output/utils/url.js +0 -5
- package/core/server/api/canary/utils/validators/input/index.js +2 -2
- package/core/server/api/canary/utils/validators/input/{passwordreset.js → password_reset.js} +2 -2
- package/core/server/api/canary/utils/validators/input/settings.js +2 -23
- package/core/server/api/canary/utils/validators/utils/json-schema.js +1 -2
- package/core/server/api/index.js +1 -7
- package/core/server/api/shared/serializers/input/utils/settings-key-group-mapper.js +2 -2
- package/core/server/api/shared/serializers/input/utils/settings-key-type-mapper.js +2 -4
- package/core/server/data/db/connection.js +0 -13
- package/core/server/data/exporter/index.js +4 -1
- package/core/server/data/exporter/table-lists.js +13 -15
- package/core/server/data/importer/importers/data/base.js +16 -7
- package/core/server/data/importer/importers/data/data-importer.js +38 -1
- package/core/server/data/importer/importers/data/newsletters.js +45 -0
- package/core/server/data/importer/importers/data/posts.js +40 -12
- package/core/server/data/importer/importers/data/products.js +68 -0
- package/core/server/data/importer/importers/data/settings.js +10 -10
- package/core/server/data/importer/importers/data/stripe-prices.js +59 -0
- package/core/server/data/importer/importers/data/stripe-products.js +61 -0
- package/core/server/data/migrations/utils/constants.js +3 -0
- package/core/server/data/migrations/utils/index.js +10 -0
- package/core/server/data/migrations/utils/migrations.js +156 -0
- package/core/server/data/migrations/utils/permissions.js +291 -0
- package/core/server/data/migrations/utils/schema.js +158 -0
- package/core/server/data/migrations/utils/settings.js +59 -0
- package/core/server/data/migrations/utils/tables.js +94 -0
- package/core/server/data/migrations/versions/1.25/01-final-v1.js +2 -0
- package/core/server/data/migrations/versions/1.25/02-noop.js +6 -0
- package/core/server/data/migrations/versions/2.37/01-final-v2.js +2 -0
- package/core/server/data/migrations/versions/3.41/01-final-v3.js +2 -0
- package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +3 -9
- package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +2 -11
- package/core/server/data/migrations/versions/4.11/02-add-email-verification-required-setting.js +1 -1
- package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +1 -1
- package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +1 -1
- package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +1 -1
- package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +1 -1
- package/core/server/data/migrations/versions/4.35/2022-02-02-10-38-add-default-content-visibility-tiers-setting.js +1 -1
- package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +1 -1
- package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +1 -1
- package/core/server/data/migrations/versions/4.7/03-add-labs-setting.js +1 -1
- package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -1
- package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +1 -1
- package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +1 -1
- package/core/server/data/migrations/versions/5.0/2022-03-14-12-33-delete-duplicate-offer-redemptions.js +36 -0
- package/core/server/data/migrations/versions/5.0/2022-03-28-15-25-backfill-mrr-adjustments-for-offers.js +108 -0
- package/core/server/data/migrations/versions/5.0/2022-04-25-10-32-backfill-mrr-for-discounted-subscriptions.js +44 -0
- package/core/server/data/migrations/versions/5.0/2022-04-26-15-44-backfill-mrr-events-for-canceled-subscriptions.js +73 -0
- package/core/server/data/migrations/versions/5.0/2022-04-27-11-26-backfill-mrr-for-canceled-subscriptions.js +31 -0
- package/core/server/data/migrations/versions/5.0/2022-04-28-03-26-remove-author-id-column-from-posts-table.js +7 -0
- package/core/server/data/migrations/versions/5.0/2022-05-03-09-39-drop-nullable-subscribe-event-newsletter-id.js +4 -0
- package/core/server/data/migrations/versions/5.0/2022-05-04-15-24-map-existing-emails-to-default-newsletter.js +44 -0
- package/core/server/data/migrations/versions/5.0/2022-05-05-13-13-migrate-legacy-recipient-filters.js +30 -0
- package/core/server/data/migrations/versions/5.0/2022-05-05-13-29-add-newsletters-admin-integration-permission-roles.js +20 -0
- package/core/server/data/migrations/versions/5.0/2022-05-05-15-17-drop-oauth-table.js +3 -0
- package/core/server/data/migrations/versions/5.0/2022-05-06-08-16-cleanup-client-subscriber-permissions.js +68 -0
- package/core/server/data/migrations/versions/5.0/2022-05-06-13-22-add-frontend-integration.js +68 -0
- package/core/server/data/migrations/versions/5.0/2022-05-09-10-00-drop-members-subscribed-column.js +18 -0
- package/core/server/data/migrations/versions/5.0/2022-05-09-14-17-cleanup-invalid-users-status.js +17 -0
- package/core/server/data/migrations/versions/5.0/2022-05-10-08-33-drop-members-analytics-table.js +3 -0
- package/core/server/data/migrations/versions/5.0/2022-05-10-14-57-cleanup-invalid-posts-status.js +17 -0
- package/core/server/data/migrations/versions/5.0/2022-05-11-12-08-drop-webhooks-status-column.js +18 -0
- package/core/server/data/migrations/versions/5.0/2022-05-11-13-12-rename-settings.js +51 -0
- package/core/server/data/migrations/versions/5.0/2022-05-11-16-36-remove-unused-settings.js +54 -0
- package/core/server/data/migrations/versions/5.0/2022-05-12-10-29-add-newsletter-permissions-for-editors-and-authors.js +20 -0
- package/core/server/data/migrations/versions/5.0/2022-05-12-13-51-add-label-permissions-for-authors.js +12 -0
- package/core/server/data/migrations/versions/5.0/2022-05-13-11-38-drop-none-email-recipient-filter.js +28 -0
- package/core/server/data/migrations/versions/5.0/2022-05-21-00-00-regenerate-posts-html.js +70 -0
- package/core/server/data/schema/commands.js +35 -3
- package/core/server/data/schema/default-settings/default-settings.json +2 -159
- package/core/server/data/schema/fixtures/fixture-manager.js +11 -2
- package/core/server/data/schema/fixtures/fixtures.json +16 -7
- package/core/server/data/schema/schema.js +26 -38
- package/core/server/data/schema/validator.js +2 -0
- package/core/server/ghost-server.js +34 -64
- package/core/server/lib/image/gravatar.js +25 -9
- package/core/server/models/api-key.js +3 -26
- package/core/server/models/base/plugins/bulk-operations.js +14 -6
- package/core/server/models/integration.js +17 -0
- package/core/server/models/member.js +8 -4
- package/core/server/models/newsletter.js +27 -0
- package/core/server/models/post.js +30 -32
- package/core/server/models/relations/authors.js +74 -100
- package/core/server/models/settings.js +6 -2
- package/core/server/models/webhook.js +2 -1
- package/core/server/run-update-check.js +1 -1
- package/core/server/services/api-version-compatibility/index.js +24 -18
- package/core/server/services/api-version-compatibility/legacy-api-path-match.js +23 -0
- package/core/server/services/api-version-compatibility/mw-version-rewrites.js +36 -0
- package/core/server/services/auth/api-key/admin.js +8 -7
- package/core/server/services/auth/passwordreset.js +3 -3
- package/core/server/services/auth/session/express-session.js +1 -1
- package/core/server/services/auth/session/index.js +1 -1
- package/core/server/services/auth/setup.js +8 -8
- package/core/server/services/bulk-email/bulk-email-processor.js +5 -1
- package/core/server/services/email-analytics/lib/event-processor.js +25 -14
- package/core/server/services/frontend-data-service/frontend-data-service.js +27 -0
- package/core/server/services/frontend-data-service/index.js +6 -0
- package/core/server/services/mail/index.js +14 -1
- package/core/server/services/mega/email-preview.js +14 -15
- package/core/server/services/mega/mega.js +37 -52
- package/core/server/services/mega/post-email-serializer.js +18 -28
- package/core/server/services/members/api.js +0 -3
- package/core/server/services/members/config.js +0 -49
- package/core/server/services/members/exporter/query.js +88 -0
- package/core/server/services/members/middleware.js +3 -135
- package/core/server/services/members/service.js +2 -29
- package/core/server/services/members/settings.js +3 -9
- package/core/server/services/newsletters/service.js +78 -10
- package/core/server/services/posts/post-scheduling-service.js +5 -17
- package/core/server/services/posts/posts-service.js +15 -62
- package/core/server/services/public-config/site.js +0 -6
- package/core/server/services/route-settings/index.js +0 -3
- package/core/server/services/route-settings/settings-loader.js +10 -34
- package/core/server/services/route-settings/validate.js +1 -7
- package/core/server/services/settings/index.js +1 -77
- package/core/server/services/settings/settings-service.js +184 -0
- package/core/server/services/themes/validate.js +1 -1
- package/core/server/services/url/Resources.js +1 -3
- package/core/server/services/url/UrlGenerator.js +1 -1
- package/core/server/services/url/UrlService.js +6 -20
- package/core/server/services/url/{configs/v2.js → config.js} +0 -0
- package/core/server/services/users.js +2 -2
- package/core/server/services/webhooks/listen.js +5 -2
- package/core/server/services/webhooks/serialize.js +6 -7
- package/core/server/services/webhooks/trigger.js +62 -47
- package/core/server/update-check.js +1 -1
- package/core/server/web/admin/app.js +1 -1
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/server/web/api/app.js +3 -15
- package/core/server/web/api/canary/admin/app.js +1 -1
- package/core/server/web/api/canary/admin/middleware.js +3 -1
- package/core/server/web/api/canary/admin/routes.js +7 -23
- package/core/server/web/api/canary/content/app.js +2 -3
- package/core/server/web/api/canary/content/routes.js +5 -4
- package/core/server/web/members/app.js +5 -4
- package/core/server/web/parent/backend.js +0 -1
- package/core/server/web/parent/frontend.js +5 -6
- package/core/server/web/parent/middleware/ghost-locals.js +0 -3
- package/core/server/web/well-known.js +14 -1
- package/core/shared/config/defaults.json +5 -2
- package/core/shared/config/overrides.json +1 -27
- package/core/shared/html-to-plaintext.js +78 -10
- package/core/shared/labs.js +4 -8
- package/core/shared/settings-cache/cache.js +38 -4
- package/core/shared/settings-cache/public.js +13 -7
- package/core/shared/url-utils.js +0 -2
- package/ghost.js +6 -0
- package/package.json +66 -64
- package/yarn.lock +765 -1300
- package/core/built/assets/ghost-dark-c94ae212747200ca4bafc37cfb0714d8.css +0 -1
- package/core/built/assets/ghost.min-4084931bc22e794fe3722139050a80b3.css +0 -1
- package/core/frontend/helpers/author.js +0 -41
- package/core/frontend/helpers/products.js +0 -65
- package/core/frontend/services/rendering/secure.js +0 -19
- package/core/frontend/services/routing/config/canary.js +0 -61
- package/core/frontend/services/routing/config/v2.js +0 -54
- package/core/frontend/services/routing/config/v3.js +0 -54
- package/core/frontend/services/theme-engine/engines/create.js +0 -45
- package/core/frontend/services/theme-engine/engines/index.js +0 -5
- package/core/frontend/services/theme-engine/middleware/update-local-template-data.js +0 -9
- package/core/server/api/canary/products-public.js +0 -34
- package/core/server/api/canary/products.js +0 -116
- package/core/server/api/canary/utils/serializers/input/products.js +0 -28
- package/core/server/api/canary/utils/serializers/output/email-previews.js +0 -7
- package/core/server/api/canary/utils/serializers/output/products.js +0 -213
- package/core/server/api/v2/actions.js +0 -38
- package/core/server/api/v2/authentication.js +0 -191
- package/core/server/api/v2/authors-public.js +0 -69
- package/core/server/api/v2/config.js +0 -12
- package/core/server/api/v2/db.js +0 -120
- package/core/server/api/v2/images.js +0 -20
- package/core/server/api/v2/index.js +0 -147
- package/core/server/api/v2/integrations.js +0 -144
- package/core/server/api/v2/invites.js +0 -126
- package/core/server/api/v2/mail.js +0 -66
- package/core/server/api/v2/notifications.js +0 -96
- package/core/server/api/v2/oembed.js +0 -186
- package/core/server/api/v2/pages-public.js +0 -78
- package/core/server/api/v2/pages.js +0 -197
- package/core/server/api/v2/posts-public.js +0 -78
- package/core/server/api/v2/posts.js +0 -192
- package/core/server/api/v2/preview.js +0 -46
- package/core/server/api/v2/redirects.js +0 -28
- package/core/server/api/v2/roles.js +0 -19
- package/core/server/api/v2/schedules.js +0 -77
- package/core/server/api/v2/session.js +0 -70
- package/core/server/api/v2/settings-public.js +0 -17
- package/core/server/api/v2/settings.js +0 -195
- package/core/server/api/v2/site.js +0 -14
- package/core/server/api/v2/slack.js +0 -12
- package/core/server/api/v2/slugs.js +0 -51
- package/core/server/api/v2/tags-public.js +0 -71
- package/core/server/api/v2/tags.js +0 -159
- package/core/server/api/v2/themes.js +0 -133
- package/core/server/api/v2/users.js +0 -179
- package/core/server/api/v2/utils/index.js +0 -34
- package/core/server/api/v2/utils/permissions.js +0 -112
- package/core/server/api/v2/utils/serializers/index.js +0 -9
- package/core/server/api/v2/utils/serializers/input/db.js +0 -20
- package/core/server/api/v2/utils/serializers/input/index.js +0 -33
- package/core/server/api/v2/utils/serializers/input/integrations.js +0 -33
- package/core/server/api/v2/utils/serializers/input/pages.js +0 -203
- package/core/server/api/v2/utils/serializers/input/posts.js +0 -218
- package/core/server/api/v2/utils/serializers/input/settings.js +0 -152
- package/core/server/api/v2/utils/serializers/input/tags.js +0 -35
- package/core/server/api/v2/utils/serializers/input/users.js +0 -26
- package/core/server/api/v2/utils/serializers/input/utils/url.js +0 -71
- package/core/server/api/v2/utils/serializers/input/webhooks.js +0 -12
- package/core/server/api/v2/utils/serializers/output/actions.js +0 -13
- package/core/server/api/v2/utils/serializers/output/all.js +0 -25
- package/core/server/api/v2/utils/serializers/output/authentication.js +0 -68
- package/core/server/api/v2/utils/serializers/output/authors.js +0 -21
- package/core/server/api/v2/utils/serializers/output/config.js +0 -21
- package/core/server/api/v2/utils/serializers/output/db.js +0 -40
- package/core/server/api/v2/utils/serializers/output/images.js +0 -19
- package/core/server/api/v2/utils/serializers/output/index.js +0 -107
- package/core/server/api/v2/utils/serializers/output/integrations.js +0 -35
- package/core/server/api/v2/utils/serializers/output/invites.js +0 -24
- package/core/server/api/v2/utils/serializers/output/mail.js +0 -19
- package/core/server/api/v2/utils/serializers/output/notifications.js +0 -29
- package/core/server/api/v2/utils/serializers/output/oembed.js +0 -8
- package/core/server/api/v2/utils/serializers/output/pages.js +0 -26
- package/core/server/api/v2/utils/serializers/output/posts.js +0 -26
- package/core/server/api/v2/utils/serializers/output/preview.js +0 -9
- package/core/server/api/v2/utils/serializers/output/redirects.js +0 -5
- package/core/server/api/v2/utils/serializers/output/roles.js +0 -29
- package/core/server/api/v2/utils/serializers/output/schedules.js +0 -5
- package/core/server/api/v2/utils/serializers/output/settings.js +0 -61
- package/core/server/api/v2/utils/serializers/output/site.js +0 -16
- package/core/server/api/v2/utils/serializers/output/slugs.js +0 -11
- package/core/server/api/v2/utils/serializers/output/tags.js +0 -25
- package/core/server/api/v2/utils/serializers/output/themes.js +0 -25
- package/core/server/api/v2/utils/serializers/output/users.js +0 -45
- package/core/server/api/v2/utils/serializers/output/utils/clean.js +0 -174
- package/core/server/api/v2/utils/serializers/output/utils/date.js +0 -21
- package/core/server/api/v2/utils/serializers/output/utils/extra-attrs.js +0 -161
- package/core/server/api/v2/utils/serializers/output/utils/mapper.js +0 -136
- package/core/server/api/v2/utils/serializers/output/utils/post-gating.js +0 -29
- package/core/server/api/v2/utils/serializers/output/utils/settings-type-group-mapper.js +0 -24
- package/core/server/api/v2/utils/serializers/output/utils/url.js +0 -67
- package/core/server/api/v2/utils/serializers/output/webhooks.js +0 -15
- package/core/server/api/v2/utils/validators/index.js +0 -9
- package/core/server/api/v2/utils/validators/input/images.js +0 -85
- package/core/server/api/v2/utils/validators/input/index.js +0 -45
- package/core/server/api/v2/utils/validators/input/invitations.js +0 -49
- package/core/server/api/v2/utils/validators/input/invites.js +0 -21
- package/core/server/api/v2/utils/validators/input/oembed.js +0 -17
- package/core/server/api/v2/utils/validators/input/pages.js +0 -46
- package/core/server/api/v2/utils/validators/input/passwordreset.js +0 -36
- package/core/server/api/v2/utils/validators/input/posts.js +0 -46
- package/core/server/api/v2/utils/validators/input/settings.js +0 -79
- package/core/server/api/v2/utils/validators/input/setup.js +0 -17
- package/core/server/api/v2/utils/validators/input/tags.js +0 -6
- package/core/server/api/v2/utils/validators/input/users.js +0 -21
- package/core/server/api/v2/utils/validators/output/index.js +0 -1
- package/core/server/api/v2/utils/validators/utils/json-schema.js +0 -17
- package/core/server/api/v2/webhooks.js +0 -163
- package/core/server/api/v3/authentication.js +0 -192
- package/core/server/api/v3/authors-public.js +0 -69
- package/core/server/api/v3/config.js +0 -12
- package/core/server/api/v3/db.js +0 -131
- package/core/server/api/v3/email-preview.js +0 -74
- package/core/server/api/v3/email.js +0 -65
- package/core/server/api/v3/identities.js +0 -36
- package/core/server/api/v3/images.js +0 -20
- package/core/server/api/v3/index.js +0 -179
- package/core/server/api/v3/integrations.js +0 -150
- package/core/server/api/v3/invites.js +0 -125
- package/core/server/api/v3/labels.js +0 -162
- package/core/server/api/v3/mail.js +0 -66
- package/core/server/api/v3/memberSigninUrls.js +0 -33
- package/core/server/api/v3/members.js +0 -412
- package/core/server/api/v3/membersStripeConnect.js +0 -29
- package/core/server/api/v3/notifications.js +0 -96
- package/core/server/api/v3/oembed.js +0 -23
- package/core/server/api/v3/pages-public.js +0 -77
- package/core/server/api/v3/pages.js +0 -199
- package/core/server/api/v3/posts-public.js +0 -76
- package/core/server/api/v3/posts.js +0 -200
- package/core/server/api/v3/preview.js +0 -44
- package/core/server/api/v3/redirects.js +0 -47
- package/core/server/api/v3/roles.js +0 -19
- package/core/server/api/v3/schedules.js +0 -77
- package/core/server/api/v3/session.js +0 -70
- package/core/server/api/v3/settings-public.js +0 -17
- package/core/server/api/v3/settings.js +0 -224
- package/core/server/api/v3/site.js +0 -14
- package/core/server/api/v3/slack.js +0 -12
- package/core/server/api/v3/slugs.js +0 -48
- package/core/server/api/v3/snippets.js +0 -115
- package/core/server/api/v3/tags-public.js +0 -71
- package/core/server/api/v3/tags.js +0 -159
- package/core/server/api/v3/themes.js +0 -131
- package/core/server/api/v3/users.js +0 -242
- package/core/server/api/v3/utils/index.js +0 -34
- package/core/server/api/v3/utils/permissions.js +0 -116
- package/core/server/api/v3/utils/serializers/index.js +0 -9
- package/core/server/api/v3/utils/serializers/input/authors.js +0 -31
- package/core/server/api/v3/utils/serializers/input/db.js +0 -20
- package/core/server/api/v3/utils/serializers/input/index.js +0 -41
- package/core/server/api/v3/utils/serializers/input/integrations.js +0 -33
- package/core/server/api/v3/utils/serializers/input/members.js +0 -62
- package/core/server/api/v3/utils/serializers/input/pages.js +0 -208
- package/core/server/api/v3/utils/serializers/input/posts.js +0 -242
- package/core/server/api/v3/utils/serializers/input/settings.js +0 -168
- package/core/server/api/v3/utils/serializers/input/tags.js +0 -42
- package/core/server/api/v3/utils/serializers/input/users.js +0 -26
- package/core/server/api/v3/utils/serializers/input/utils/slug-filter-order.js +0 -18
- package/core/server/api/v3/utils/serializers/input/utils/url.js +0 -71
- package/core/server/api/v3/utils/serializers/input/webhooks.js +0 -12
- package/core/server/api/v3/utils/serializers/output/actions.js +0 -13
- package/core/server/api/v3/utils/serializers/output/all.js +0 -25
- package/core/server/api/v3/utils/serializers/output/authentication.js +0 -69
- package/core/server/api/v3/utils/serializers/output/authors.js +0 -21
- package/core/server/api/v3/utils/serializers/output/config.js +0 -25
- package/core/server/api/v3/utils/serializers/output/db.js +0 -40
- package/core/server/api/v3/utils/serializers/output/email-preview.js +0 -7
- package/core/server/api/v3/utils/serializers/output/emails.js +0 -13
- package/core/server/api/v3/utils/serializers/output/identities.js +0 -7
- package/core/server/api/v3/utils/serializers/output/images.js +0 -19
- package/core/server/api/v3/utils/serializers/output/index.js +0 -135
- package/core/server/api/v3/utils/serializers/output/integrations.js +0 -35
- package/core/server/api/v3/utils/serializers/output/invites.js +0 -24
- package/core/server/api/v3/utils/serializers/output/labels.js +0 -25
- package/core/server/api/v3/utils/serializers/output/mail.js +0 -19
- package/core/server/api/v3/utils/serializers/output/member-signin_urls.js +0 -7
- package/core/server/api/v3/utils/serializers/output/members.js +0 -228
- package/core/server/api/v3/utils/serializers/output/notifications.js +0 -29
- package/core/server/api/v3/utils/serializers/output/oembed.js +0 -8
- package/core/server/api/v3/utils/serializers/output/pages.js +0 -26
- package/core/server/api/v3/utils/serializers/output/posts.js +0 -26
- package/core/server/api/v3/utils/serializers/output/preview.js +0 -10
- package/core/server/api/v3/utils/serializers/output/redirects.js +0 -5
- package/core/server/api/v3/utils/serializers/output/roles.js +0 -29
- package/core/server/api/v3/utils/serializers/output/schedules.js +0 -5
- package/core/server/api/v3/utils/serializers/output/settings.js +0 -65
- package/core/server/api/v3/utils/serializers/output/site.js +0 -19
- package/core/server/api/v3/utils/serializers/output/slugs.js +0 -11
- package/core/server/api/v3/utils/serializers/output/snippets.js +0 -97
- package/core/server/api/v3/utils/serializers/output/tags.js +0 -25
- package/core/server/api/v3/utils/serializers/output/themes.js +0 -25
- package/core/server/api/v3/utils/serializers/output/users.js +0 -74
- package/core/server/api/v3/utils/serializers/output/utils/clean.js +0 -166
- package/core/server/api/v3/utils/serializers/output/utils/date.js +0 -21
- package/core/server/api/v3/utils/serializers/output/utils/extra-attrs.js +0 -174
- package/core/server/api/v3/utils/serializers/output/utils/mapper.js +0 -197
- package/core/server/api/v3/utils/serializers/output/utils/post-gating.js +0 -39
- package/core/server/api/v3/utils/serializers/output/utils/settings-type-group-mapper.js +0 -24
- package/core/server/api/v3/utils/serializers/output/utils/url.js +0 -67
- package/core/server/api/v3/utils/serializers/output/webhooks.js +0 -15
- package/core/server/api/v3/utils/validators/index.js +0 -9
- package/core/server/api/v3/utils/validators/input/images.js +0 -85
- package/core/server/api/v3/utils/validators/input/index.js +0 -61
- package/core/server/api/v3/utils/validators/input/invitations.js +0 -49
- package/core/server/api/v3/utils/validators/input/invites.js +0 -21
- package/core/server/api/v3/utils/validators/input/labels.js +0 -6
- package/core/server/api/v3/utils/validators/input/members.js +0 -6
- package/core/server/api/v3/utils/validators/input/oembed.js +0 -17
- package/core/server/api/v3/utils/validators/input/pages.js +0 -46
- package/core/server/api/v3/utils/validators/input/passwordreset.js +0 -36
- package/core/server/api/v3/utils/validators/input/posts.js +0 -46
- package/core/server/api/v3/utils/validators/input/settings.js +0 -89
- package/core/server/api/v3/utils/validators/input/setup.js +0 -17
- package/core/server/api/v3/utils/validators/input/snippets.js +0 -6
- package/core/server/api/v3/utils/validators/input/tags.js +0 -6
- package/core/server/api/v3/utils/validators/input/users.js +0 -22
- package/core/server/api/v3/utils/validators/input/webhooks.js +0 -27
- package/core/server/api/v3/utils/validators/output/index.js +0 -1
- package/core/server/api/v3/utils/validators/utils/json-schema.js +0 -17
- package/core/server/api/v3/webhooks.js +0 -130
- package/core/server/data/migrations/utils.js +0 -571
- package/core/server/data/migrations/versions/1.13/1-custom-template-post.js +0 -7
- package/core/server/data/migrations/versions/1.13/2-theme-permissions.js +0 -58
- package/core/server/data/migrations/versions/1.18/1-add-webhooks-table.js +0 -2
- package/core/server/data/migrations/versions/1.19/1-webhook-permissions.js +0 -31
- package/core/server/data/migrations/versions/1.20/1-remove-settings-keys.js +0 -65
- package/core/server/data/migrations/versions/1.21/1-add-contributor-role.js +0 -58
- package/core/server/data/migrations/versions/1.22/1-multiple-authors-DDL.js +0 -2
- package/core/server/data/migrations/versions/1.22/1-multiple-authors-DML.js +0 -63
- package/core/server/data/migrations/versions/1.25/1-update-koenig-beta-html.js +0 -70
- package/core/server/data/migrations/versions/1.25/2-demo-post.js +0 -55
- package/core/server/data/migrations/versions/1.3/1-post-excerpt.js +0 -7
- package/core/server/data/migrations/versions/1.4/1-codeinjection-post.js +0 -14
- package/core/server/data/migrations/versions/1.5/1-og-twitter-post.js +0 -34
- package/core/server/data/migrations/versions/1.7/1-add-backup-client.js +0 -10
- package/core/server/data/migrations/versions/1.9/1-add-permissions-redirect.js +0 -23
- package/core/server/data/migrations/versions/2.0/1-rename-amp-column.js +0 -44
- package/core/server/data/migrations/versions/2.0/2-update-posts.js +0 -7
- package/core/server/data/migrations/versions/2.0/3-remove-koenig-labs.js +0 -42
- package/core/server/data/migrations/versions/2.0/4-permalink-setting.js +0 -85
- package/core/server/data/migrations/versions/2.0/5-remove-demo-post.js +0 -85
- package/core/server/data/migrations/versions/2.0/6-replace-fixture-posts.js +0 -10
- package/core/server/data/migrations/versions/2.13/1-remove-empty-strings.js +0 -5
- package/core/server/data/migrations/versions/2.14/1-add-actions-table.js +0 -2
- package/core/server/data/migrations/versions/2.14/2-add-actions-permissions.js +0 -12
- package/core/server/data/migrations/versions/2.15/1-add-type-column-to-integrations.js +0 -8
- package/core/server/data/migrations/versions/2.15/2-insert-zapier-integration.js +0 -69
- package/core/server/data/migrations/versions/2.16/1-add-members-perrmissions.js +0 -1
- package/core/server/data/migrations/versions/2.17/1-normalize-settings.js +0 -74
- package/core/server/data/migrations/versions/2.17/2-posts-add-canonical-url.js +0 -7
- package/core/server/data/migrations/versions/2.18/1-restore-settings-from-backup.js +0 -134
- package/core/server/data/migrations/versions/2.2/1-add-sessions-table.js +0 -2
- package/core/server/data/migrations/versions/2.2/2-add-integrations-and-api-key-tables.js +0 -6
- package/core/server/data/migrations/versions/2.2/3-insert-admin-integration-role.js +0 -83
- package/core/server/data/migrations/versions/2.2/4-insert-integration-and-api-key-permissions.js +0 -77
- package/core/server/data/migrations/versions/2.2/5-add-mobiledoc-revisions-table.js +0 -2
- package/core/server/data/migrations/versions/2.21/1-update-editor-permissions.js +0 -28
- package/core/server/data/migrations/versions/2.22/1-add-member-permissions-to-roles.js +0 -47
- package/core/server/data/migrations/versions/2.27/1-insert-ghost-db-backup-role.js +0 -83
- package/core/server/data/migrations/versions/2.27/2-insert-db-backup-integration.js +0 -69
- package/core/server/data/migrations/versions/2.27/3-add-subdirectory-to-relative-canonical-urls.js +0 -100
- package/core/server/data/migrations/versions/2.28/1-add-db-backup-content-permission.js +0 -9
- package/core/server/data/migrations/versions/2.28/2-add-db-backup-content-permission-to-roles.js +0 -15
- package/core/server/data/migrations/versions/2.28/3-insert-ghost-scheduler-role.js +0 -84
- package/core/server/data/migrations/versions/2.28/4-insert-scheduler-integration.js +0 -69
- package/core/server/data/migrations/versions/2.28/5-add-scheduler-permission-to-roles.js +0 -23
- package/core/server/data/migrations/versions/2.28/6-add-type-column.js +0 -6
- package/core/server/data/migrations/versions/2.28/7-populate-type-column.js +0 -6
- package/core/server/data/migrations/versions/2.28/8-remove-page-column.js +0 -6
- package/core/server/data/migrations/versions/2.29/1-add-post-page-column.js +0 -20
- package/core/server/data/migrations/versions/2.29/2-populate-post-page-column.js +0 -98
- package/core/server/data/migrations/versions/2.29/3-remove-page-type-column.js +0 -15
- package/core/server/data/migrations/versions/2.3/1-add-webhook-columns.js +0 -45
- package/core/server/data/migrations/versions/2.3/2-add-webhook-edit-permission.js +0 -9
- package/core/server/data/migrations/versions/2.31/1-remove-name-and-password-from-members-table.js +0 -15
- package/core/server/data/migrations/versions/2.32/01-add-members-stripe-customers-table.js +0 -4
- package/core/server/data/migrations/versions/2.32/02-add-name-to-members-table.js +0 -7
- package/core/server/data/migrations/versions/2.33/01-correct-members-stripe-customers-table.js +0 -37
- package/core/server/data/migrations/versions/2.34/01-add-stripe-customers-subscriptions-table.js +0 -2
- package/core/server/data/migrations/versions/2.34/02-add-email-to-members-stripe-customers-table.js +0 -7
- package/core/server/data/migrations/versions/2.34/03-add-name-to-members-stripe-customers-table.js +0 -7
- package/core/server/data/migrations/versions/2.35/01-add-note-to-members-table.js +0 -7
- package/core/server/data/migrations/versions/2.37/01-add-self-signup-and-from address-to-members-settings.js +0 -67
- package/core/server/data/migrations/versions/2.6/1-add-webhook-permission-roles.js +0 -31
- package/core/server/data/migrations/versions/2.8/1-add-members-table.js +0 -2
- package/core/server/data/migrations/versions/3.0/01-remove-user-ghost-auth-columns.js +0 -14
- package/core/server/data/migrations/versions/3.0/02-drop-token-auth-tables.js +0 -31
- package/core/server/data/migrations/versions/3.0/03-drop-client-auth-tables.js +0 -35
- package/core/server/data/migrations/versions/3.0/04-add-posts-meta-table.js +0 -2
- package/core/server/data/migrations/versions/3.0/05-populate-posts-meta-table.js +0 -83
- package/core/server/data/migrations/versions/3.0/06-remove-posts-meta-columns.js +0 -44
- package/core/server/data/migrations/versions/3.0/07-add-posts-type-column.js +0 -8
- package/core/server/data/migrations/versions/3.0/08-populate-posts-type-column.js +0 -94
- package/core/server/data/migrations/versions/3.0/09-remove-posts-page-column.js +0 -7
- package/core/server/data/migrations/versions/3.0/10-remove-empty-strings.js +0 -81
- package/core/server/data/migrations/versions/3.0/11-update-posts-html.js +0 -7
- package/core/server/data/migrations/versions/3.0/12-populate-members-table-from-subscribers.js +0 -54
- package/core/server/data/migrations/versions/3.0/13-drop-subscribers-table.js +0 -34
- package/core/server/data/migrations/versions/3.0/14-remove-subscribers-flag.js +0 -24
- package/core/server/data/migrations/versions/3.1/01-add-send-email-when-published-to-posts.js +0 -7
- package/core/server/data/migrations/versions/3.1/02-add-email-subject-to-posts-meta.js +0 -7
- package/core/server/data/migrations/versions/3.1/03-add-email-preview-permissions.js +0 -18
- package/core/server/data/migrations/versions/3.1/04-add-subscribed-flag-to-members.js +0 -7
- package/core/server/data/migrations/versions/3.1/05-add-emails-table.js +0 -2
- package/core/server/data/migrations/versions/3.1/06-add-email-permissions.js +0 -15
- package/core/server/data/migrations/versions/3.1/07-add-uuid-field-to-members.js +0 -8
- package/core/server/data/migrations/versions/3.1/08-add-uuid-values-to-members.js +0 -23
- package/core/server/data/migrations/versions/3.1/09-add-further-email-permissions.js +0 -25
- package/core/server/data/migrations/versions/3.1/10-add-email-error-data-column.js +0 -8
- package/core/server/data/migrations/versions/3.11/01-remove-broken-complimentary-plan-from-members-settings.js +0 -68
- package/core/server/data/migrations/versions/3.12/01-add-identity-permission.js +0 -7
- package/core/server/data/migrations/versions/3.12/02-remove-legacy-is-paid-flag-from-settings.js +0 -93
- package/core/server/data/migrations/versions/3.18/01-add-email-preview-permissions-to-roles.js +0 -39
- package/core/server/data/migrations/versions/3.18/02-add-members_stripe_connect-auth-permissions.js +0 -7
- package/core/server/data/migrations/versions/3.19/01-update-member-from-email-address.js +0 -91
- package/core/server/data/migrations/versions/3.2/01-add-cancel-at-period-end-to-subscriptions.js +0 -7
- package/core/server/data/migrations/versions/3.22/01-removed-legacy-values-from-settings-table.js +0 -65
- package/core/server/data/migrations/versions/3.22/02-settings-key-renames.js +0 -90
- package/core/server/data/migrations/versions/3.22/03-add-group-and-flags-to-settings.js +0 -15
- package/core/server/data/migrations/versions/3.22/04-populate-settings-groups-and-flags.js +0 -194
- package/core/server/data/migrations/versions/3.22/05-migrate-members-subscription-settings.js +0 -182
- package/core/server/data/migrations/versions/3.22/06-migrate-stripe-connect-settings.js +0 -132
- package/core/server/data/migrations/versions/3.22/07-update-type-for-settings.js +0 -137
- package/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js +0 -65
- package/core/server/data/migrations/versions/3.23/02-remove-bulk-email-settings.js +0 -48
- package/core/server/data/migrations/versions/3.23/03-update-portal-button-setting.js +0 -24
- package/core/server/data/migrations/versions/3.23/04-add-meta-columns-to-tags-table.js +0 -54
- package/core/server/data/migrations/versions/3.24/01-populate-group-for-new-portal-settings.js +0 -38
- package/core/server/data/migrations/versions/3.25/01-add-members-stripe-webhook-settings.js +0 -22
- package/core/server/data/migrations/versions/3.26/01-add-amp-gtag-id-setting.js +0 -20
- package/core/server/data/migrations/versions/3.29/01-remove-duplicate-subscriptions.js +0 -53
- package/core/server/data/migrations/versions/3.29/02-remove-duplicate-customers.js +0 -53
- package/core/server/data/migrations/versions/3.29/03-remove-orphaned-customers.js +0 -35
- package/core/server/data/migrations/versions/3.29/04-remove-orphaned-subscriptions.js +0 -35
- package/core/server/data/migrations/versions/3.29/05-add-member-constraints.js +0 -177
- package/core/server/data/migrations/versions/3.30/01-add-member-signin-url-permission-roles.js +0 -8
- package/core/server/data/migrations/versions/3.32/01-add-member-support-address-setting.js +0 -27
- package/core/server/data/migrations/versions/3.32/02-add-member-reply-address-setting.js +0 -20
- package/core/server/data/migrations/versions/3.32/03-add-routes-hash-setting.js +0 -20
- package/core/server/data/migrations/versions/3.33/01-add-email-recipients-tables.js +0 -8
- package/core/server/data/migrations/versions/3.34/01-add-tokens-table.js +0 -2
- package/core/server/data/migrations/versions/3.35/01-add-address-columns-to-emails-table.js +0 -14
- package/core/server/data/migrations/versions/3.36/01-add-snippets-table.js +0 -2
- package/core/server/data/migrations/versions/3.36/02-add-snippets-permissions.js +0 -56
- package/core/server/data/migrations/versions/3.37/01-update-portal-button-setting.js +0 -30
- package/core/server/data/migrations/versions/3.38/01-add-email-recipient-filter-column.js +0 -8
- package/core/server/data/migrations/versions/3.38/02-populate-email-recipient-filter-column.js +0 -34
- package/core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js +0 -8
- package/core/server/data/migrations/versions/3.38/04-populate-recipient-filter-column.js +0 -49
- package/core/server/data/migrations/versions/3.38/05-add-emails-track-opens-column.js +0 -7
- package/core/server/data/migrations/versions/3.38/06-add-newsletter-settings.js +0 -16
- package/core/server/data/migrations/versions/3.38/07-migrate-newsletter-settings-from-config.js +0 -48
- package/core/server/data/migrations/versions/3.38/08-repopulate-send-email-when-published-down-migration.js +0 -25
- package/core/server/data/migrations/versions/3.38/09-remove-send-email-when-published-column.js +0 -7
- package/core/server/data/migrations/versions/3.39/01-add-members-signup-redirect-settings.js +0 -16
- package/core/server/data/migrations/versions/3.39/02-add-user-id-to-api-keys-table.js +0 -7
- package/core/server/data/migrations/versions/3.39/03-add-email-track-opens-setting.js +0 -16
- package/core/server/data/migrations/versions/3.39/04-add-cancellation-reason-column.js +0 -7
- package/core/server/data/migrations/versions/3.39/05-remove-unused-columns-on-emails.js +0 -14
- package/core/server/data/migrations/versions/3.39/06-add-email-recipient-index.js +0 -58
- package/core/server/data/migrations/versions/3.39/07-add-email-recipients-event-timestamps.js +0 -19
- package/core/server/data/migrations/versions/3.39/08-add-email-stats-columns.js +0 -22
- package/core/server/data/migrations/versions/3.40/01-add-members-email-open-rate-column.js +0 -8
- package/core/server/data/migrations/versions/3.40/02-add members-email-aggregation-columns.js +0 -16
- package/core/server/data/migrations/versions/3.40/03-populate-members-email-counts.js +0 -15
- package/core/server/data/migrations/versions/3.41/01-add-firstpromoter-settings.js +0 -16
- package/core/server/data/migrations/versions/3.6/1-add-labels-table.js +0 -2
- package/core/server/data/migrations/versions/3.6/2-add-members-labels-table.js +0 -2
- package/core/server/data/migrations/versions/3.6/3-add-labels-permissions.js +0 -47
- package/core/server/data/migrations/versions/3.7/01-fix-incorrect-member-labels-foreign-keys.js +0 -46
- package/core/server/data/migrations/versions/3.8/01-add-geolocation-to-members.js +0 -7
- package/core/server/data/migrations/versions/3.9/01-add-member-sigin-url-permissions.js +0 -7
- package/core/server/services/mail/utils.js +0 -34
- package/core/server/services/url/configs/canary.js +0 -143
- package/core/server/services/url/configs/v3.js +0 -141
- package/core/server/services/url/configs/v4.js +0 -143
- package/core/server/web/api/v2/admin/app.js +0 -43
- package/core/server/web/api/v2/admin/middleware.js +0 -85
- package/core/server/web/api/v2/admin/routes.js +0 -200
- package/core/server/web/api/v2/content/app.js +0 -38
- package/core/server/web/api/v2/content/middleware.js +0 -23
- package/core/server/web/api/v2/content/routes.js +0 -37
- package/core/server/web/api/v3/admin/app.js +0 -43
- package/core/server/web/api/v3/admin/middleware.js +0 -89
- package/core/server/web/api/v3/admin/routes.js +0 -267
- package/core/server/web/api/v3/content/app.js +0 -38
- package/core/server/web/api/v3/content/middleware.js +0 -23
- package/core/server/web/api/v3/content/routes.js +0 -37
- package/core/server/web/oauth/app.js +0 -153
- package/core/server/web/oauth/index.js +0 -1
|
@@ -3,7 +3,7 @@ const errors = require('@tryghost/errors');
|
|
|
3
3
|
const moment = require('moment');
|
|
4
4
|
const config = require('../../../shared/config');
|
|
5
5
|
const urlUtils = require('../../../shared/url-utils');
|
|
6
|
-
const api = require('../../api');
|
|
6
|
+
const api = require('../../api').endpoints;
|
|
7
7
|
|
|
8
8
|
const messages = {
|
|
9
9
|
jobNotFound: 'Job not found.',
|
|
@@ -11,15 +11,6 @@ const messages = {
|
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
class PostSchedulingService {
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
* @param {Object} options
|
|
17
|
-
* @param {String} options.apiVersion - api version
|
|
18
|
-
*/
|
|
19
|
-
constructor({apiVersion}) {
|
|
20
|
-
this.api = api[apiVersion];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
14
|
/**
|
|
24
15
|
* Publishes scheduled resource (a post or a page at the moment of writing)
|
|
25
16
|
*
|
|
@@ -32,7 +23,7 @@ class PostSchedulingService {
|
|
|
32
23
|
async publish(resourceType, id, force, options) {
|
|
33
24
|
const publishAPostBySchedulerToleranceInMinutes = config.get('times').publishAPostBySchedulerToleranceInMinutes;
|
|
34
25
|
|
|
35
|
-
const result = await
|
|
26
|
+
const result = await api[resourceType].read({id}, options);
|
|
36
27
|
const preScheduledResource = result[resourceType][0];
|
|
37
28
|
|
|
38
29
|
const publishedAtMoment = moment(preScheduledResource.published_at);
|
|
@@ -51,7 +42,7 @@ class PostSchedulingService {
|
|
|
51
42
|
updated_at: moment(preScheduledResource.updated_at).toISOString(true)
|
|
52
43
|
}];
|
|
53
44
|
|
|
54
|
-
const editResult = await
|
|
45
|
+
const editResult = await api[resourceType].edit(
|
|
55
46
|
editedResource,
|
|
56
47
|
_.pick(options, ['context', 'id', 'transacting', 'forUpdate'])
|
|
57
48
|
);
|
|
@@ -88,13 +79,10 @@ class PostSchedulingService {
|
|
|
88
79
|
}
|
|
89
80
|
|
|
90
81
|
/**
|
|
91
|
-
* @param {string} apiVersion - API version to use within the service
|
|
92
82
|
* @returns {PostSchedulingService} instance of the PostsService
|
|
93
83
|
*/
|
|
94
|
-
const getPostSchedulingServiceInstance = (
|
|
95
|
-
return new PostSchedulingService(
|
|
96
|
-
apiVersion: apiVersion
|
|
97
|
-
});
|
|
84
|
+
const getPostSchedulingServiceInstance = () => {
|
|
85
|
+
return new PostSchedulingService();
|
|
98
86
|
};
|
|
99
87
|
|
|
100
88
|
module.exports = getPostSchedulingServiceInstance;
|
|
@@ -3,14 +3,12 @@ const {BadRequestError} = require('@tryghost/errors');
|
|
|
3
3
|
const tpl = require('@tryghost/tpl');
|
|
4
4
|
|
|
5
5
|
const messages = {
|
|
6
|
-
invalidEmailRecipientFilter: 'Invalid filter in email_recipient_filter param.',
|
|
7
6
|
invalidVisibilityFilter: 'Invalid visibility filter.',
|
|
8
|
-
|
|
7
|
+
invalidEmailSegment: 'The email segment parameter doesn\'t contain a valid filter'
|
|
9
8
|
};
|
|
10
9
|
|
|
11
10
|
class PostsService {
|
|
12
|
-
constructor({mega,
|
|
13
|
-
this.apiVersion = apiVersion;
|
|
11
|
+
constructor({mega, urlUtils, models, isSet}) {
|
|
14
12
|
this.mega = mega;
|
|
15
13
|
this.urlUtils = urlUtils;
|
|
16
14
|
this.models = models;
|
|
@@ -18,76 +16,33 @@ class PostsService {
|
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
async editPost(frame) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const newsletter = await this.models.Newsletter.findOne({id: frame.options.newsletter_id}, {transacting: frame.options.transacting});
|
|
26
|
-
if (!newsletter || newsletter.get('status') !== 'active') {
|
|
27
|
-
throw new BadRequestError({
|
|
28
|
-
message: messages.invalidNewsletterId
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
} else {
|
|
32
|
-
// Set the newsletter_id if it isn't passed to the API
|
|
33
|
-
// NOTE: this option is ignored if the newsletter_id is already set on the post.
|
|
34
|
-
// Never use frame.options.newsletter_id to do actual logic. Use model.newsletter_id after the edit.
|
|
35
|
-
const newsletters = await this.models.Newsletter.findPage({filter: 'status:active', limit: 1, columns: ['id']}, {transacting: frame.options.transacting});
|
|
36
|
-
if (newsletters.data.length > 0) {
|
|
37
|
-
frame.options.newsletter_id = newsletters.data[0].id;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!frame.options.email_recipient_filter && frame.options.send_email_when_published) {
|
|
42
|
-
await this.models.Base.transaction(async (transacting) => {
|
|
43
|
-
const options = {
|
|
44
|
-
...frame.options,
|
|
45
|
-
transacting
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* 1. We need to edit the post first in order to know what the visibility is.
|
|
50
|
-
* 2. We can only pass the email_recipient_filter when we change the status.
|
|
51
|
-
*
|
|
52
|
-
* So, we first edit the post as requested, with all information except the status,
|
|
53
|
-
* from there we can determine what the email_recipient_filter should be and then finish
|
|
54
|
-
* the edit, with the status and the email_recipient_filter option.
|
|
55
|
-
*/
|
|
56
|
-
const status = frame.data.posts[0].status;
|
|
57
|
-
delete frame.data.posts[0].status;
|
|
58
|
-
const interimModel = await this.models.Post.edit(frame.data.posts[0], options);
|
|
59
|
-
frame.data.posts[0].status = status;
|
|
60
|
-
|
|
61
|
-
options.email_recipient_filter = interimModel.get('visibility') === 'paid' ? 'paid' : 'all';
|
|
62
|
-
|
|
63
|
-
model = await this.models.Post.edit(frame.data.posts[0], options);
|
|
64
|
-
});
|
|
65
|
-
} else {
|
|
66
|
-
model = await this.models.Post.edit(frame.data.posts[0], frame.options);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**Handle newsletter email */
|
|
70
|
-
const emailRecipientFilter = model.get('email_recipient_filter');
|
|
71
|
-
if (emailRecipientFilter !== 'none') {
|
|
72
|
-
if (emailRecipientFilter !== 'all') {
|
|
19
|
+
// Make sure the newsletter is matching an active newsletter
|
|
20
|
+
// Note that this option is simply ignored if the post isn't published or scheduled
|
|
21
|
+
if (frame.options.newsletter && frame.options.email_segment) {
|
|
22
|
+
if (frame.options.email_segment !== 'all') {
|
|
73
23
|
// check filter is valid
|
|
74
24
|
try {
|
|
75
|
-
await this.models.Member.findPage({filter:
|
|
25
|
+
await this.models.Member.findPage({filter: frame.options.email_segment, limit: 1});
|
|
76
26
|
} catch (err) {
|
|
77
27
|
return Promise.reject(new BadRequestError({
|
|
78
|
-
message: tpl(messages.
|
|
28
|
+
message: tpl(messages.invalidEmailSegment),
|
|
79
29
|
context: err.message
|
|
80
30
|
}));
|
|
81
31
|
}
|
|
82
32
|
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const model = await this.models.Post.edit(frame.data.posts[0], frame.options);
|
|
83
36
|
|
|
37
|
+
/**Handle newsletter email */
|
|
38
|
+
if (model.get('newsletter_id')) {
|
|
84
39
|
const sendEmail = model.wasChanged() && this.shouldSendEmail(model.get('status'), model.previous('status'));
|
|
85
40
|
|
|
86
41
|
if (sendEmail) {
|
|
87
42
|
let postEmail = model.relations.email;
|
|
88
43
|
|
|
89
44
|
if (!postEmail) {
|
|
90
|
-
const email = await this.mega.addEmail(model,
|
|
45
|
+
const email = await this.mega.addEmail(model, frame.options);
|
|
91
46
|
model.set('email', email);
|
|
92
47
|
} else if (postEmail && postEmail.get('status') === 'failed') {
|
|
93
48
|
const email = await this.mega.retryFailedEmail(postEmail);
|
|
@@ -159,17 +114,15 @@ class PostsService {
|
|
|
159
114
|
}
|
|
160
115
|
|
|
161
116
|
/**
|
|
162
|
-
* @param {string} apiVersion - API version to use within the service
|
|
163
117
|
* @returns {PostsService} instance of the PostsService
|
|
164
118
|
*/
|
|
165
|
-
const getPostServiceInstance = (
|
|
119
|
+
const getPostServiceInstance = () => {
|
|
166
120
|
const urlUtils = require('../../../shared/url-utils');
|
|
167
121
|
const {mega} = require('../mega');
|
|
168
122
|
const labs = require('../../../shared/labs');
|
|
169
123
|
const models = require('../../models');
|
|
170
124
|
|
|
171
125
|
return new PostsService({
|
|
172
|
-
apiVersion: apiVersion,
|
|
173
126
|
mega: mega,
|
|
174
127
|
urlUtils: urlUtils,
|
|
175
128
|
models: models,
|
|
@@ -2,7 +2,6 @@ const ghostVersion = require('@tryghost/version');
|
|
|
2
2
|
const settingsCache = require('../../../shared/settings-cache');
|
|
3
3
|
const config = require('../../../shared/config');
|
|
4
4
|
const urlUtils = require('../../../shared/url-utils');
|
|
5
|
-
const labs = require('../../../shared/labs');
|
|
6
5
|
|
|
7
6
|
module.exports = function getSiteProperties() {
|
|
8
7
|
const siteProperties = {
|
|
@@ -15,11 +14,6 @@ module.exports = function getSiteProperties() {
|
|
|
15
14
|
version: ghostVersion.safe
|
|
16
15
|
};
|
|
17
16
|
|
|
18
|
-
if (labs.isSet('oauthLogin') && settingsCache.get('oauth_client_id') && settingsCache.get('oauth_client_secret')) {
|
|
19
|
-
// Only set the oauth flag if oauth is enabled to avoid API changes
|
|
20
|
-
siteProperties.oauth = true;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
17
|
if (config.get('client_sentry') && !config.get('client_sentry').disabled) {
|
|
24
18
|
siteProperties.sentry_dsn = config.get('client_sentry').dsn;
|
|
25
19
|
siteProperties.sentry_env = config.get('env');
|
|
@@ -28,9 +28,6 @@ module.exports = {
|
|
|
28
28
|
return await defaultSettingsManager.ensureSettingsFileExists();
|
|
29
29
|
},
|
|
30
30
|
|
|
31
|
-
get loadRouteSettingsSync() {
|
|
32
|
-
return settingsLoader.loadSettingsSync.bind(settingsLoader);
|
|
33
|
-
},
|
|
34
31
|
get loadRouteSettings() {
|
|
35
32
|
return settingsLoader.loadSettings.bind(settingsLoader);
|
|
36
33
|
},
|
|
@@ -21,10 +21,9 @@ class SettingsLoader {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
* @returns {Promise<Object>} settingsFile
|
|
24
|
+
* Reads the routes.yaml settings file and passes the
|
|
25
|
+
* file to the YAML parser which then returns a JSON object.
|
|
26
|
+
* @returns {Promise<RouteSettings>} settingsFileContents
|
|
28
27
|
*/
|
|
29
28
|
async loadSettings() {
|
|
30
29
|
try {
|
|
@@ -49,36 +48,13 @@ class SettingsLoader {
|
|
|
49
48
|
});
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Reads the routes.yaml settings file and passes the
|
|
55
|
-
* file to the YAML parser which then returns a JSON object.
|
|
56
|
-
*
|
|
57
|
-
* @returns {Object} settingsFile in following format: {routes: {}, collections: {}, resources: {}}
|
|
58
|
-
*/
|
|
59
|
-
loadSettingsSync() {
|
|
60
|
-
try {
|
|
61
|
-
const file = fs.readFileSync(this.settingFilePath, 'utf8');
|
|
62
|
-
debug('routes settings file found for:', this.settingFilePath);
|
|
63
|
-
|
|
64
|
-
const object = this.parseYaml(file);
|
|
65
|
-
debug('YAML settings file parsed:', this.settingFilePath);
|
|
66
|
-
|
|
67
|
-
return validate(object);
|
|
68
|
-
} catch (err) {
|
|
69
|
-
if (errors.utils.isGhostError(err)) {
|
|
70
|
-
throw err;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
throw new errors.InternalServerError({
|
|
74
|
-
message: tpl(messages.settingsLoaderError, {
|
|
75
|
-
setting: 'routes',
|
|
76
|
-
path: this.settingFilePath
|
|
77
|
-
}),
|
|
78
|
-
err: err
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
51
|
}
|
|
83
52
|
|
|
84
53
|
module.exports = SettingsLoader;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @typedef {Object} RouteSettings
|
|
57
|
+
* @property {Object} routes
|
|
58
|
+
* @property {Object} collections
|
|
59
|
+
* @property {Object} taxonomies
|
|
60
|
+
*/
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
|
-
const debug = require('@tryghost/debug')('frontend:services:settings:validate');
|
|
3
2
|
const tpl = require('@tryghost/tpl');
|
|
4
3
|
const errors = require('@tryghost/errors');
|
|
5
|
-
const bridge = require('../../../bridge');
|
|
6
4
|
const _private = {};
|
|
7
5
|
let RESOURCE_CONFIG;
|
|
8
6
|
|
|
@@ -430,12 +428,8 @@ module.exports = function validate(object) {
|
|
|
430
428
|
object.taxonomies = {};
|
|
431
429
|
}
|
|
432
430
|
|
|
433
|
-
const apiVersion = bridge.getFrontendApiVersion();
|
|
434
|
-
|
|
435
|
-
debug('api version', apiVersion);
|
|
436
|
-
|
|
437
431
|
// TODO: extract this config outta here! the config should be passed into this module
|
|
438
|
-
RESOURCE_CONFIG = require(
|
|
432
|
+
RESOURCE_CONFIG = require('../../../frontend/services/routing/config');
|
|
439
433
|
|
|
440
434
|
object.routes = _private.validateRoutes(object.routes);
|
|
441
435
|
object.collections = _private.validateCollections(object.collections);
|
|
@@ -1,77 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Settings Lib
|
|
3
|
-
* A collection of utilities for handling settings including a cache
|
|
4
|
-
*/
|
|
5
|
-
const events = require('../../lib/common/events');
|
|
6
|
-
const models = require('../../models');
|
|
7
|
-
const labs = require('../../../shared/labs');
|
|
8
|
-
const SettingsCache = require('../../../shared/settings-cache');
|
|
9
|
-
const SettingsBREADService = require('./settings-bread-service');
|
|
10
|
-
const {obfuscatedSetting, isSecretSetting, hideValueIfSecret} = require('./settings-utils');
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @returns {SettingsBREADService} instance of the PostsService
|
|
14
|
-
*/
|
|
15
|
-
const getSettingsBREADServiceInstance = () => {
|
|
16
|
-
return new SettingsBREADService({
|
|
17
|
-
SettingsModel: models.Settings,
|
|
18
|
-
settingsCache: SettingsCache,
|
|
19
|
-
labsService: labs
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
module.exports = {
|
|
24
|
-
/**
|
|
25
|
-
* Initialize the cache, used in boot and in testing
|
|
26
|
-
*/
|
|
27
|
-
async init() {
|
|
28
|
-
const settingsCollection = await models.Settings.populateDefaults();
|
|
29
|
-
SettingsCache.init(events, settingsCollection);
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Restore the cache, used during e2e testing only
|
|
34
|
-
*/
|
|
35
|
-
reset() {
|
|
36
|
-
SettingsCache.reset(events);
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Handles synchronization of routes.yaml hash loaded in the frontend with
|
|
41
|
-
* the value stored in the settings table.
|
|
42
|
-
* getRoutesHash is a function to allow keeping "frontend" decoupled from settings
|
|
43
|
-
*
|
|
44
|
-
* @param {function} getRoutesHash function fetching currently loaded routes file hash
|
|
45
|
-
*/
|
|
46
|
-
async syncRoutesHash(getRoutesHash) {
|
|
47
|
-
const currentRoutesHash = await getRoutesHash();
|
|
48
|
-
|
|
49
|
-
if (SettingsCache.get('routes_hash') !== currentRoutesHash) {
|
|
50
|
-
return await models.Settings.edit([{
|
|
51
|
-
key: 'routes_hash',
|
|
52
|
-
value: currentRoutesHash
|
|
53
|
-
}], {context: {internal: true}});
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Handles email setting synchronization when email has been verified per instance
|
|
59
|
-
*
|
|
60
|
-
* @param {boolean} configValue current email verification value from local config
|
|
61
|
-
*/
|
|
62
|
-
async syncEmailSettings(configValue) {
|
|
63
|
-
const isEmailDisabled = SettingsCache.get('email_verification_required');
|
|
64
|
-
|
|
65
|
-
if (configValue === true && isEmailDisabled) {
|
|
66
|
-
return await models.Settings.edit([{
|
|
67
|
-
key: 'email_verification_required',
|
|
68
|
-
value: false
|
|
69
|
-
}], {context: {internal: true}});
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
obfuscatedSetting,
|
|
74
|
-
isSecretSetting,
|
|
75
|
-
hideValueIfSecret,
|
|
76
|
-
getSettingsBREADServiceInstance
|
|
77
|
-
};
|
|
1
|
+
module.exports = require('./settings-service');
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings Lib
|
|
3
|
+
* A collection of utilities for handling settings including a cache
|
|
4
|
+
*/
|
|
5
|
+
const errors = require('@tryghost/errors');
|
|
6
|
+
const tpl = require('@tryghost/tpl');
|
|
7
|
+
|
|
8
|
+
const events = require('../../lib/common/events');
|
|
9
|
+
const models = require('../../models');
|
|
10
|
+
const labs = require('../../../shared/labs');
|
|
11
|
+
const config = require('../../../shared/config');
|
|
12
|
+
const SettingsCache = require('../../../shared/settings-cache');
|
|
13
|
+
const SettingsBREADService = require('./settings-bread-service');
|
|
14
|
+
const {obfuscatedSetting, isSecretSetting, hideValueIfSecret} = require('./settings-utils');
|
|
15
|
+
|
|
16
|
+
const ObjectId = require('bson-objectid');
|
|
17
|
+
|
|
18
|
+
const messages = {
|
|
19
|
+
incorrectKeyType: 'type must be one of "direct" or "connect".'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @returns {SettingsBREADService} instance of the PostsService
|
|
24
|
+
*/
|
|
25
|
+
const getSettingsBREADServiceInstance = () => {
|
|
26
|
+
return new SettingsBREADService({
|
|
27
|
+
SettingsModel: models.Settings,
|
|
28
|
+
settingsCache: SettingsCache,
|
|
29
|
+
labsService: labs
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
class CalculatedField {
|
|
34
|
+
constructor({key, type, group, fn, dependents}) {
|
|
35
|
+
this.key = key;
|
|
36
|
+
this.type = type;
|
|
37
|
+
this.group = group;
|
|
38
|
+
this.fn = fn;
|
|
39
|
+
this.dependents = dependents;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
getSetting() {
|
|
43
|
+
return {
|
|
44
|
+
key: this.key,
|
|
45
|
+
type: this.type,
|
|
46
|
+
group: this.group,
|
|
47
|
+
value: this.fn(),
|
|
48
|
+
// @TODO: remove this hack
|
|
49
|
+
id: ObjectId().toHexString(),
|
|
50
|
+
created_at: new Date().toISOString().replace(/\d{3}Z$/, '000Z'),
|
|
51
|
+
updated_at: new Date().toISOString().replace(/\d{3}Z$/, '000Z')
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
module.exports = {
|
|
57
|
+
/**
|
|
58
|
+
* Initialize the cache, used in boot and in testing
|
|
59
|
+
*/
|
|
60
|
+
async init() {
|
|
61
|
+
const settingsCollection = await models.Settings.populateDefaults();
|
|
62
|
+
SettingsCache.init(events, settingsCollection, this.getCalculatedFields());
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Restore the cache, used during e2e testing only
|
|
67
|
+
*/
|
|
68
|
+
reset() {
|
|
69
|
+
SettingsCache.reset(events);
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
isMembersEnabled() {
|
|
73
|
+
return SettingsCache.get('members_signup_access') !== 'none';
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
isMembersInviteOnly() {
|
|
77
|
+
return SettingsCache.get('members_signup_access') === 'invite';
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @param {'direct' | 'connect'} type - The "type" of keys to fetch from settings
|
|
82
|
+
* @returns {{publicKey: string, secretKey: string} | null}
|
|
83
|
+
*/
|
|
84
|
+
getStripeKeys(type) {
|
|
85
|
+
if (type !== 'direct' && type !== 'connect') {
|
|
86
|
+
throw new errors.IncorrectUsageError({message: tpl(messages.incorrectKeyType)});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const secretKey = SettingsCache.get(`stripe_${type === 'connect' ? 'connect_' : ''}secret_key`);
|
|
90
|
+
const publicKey = SettingsCache.get(`stripe_${type === 'connect' ? 'connect_' : ''}publishable_key`);
|
|
91
|
+
|
|
92
|
+
if (!secretKey || !publicKey) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
secretKey,
|
|
98
|
+
publicKey
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @returns {{publicKey: string, secretKey: string} | null}
|
|
104
|
+
*/
|
|
105
|
+
getActiveStripeKeys() {
|
|
106
|
+
const stripeDirect = config.get('stripeDirect');
|
|
107
|
+
|
|
108
|
+
if (stripeDirect) {
|
|
109
|
+
return this.getStripeKeys('direct');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const connectKeys = this.getStripeKeys('connect');
|
|
113
|
+
|
|
114
|
+
if (!connectKeys) {
|
|
115
|
+
return this.getStripeKeys('direct');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return connectKeys;
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
arePaidMembersEnabled() {
|
|
122
|
+
return this.isMembersEnabled() && this.getActiveStripeKeys() !== null;
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
getFirstpromoterId() {
|
|
126
|
+
if (!SettingsCache.get('firstpromoter')) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return SettingsCache.get('firstpromoter_id');
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
*
|
|
134
|
+
*/
|
|
135
|
+
getCalculatedFields() {
|
|
136
|
+
const fields = [];
|
|
137
|
+
|
|
138
|
+
fields.push(new CalculatedField({key: 'members_enabled', type: 'boolean', group: 'members', fn: this.isMembersEnabled.bind(this), dependents: ['members_signup_access']}));
|
|
139
|
+
fields.push(new CalculatedField({key: 'members_invite_only', type: 'boolean', group: 'members', fn: this.isMembersInviteOnly.bind(this), dependents: ['members_signup_access']}));
|
|
140
|
+
fields.push(new CalculatedField({key: 'paid_members_enabled', type: 'boolean', group: 'members', fn: this.arePaidMembersEnabled.bind(this), dependents: ['members_signup_access', 'stripe_secret_key', 'stripe_publishable_key', 'stripe_connect_secret_key', 'stripe_connect_publishable_key']}));
|
|
141
|
+
fields.push(new CalculatedField({key: 'firstpromoter_account', type: 'string', group: 'firstpromoter', fn: this.getFirstpromoterId.bind(this), dependents: ['firstpromoter', 'firstpromoter_id']}));
|
|
142
|
+
|
|
143
|
+
return fields;
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Handles synchronization of routes.yaml hash loaded in the frontend with
|
|
148
|
+
* the value stored in the settings table.
|
|
149
|
+
* getRoutesHash is a function to allow keeping "frontend" decoupled from settings
|
|
150
|
+
*
|
|
151
|
+
* @param {function} getRoutesHash function fetching currently loaded routes file hash
|
|
152
|
+
*/
|
|
153
|
+
async syncRoutesHash(getRoutesHash) {
|
|
154
|
+
const currentRoutesHash = await getRoutesHash();
|
|
155
|
+
|
|
156
|
+
if (SettingsCache.get('routes_hash') !== currentRoutesHash) {
|
|
157
|
+
return await models.Settings.edit([{
|
|
158
|
+
key: 'routes_hash',
|
|
159
|
+
value: currentRoutesHash
|
|
160
|
+
}], {context: {internal: true}});
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Handles email setting synchronization when email has been verified per instance
|
|
166
|
+
*
|
|
167
|
+
* @param {boolean} configValue current email verification value from local config
|
|
168
|
+
*/
|
|
169
|
+
async syncEmailSettings(configValue) {
|
|
170
|
+
const isEmailDisabled = SettingsCache.get('email_verification_required');
|
|
171
|
+
|
|
172
|
+
if (configValue === true && isEmailDisabled) {
|
|
173
|
+
return await models.Settings.edit([{
|
|
174
|
+
key: 'email_verification_required',
|
|
175
|
+
value: false
|
|
176
|
+
}], {context: {internal: true}});
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
obfuscatedSetting,
|
|
181
|
+
isSecretSetting,
|
|
182
|
+
hideValueIfSecret,
|
|
183
|
+
getSettingsBREADServiceInstance
|
|
184
|
+
};
|
|
@@ -22,7 +22,7 @@ const check = async function check(theme, isZip) {
|
|
|
22
22
|
debug('Begin: Check');
|
|
23
23
|
// gscan can slow down boot time if we require on boot, for now nest the require.
|
|
24
24
|
const gscan = require('gscan');
|
|
25
|
-
const checkedVersion = '
|
|
25
|
+
const checkedVersion = 'v5';
|
|
26
26
|
let checkedTheme;
|
|
27
27
|
|
|
28
28
|
if (isZip) {
|
|
@@ -59,9 +59,7 @@ class Resources {
|
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
const resourcesAPIVersion = bridge.getFrontendApiVersion();
|
|
64
|
-
this.resourcesConfig = require(`./configs/${resourcesAPIVersion}`);
|
|
62
|
+
this.resourcesConfig = require('./config');
|
|
65
63
|
}
|
|
66
64
|
|
|
67
65
|
/**
|
|
@@ -204,7 +204,7 @@ class UrlGenerator {
|
|
|
204
204
|
* If the owned resource get's updated, we simply release/free the resource and push it back to the queue.
|
|
205
205
|
* This is the easiest, less error prone implementation.
|
|
206
206
|
*
|
|
207
|
-
* Imagine you have two collections: `featured:true` and `page
|
|
207
|
+
* Imagine you have two collections: `featured:true` and `type:page`.
|
|
208
208
|
* If a published post status get's featured and you have not explicitly defined `featured:false`, we wouldn't
|
|
209
209
|
* be able to figure out if this resource still belongs to me, because the filter still matches.
|
|
210
210
|
*/
|
|
@@ -9,9 +9,6 @@ const Urls = require('./Urls');
|
|
|
9
9
|
const Resources = require('./Resources');
|
|
10
10
|
const urlUtils = require('../../../shared/url-utils');
|
|
11
11
|
|
|
12
|
-
// This listens to services.themes.api.changed, routing events, and it's own queue events
|
|
13
|
-
const events = require('../../lib/common/events');
|
|
14
|
-
|
|
15
12
|
/**
|
|
16
13
|
* The url service class holds all instances in a centralized place.
|
|
17
14
|
* It's the public API you can talk to.
|
|
@@ -49,9 +46,6 @@ class UrlService {
|
|
|
49
46
|
* @private
|
|
50
47
|
*/
|
|
51
48
|
_listeners() {
|
|
52
|
-
this._onThemeChangedListener = this._onThemeChangedListener.bind(this);
|
|
53
|
-
events.on('services.themes.api.changed', this._onThemeChangedListener);
|
|
54
|
-
|
|
55
49
|
this._onQueueStartedListener = this._onQueueStarted.bind(this);
|
|
56
50
|
this.queue.addListener('started', this._onQueueStartedListener);
|
|
57
51
|
|
|
@@ -120,15 +114,6 @@ class UrlService {
|
|
|
120
114
|
generator.regenerateResources();
|
|
121
115
|
}
|
|
122
116
|
|
|
123
|
-
/**
|
|
124
|
-
* @description If the API version in the theme config changes, we have to reset urls and resources.
|
|
125
|
-
* @private
|
|
126
|
-
*/
|
|
127
|
-
_onThemeChangedListener() {
|
|
128
|
-
this.reset({keepListeners: true});
|
|
129
|
-
this.init();
|
|
130
|
-
}
|
|
131
|
-
|
|
132
117
|
/**
|
|
133
118
|
* @description Get Resource by url.
|
|
134
119
|
*
|
|
@@ -233,6 +218,8 @@ class UrlService {
|
|
|
233
218
|
*
|
|
234
219
|
* @param {String} id
|
|
235
220
|
* @param {Object} options
|
|
221
|
+
* @param {Object} [options.absolute]
|
|
222
|
+
* @param {Object} [options.withSubdirectory]
|
|
236
223
|
* @returns {String}
|
|
237
224
|
*/
|
|
238
225
|
getUrlByResourceId(id, options) {
|
|
@@ -242,22 +229,22 @@ class UrlService {
|
|
|
242
229
|
|
|
243
230
|
if (obj) {
|
|
244
231
|
if (options.absolute) {
|
|
245
|
-
return this.utils.createUrl(obj.url, options.absolute
|
|
232
|
+
return this.utils.createUrl(obj.url, options.absolute);
|
|
246
233
|
}
|
|
247
234
|
|
|
248
235
|
if (options.withSubdirectory) {
|
|
249
|
-
return this.utils.createUrl(obj.url, false,
|
|
236
|
+
return this.utils.createUrl(obj.url, false, true);
|
|
250
237
|
}
|
|
251
238
|
|
|
252
239
|
return obj.url;
|
|
253
240
|
}
|
|
254
241
|
|
|
255
242
|
if (options.absolute) {
|
|
256
|
-
return this.utils.createUrl('/404/', options.absolute
|
|
243
|
+
return this.utils.createUrl('/404/', options.absolute);
|
|
257
244
|
}
|
|
258
245
|
|
|
259
246
|
if (options.withSubdirectory) {
|
|
260
|
-
return this.utils.createUrl('/404/', false
|
|
247
|
+
return this.utils.createUrl('/404/', false);
|
|
261
248
|
}
|
|
262
249
|
|
|
263
250
|
return '/404/';
|
|
@@ -375,7 +362,6 @@ class UrlService {
|
|
|
375
362
|
if (!options.keepListeners) {
|
|
376
363
|
this._onQueueStartedListener && this.queue.removeListener('started', this._onQueueStartedListener);
|
|
377
364
|
this._onQueueEndedListener && this.queue.removeListener('ended', this._onQueueEndedListener);
|
|
378
|
-
this._onThemeChangedListener && events.removeListener('services.themes.api.changed', this._onThemeChangedListener);
|
|
379
365
|
}
|
|
380
366
|
}
|
|
381
367
|
|
|
File without changes
|