ghost 5.89.4 → 5.89.6

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 (131) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.89.6.tgz +0 -0
  2. package/components/tryghost-adapter-cache-redis-5.89.6.tgz +0 -0
  3. package/components/{tryghost-adapter-manager-5.89.4.tgz → tryghost-adapter-manager-5.89.6.tgz} +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.89.6.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.89.4.tgz → tryghost-api-framework-5.89.6.tgz} +0 -0
  6. package/components/tryghost-api-version-compatibility-service-5.89.6.tgz +0 -0
  7. package/components/tryghost-audience-feedback-5.89.6.tgz +0 -0
  8. package/components/{tryghost-bookshelf-repository-5.89.4.tgz → tryghost-bookshelf-repository-5.89.6.tgz} +0 -0
  9. package/components/tryghost-bootstrap-socket-5.89.6.tgz +0 -0
  10. package/components/tryghost-collections-5.89.6.tgz +0 -0
  11. package/components/{tryghost-constants-5.89.4.tgz → tryghost-constants-5.89.6.tgz} +0 -0
  12. package/components/tryghost-custom-theme-settings-service-5.89.6.tgz +0 -0
  13. package/components/{tryghost-data-generator-5.89.4.tgz → tryghost-data-generator-5.89.6.tgz} +0 -0
  14. package/components/tryghost-domain-events-5.89.6.tgz +0 -0
  15. package/components/{tryghost-donations-5.89.4.tgz → tryghost-donations-5.89.6.tgz} +0 -0
  16. package/components/tryghost-dynamic-routing-events-5.89.6.tgz +0 -0
  17. package/components/{tryghost-email-addresses-5.89.4.tgz → tryghost-email-addresses-5.89.6.tgz} +0 -0
  18. package/components/tryghost-email-analytics-provider-mailgun-5.89.6.tgz +0 -0
  19. package/components/tryghost-email-analytics-service-5.89.6.tgz +0 -0
  20. package/components/{tryghost-email-content-generator-5.89.4.tgz → tryghost-email-content-generator-5.89.6.tgz} +0 -0
  21. package/components/tryghost-email-events-5.89.6.tgz +0 -0
  22. package/components/tryghost-email-service-5.89.6.tgz +0 -0
  23. package/components/tryghost-email-suppression-list-5.89.6.tgz +0 -0
  24. package/components/{tryghost-express-dynamic-redirects-5.89.4.tgz → tryghost-express-dynamic-redirects-5.89.6.tgz} +0 -0
  25. package/components/{tryghost-external-media-inliner-5.89.4.tgz → tryghost-external-media-inliner-5.89.6.tgz} +0 -0
  26. package/components/tryghost-extract-api-key-5.89.6.tgz +0 -0
  27. package/components/tryghost-ghost-5.89.6.tgz +0 -0
  28. package/components/tryghost-html-to-plaintext-5.89.6.tgz +0 -0
  29. package/components/tryghost-i18n-5.89.6.tgz +0 -0
  30. package/components/{tryghost-importer-handler-content-files-5.89.4.tgz → tryghost-importer-handler-content-files-5.89.6.tgz} +0 -0
  31. package/components/{tryghost-importer-revue-5.89.4.tgz → tryghost-importer-revue-5.89.6.tgz} +0 -0
  32. package/components/{tryghost-in-memory-repository-5.89.4.tgz → tryghost-in-memory-repository-5.89.6.tgz} +0 -0
  33. package/components/{tryghost-job-manager-5.89.4.tgz → tryghost-job-manager-5.89.6.tgz} +0 -0
  34. package/components/{tryghost-link-redirects-5.89.4.tgz → tryghost-link-redirects-5.89.6.tgz} +0 -0
  35. package/components/{tryghost-link-replacer-5.89.4.tgz → tryghost-link-replacer-5.89.6.tgz} +0 -0
  36. package/components/tryghost-link-tracking-5.89.6.tgz +0 -0
  37. package/components/{tryghost-magic-link-5.89.4.tgz → tryghost-magic-link-5.89.6.tgz} +0 -0
  38. package/components/tryghost-mail-events-5.89.6.tgz +0 -0
  39. package/components/{tryghost-mailgun-client-5.89.4.tgz → tryghost-mailgun-client-5.89.6.tgz} +0 -0
  40. package/components/{tryghost-member-attribution-5.89.4.tgz → tryghost-member-attribution-5.89.6.tgz} +0 -0
  41. package/components/tryghost-member-events-5.89.6.tgz +0 -0
  42. package/components/{tryghost-members-api-5.89.4.tgz → tryghost-members-api-5.89.6.tgz} +0 -0
  43. package/components/tryghost-members-csv-5.89.6.tgz +0 -0
  44. package/components/{tryghost-members-events-service-5.89.4.tgz → tryghost-members-events-service-5.89.6.tgz} +0 -0
  45. package/components/tryghost-members-importer-5.89.6.tgz +0 -0
  46. package/components/{tryghost-members-offers-5.89.4.tgz → tryghost-members-offers-5.89.6.tgz} +0 -0
  47. package/components/tryghost-members-payments-5.89.6.tgz +0 -0
  48. package/components/{tryghost-members-ssr-5.89.4.tgz → tryghost-members-ssr-5.89.6.tgz} +0 -0
  49. package/components/{tryghost-members-stripe-service-5.89.4.tgz → tryghost-members-stripe-service-5.89.6.tgz} +0 -0
  50. package/components/{tryghost-mentions-email-report-5.89.4.tgz → tryghost-mentions-email-report-5.89.6.tgz} +0 -0
  51. package/components/{tryghost-milestones-5.89.4.tgz → tryghost-milestones-5.89.6.tgz} +0 -0
  52. package/components/tryghost-minifier-5.89.6.tgz +0 -0
  53. package/components/{tryghost-model-to-domain-event-interceptor-5.89.4.tgz → tryghost-model-to-domain-event-interceptor-5.89.6.tgz} +0 -0
  54. package/components/tryghost-mw-api-version-mismatch-5.89.6.tgz +0 -0
  55. package/components/tryghost-mw-cache-control-5.89.6.tgz +0 -0
  56. package/components/tryghost-mw-error-handler-5.89.6.tgz +0 -0
  57. package/components/tryghost-mw-session-from-token-5.89.6.tgz +0 -0
  58. package/components/tryghost-mw-update-user-last-seen-5.89.6.tgz +0 -0
  59. package/components/tryghost-mw-version-match-5.89.6.tgz +0 -0
  60. package/components/tryghost-mw-vhost-5.89.6.tgz +0 -0
  61. package/components/tryghost-nql-filter-expansions-5.89.6.tgz +0 -0
  62. package/components/{tryghost-oembed-service-5.89.4.tgz → tryghost-oembed-service-5.89.6.tgz} +0 -0
  63. package/components/tryghost-package-json-5.89.6.tgz +0 -0
  64. package/components/{tryghost-post-events-5.89.4.tgz → tryghost-post-events-5.89.6.tgz} +0 -0
  65. package/components/{tryghost-post-revisions-5.89.4.tgz → tryghost-post-revisions-5.89.6.tgz} +0 -0
  66. package/components/tryghost-posts-service-5.89.6.tgz +0 -0
  67. package/components/{tryghost-recommendations-5.89.4.tgz → tryghost-recommendations-5.89.6.tgz} +0 -0
  68. package/components/{tryghost-referrers-5.89.4.tgz → tryghost-referrers-5.89.6.tgz} +0 -0
  69. package/components/{tryghost-security-5.89.4.tgz → tryghost-security-5.89.6.tgz} +0 -0
  70. package/components/{tryghost-session-service-5.89.4.tgz → tryghost-session-service-5.89.6.tgz} +0 -0
  71. package/components/tryghost-settings-path-manager-5.89.6.tgz +0 -0
  72. package/components/tryghost-slack-notifications-5.89.6.tgz +0 -0
  73. package/components/{tryghost-staff-service-5.89.4.tgz → tryghost-staff-service-5.89.6.tgz} +0 -0
  74. package/components/tryghost-stats-service-5.89.6.tgz +0 -0
  75. package/components/tryghost-tiers-5.89.6.tgz +0 -0
  76. package/components/{tryghost-update-check-service-5.89.4.tgz → tryghost-update-check-service-5.89.6.tgz} +0 -0
  77. package/components/tryghost-verification-trigger-5.89.6.tgz +0 -0
  78. package/components/{tryghost-version-notifications-data-service-5.89.4.tgz → tryghost-version-notifications-data-service-5.89.6.tgz} +0 -0
  79. package/components/{tryghost-webmentions-5.89.4.tgz → tryghost-webmentions-5.89.6.tgz} +0 -0
  80. package/core/built/admin/assets/{chunk.524.88e372a782fa17c3d612.js → chunk.524.c121fa5c220befde8234.js} +5 -5
  81. package/core/built/admin/assets/{chunk.582.5ec6b0a101a25ad210d8.js → chunk.582.78f1ec44751f5313fcc9.js} +6 -6
  82. package/core/built/admin/assets/{ghost-7998cfd04d4b790bc8f7325d835775cb.js → ghost-532c38e4c3ecd17d68cdcc9fb58b9098.js} +2 -2
  83. package/core/built/admin/index.html +2 -2
  84. package/core/frontend/services/routing/controllers/unsubscribe.js +16 -0
  85. package/core/server/services/members/middleware.js +25 -26
  86. package/core/server/services/settings-helpers/SettingsHelpers.js +10 -0
  87. package/core/server/web/members/app.js +10 -3
  88. package/core/shared/config/defaults.json +1 -1
  89. package/core/shared/config/env/config.development.json +1 -1
  90. package/package.json +147 -147
  91. package/components/tryghost-adapter-cache-memory-ttl-5.89.4.tgz +0 -0
  92. package/components/tryghost-adapter-cache-redis-5.89.4.tgz +0 -0
  93. package/components/tryghost-announcement-bar-settings-5.89.4.tgz +0 -0
  94. package/components/tryghost-api-version-compatibility-service-5.89.4.tgz +0 -0
  95. package/components/tryghost-audience-feedback-5.89.4.tgz +0 -0
  96. package/components/tryghost-bootstrap-socket-5.89.4.tgz +0 -0
  97. package/components/tryghost-collections-5.89.4.tgz +0 -0
  98. package/components/tryghost-custom-theme-settings-service-5.89.4.tgz +0 -0
  99. package/components/tryghost-domain-events-5.89.4.tgz +0 -0
  100. package/components/tryghost-dynamic-routing-events-5.89.4.tgz +0 -0
  101. package/components/tryghost-email-analytics-provider-mailgun-5.89.4.tgz +0 -0
  102. package/components/tryghost-email-analytics-service-5.89.4.tgz +0 -0
  103. package/components/tryghost-email-events-5.89.4.tgz +0 -0
  104. package/components/tryghost-email-service-5.89.4.tgz +0 -0
  105. package/components/tryghost-email-suppression-list-5.89.4.tgz +0 -0
  106. package/components/tryghost-extract-api-key-5.89.4.tgz +0 -0
  107. package/components/tryghost-ghost-5.89.4.tgz +0 -0
  108. package/components/tryghost-html-to-plaintext-5.89.4.tgz +0 -0
  109. package/components/tryghost-i18n-5.89.4.tgz +0 -0
  110. package/components/tryghost-link-tracking-5.89.4.tgz +0 -0
  111. package/components/tryghost-mail-events-5.89.4.tgz +0 -0
  112. package/components/tryghost-member-events-5.89.4.tgz +0 -0
  113. package/components/tryghost-members-csv-5.89.4.tgz +0 -0
  114. package/components/tryghost-members-importer-5.89.4.tgz +0 -0
  115. package/components/tryghost-members-payments-5.89.4.tgz +0 -0
  116. package/components/tryghost-minifier-5.89.4.tgz +0 -0
  117. package/components/tryghost-mw-api-version-mismatch-5.89.4.tgz +0 -0
  118. package/components/tryghost-mw-cache-control-5.89.4.tgz +0 -0
  119. package/components/tryghost-mw-error-handler-5.89.4.tgz +0 -0
  120. package/components/tryghost-mw-session-from-token-5.89.4.tgz +0 -0
  121. package/components/tryghost-mw-update-user-last-seen-5.89.4.tgz +0 -0
  122. package/components/tryghost-mw-version-match-5.89.4.tgz +0 -0
  123. package/components/tryghost-mw-vhost-5.89.4.tgz +0 -0
  124. package/components/tryghost-nql-filter-expansions-5.89.4.tgz +0 -0
  125. package/components/tryghost-package-json-5.89.4.tgz +0 -0
  126. package/components/tryghost-posts-service-5.89.4.tgz +0 -0
  127. package/components/tryghost-settings-path-manager-5.89.4.tgz +0 -0
  128. package/components/tryghost-slack-notifications-5.89.4.tgz +0 -0
  129. package/components/tryghost-stats-service-5.89.4.tgz +0 -0
  130. package/components/tryghost-tiers-5.89.4.tgz +0 -0
  131. package/components/tryghost-verification-trigger-5.89.4.tgz +0 -0
