ghost 5.56.0 → 5.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/components/{tryghost-adapter-cache-memory-ttl-5.56.0.tgz → tryghost-adapter-cache-memory-ttl-5.57.0.tgz} +0 -0
  2. package/components/tryghost-adapter-cache-redis-5.57.0.tgz +0 -0
  3. package/components/tryghost-adapter-manager-5.57.0.tgz +0 -0
  4. package/components/{tryghost-announcement-bar-settings-5.56.0.tgz → tryghost-announcement-bar-settings-5.57.0.tgz} +0 -0
  5. package/components/{tryghost-api-framework-5.56.0.tgz → tryghost-api-framework-5.57.0.tgz} +0 -0
  6. package/components/tryghost-api-version-compatibility-service-5.57.0.tgz +0 -0
  7. package/components/{tryghost-audience-feedback-5.56.0.tgz → tryghost-audience-feedback-5.57.0.tgz} +0 -0
  8. package/components/tryghost-bootstrap-socket-5.57.0.tgz +0 -0
  9. package/components/{tryghost-collections-5.56.0.tgz → tryghost-collections-5.57.0.tgz} +0 -0
  10. package/components/tryghost-constants-5.57.0.tgz +0 -0
  11. package/components/{tryghost-custom-theme-settings-service-5.56.0.tgz → tryghost-custom-theme-settings-service-5.57.0.tgz} +0 -0
  12. package/components/{tryghost-data-generator-5.56.0.tgz → tryghost-data-generator-5.57.0.tgz} +0 -0
  13. package/components/tryghost-domain-events-5.57.0.tgz +0 -0
  14. package/components/tryghost-donations-5.57.0.tgz +0 -0
  15. package/components/tryghost-dynamic-routing-events-5.57.0.tgz +0 -0
  16. package/components/tryghost-email-analytics-provider-mailgun-5.57.0.tgz +0 -0
  17. package/components/{tryghost-email-analytics-service-5.56.0.tgz → tryghost-email-analytics-service-5.57.0.tgz} +0 -0
  18. package/components/tryghost-email-content-generator-5.57.0.tgz +0 -0
  19. package/components/tryghost-email-events-5.57.0.tgz +0 -0
  20. package/components/{tryghost-email-service-5.56.0.tgz → tryghost-email-service-5.57.0.tgz} +0 -0
  21. package/components/{tryghost-email-suppression-list-5.56.0.tgz → tryghost-email-suppression-list-5.57.0.tgz} +0 -0
  22. package/components/tryghost-event-aware-cache-wrapper-5.57.0.tgz +0 -0
  23. package/components/{tryghost-express-dynamic-redirects-5.56.0.tgz → tryghost-express-dynamic-redirects-5.57.0.tgz} +0 -0
  24. package/components/tryghost-external-media-inliner-5.57.0.tgz +0 -0
  25. package/components/tryghost-extract-api-key-5.57.0.tgz +0 -0
  26. package/components/tryghost-html-to-plaintext-5.57.0.tgz +0 -0
  27. package/components/tryghost-i18n-5.57.0.tgz +0 -0
  28. package/components/tryghost-importer-handler-content-files-5.57.0.tgz +0 -0
  29. package/components/tryghost-importer-revue-5.57.0.tgz +0 -0
  30. package/components/tryghost-in-memory-repository-5.57.0.tgz +0 -0
  31. package/components/{tryghost-job-manager-5.56.0.tgz → tryghost-job-manager-5.57.0.tgz} +0 -0
  32. package/components/tryghost-link-redirects-5.57.0.tgz +0 -0
  33. package/components/tryghost-link-replacer-5.57.0.tgz +0 -0
  34. package/components/tryghost-link-tracking-5.57.0.tgz +0 -0
  35. package/components/tryghost-magic-link-5.57.0.tgz +0 -0
  36. package/components/{tryghost-mail-events-5.56.0.tgz → tryghost-mail-events-5.57.0.tgz} +0 -0
  37. package/components/{tryghost-mailgun-client-5.56.0.tgz → tryghost-mailgun-client-5.57.0.tgz} +0 -0
  38. package/components/{tryghost-member-attribution-5.56.0.tgz → tryghost-member-attribution-5.57.0.tgz} +0 -0
  39. package/components/tryghost-member-events-5.57.0.tgz +0 -0
  40. package/components/tryghost-members-api-5.57.0.tgz +0 -0
  41. package/components/tryghost-members-csv-5.57.0.tgz +0 -0
  42. package/components/tryghost-members-events-service-5.57.0.tgz +0 -0
  43. package/components/{tryghost-members-importer-5.56.0.tgz → tryghost-members-importer-5.57.0.tgz} +0 -0
  44. package/components/{tryghost-members-offers-5.56.0.tgz → tryghost-members-offers-5.57.0.tgz} +0 -0
  45. package/components/tryghost-members-payments-5.57.0.tgz +0 -0
  46. package/components/tryghost-members-ssr-5.57.0.tgz +0 -0
  47. package/components/tryghost-members-stripe-service-5.57.0.tgz +0 -0
  48. package/components/{tryghost-mentions-email-report-5.56.0.tgz → tryghost-mentions-email-report-5.57.0.tgz} +0 -0
  49. package/components/tryghost-milestones-5.57.0.tgz +0 -0
  50. package/components/tryghost-minifier-5.57.0.tgz +0 -0
  51. package/components/{tryghost-model-to-domain-event-interceptor-5.56.0.tgz → tryghost-model-to-domain-event-interceptor-5.57.0.tgz} +0 -0
  52. package/components/tryghost-mw-api-version-mismatch-5.57.0.tgz +0 -0
  53. package/components/{tryghost-mw-cache-control-5.56.0.tgz → tryghost-mw-cache-control-5.57.0.tgz} +0 -0
  54. package/components/{tryghost-mw-error-handler-5.56.0.tgz → tryghost-mw-error-handler-5.57.0.tgz} +0 -0
  55. package/components/tryghost-mw-session-from-token-5.57.0.tgz +0 -0
  56. package/components/tryghost-mw-update-user-last-seen-5.57.0.tgz +0 -0
  57. package/components/tryghost-mw-version-match-5.57.0.tgz +0 -0
  58. package/components/tryghost-mw-vhost-5.57.0.tgz +0 -0
  59. package/components/tryghost-nql-filter-expansions-5.57.0.tgz +0 -0
  60. package/components/tryghost-oembed-service-5.57.0.tgz +0 -0
  61. package/components/tryghost-package-json-5.57.0.tgz +0 -0
  62. package/components/tryghost-post-revisions-5.57.0.tgz +0 -0
  63. package/components/tryghost-posts-service-5.57.0.tgz +0 -0
  64. package/components/tryghost-referrers-5.57.0.tgz +0 -0
  65. package/components/{tryghost-security-5.56.0.tgz → tryghost-security-5.57.0.tgz} +0 -0
  66. package/components/tryghost-session-service-5.57.0.tgz +0 -0
  67. package/components/tryghost-settings-path-manager-5.57.0.tgz +0 -0
  68. package/components/{tryghost-slack-notifications-5.56.0.tgz → tryghost-slack-notifications-5.57.0.tgz} +0 -0
  69. package/components/tryghost-staff-service-5.57.0.tgz +0 -0
  70. package/components/tryghost-stats-service-5.57.0.tgz +0 -0
  71. package/components/tryghost-tiers-5.57.0.tgz +0 -0
  72. package/components/{tryghost-update-check-service-5.56.0.tgz → tryghost-update-check-service-5.57.0.tgz} +0 -0
  73. package/components/{tryghost-verification-trigger-5.56.0.tgz → tryghost-verification-trigger-5.57.0.tgz} +0 -0
  74. package/components/tryghost-version-notifications-data-service-5.57.0.tgz +0 -0
  75. package/components/{tryghost-webmentions-5.56.0.tgz → tryghost-webmentions-5.57.0.tgz} +0 -0
  76. package/content/themes/casper/package.json +1 -1
  77. package/core/boot.js +3 -1
  78. package/core/built/admin/assets/{chunk.143.a1c19bf68817d7c7ddf6.js → chunk.143.969cc9d1b97fdcbbed73.js} +5 -5
  79. package/core/built/admin/assets/{chunk.178.1e3a659730595eff43b8.js → chunk.178.a4b86d027f500d64ccbf.js} +4 -4
  80. package/core/built/admin/assets/{ghost-9081d01d86c90563530801b2304e1f1a.js → ghost-45d3545b6462f7507da89cdc682ee99e.js} +16 -16
  81. package/core/built/admin/index.html +3 -3
  82. package/core/server/data/exporter/table-lists.js +1 -0
  83. package/core/server/data/migrations/versions/5.57/2023-07-26-12-44-stripe-products-nullable-product.js +4 -0
  84. package/core/server/data/migrations/versions/5.57/2023-07-27-11-47-49-create-donation-events.js +19 -0
  85. package/core/server/data/schema/schema.js +21 -2
  86. package/core/server/models/donation-payment-event.js +34 -0
  87. package/core/server/services/donations/DonationServiceWrapper.js +19 -0
  88. package/core/server/services/donations/index.js +3 -0
  89. package/core/server/services/members/api.js +2 -1
  90. package/core/server/services/members/middleware.js +16 -8
  91. package/core/server/services/stripe/service.js +3 -1
  92. package/core/shared/labs.js +0 -1
  93. package/package.json +146 -144
  94. package/yarn.lock +73 -13
  95. package/components/tryghost-adapter-cache-redis-5.56.0.tgz +0 -0
  96. package/components/tryghost-adapter-manager-5.56.0.tgz +0 -0
  97. package/components/tryghost-api-version-compatibility-service-5.56.0.tgz +0 -0
  98. package/components/tryghost-bootstrap-socket-5.56.0.tgz +0 -0
  99. package/components/tryghost-constants-5.56.0.tgz +0 -0
  100. package/components/tryghost-domain-events-5.56.0.tgz +0 -0
  101. package/components/tryghost-dynamic-routing-events-5.56.0.tgz +0 -0
  102. package/components/tryghost-email-analytics-provider-mailgun-5.56.0.tgz +0 -0
  103. package/components/tryghost-email-content-generator-5.56.0.tgz +0 -0
  104. package/components/tryghost-email-events-5.56.0.tgz +0 -0
  105. package/components/tryghost-event-aware-cache-wrapper-5.56.0.tgz +0 -0
  106. package/components/tryghost-external-media-inliner-5.56.0.tgz +0 -0
  107. package/components/tryghost-extract-api-key-5.56.0.tgz +0 -0
  108. package/components/tryghost-html-to-plaintext-5.56.0.tgz +0 -0
  109. package/components/tryghost-i18n-5.56.0.tgz +0 -0
  110. package/components/tryghost-importer-handler-content-files-5.56.0.tgz +0 -0
  111. package/components/tryghost-importer-revue-5.56.0.tgz +0 -0
  112. package/components/tryghost-in-memory-repository-5.56.0.tgz +0 -0
  113. package/components/tryghost-link-redirects-5.56.0.tgz +0 -0
  114. package/components/tryghost-link-replacer-5.56.0.tgz +0 -0
  115. package/components/tryghost-link-tracking-5.56.0.tgz +0 -0
  116. package/components/tryghost-magic-link-5.56.0.tgz +0 -0
  117. package/components/tryghost-member-events-5.56.0.tgz +0 -0
  118. package/components/tryghost-members-api-5.56.0.tgz +0 -0
  119. package/components/tryghost-members-csv-5.56.0.tgz +0 -0
  120. package/components/tryghost-members-events-service-5.56.0.tgz +0 -0
  121. package/components/tryghost-members-payments-5.56.0.tgz +0 -0
  122. package/components/tryghost-members-ssr-5.56.0.tgz +0 -0
  123. package/components/tryghost-members-stripe-service-5.56.0.tgz +0 -0
  124. package/components/tryghost-milestones-5.56.0.tgz +0 -0
  125. package/components/tryghost-minifier-5.56.0.tgz +0 -0
  126. package/components/tryghost-mw-api-version-mismatch-5.56.0.tgz +0 -0
  127. package/components/tryghost-mw-session-from-token-5.56.0.tgz +0 -0
  128. package/components/tryghost-mw-update-user-last-seen-5.56.0.tgz +0 -0
  129. package/components/tryghost-mw-version-match-5.56.0.tgz +0 -0
  130. package/components/tryghost-mw-vhost-5.56.0.tgz +0 -0
  131. package/components/tryghost-nql-filter-expansions-5.56.0.tgz +0 -0
  132. package/components/tryghost-oembed-service-5.56.0.tgz +0 -0
  133. package/components/tryghost-package-json-5.56.0.tgz +0 -0
  134. package/components/tryghost-post-revisions-5.56.0.tgz +0 -0
  135. package/components/tryghost-posts-service-5.56.0.tgz +0 -0
  136. package/components/tryghost-referrers-5.56.0.tgz +0 -0
  137. package/components/tryghost-session-service-5.56.0.tgz +0 -0
  138. package/components/tryghost-settings-path-manager-5.56.0.tgz +0 -0
  139. package/components/tryghost-staff-service-5.56.0.tgz +0 -0
  140. package/components/tryghost-stats-service-5.56.0.tgz +0 -0
  141. package/components/tryghost-tiers-5.56.0.tgz +0 -0
  142. package/components/tryghost-version-notifications-data-service-5.56.0.tgz +0 -0
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.56%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22ember-websockets%22%3A%7B%22socketIO%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.57%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22ember-websockets%22%3A%7B%22socketIO%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -58,7 +58,7 @@
58
58
 