@@ -10,8 +10,8 @@ function s(e){var r=o(e)
10
10
  return t(r)}function o(e){if(!t.o(n,e)){var r=new Error("Cannot find module '"+e+"'")
11
11
  throw r.code="MODULE_NOT_FOUND",r}return n[e]}s.keys=function(){return Object.keys(n)},s.resolve=o,e.exports=s,s.id=56857},32186:e=>{"use strict"
12
12
  e.exports=require("@ember/test-waiters")},80032:e=>{"use strict"
13
- e.exports=require("ember-tracked-storage-polyfill")},17809:()=>{},86625:()=>{},88256:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
14
- function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},e("@sentry/browser",[],(function(){return n(t(51294))})),e("@sentry/core",[],(function(){return n(t(16154))})),e("@sentry/integrations",[],(function(){return n(t(20080))})),e("@sentry/replay",[],(function(){return n(t(51633))})),e("@sentry/utils",[],(function(){return n(t(88414))})),e("@tryghost/color-utils",[],(function(){return n(t(86797))})),e("@tryghost/kg-clean-basic-html",[],(function(){return n(t(3414))})),e("@tryghost/kg-converters",[],(function(){return n(t(23075))})),e("@tryghost/limit-service",[],(function(){return n(t(55983))})),e("@tryghost/members-csv/lib/unparse",[],(function(){return n(t(9589))})),e("@tryghost/nql",[],(function(){return n(t(39365))})),e("@tryghost/nql-lang",[],(function(){return n(t(716))})),e("@tryghost/string",[],(function(){return n(t(96107))})),e("@tryghost/timezone-data",[],(function(){return n(t(27019))})),e("element-resize-detector",[],(function(){return n(t(29540))})),e("ember-css-transitions/modifiers/css-transition",["@ember/test-waiters"],(function(){return n(t(67946))})),e("ember-keyboard/helpers/if-key.js",[],(function(){return n(t(10530))})),e("ember-keyboard/helpers/on-key.js",[],(function(){return n(t(13692))})),e("ember-keyboard/modifiers/on-key.js",[],(function(){return n(t(40985))})),e("ember-keyboard/services/keyboard.js",[],(function(){return n(t(89697))})),e("ember-modifier",[],(function(){return n(t(37777))})),e("ember-moment/helpers/-base.js",[],(function(){return n(t(91366))})),e("ember-moment/helpers/is-after.js",[],(function(){return n(t(91461))})),e("ember-moment/helpers/is-before.js",[],(function(){return n(t(61e3))})),e("ember-moment/helpers/is-between.js",[],(function(){return n(t(447))})),e("ember-moment/helpers/is-same-or-after.js",[],(function(){return n(t(7916))})),e("ember-moment/helpers/is-same-or-before.js",[],(function(){return n(t(54351))})),e("ember-moment/helpers/is-same.js",[],(function(){return n(t(64193))})),e("ember-moment/helpers/moment-add.js",[],(function(){return n(t(50080))})),e("ember-moment/helpers/moment-calendar.js",[],(function(){return n(t(96625))})),e("ember-moment/helpers/moment-diff.js",[],(function(){return n(t(85340))})),e("ember-moment/helpers/moment-duration.js",[],(function(){return n(t(42967))})),e("ember-moment/helpers/moment-format.js",[],(function(){return n(t(10536))})),e("ember-moment/helpers/moment-from-now.js",[],(function(){return n(t(706))})),e("ember-moment/helpers/moment-from.js",[],(function(){return n(t(50727))})),e("ember-moment/helpers/moment-subtract.js",[],(function(){return n(t(54651))})),e("ember-moment/helpers/moment-to-date.js",[],(function(){return n(t(81183))})),e("ember-moment/helpers/moment-to-now.js",[],(function(){return n(t(17083))})),e("ember-moment/helpers/moment-to.js",[],(function(){return n(t(84818))})),e("ember-moment/helpers/moment.js",[],(function(){return n(t(41678))})),e("ember-moment/helpers/now.js",[],(function(){return n(t(34980))})),e("ember-moment/helpers/unix.js",[],(function(){return n(t(79272))})),e("ember-moment/helpers/utc.js",[],(function(){return n(t(36022))})),e("ember-moment/services/moment.js",[],(function(){return n(t(39879))})),e("fast-deep-equal",[],(function(){return n(t(25383))})),e("flexsearch",[],(function(){return n(t(37991))})),e("focus-trap",[],(function(){return n(t(39632))})),e("intersection-observer-admin",[],(function(){return n(t(21431))})),e("jose",[],(function(){return n(t(82765))})),e("moment-timezone",[],(function(){return n(t(41101))})),e("papaparse",[],(function(){return n(t(78695))})),e("raf-pool",[],(function(){return n(t(60695))})),e("react",[],(function(){return n(t(72854))})),e("react-dom",[],(function(){return n(t(95303))})),e("react-dom/client",[],(function(){return n(t(70816))})),e("semver/functions/coerce",[],(function(){return n(t(18576))})),e("semver/functions/lt",[],(function(){return n(t(32817))})),e("semver/functions/parse",[],(function(){return n(t(47898))})),e("tooltip.js",[],(function(){return n(t(85557))})),e("tracked-built-ins",["ember-tracked-storage-polyfill"],(function(){return n(t(77151))})),e("validator",[],(function(){return n(t(29119))})),e("_eai_dyn_@sentry/browser",[],(function(){return Promise.resolve().then(t.bind(t,51294))}))}()},60381:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
13
+ e.exports=require("ember-tracked-storage-polyfill")},17809:()=>{},86625:()=>{},25599:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
14
+ function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},e("@sentry/browser",[],(function(){return n(t(51294))})),e("@sentry/core",[],(function(){return n(t(16154))})),e("@sentry/integrations",[],(function(){return n(t(20080))})),e("@sentry/replay",[],(function(){return n(t(51633))})),e("@sentry/utils",[],(function(){return n(t(88414))})),e("@tryghost/color-utils",[],(function(){return n(t(86797))})),e("@tryghost/kg-clean-basic-html",[],(function(){return n(t(3414))})),e("@tryghost/kg-converters",[],(function(){return n(t(23075))})),e("@tryghost/limit-service",[],(function(){return n(t(55983))})),e("@tryghost/members-csv/lib/unparse",[],(function(){return n(t(9589))})),e("@tryghost/nql",[],(function(){return n(t(39365))})),e("@tryghost/nql-lang",[],(function(){return n(t(716))})),e("@tryghost/string",[],(function(){return n(t(96107))})),e("@tryghost/timezone-data",[],(function(){return n(t(27019))})),e("element-resize-detector",[],(function(){return n(t(29540))})),e("ember-css-transitions/modifiers/css-transition",["@ember/test-waiters"],(function(){return n(t(67946))})),e("ember-keyboard/helpers/if-key.js",[],(function(){return n(t(10530))})),e("ember-keyboard/helpers/on-key.js",[],(function(){return n(t(13692))})),e("ember-keyboard/modifiers/on-key.js",[],(function(){return n(t(40985))})),e("ember-keyboard/services/keyboard.js",[],(function(){return n(t(89697))})),e("ember-modifier",[],(function(){return n(t(37777))})),e("ember-moment/helpers/-base.js",[],(function(){return n(t(91366))})),e("ember-moment/helpers/is-after.js",[],(function(){return n(t(91461))})),e("ember-moment/helpers/is-before.js",[],(function(){return n(t(61e3))})),e("ember-moment/helpers/is-between.js",[],(function(){return n(t(447))})),e("ember-moment/helpers/is-same-or-after.js",[],(function(){return n(t(7916))})),e("ember-moment/helpers/is-same-or-before.js",[],(function(){return n(t(54351))})),e("ember-moment/helpers/is-same.js",[],(function(){return n(t(64193))})),e("ember-moment/helpers/moment-add.js",[],(function(){return n(t(50080))})),e("ember-moment/helpers/moment-calendar.js",[],(function(){return n(t(96625))})),e("ember-moment/helpers/moment-diff.js",[],(function(){return n(t(85340))})),e("ember-moment/helpers/moment-duration.js",[],(function(){return n(t(42967))})),e("ember-moment/helpers/moment-format.js",[],(function(){return n(t(10536))})),e("ember-moment/helpers/moment-from-now.js",[],(function(){return n(t(706))})),e("ember-moment/helpers/moment-from.js",[],(function(){return n(t(50727))})),e("ember-moment/helpers/moment-subtract.js",[],(function(){return n(t(54651))})),e("ember-moment/helpers/moment-to-date.js",[],(function(){return n(t(81183))})),e("ember-moment/helpers/moment-to-now.js",[],(function(){return n(t(17083))})),e("ember-moment/helpers/moment-to.js",[],(function(){return n(t(84818))})),e("ember-moment/helpers/moment.js",[],(function(){return n(t(41678))})),e("ember-moment/helpers/now.js",[],(function(){return n(t(34980))})),e("ember-moment/helpers/unix.js",[],(function(){return n(t(79272))})),e("ember-moment/helpers/utc.js",[],(function(){return n(t(36022))})),e("ember-moment/services/moment.js",[],(function(){return n(t(39879))})),e("fast-deep-equal",[],(function(){return n(t(25383))})),e("flexsearch",[],(function(){return n(t(37991))})),e("focus-trap",[],(function(){return n(t(39632))})),e("intersection-observer-admin",[],(function(){return n(t(21431))})),e("jose",[],(function(){return n(t(82765))})),e("moment-timezone",[],(function(){return n(t(41101))})),e("papaparse",[],(function(){return n(t(78695))})),e("raf-pool",[],(function(){return n(t(60695))})),e("react",[],(function(){return n(t(72854))})),e("react-dom",[],(function(){return n(t(95303))})),e("react-dom/client",[],(function(){return n(t(70816))})),e("semver/functions/coerce",[],(function(){return n(t(18576))})),e("semver/functions/lt",[],(function(){return n(t(32817))})),e("semver/functions/parse",[],(function(){return n(t(47898))})),e("tooltip.js",[],(function(){return n(t(85557))})),e("tracked-built-ins",["ember-tracked-storage-polyfill"],(function(){return n(t(77151))})),e("validator",[],(function(){return n(t(29119))})),e("_eai_dyn_@sentry/browser",[],(function(){return Promise.resolve().then(t.bind(t,51294))}))}()},89906:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
15
15
  function n(e){var s=t[e]
16
16
  if(void 0!==s)return s.exports
17
17
  var o=t[e]={id:e,loaded:!1,exports:{}}
@@ -28,8 +28,8 @@ var r=(r,t)=>{var s,o,[i,u,m]=t,a=0
28
28
  if(i.some((r=>0!==e[r]))){for(s in u)n.o(u,s)&&(n.m[s]=u[s])
29
29
  if(m)var c=m(n)}for(r&&r(t);a<i.length;a++)o=i[a],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0
30
30
  return n.O(c)},t=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
31
- t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[42],(()=>n(n.s=60381)))
32
- var s=n.O(void 0,[42],(()=>n(n.s=88256)))
31
+ t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[42],(()=>n(n.s=89906)))
32
+ var s=n.O(void 0,[42],(()=>n(n.s=25599)))
33
33
  s=n.O(s),__ember_auto_import__=s})()