59
59
  <script src="assets/vendor-16709e2a05d1300febb44b2e8f759976.js"></script>
60
60
  <script src="assets/chunk.757.ada6ed049fa8078cd416.js"></script>
61
- <script src="assets/chunk.143.a1c19bf68817d7c7ddf6.js"></script>
62
- <script src="assets/ghost-9081d01d86c90563530801b2304e1f1a.js"></script>
61
+ <script src="assets/chunk.143.969cc9d1b97fdcbbed73.js"></script>
62
+ <script src="assets/ghost-45d3545b6462f7507da89cdc682ee99e.js"></script>
63
63
  </body>
64
64
  </html>
@@ -3,6 +3,7 @@ const BACKUP_TABLES = [
3
3
  'actions',
4
4
  'api_keys',
5
5
  'brute',
6
+ 'donation_payment_events',
6
7
  'emails',
7
8
  'integrations',
8
9
  'invites',
@@ -0,0 +1,4 @@
1
+ const {createSetNullableMigration} = require('../../utils');
2
+
3
+ // We need to disable foreign key checks because if MySQL is missing the STRICT_TRANS_TABLES mode, we cannot revert the migration
4
+ module.exports = createSetNullableMigration('stripe_products', 'product_id', {disableForeignKeyChecks: true});
@@ -0,0 +1,19 @@
1
+ // For information on writing migrations, see https://www.notion.so/ghost/Database-migrations-eb5b78c435d741d2b34a582d57c24253
2
+
3
+ const {addTable} = require('../../utils');
4
+
5
+ module.exports = addTable('donation_payment_events', {
6
+ id: {type: 'string', maxlength: 24, nullable: false, primary: true},
7
+ name: {type: 'string', maxlength: 191, nullable: true},
8
+ email: {type: 'string', maxlength: 191, nullable: false, unique: false},
9
+ member_id: {type: 'string', maxlength: 24, nullable: true, unique: false, references: 'members.id', setNullDelete: true},
10
+ amount: {type: 'integer', nullable: false},
11
+ currency: {type: 'string', maxlength: 50, nullable: false},
12
+ attribution_id: {type: 'string', maxlength: 24, nullable: true},
13
+ attribution_type: {type: 'string', maxlength: 50, nullable: true},
14
+ attribution_url: {type: 'string', maxlength: 2000, nullable: true},
15
+ referrer_source: {type: 'string', maxlength: 191, nullable: true},
16
+ referrer_medium: {type: 'string', maxlength: 191, nullable: true},
17
+ referrer_url: {type: 'string', maxlength: 2000, nullable: true},
18
+ created_at: {type: 'dateTime', nullable: false}
19
+ });
@@ -738,9 +738,28 @@ module.exports = {
738
738
  },
739
739
  newsletter_id: {type: 'string', maxlength: 24, nullable: true, references: 'newsletters.id', cascadeDelete: false}
740
740
  },
741
+ donation_payment_events: {
742
+ id: {type: 'string', maxlength: 24, nullable: false, primary: true},
743
+ name: {type: 'string', maxlength: 191, nullable: true},
744
+ email: {type: 'string', maxlength: 191, nullable: false, unique: false, validations: {isEmail: true}},
745
+ member_id: {type: 'string', maxlength: 24, nullable: true, unique: false, references: 'members.id', setNullDelete: true},
746
+ amount: {type: 'integer', nullable: false},
747
+ currency: {type: 'string', maxlength: 50, nullable: false},
748
+ attribution_id: {type: 'string', maxlength: 24, nullable: true},
749
+ attribution_type: {
750
+ type: 'string', maxlength: 50, nullable: true, validations: {
751
+ isIn: [['url', 'post', 'page', 'author', 'tag']]
752
+ }
753
+ },
754
+ attribution_url: {type: 'string', maxlength: 2000, nullable: true},
755
+ referrer_source: {type: 'string', maxlength: 191, nullable: true},
756
+ referrer_medium: {type: 'string', maxlength: 191, nullable: true},
757
+ referrer_url: {type: 'string', maxlength: 2000, nullable: true},
758
+ created_at: {type: 'dateTime', nullable: false}
759
+ },
741
760
  stripe_products: {
742
761
  id: {type: 'string', maxlength: 24, nullable: false, primary: true},
743
- product_id: {type: 'string', maxlength: 24, nullable: false, unique: false, references: 'products.id'},
762
+ product_id: {type: 'string', maxlength: 24, nullable: true, unique: false, references: 'products.id'},
744
763
  stripe_product_id: {type: 'string', maxlength: 255, nullable: false, unique: true},
745
764
  created_at: {type: 'dateTime', nullable: false},
746
765
  updated_at: {type: 'dateTime', nullable: true}
@@ -755,7 +774,7 @@ module.exports = {
755
774
  // so we should decide whether we should reduce it down in the future
756
775
  currency: {type: 'string', maxlength: 191, nullable: false},
757
776
  amount: {type: 'integer', nullable: false},
758
- type: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'recurring', validations: {isIn: [['recurring', 'one_time']]}},
777
+ type: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'recurring', validations: {isIn: [['recurring', 'one_time', 'donation']]}},
759
778
  interval: {type: 'string', maxlength: 50, nullable: true},