34
34
 
35
- //# sourceMappingURL=chunk.524.88e372a782fa17c3d612.map
35
+ //# sourceMappingURL=chunk.524.c121fa5c220befde8234.map
@@ -10,10 +10,10 @@ function s(e){var r=o(e)
10
10
  return t(r)}function o(e){if(!t.o(n,e)){var r=new Error("Cannot find module '"+e+"'")
11
11
  throw r.code="MODULE_NOT_FOUND",r}return n[e]}s.keys=function(){return Object.keys(n)},s.resolve=o,e.exports=s,s.id=56857},32186:e=>{"use strict"
12
12
  e.exports=require("@ember/test-waiters")},80032:e=>{"use strict"
13
- e.exports=require("ember-tracked-storage-polyfill")},17809:()=>{},86625:()=>{},88256:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
14
- function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},e("@sentry/browser",EAI_DISCOVERED_EXTERNALS("@sentry/browser"),(function(){return n(t(51294))})),e("@sentry/core",EAI_DISCOVERED_EXTERNALS("@sentry/core"),(function(){return n(t(16154))})),e("@sentry/integrations",EAI_DISCOVERED_EXTERNALS("@sentry/integrations"),(function(){return n(t(20080))})),e("@sentry/replay",EAI_DISCOVERED_EXTERNALS("@sentry/replay"),(function(){return n(t(51633))})),e("@sentry/utils",EAI_DISCOVERED_EXTERNALS("@sentry/utils"),(function(){return n(t(88414))})),e("@tryghost/color-utils",EAI_DISCOVERED_EXTERNALS("@tryghost/color-utils"),(function(){return n(t(86797))})),e("@tryghost/kg-clean-basic-html",EAI_DISCOVERED_EXTERNALS("@tryghost/kg-clean-basic-html"),(function(){return n(t(3414))})),e("@tryghost/kg-converters",EAI_DISCOVERED_EXTERNALS("@tryghost/kg-converters"),(function(){return n(t(23075))})),e("@tryghost/limit-service",EAI_DISCOVERED_EXTERNALS("@tryghost/limit-service"),(function(){return n(t(55983))})),e("@tryghost/members-csv/lib/unparse",EAI_DISCOVERED_EXTERNALS("@tryghost/members-csv/lib/unparse"),(function(){return n(t(9589))})),e("@tryghost/nql",EAI_DISCOVERED_EXTERNALS("@tryghost/nql"),(function(){return n(t(39365))})),e("@tryghost/nql-lang",EAI_DISCOVERED_EXTERNALS("@tryghost/nql-lang"),(function(){return n(t(716))})),e("@tryghost/string",EAI_DISCOVERED_EXTERNALS("@tryghost/string"),(function(){return n(t(96107))})),e("@tryghost/timezone-data",EAI_DISCOVERED_EXTERNALS("@tryghost/timezone-data"),(function(){return n(t(27019))})),e("element-resize-detector",EAI_DISCOVERED_EXTERNALS("element-resize-detector"),(function(){return n(t(29540))})),e("ember-css-transitions/modifiers/css-transition",EAI_DISCOVERED_EXTERNALS("ember-css-transitions/modifiers/css-transition"),(function(){return n(t(67946))})),e("ember-keyboard/helpers/if-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/helpers/if-key.js"),(function(){return n(t(10530))})),e("ember-keyboard/helpers/on-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/helpers/on-key.js"),(function(){return n(t(13692))})),e("ember-keyboard/modifiers/on-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/modifiers/on-key.js"),(function(){return n(t(40985))})),e("ember-keyboard/services/keyboard.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/services/keyboard.js"),(function(){return n(t(89697))})),e("ember-modifier",EAI_DISCOVERED_EXTERNALS("ember-modifier"),(function(){return n(t(37777))})),e("ember-moment/helpers/-base.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/-base.js"),(function(){return n(t(91366))})),e("ember-moment/helpers/is-after.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-after.js"),(function(){return n(t(91461))})),e("ember-moment/helpers/is-before.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-before.js"),(function(){return n(t(61e3))})),e("ember-moment/helpers/is-between.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-between.js"),(function(){return n(t(447))})),e("ember-moment/helpers/is-same-or-after.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same-or-after.js"),(function(){return n(t(7916))})),e("ember-moment/helpers/is-same-or-before.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same-or-before.js"),(function(){return n(t(54351))})),e("ember-moment/helpers/is-same.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same.js"),(function(){return n(t(64193))})),e("ember-moment/helpers/moment-add.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-add.js"),(function(){return n(t(50080))})),e("ember-moment/helpers/moment-calendar.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-calendar.js"),(function(){return n(t(96625))})),e("ember-moment/helpers/moment-diff.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-diff.js"),(function(){return n(t(85340))})),e("ember-moment/helpers/moment-duration.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-duration.js"),(function(){return n(t(42967))})),e("ember-moment/helpers/moment-format.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-format.js"),(function(){return n(t(10536))})),e("ember-moment/helpers/moment-from-now.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-from-now.js"),(function(){return n(t(706))})),e("ember-moment/helpers/moment-from.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-from.js"),(function(){return n(t(50727))})),e("ember-moment/helpers/moment-subtract.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-subtract.js"),(function(){return n(t(54651))})),e("ember-moment/helpers/moment-to-date.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to-date.js"),(function(){return n(t(81183))})),e("ember-moment/helpers/moment-to-now.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to-now.js"),(function(){return n(t(17083))})),e("ember-moment/helpers/moment-to.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to.js"),(function(){return n(t(84818))})),e("ember-moment/helpers/moment.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment.js"),(function(){return n(t(41678))})),e("ember-moment/helpers/now.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/now.js"),(function(){return n(t(34980))})),e("ember-moment/helpers/unix.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/unix.js"),(function(){return n(t(79272))})),e("ember-moment/helpers/utc.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/utc.js"),(function(){return n(t(36022))})),e("ember-moment/services/moment.js",EAI_DISCOVERED_EXTERNALS("ember-moment/services/moment.js"),(function(){return n(t(39879))})),e("fast-deep-equal",EAI_DISCOVERED_EXTERNALS("fast-deep-equal"),(function(){return n(t(25383))})),e("flexsearch",EAI_DISCOVERED_EXTERNALS("flexsearch"),(function(){return n(t(37991))})),e("focus-trap",EAI_DISCOVERED_EXTERNALS("focus-trap"),(function(){return n(t(39632))})),e("intersection-observer-admin",EAI_DISCOVERED_EXTERNALS("intersection-observer-admin"),(function(){return n(t(21431))})),e("jose",EAI_DISCOVERED_EXTERNALS("jose"),(function(){return n(t(82765))})),e("moment-timezone",EAI_DISCOVERED_EXTERNALS("moment-timezone"),(function(){return n(t(41101))})),e("papaparse",EAI_DISCOVERED_EXTERNALS("papaparse"),(function(){return n(t(78695))})),e("raf-pool",EAI_DISCOVERED_EXTERNALS("raf-pool"),(function(){return n(t(60695))})),e("react",EAI_DISCOVERED_EXTERNALS("react"),(function(){return n(t(72854))})),e("react-dom",EAI_DISCOVERED_EXTERNALS("react-dom"),(function(){return n(t(95303))})),e("react-dom/client",EAI_DISCOVERED_EXTERNALS("react-dom/client"),(function(){return n(t(70816))})),e("semver/functions/coerce",EAI_DISCOVERED_EXTERNALS("semver/functions/coerce"),(function(){return n(t(18576))})),e("semver/functions/lt",EAI_DISCOVERED_EXTERNALS("semver/functions/lt"),(function(){return n(t(32817))})),e("semver/functions/parse",EAI_DISCOVERED_EXTERNALS("semver/functions/parse"),(function(){return n(t(47898))})),e("tooltip.js",EAI_DISCOVERED_EXTERNALS("tooltip.js"),(function(){return n(t(85557))})),e("tracked-built-ins",EAI_DISCOVERED_EXTERNALS("tracked-built-ins"),(function(){return n(t(77151))})),e("validator",EAI_DISCOVERED_EXTERNALS("validator"),(function(){return n(t(29119))})),e("_eai_dyn_@sentry/browser",[],(function(){return Promise.resolve().then(t.bind(t,51294))}))}()},60381:function(e,r){window._eai_r=require,window._eai_d=define},42458:(e,r,t)=>{e.exports=function(){_eai_d
13
+ e.exports=require("ember-tracked-storage-polyfill")},17809:()=>{},86625:()=>{},25599:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
14
+ function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},e("@sentry/browser",EAI_DISCOVERED_EXTERNALS("@sentry/browser"),(function(){return n(t(51294))})),e("@sentry/core",EAI_DISCOVERED_EXTERNALS("@sentry/core"),(function(){return n(t(16154))})),e("@sentry/integrations",EAI_DISCOVERED_EXTERNALS("@sentry/integrations"),(function(){return n(t(20080))})),e("@sentry/replay",EAI_DISCOVERED_EXTERNALS("@sentry/replay"),(function(){return n(t(51633))})),e("@sentry/utils",EAI_DISCOVERED_EXTERNALS("@sentry/utils"),(function(){return n(t(88414))})),e("@tryghost/color-utils",EAI_DISCOVERED_EXTERNALS("@tryghost/color-utils"),(function(){return n(t(86797))})),e("@tryghost/kg-clean-basic-html",EAI_DISCOVERED_EXTERNALS("@tryghost/kg-clean-basic-html"),(function(){return n(t(3414))})),e("@tryghost/kg-converters",EAI_DISCOVERED_EXTERNALS("@tryghost/kg-converters"),(function(){return n(t(23075))})),e("@tryghost/limit-service",EAI_DISCOVERED_EXTERNALS("@tryghost/limit-service"),(function(){return n(t(55983))})),e("@tryghost/members-csv/lib/unparse",EAI_DISCOVERED_EXTERNALS("@tryghost/members-csv/lib/unparse"),(function(){return n(t(9589))})),e("@tryghost/nql",EAI_DISCOVERED_EXTERNALS("@tryghost/nql"),(function(){return n(t(39365))})),e("@tryghost/nql-lang",EAI_DISCOVERED_EXTERNALS("@tryghost/nql-lang"),(function(){return n(t(716))})),e("@tryghost/string",EAI_DISCOVERED_EXTERNALS("@tryghost/string"),(function(){return n(t(96107))})),e("@tryghost/timezone-data",EAI_DISCOVERED_EXTERNALS("@tryghost/timezone-data"),(function(){return n(t(27019))})),e("element-resize-detector",EAI_DISCOVERED_EXTERNALS("element-resize-detector"),(function(){return n(t(29540))})),e("ember-css-transitions/modifiers/css-transition",EAI_DISCOVERED_EXTERNALS("ember-css-transitions/modifiers/css-transition"),(function(){return n(t(67946))})),e("ember-keyboard/helpers/if-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/helpers/if-key.js"),(function(){return n(t(10530))})),e("ember-keyboard/helpers/on-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/helpers/on-key.js"),(function(){return n(t(13692))})),e("ember-keyboard/modifiers/on-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/modifiers/on-key.js"),(function(){return n(t(40985))})),e("ember-keyboard/services/keyboard.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/services/keyboard.js"),(function(){return n(t(89697))})),e("ember-modifier",EAI_DISCOVERED_EXTERNALS("ember-modifier"),(function(){return n(t(37777))})),e("ember-moment/helpers/-base.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/-base.js"),(function(){return n(t(91366))})),e("ember-moment/helpers/is-after.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-after.js"),(function(){return n(t(91461))})),e("ember-moment/helpers/is-before.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-before.js"),(function(){return n(t(61e3))})),e("ember-moment/helpers/is-between.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-between.js"),(function(){return n(t(447))})),e("ember-moment/helpers/is-same-or-after.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same-or-after.js"),(function(){return n(t(7916))})),e("ember-moment/helpers/is-same-or-before.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same-or-before.js"),(function(){return n(t(54351))})),e("ember-moment/helpers/is-same.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same.js"),(function(){return n(t(64193))})),e("ember-moment/helpers/moment-add.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-add.js"),(function(){return n(t(50080))})),e("ember-moment/helpers/moment-calendar.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-calendar.js"),(function(){return n(t(96625))})),e("ember-moment/helpers/moment-diff.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-diff.js"),(function(){return n(t(85340))})),e("ember-moment/helpers/moment-duration.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-duration.js"),(function(){return n(t(42967))})),e("ember-moment/helpers/moment-format.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-format.js"),(function(){return n(t(10536))})),e("ember-moment/helpers/moment-from-now.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-from-now.js"),(function(){return n(t(706))})),e("ember-moment/helpers/moment-from.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-from.js"),(function(){return n(t(50727))})),e("ember-moment/helpers/moment-subtract.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-subtract.js"),(function(){return n(t(54651))})),e("ember-moment/helpers/moment-to-date.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to-date.js"),(function(){return n(t(81183))})),e("ember-moment/helpers/moment-to-now.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to-now.js"),(function(){return n(t(17083))})),e("ember-moment/helpers/moment-to.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to.js"),(function(){return n(t(84818))})),e("ember-moment/helpers/moment.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment.js"),(function(){return n(t(41678))})),e("ember-moment/helpers/now.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/now.js"),(function(){return n(t(34980))})),e("ember-moment/helpers/unix.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/unix.js"),(function(){return n(t(79272))})),e("ember-moment/helpers/utc.js",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/utc.js"),(function(){return n(t(36022))})),e("ember-moment/services/moment.js",EAI_DISCOVERED_EXTERNALS("ember-moment/services/moment.js"),(function(){return n(t(39879))})),e("fast-deep-equal",EAI_DISCOVERED_EXTERNALS("fast-deep-equal"),(function(){return n(t(25383))})),e("flexsearch",EAI_DISCOVERED_EXTERNALS("flexsearch"),(function(){return n(t(37991))})),e("focus-trap",EAI_DISCOVERED_EXTERNALS("focus-trap"),(function(){return n(t(39632))})),e("intersection-observer-admin",EAI_DISCOVERED_EXTERNALS("intersection-observer-admin"),(function(){return n(t(21431))})),e("jose",EAI_DISCOVERED_EXTERNALS("jose"),(function(){return n(t(82765))})),e("moment-timezone",EAI_DISCOVERED_EXTERNALS("moment-timezone"),(function(){return n(t(41101))})),e("papaparse",EAI_DISCOVERED_EXTERNALS("papaparse"),(function(){return n(t(78695))})),e("raf-pool",EAI_DISCOVERED_EXTERNALS("raf-pool"),(function(){return n(t(60695))})),e("react",EAI_DISCOVERED_EXTERNALS("react"),(function(){return n(t(72854))})),e("react-dom",EAI_DISCOVERED_EXTERNALS("react-dom"),(function(){return n(t(95303))})),e("react-dom/client",EAI_DISCOVERED_EXTERNALS("react-dom/client"),(function(){return n(t(70816))})),e("semver/functions/coerce",EAI_DISCOVERED_EXTERNALS("semver/functions/coerce"),(function(){return n(t(18576))})),e("semver/functions/lt",EAI_DISCOVERED_EXTERNALS("semver/functions/lt"),(function(){return n(t(32817))})),e("semver/functions/parse",EAI_DISCOVERED_EXTERNALS("semver/functions/parse"),(function(){return n(t(47898))})),e("tooltip.js",EAI_DISCOVERED_EXTERNALS("tooltip.js"),(function(){return n(t(85557))})),e("tracked-built-ins",EAI_DISCOVERED_EXTERNALS("tracked-built-ins"),(function(){return n(t(77151))})),e("validator",EAI_DISCOVERED_EXTERNALS("validator"),(function(){return n(t(29119))})),e("_eai_dyn_@sentry/browser",[],(function(){return Promise.resolve().then(t.bind(t,51294))}))}()},89906:function(e,r){window._eai_r=require,window._eai_d=define},97909:(e,r,t)=>{e.exports=function(){_eai_d
15
15
  var e=_eai_r
16
- window.emberAutoImportDynamic=function(r){return 1===arguments.length?e("_eai_dyn_"+r):e("_eai_dynt_"+r)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(r){return e("_eai_sync_"+r)(Array.prototype.slice.call(arguments,1))},t(88256)}()}},t={}
16
+ window.emberAutoImportDynamic=function(r){return 1===arguments.length?e("_eai_dyn_"+r):e("_eai_dynt_"+r)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(r){return e("_eai_sync_"+r)(Array.prototype.slice.call(arguments,1))},t(25599)}()}},t={}
17
17
  function n(e){var s=t[e]
18
18
  if(void 0!==s)return s.exports
19
19
  var o=t[e]={id:e,loaded:!1,exports:{}}
@@ -30,8 +30,8 @@ var r=(r,t)=>{var s,o,[m,i,E]=t,a=0
30
30
  if(m.some((r=>0!==e[r]))){for(s in i)n.o(i,s)&&(n.m[s]=i[s])
31
31
  if(E)var u=E(n)}for(r&&r(t);a<m.length;a++)o=m[a],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0
32
32
  return n.O(u)},t=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
33
- t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[42],(()=>n(n.s=60381)))
34
- var s=n.O(void 0,[42],(()=>n(n.s=42458)))
33
+ t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[42],(()=>n(n.s=89906)))
34
+ var s=n.O(void 0,[42],(()=>n(n.s=97909)))
35
35
  s=n.O(s),__ember_auto_import__=s})()