760
779
  description: {type: 'string', maxlength: 191, nullable: true},
761
780
  created_at: {type: 'dateTime', nullable: false},
@@ -0,0 +1,34 @@
1
+ const errors = require('@tryghost/errors');
2
+ const ghostBookshelf = require('./base');
3
+
4
+ const DonationPaymentEvent = ghostBookshelf.Model.extend({
5
+ tableName: 'donation_payment_events',
6
+
7
+ member() {
8
+ return this.belongsTo('Member', 'member_id', 'id');
9
+ },
10
+
11
+ postAttribution() {
12
+ return this.belongsTo('Post', 'attribution_id', 'id');
13
+ },
14
+
15
+ userAttribution() {
16
+ return this.belongsTo('User', 'attribution_id', 'id');
17
+ },
18
+
19
+ tagAttribution() {
20
+ return this.belongsTo('Tag', 'attribution_id', 'id');
21
+ }
22
+ }, {
23
+ async edit() {
24
+ throw new errors.IncorrectUsageError({message: 'Cannot edit DonationPaymentEvent'});
25
+ },
26
+
27
+ async destroy() {
28
+ throw new errors.IncorrectUsageError({message: 'Cannot destroy DonationPaymentEvent'});
29
+ }
30
+ });
31
+
32
+ module.exports = {
33
+ DonationPaymentEvent: ghostBookshelf.model('DonationPaymentEvent', DonationPaymentEvent)
34
+ };
@@ -0,0 +1,19 @@
1
+ const {DonationPaymentEvent: DonationPaymentEventModel} = require('../../models');
2
+
3
+ class DonationServiceWrapper {
4
+ repository;
5
+
6
+ init() {
7
+ if (this.repository) {
8
+ return;
9
+ }
10
+
11
+ const {DonationBookshelfRepository} = require('@tryghost/donations');
12
+
13
+ this.repository = new DonationBookshelfRepository({
14
+ DonationPaymentEventModel
15
+ });
16
+ }
17
+ }
18
+
19
+ module.exports = DonationServiceWrapper;
@@ -0,0 +1,3 @@
1
+ const DonationServiceWrapper = require('./DonationServiceWrapper');
2
+
3
+ module.exports = new DonationServiceWrapper();
@@ -214,7 +214,8 @@ function createApiInstance(config) {
214
214
  labsService: labsService,
215
215
  newslettersService: newslettersService,
216
216
  memberAttributionService: memberAttributionService.service,
217
- emailSuppressionList
217
+ emailSuppressionList,
218
+ settingsCache
218
219
  });
219
220
 
220
221
  return membersApiInstance;
@@ -258,20 +258,28 @@ const createSessionFromMagicLink = async function (req, res, next) {
258
258
  }
259
259
  }
260
260
 
261
- if (action === 'signin') {
262
- const referrer = req.query.r;
263
- const siteUrl = urlUtils.getSiteUrl();
261
+ // If a custom referrer/redirect was passed, redirect the user to that URL
262
+ const referrer = req.query.r;
263
+ const siteUrl = urlUtils.getSiteUrl();
264
264
 
265
- if (referrer && referrer.startsWith(siteUrl)) {
266
- const redirectUrl = new URL(referrer);
267
- redirectUrl.searchParams.set('success', true);
265
+ if (referrer && referrer.startsWith(siteUrl)) {
266
+ const redirectUrl = new URL(referrer);
267
+
268
+ // Copy search params
269
+ searchParams.forEach((value, key) => {
270
+ redirectUrl.searchParams.set(key, value);
271
+ });
272
+ redirectUrl.searchParams.set('success', 'true');
273
+
274
+ if (action === 'signin') {
275
+ // Not sure if we can delete this, this is a legacy param
268
276
  redirectUrl.searchParams.set('action', 'signin');
269
- return res.redirect(redirectUrl.href);
270
277
  }
278
+ return res.redirect(redirectUrl.href);
271
279
  }
272
280
 
273
281
  // Do a standard 302 redirect to the homepage, with success=true
274
- searchParams.set('success', true);
282
+ searchParams.set('success', 'true');
275
283
  res.redirect(`${urlUtils.getSubdir()}/?${searchParams.toString()}`);
276
284
  } catch (err) {
277
285
  logging.warn(err.message);
@@ -9,6 +9,7 @@ const events = require('../../lib/common/events');
9
9
  const models = require('../../models');
10
10
  const {getConfig} = require('./config');
11
11
  const settingsHelpers = require('../settings-helpers');
12
+ const donationService = require('../donations');
12
13
 
13
14
  async function configureApi() {
14
15
  const cfg = getConfig({settingsHelpers, config, urlUtils});
@@ -54,7 +55,8 @@ module.exports = new StripeService({
54
55
  value: data.secret
55
56
  }]);
56
57
  }
57
- }
58
+ },
59
+ donationService
58
60
  });
59
61
 
60
62
  module.exports.init = async function init() {
@@ -38,7 +38,6 @@ const ALPHA_FEATURES = [
38
38
  'emailCustomization',
39
39
  'collections',
40
40
  'adminXSettings',
41
- 'pageImprovements',
42
41
  'flatUrls',
43
42
  'mailEvents',
44
43
  'collectionsCard',