36
36
 
37
- //# sourceMappingURL=chunk.582.5ec6b0a101a25ad210d8.map
37
+ //# sourceMappingURL=chunk.582.78f1ec44751f5313fcc9.map
@@ -1674,7 +1674,7 @@ if(r.length)return l(r),s(!1),i(100),null
1674
1674
  const n=[]
1675
1675
  for(let i=0;i<e.length;i+=1){const r=e[i]
1676
1676
  n.push(h(r,t))}try{const e=await Promise.all(n)
1677
- return i(100),c.current.clear(),s(!1),l([]),e}catch(a){return console.error(a),l([...o,a]),s(!1),i(100),c.current.clear(),null}},errors:o,filesNumber:u}},u=this.feature.lexicalMultiplayer&&!s.post.isNew,d=("https:"===window.location.protocol?"wss:":"ws:")+window.location.host+this.ghostPaths.url.api("posts","multiplayer"),c=s.post.id,p=this.session.user.name,m=({isInitInstance:e})=>r.default.createElement("div",{"data-secondary-instance":!!e,style:e?{width:0,height:0,overflow:"hidden"}:{}},r.default.createElement(V,{editorResource:this.editorResource,cardConfig:s,enableMultiplayer:u,fileUploader:{useFileUpload:l,fileTypes:N},initialEditorState:this.args.lexical,multiplayerUsername:p,multiplayerDocId:c,multiplayerEndpoint:d,onError:this.onError,darkMode:this.feature.nightShift,isTKEnabled:!0},r.default.createElement(q,{editorResource:this.editorResource,cursorDidExitAtTop:e?null:this.args.cursorDidExitAtTop,placeholderText:e?null:this.args.placeholderText,darkMode:e?null:this.feature.nightShift,onChange:e?this.args.updateSecondaryInstanceModel:this.args.onChange,registerAPI:e?this.args.registerSecondaryAPI:this.args.registerAPI}),r.default.createElement($,{editorResource:this.editorResource,onChange:e?()=>{}:this.args.updateWordCount}),r.default.createElement(Y,{editorResource:this.editorResource,onChange:e?()=>{}:this.args.updatePostTkCount})))
1677
+ return i(100),c.current.clear(),s(!1),l([]),e}catch(a){return console.error(a),l([...o,a]),s(!1),i(100),c.current.clear(),null}},errors:o,filesNumber:u}},u=this.feature.lexicalMultiplayer&&!s.post.isNew,d=("https:"===window.location.protocol?"wss:":"ws:")+window.location.host+this.ghostPaths.url.api("posts","multiplayer"),c=s.post.id,p=this.session.user.name,m=({isInitInstance:e})=>r.default.createElement("div",{"data-secondary-instance":!!e,style:e?{display:"none"}:{}},r.default.createElement(V,{editorResource:this.editorResource,cardConfig:s,enableMultiplayer:u,fileUploader:{useFileUpload:l,fileTypes:N},initialEditorState:this.args.lexical,multiplayerUsername:p,multiplayerDocId:c,multiplayerEndpoint:d,onError:this.onError,darkMode:this.feature.nightShift,isTKEnabled:!0},r.default.createElement(q,{editorResource:this.editorResource,cursorDidExitAtTop:e?null:this.args.cursorDidExitAtTop,placeholderText:e?null:this.args.placeholderText,darkMode:e?null:this.feature.nightShift,onChange:e?this.args.updateSecondaryInstanceModel:this.args.onChange,registerAPI:e?this.args.registerSecondaryAPI:this.args.registerAPI}),r.default.createElement($,{editorResource:this.editorResource,onChange:e?()=>{}:this.args.updateWordCount}),r.default.createElement(Y,{editorResource:this.editorResource,onChange:e?()=>{}:this.args.updatePostTkCount})))
1678
1678
  return r.default.createElement("div",{className:["koenig-react-editor","koenig-lexical",this.args.className].filter(Boolean).join(" ")},r.default.createElement(H,{config:this.config},r.default.createElement(r.Suspense,{fallback:r.default.createElement("p",{className:"koenig-react-editor-loading"},"Loading editor...")},r.default.createElement(m,null),r.default.createElement(m,{isInitInstance:!0}))))}))}get pinturaJsUrl(){return this.settings.pintura?this.config.pintura?.js||this.settings.pinturaJsUrl:null}get pinturaCSSUrl(){return this.settings.pintura?this.config.pintura?.css||this.settings.pinturaCssUrl:null}get pinturaConfig(){const e=this.getImageEditorJSUrl(),t=this.getImageEditorCSSUrl()
1679
1679
  return e&&t?{jsUrl:e,cssUrl:t}:null}getImageEditorJSUrl(){let e=this.pinturaJsUrl
1680
1680
  return e?(e.startsWith("/")&&(e=window.location.origin+this.ghostPaths.adminRoot.replace(/\/$/,"")+e),e):null}getImageEditorCSSUrl(){let e=this.pinturaCSSUrl
@@ -4757,4 +4757,4 @@ e.default=t.default.create({properties:["name","event","targetUrl","secret"],nam
4757
4757
  e.default=Ember.Component.extend({})})),define("ghost-admin/config/environment",[],(function(){try{var e="ghost-admin/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),i={default:JSON.parse(decodeURIComponent(t))}
4758
4758
  return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.89",name:"ghost-admin"})
4759
4759
 
4760
- //# sourceMappingURL=ghost-efb54d1e241bb6ff99182ed453d727eb.map
4760
+ //# sourceMappingURL=ghost-87070f119ed555e77f714304855b0e3c.map
@@ -58,7 +58,7 @@
58
58
 
59
59
  <script src="assets/vendor-eb806b4d193377b9b4bbf885840bfdc2.js"></script>
60
60
  <script src="assets/chunk.42.90f279da5ca389af68b9.js"></script>
61
- <script src="assets/chunk.524.88e372a782fa17c3d612.js"></script>
62
- <script src="assets/ghost-7998cfd04d4b790bc8f7325d835775cb.js"></script>
61
+ <script src="assets/chunk.524.c121fa5c220befde8234.js"></script>
62
+ <script src="assets/ghost-532c38e4c3ecd17d68cdcc9fb58b9098.js"></script>
63
63
  </body>
64
64
  </html>
@@ -3,6 +3,8 @@ const url = require('url');
3
3
  const members = require('../../../../server/services/members');
4
4
  const urlUtils = require('../../../../shared/url-utils');
5
5
  const logging = require('@tryghost/logging');
6
+ const settingsHelpers = require('../../../../server/services/settings-helpers');
7
+ const crypto = require('crypto');
6
8
 
7
9
  module.exports = async function unsubscribeController(req, res) {
8
10
  debug('unsubscribeController');
@@ -19,6 +21,17 @@ module.exports = async function unsubscribeController(req, res) {
19
21
 
20
22
  // Do an actual unsubscribe
21
23
  try {
24
+ if (!query.key) {
25
+ logging.warn('[List-Unsubscribe] Unsubscribe failed due to missing verification key for ' + query.uuid);
26
+ return res.status(400).end();
27
+ }
28
+ const membersKey = settingsHelpers.getMembersValidationKey();
29
+ const memberHmac = crypto.createHmac('sha256', membersKey).update(query.uuid).digest('hex');
30
+ if (memberHmac !== query.key) {
31
+ logging.warn('[List-Unsubscribe] Unsubscribe failed due to invalid key for ' + query.uuid);
32
+ return res.status(400).end();
33
+ }
34
+
22
35
  const member = await members.api.members.get({uuid: query.uuid}, {withRelated: ['newsletters']});
23
36
  if (member) {
24
37
  if (query.comments) {
@@ -60,6 +73,9 @@ module.exports = async function unsubscribeController(req, res) {
60
73
  if (query.comments) {
61
74
  redirectUrl.searchParams.append('comments', query.comments);
62
75
  }
76
+ if (query.key) {
77
+ redirectUrl.searchParams.append('key', query.key);
78
+ }
63
79
  redirectUrl.searchParams.append('action', 'unsubscribe');
64
80
 
65
81
  return res.redirect(302, redirectUrl.href);
@@ -15,10 +15,12 @@ const tpl = require('@tryghost/tpl');
15
15
  const onHeaders = require('on-headers');
16
16
  const tiersService = require('../tiers/service');
17
17
  const config = require('../../../shared/config');
18
+ const settingsHelpers = require('../settings-helpers');
18
19
 
19
20
  const messages = {
20
21
  missingUuid: 'Missing uuid.',
21
- invalidUuid: 'Invalid uuid.'
22
+ invalidUuid: 'Invalid uuid.',
23
+ invalidKey: 'Invalid key.'
22
24
  };
23
25
 
24
26
  const getFreeTier = async function getFreeTier() {
@@ -97,7 +99,7 @@ const loadMemberSession = async function loadMemberSession(req, res, next) {
97
99
  };
98
100
 
99
101
  /**
100
- * Require member authentication, and make it possible to authenticate via uuid.
102
+ * Require member authentication, and make it possible to authenticate via uuid + hashed key.
101
103
  * You can chain this after loadMemberSession to make it possible to authenticate via both the uuid and the session.
102
104
  */
103
105
  const authMemberByUuid = async function authMemberByUuid(req, res, next) {
@@ -114,6 +116,22 @@ const authMemberByUuid = async function authMemberByUuid(req, res, next) {
114
116
  });
115
117
  }
116
118
 
119
+ const key = req.query.key;
120
+ if (!key) {
121
+ throw new errors.UnauthorizedError({
122
+ message: tpl(messages.invalidKey)
123
+ });
124
+ }
125
+
126
+ // the request key is a hashed value from the member uuid and the members validation key so we can verify the source
127
+ // (only Ghost should be able to generate the key)
128
+ const memberHmac = crypto.createHmac('sha256', settingsHelpers.getMembersValidationKey()).update(uuid).digest('hex');
129
+ if (memberHmac !== key) {
130
+ throw new errors.UnauthorizedError({
131
+ message: tpl(messages.invalidKey)
132
+ });
133
+ }
134
+
117
135
  const member = await membersService.api.memberBREADService.read({uuid});
118
136
  if (!member) {
119
137
  throw new errors.UnauthorizedError({
@@ -193,25 +211,14 @@ const deleteSuppression = async function deleteSuppression(req, res) {
193
211
 
194
212
  const getMemberNewsletters = async function getMemberNewsletters(req, res) {
195
213
  try {
196
- const memberUuid = req.query.uuid;
197
-
198
- if (!memberUuid) {
199
- res.writeHead(400);
200
- return res.end('Invalid member uuid');
201
- }
202
-
203
- const memberData = await membersService.api.members.get({
204
- uuid: memberUuid
205
- }, {
206
- withRelated: ['newsletters']
207
- });
214
+ const memberData = req.member; // validation assumed
208
215
 
209
216
  if (!memberData) {
210
217
  res.writeHead(404);
211
218
  return res.end('Email address not found.');
212
219
  }
213
220
 
214
- const data = _.pick(memberData.toJSON(), 'uuid', 'email', 'name', 'newsletters', 'enable_comment_notifications', 'status');
221
+ const data = _.pick(memberData, 'uuid', 'email', 'name', 'newsletters', 'enable_comment_notifications', 'status');
215
222
 
216
223
  if (data.newsletters) {
217
224
  data.newsletters = formatNewsletterResponse(data.newsletters);
@@ -226,23 +233,15 @@ const getMemberNewsletters = async function getMemberNewsletters(req, res) {
226
233
 
227
234
  const updateMemberNewsletters = async function updateMemberNewsletters(req, res) {
228
235
  try {
229
- const memberUuid = req.query.uuid;
230
- if (!memberUuid) {
231
- res.writeHead(400);
232
- return res.end('Invalid member uuid');
233
- }
234
-
235
- const data = _.pick(req.body, 'newsletters', 'enable_comment_notifications');
236
- const memberData = await membersService.api.members.get({
237
- uuid: memberUuid
238
- });
236
+ const memberData = req.member; // validation assumed
239
237
  if (!memberData) {
240
238
  res.writeHead(404);
241
239
  return res.end('Email address not found.');
242
240
  }
243
241
 
242
+ const data = _.pick(req.body, 'newsletters', 'enable_comment_notifications');
244
243
  const options = {
245
- id: memberData.get('id'),
244
+ id: memberData.id,
246
245
  withRelated: ['newsletters']
247
246
  };
248
247
 
@@ -106,6 +106,16 @@ class SettingsHelpers {
106
106
  return domain;
107
107
  }
108
108
 
109
+ /**
110
+ * Retrieves the member validation key from the settings cache. The intent is for this key to be used where member
111
+ * auth is not required. For example, unsubscribe links in emails, which are required to be one-click unsubscribe.
112
+ *
113
+ * @returns {string} The member validation key.
114
+ */
115
+ getMembersValidationKey() {
116
+ return this.settingsCache.get('members_email_auth_secret');
117
+ }
118
+
109
119
  getMembersSupportAddress() {
110
120
  let supportAddress = this.settingsCache.get('members_support_address');
111
121
 
@@ -40,9 +40,16 @@ module.exports = function setupMembersApp() {
40
40
  // Initializes members specific routes as well as assigns members specific data to the req/res objects
41
41
  // We don't want to add global bodyParser middleware as that interferes with stripe webhook requests on - `/webhooks`.
42
42
 
43
- // Manage newsletter subscription via unsubscribe link
44
- membersApp.get('/api/member/newsletters', middleware.getMemberNewsletters);
45
- membersApp.put('/api/member/newsletters', bodyParser.json({limit: '50mb'}), middleware.updateMemberNewsletters);
43
+ // Manage newsletter subscription via unsubscribe link - these should be authenticated by uuid and hashed key
44
+ membersApp.get('/api/member/newsletters',
45
+ middleware.authMemberByUuid,
46
+ middleware.getMemberNewsletters
47
+ );
48
+ membersApp.put('/api/member/newsletters',
49
+ bodyParser.json({limit: '50mb'}),
50
+ middleware.authMemberByUuid,
51
+ middleware.updateMemberNewsletters
52
+ );
46
53
 
47
54
  // Get and update member data
48
55
  // Caching members content is an experimental feature
@@ -182,7 +182,7 @@
182
182
  },
183
183
  "portal": {
184
184
  "url": "https://cdn.jsdelivr.net/ghost/portal@~{version}/umd/portal.min.js",
185
- "version": "2.38"
185
+ "version": "2.39"
186
186
  },
187
187
  "sodoSearch": {
188
188
  "url": "https://cdn.jsdelivr.net/ghost/sodo-search@~{version}/umd/sodo-search.min.js",
@@ -35,4 +35,4 @@
35
35
  "maxAge": 0
36
36
  }
37
37
  }
38
- }
38
+ }