ghost 5.94.0 → 5.94.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.94.2.tgz +0 -0
  2. package/components/{tryghost-adapter-cache-redis-5.94.0.tgz → tryghost-adapter-cache-redis-5.94.2.tgz} +0 -0
  3. package/components/{tryghost-adapter-manager-5.94.0.tgz → tryghost-adapter-manager-5.94.2.tgz} +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.94.2.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.94.0.tgz → tryghost-api-framework-5.94.2.tgz} +0 -0
  6. package/components/{tryghost-api-version-compatibility-service-5.94.0.tgz → tryghost-api-version-compatibility-service-5.94.2.tgz} +0 -0
  7. package/components/tryghost-audience-feedback-5.94.2.tgz +0 -0
  8. package/components/tryghost-bookshelf-repository-5.94.2.tgz +0 -0
  9. package/components/{tryghost-bootstrap-socket-5.94.0.tgz → tryghost-bootstrap-socket-5.94.2.tgz} +0 -0
  10. package/components/tryghost-collections-5.94.2.tgz +0 -0
  11. package/components/tryghost-constants-5.94.2.tgz +0 -0
  12. package/components/{tryghost-custom-theme-settings-service-5.94.0.tgz → tryghost-custom-theme-settings-service-5.94.2.tgz} +0 -0
  13. package/components/{tryghost-data-generator-5.94.0.tgz → tryghost-data-generator-5.94.2.tgz} +0 -0
  14. package/components/tryghost-domain-events-5.94.2.tgz +0 -0
  15. package/components/{tryghost-donations-5.94.0.tgz → tryghost-donations-5.94.2.tgz} +0 -0
  16. package/components/tryghost-dynamic-routing-events-5.94.2.tgz +0 -0
  17. package/components/tryghost-email-addresses-5.94.2.tgz +0 -0
  18. package/components/tryghost-email-analytics-provider-mailgun-5.94.2.tgz +0 -0
  19. package/components/tryghost-email-analytics-service-5.94.2.tgz +0 -0
  20. package/components/{tryghost-email-content-generator-5.94.0.tgz → tryghost-email-content-generator-5.94.2.tgz} +0 -0
  21. package/components/{tryghost-email-events-5.94.0.tgz → tryghost-email-events-5.94.2.tgz} +0 -0
  22. package/components/{tryghost-email-service-5.94.0.tgz → tryghost-email-service-5.94.2.tgz} +0 -0
  23. package/components/tryghost-email-suppression-list-5.94.2.tgz +0 -0
  24. package/components/tryghost-express-dynamic-redirects-5.94.2.tgz +0 -0
  25. package/components/tryghost-external-media-inliner-5.94.2.tgz +0 -0
  26. package/components/tryghost-extract-api-key-5.94.2.tgz +0 -0
  27. package/components/tryghost-ghost-5.94.2.tgz +0 -0
  28. package/components/{tryghost-html-to-plaintext-5.94.0.tgz → tryghost-html-to-plaintext-5.94.2.tgz} +0 -0
  29. package/components/tryghost-i18n-5.94.2.tgz +0 -0
  30. package/components/tryghost-importer-handler-content-files-5.94.2.tgz +0 -0
  31. package/components/tryghost-importer-revue-5.94.2.tgz +0 -0
  32. package/components/tryghost-in-memory-repository-5.94.2.tgz +0 -0
  33. package/components/{tryghost-job-manager-5.94.0.tgz → tryghost-job-manager-5.94.2.tgz} +0 -0
  34. package/components/tryghost-link-redirects-5.94.2.tgz +0 -0
  35. package/components/tryghost-link-replacer-5.94.2.tgz +0 -0
  36. package/components/{tryghost-link-tracking-5.94.0.tgz → tryghost-link-tracking-5.94.2.tgz} +0 -0
  37. package/components/{tryghost-magic-link-5.94.0.tgz → tryghost-magic-link-5.94.2.tgz} +0 -0
  38. package/components/{tryghost-mail-events-5.94.0.tgz → tryghost-mail-events-5.94.2.tgz} +0 -0
  39. package/components/tryghost-mailgun-client-5.94.2.tgz +0 -0
  40. package/components/{tryghost-member-attribution-5.94.0.tgz → tryghost-member-attribution-5.94.2.tgz} +0 -0
  41. package/components/{tryghost-member-events-5.94.0.tgz → tryghost-member-events-5.94.2.tgz} +0 -0
  42. package/components/tryghost-members-api-5.94.2.tgz +0 -0
  43. package/components/{tryghost-members-csv-5.94.0.tgz → tryghost-members-csv-5.94.2.tgz} +0 -0
  44. package/components/tryghost-members-events-service-5.94.2.tgz +0 -0
  45. package/components/{tryghost-members-importer-5.94.0.tgz → tryghost-members-importer-5.94.2.tgz} +0 -0
  46. package/components/tryghost-members-offers-5.94.2.tgz +0 -0
  47. package/components/tryghost-members-payments-5.94.2.tgz +0 -0
  48. package/components/tryghost-members-ssr-5.94.2.tgz +0 -0
  49. package/components/tryghost-members-stripe-service-5.94.2.tgz +0 -0
  50. package/components/{tryghost-mentions-email-report-5.94.0.tgz → tryghost-mentions-email-report-5.94.2.tgz} +0 -0
  51. package/components/{tryghost-milestones-5.94.0.tgz → tryghost-milestones-5.94.2.tgz} +0 -0
  52. package/components/tryghost-minifier-5.94.2.tgz +0 -0
  53. package/components/tryghost-model-to-domain-event-interceptor-5.94.2.tgz +0 -0
  54. package/components/{tryghost-mw-api-version-mismatch-5.94.0.tgz → tryghost-mw-api-version-mismatch-5.94.2.tgz} +0 -0
  55. package/components/tryghost-mw-cache-control-5.94.2.tgz +0 -0
  56. package/components/tryghost-mw-error-handler-5.94.2.tgz +0 -0
  57. package/components/tryghost-mw-session-from-token-5.94.2.tgz +0 -0
  58. package/components/tryghost-mw-update-user-last-seen-5.94.2.tgz +0 -0
  59. package/components/tryghost-mw-version-match-5.94.2.tgz +0 -0
  60. package/components/tryghost-mw-vhost-5.94.2.tgz +0 -0
  61. package/components/tryghost-nql-filter-expansions-5.94.2.tgz +0 -0
  62. package/components/tryghost-oembed-service-5.94.2.tgz +0 -0
  63. package/components/{tryghost-package-json-5.94.0.tgz → tryghost-package-json-5.94.2.tgz} +0 -0
  64. package/components/tryghost-post-events-5.94.2.tgz +0 -0
  65. package/components/tryghost-post-revisions-5.94.2.tgz +0 -0
  66. package/components/tryghost-posts-service-5.94.2.tgz +0 -0
  67. package/components/tryghost-recommendations-5.94.2.tgz +0 -0
  68. package/components/tryghost-referrers-5.94.2.tgz +0 -0
  69. package/components/{tryghost-security-5.94.0.tgz → tryghost-security-5.94.2.tgz} +0 -0
  70. package/components/tryghost-session-service-5.94.2.tgz +0 -0
  71. package/components/tryghost-settings-path-manager-5.94.2.tgz +0 -0
  72. package/components/tryghost-slack-notifications-5.94.2.tgz +0 -0
  73. package/components/{tryghost-staff-service-5.94.0.tgz → tryghost-staff-service-5.94.2.tgz} +0 -0
  74. package/components/tryghost-stats-service-5.94.2.tgz +0 -0
  75. package/components/{tryghost-tiers-5.94.0.tgz → tryghost-tiers-5.94.2.tgz} +0 -0
  76. package/components/{tryghost-update-check-service-5.94.0.tgz → tryghost-update-check-service-5.94.2.tgz} +0 -0
  77. package/components/{tryghost-verification-trigger-5.94.0.tgz → tryghost-verification-trigger-5.94.2.tgz} +0 -0
  78. package/components/tryghost-version-notifications-data-service-5.94.2.tgz +0 -0
  79. package/components/{tryghost-webmentions-5.94.0.tgz → tryghost-webmentions-5.94.2.tgz} +0 -0
  80. package/core/built/admin/assets/admin-x-activitypub/admin-x-activitypub.js +2 -2
  81. package/core/built/admin/assets/admin-x-activitypub/{index-51277f76.mjs → index-d646c7a1.mjs} +6618 -4913
  82. package/core/built/admin/assets/admin-x-activitypub/modals-a8aeb643.mjs +342 -0
  83. package/core/built/admin/assets/admin-x-demo/admin-x-demo.js +2 -2
  84. package/core/built/admin/assets/admin-x-demo/{index-bfbb9783.mjs → index-140752db.mjs} +1667 -1657
  85. package/core/built/admin/assets/admin-x-demo/{modals-334b160e.mjs → modals-3979b40c.mjs} +2 -2
  86. package/core/built/admin/assets/admin-x-settings/{CodeEditorView-6bb10ebd.mjs → CodeEditorView-9ca04b2a.mjs} +2 -2
  87. package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +2 -2
  88. package/core/built/admin/assets/admin-x-settings/{index-a57eb33d.mjs → index-5fba7766.mjs} +1907 -1893
  89. package/core/built/admin/assets/admin-x-settings/{index-52f09138.mjs → index-6c87f26e.mjs} +2 -2
  90. package/core/built/admin/assets/admin-x-settings/{modals-07c66c7d.mjs → modals-80acb66f.mjs} +2107 -2101
  91. package/core/built/admin/assets/{chunk.524.b9da8e9c62fc112baf2b.js → chunk.524.cd82d3016052a43d2b44.js} +5 -5
  92. package/core/built/admin/assets/{chunk.582.27ddbcbd7a6e7a439db8.js → chunk.582.ea2e209b67019b57bff7.js} +6 -6
  93. package/core/built/admin/assets/{chunk.785.78610bd253a9e2419ec9.js → chunk.602.a3d38ba0a516decd78ce.js} +6089 -6078
  94. package/core/built/admin/assets/codemirror/{codemirror-91774021e5e17ea08db5cd2ed9f3e664.js → codemirror-730d06e33ae9af4745ddd6a1af2a66bd.js} +809 -810
  95. package/core/built/admin/assets/{ghost-535088daf62c8cbea78a012bb6bbafc6.js → ghost-27a2284f57455ac2e06f1553344f5ba7.js} +248 -194
  96. package/core/built/admin/assets/{ghost-d1c51d3a2d840dda5aa7b4ffe6057756.css → ghost-81adcc22c7836b40b08a662812319e01.css} +1 -1
  97. package/core/built/admin/assets/{ghost-dark-98b3a7e593292a7cb410609e17727a3c.css → ghost-dark-88c10b0aa259d4b666d6a98174c6f5bd.css} +1 -1
  98. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +3 -3
  99. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +3 -3
  100. package/core/built/admin/assets/{vendor-649dc64bfd9ecc1bd7361b53680dfdc2.js → vendor-b83f61eee071be0ef00075df9ff7782d.js} +15 -15
  101. package/core/built/admin/index.html +6 -6
  102. package/core/server/api/endpoints/utils/serializers/output/mappers/index.js +1 -0
  103. package/core/server/api/endpoints/utils/serializers/output/mappers/oembed.js +5 -0
  104. package/core/server/api/endpoints/utils/serializers/output/oembed.js +7 -0
  105. package/core/server/data/importer/import-manager.js +2 -2
  106. package/core/server/data/importer/importers/data/PostsImporter.js +2 -2
  107. package/core/server/data/migrations/versions/4.46/2022-04-13-12-58-fill-uuid-for-newsletters.js +2 -2
  108. package/core/server/data/migrations/versions/4.46/2022-04-13-13-00-add-default-newsletter.js +2 -2
  109. package/core/server/models/email.js +2 -2
  110. package/core/server/models/member.js +3 -3
  111. package/core/server/models/newsletter.js +2 -2
  112. package/core/server/models/post.js +2 -2
  113. package/core/server/models/settings.js +1 -2
  114. package/core/server/services/email-analytics/lib/queries.js +2 -2
  115. package/core/server/services/members-events/index.js +20 -2
  116. package/core/server/web/parent/middleware/request-id.js +2 -2
  117. package/core/shared/labs.js +2 -1
  118. package/core/shared/settings-cache/public.js +2 -1
  119. package/package.json +157 -155
  120. package/yarn.lock +363 -185
  121. package/components/tryghost-adapter-cache-memory-ttl-5.94.0.tgz +0 -0
  122. package/components/tryghost-announcement-bar-settings-5.94.0.tgz +0 -0
  123. package/components/tryghost-audience-feedback-5.94.0.tgz +0 -0
  124. package/components/tryghost-bookshelf-repository-5.94.0.tgz +0 -0
  125. package/components/tryghost-collections-5.94.0.tgz +0 -0
  126. package/components/tryghost-constants-5.94.0.tgz +0 -0
  127. package/components/tryghost-domain-events-5.94.0.tgz +0 -0
  128. package/components/tryghost-dynamic-routing-events-5.94.0.tgz +0 -0
  129. package/components/tryghost-email-addresses-5.94.0.tgz +0 -0
  130. package/components/tryghost-email-analytics-provider-mailgun-5.94.0.tgz +0 -0
  131. package/components/tryghost-email-analytics-service-5.94.0.tgz +0 -0
  132. package/components/tryghost-email-suppression-list-5.94.0.tgz +0 -0
  133. package/components/tryghost-express-dynamic-redirects-5.94.0.tgz +0 -0
  134. package/components/tryghost-external-media-inliner-5.94.0.tgz +0 -0
  135. package/components/tryghost-extract-api-key-5.94.0.tgz +0 -0
  136. package/components/tryghost-ghost-5.94.0.tgz +0 -0
  137. package/components/tryghost-i18n-5.94.0.tgz +0 -0
  138. package/components/tryghost-importer-handler-content-files-5.94.0.tgz +0 -0
  139. package/components/tryghost-importer-revue-5.94.0.tgz +0 -0
  140. package/components/tryghost-in-memory-repository-5.94.0.tgz +0 -0
  141. package/components/tryghost-link-redirects-5.94.0.tgz +0 -0
  142. package/components/tryghost-link-replacer-5.94.0.tgz +0 -0
  143. package/components/tryghost-mailgun-client-5.94.0.tgz +0 -0
  144. package/components/tryghost-members-api-5.94.0.tgz +0 -0
  145. package/components/tryghost-members-events-service-5.94.0.tgz +0 -0
  146. package/components/tryghost-members-offers-5.94.0.tgz +0 -0
  147. package/components/tryghost-members-payments-5.94.0.tgz +0 -0
  148. package/components/tryghost-members-ssr-5.94.0.tgz +0 -0
  149. package/components/tryghost-members-stripe-service-5.94.0.tgz +0 -0
  150. package/components/tryghost-minifier-5.94.0.tgz +0 -0
  151. package/components/tryghost-model-to-domain-event-interceptor-5.94.0.tgz +0 -0
  152. package/components/tryghost-mw-cache-control-5.94.0.tgz +0 -0
  153. package/components/tryghost-mw-error-handler-5.94.0.tgz +0 -0
  154. package/components/tryghost-mw-session-from-token-5.94.0.tgz +0 -0
  155. package/components/tryghost-mw-update-user-last-seen-5.94.0.tgz +0 -0
  156. package/components/tryghost-mw-version-match-5.94.0.tgz +0 -0
  157. package/components/tryghost-mw-vhost-5.94.0.tgz +0 -0
  158. package/components/tryghost-nql-filter-expansions-5.94.0.tgz +0 -0
  159. package/components/tryghost-oembed-service-5.94.0.tgz +0 -0
  160. package/components/tryghost-post-events-5.94.0.tgz +0 -0
  161. package/components/tryghost-post-revisions-5.94.0.tgz +0 -0
  162. package/components/tryghost-posts-service-5.94.0.tgz +0 -0
  163. package/components/tryghost-recommendations-5.94.0.tgz +0 -0
  164. package/components/tryghost-referrers-5.94.0.tgz +0 -0
  165. package/components/tryghost-session-service-5.94.0.tgz +0 -0
  166. package/components/tryghost-settings-path-manager-5.94.0.tgz +0 -0
  167. package/components/tryghost-slack-notifications-5.94.0.tgz +0 -0
  168. package/components/tryghost-stats-service-5.94.0.tgz +0 -0
  169. package/components/tryghost-version-notifications-data-service-5.94.0.tgz +0 -0
  170. package/core/built/admin/assets/admin-x-activitypub/modals-c85985ad.mjs +0 -815
  171. /package/core/built/admin/assets/{chunk.785.78610bd253a9e2419ec9.js.LICENSE.txt → chunk.602.a3d38ba0a516decd78ce.js.LICENSE.txt} +0 -0
@@ -5025,22 +5025,22 @@ i===o-1&&(c&&c.call(s,s),a&&a.resolver(s))},m(e,p,l)}})),d.each(["In","Out"],(fu
5025
5025
  0!==i&&(l.begin=null),l.complete=i!==o-1?null:function(){u&&u.call(s,s),a&&a.resolver(s)},l.display===n&&(l.display="In"===t?"auto":"none"),m(this,c,l)}})),m}function w(e){var t=d.data(e,"velocity")
5026
5026
  return null===t?n:t}function E(e,t){var r=w(e)
5027
5027
  r&&r.delayTimer&&!r.delayPaused&&(r.delayRemaining=r.delay-t+r.delayBegin,r.delayPaused=!0,clearTimeout(r.delayTimer.setTimeout))}function x(e,t){var r=w(e)
5028
- r&&r.delayTimer&&r.delayPaused&&(r.delayPaused=!1,r.delayTimer.setTimeout=setTimeout(r.delayTimer.next,r.delayRemaining))}function k(e){return function(t){return Math.round(t*e)*(1/e)}}function M(e,r,n,i){var o=4,s=1e-7,a=10,l=11,u=1/(l-1),c="Float32Array"in t
5028
+ r&&r.delayTimer&&r.delayPaused&&(r.delayPaused=!1,r.delayTimer.setTimeout=setTimeout(r.delayTimer.next,r.delayRemaining))}function k(e){return function(t){return Math.round(t*e)*(1/e)}}function M(e,r,n,i){var o=.1,s="Float32Array"in t
5029
5029
  if(4!==arguments.length)return!1
5030
- for(var d=0;d<4;++d)if("number"!=typeof arguments[d]||isNaN(arguments[d])||!isFinite(arguments[d]))return!1
5030
+ for(var a=0;a<4;++a)if("number"!=typeof arguments[a]||isNaN(arguments[a])||!isFinite(arguments[a]))return!1
5031
5031
  e=Math.min(e,1),n=Math.min(n,1),e=Math.max(e,0),n=Math.max(n,0)
5032
- var h=c?new Float32Array(l):new Array(l)
5033
- function p(e,t){return 1-3*t+3*e}function f(e,t){return 3*t-6*e}function m(e){return 3*e}function g(e,t,r){return((p(t,r)*e+f(t,r))*e+m(t))*e}function b(e,t,r){return 3*p(t,r)*e*e+2*f(t,r)*e+m(t)}function v(t){for(var r=0,i=1,c=l-1;i!==c&&h[i]<=t;++i)r+=u;--i
5034
- var d=r+(t-h[i])/(h[i+1]-h[i])*u,p=b(d,e,n)
5035
- return p>=.001?function(t,r){for(var i=0;i<o;++i){var s=b(r,e,n)
5036
- if(0===s)return r
5037
- r-=(g(r,e,n)-t)/s}return r}(t,d):0===p?d:function(t,r,i){var o,l,u=0
5038
- do{(o=g(l=r+(i-r)/2,e,n)-t)>0?i=l:r=l}while(Math.abs(o)>s&&++u<a)
5039
- return l}(t,r,r+u)}var y=!1
5040
- function _(){y=!0,e===r&&n===i||function(){for(var t=0;t<l;++t)h[t]=g(t*u,e,n)}()}var w=function(t){return y||_(),e===r&&n===i?t:0===t?0:1===t?1:g(v(t),r,i)}
5041
- w.getControlPoints=function(){return[{x:e,y:r},{x:n,y:i}]}
5042
- var E="generateBezier("+[e,r,n,i]+")"
5043
- return w.toString=function(){return E},w}function O(e,t){var r=e
5032
+ var l=s?new Float32Array(11):new Array(11)
5033
+ function u(e,t){return 1-3*t+3*e}function c(e,t){return 3*t-6*e}function d(e){return 3*e}function h(e,t,r){return((u(t,r)*e+c(t,r))*e+d(t))*e}function p(e,t,r){return 3*u(t,r)*e*e+2*c(t,r)*e+d(t)}function f(t){for(var r=0,i=1;10!==i&&l[i]<=t;++i)r+=o;--i
5034
+ var s=r+(t-l[i])/(l[i+1]-l[i])*o,a=p(s,e,n)
5035
+ return a>=.001?function(t,r){for(var i=0;i<4;++i){var o=p(r,e,n)
5036
+ if(0===o)return r
5037
+ r-=(h(r,e,n)-t)/o}return r}(t,s):0===a?s:function(t,r,i){var o,s,a=0
5038
+ do{(o=h(s=r+(i-r)/2,e,n)-t)>0?i=s:r=s}while(Math.abs(o)>1e-7&&++a<10)
5039
+ return s}(t,r,r+o)}var m=!1
5040
+ function g(){m=!0,e===r&&n===i||function(){for(var t=0;t<11;++t)l[t]=h(t*o,e,n)}()}var b=function(t){return m||g(),e===r&&n===i?t:0===t?0:1===t?1:h(f(t),r,i)}
5041
+ b.getControlPoints=function(){return[{x:e,y:r},{x:n,y:i}]}
5042
+ var v="generateBezier("+[e,r,n,i]+")"
5043
+ return b.toString=function(){return v},b}function O(e,t){var r=e
5044
5044
  return h.isString(e)?m.Easings[e]||(r=!1):r=h.isArray(e)&&1===e.length?k.apply(null,e):h.isArray(e)&&2===e.length?g.apply(null,e.concat([t])):!(!h.isArray(e)||4!==e.length)&&M.apply(null,e),!1===r&&(r=m.Easings[m.defaults.easing]?m.defaults.easing:f),r}function P(e){if(e){var t=m.timestamp&&!0!==e?e:a.now(),r=m.State.calls.length
5045
5045
  r>1e4&&(m.State.calls=function(e){for(var t=-1,r=e?e.length:0,n=[];++t<r;){var i=e[t]
5046
5046
  i&&n.push(i)}return n}(m.State.calls),r=m.State.calls.length)
@@ -9520,4 +9520,4 @@ e.default=class{constructor(e){if(this._data=new t.default,e)for(let t=0;t<e.len
9520
9520
  return this}get(e){let t=this._data[e]
9521
9521
  return t===r.UNDEFINED_KEY?void 0:t}set(e,t){return this._data[e]=t,this}delete(e){return this._data[e]=r.UNDEFINED_KEY,!0}}}))
9522
9522
 
9523
- //# sourceMappingURL=vendor-66e18706cdbe72bd773ca649459072a6.map
9523
+ //# sourceMappingURL=vendor-939d4c13e18563bdb323ea7d667d4247.map
@@ -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%22editorUrl%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.94%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%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%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%226239fc6ccd%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%220f930972a7%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%221264c822b3%22%2C%22adminXActivitypubFilename%22%3A%22admin-x-activitypub.js%22%2C%22adminXActivitypubHash%22%3A%229aa7d7e927%22%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%22editorUrl%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.94%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%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%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22ee37f0b9eb%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%22c03d9a88f8%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22da80d9972a%22%2C%22adminXActivitypubFilename%22%3A%22admin-x-activitypub.js%22%2C%22adminXActivitypubHash%22%3A%2219aa6f46ae%22%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -37,7 +37,7 @@
37
37
  </style>
38
38
 
39
39
  <link integrity="" rel="stylesheet" href="assets/vendor-0ede59da8efb5e28fa929557f7ff7154.css">
40
- <link integrity="" rel="stylesheet" href="assets/ghost-d1c51d3a2d840dda5aa7b4ffe6057756.css" title="light">
40
+ <link integrity="" rel="stylesheet" href="assets/ghost-81adcc22c7836b40b08a662812319e01.css" title="light">
41
41
 
42
42
 
43
43
  </head>
@@ -56,9 +56,9 @@
56
56
 
57
57
  <div id="ember-basic-dropdown-wormhole"></div>
58
58
 
59
- <script src="assets/vendor-649dc64bfd9ecc1bd7361b53680dfdc2.js"></script>
60
- <script src="assets/chunk.785.78610bd253a9e2419ec9.js"></script>
61
- <script src="assets/chunk.524.b9da8e9c62fc112baf2b.js"></script>
62
- <script src="assets/ghost-535088daf62c8cbea78a012bb6bbafc6.js"></script>
59
+ <script src="assets/vendor-b83f61eee071be0ef00075df9ff7782d.js"></script>
60
+ <script src="assets/chunk.602.a3d38ba0a516decd78ce.js"></script>
61
+ <script src="assets/chunk.524.cd82d3016052a43d2b44.js"></script>
62
+ <script src="assets/ghost-27a2284f57455ac2e06f1553344f5ba7.js"></script>
63
63
  </body>
64
64
  </html>
@@ -9,6 +9,7 @@ module.exports = {
9
9
  emailFailures: require('./email-failures'),
10
10
  images: require('./images'),
11
11
  integrations: require('./integrations'),
12
+ oembed: require('./oembed'),
12
13
  pages: require('./pages'),
13
14
  posts: require('./posts'),
14
15
  settings: require('./settings'),
@@ -0,0 +1,5 @@
1
+ const url = require('../utils/url');
2
+
3
+ module.exports = (path) => {
4
+ return url.forImage(path);
5
+ };
@@ -1,8 +1,15 @@
1
1
  const debug = require('@tryghost/debug')('api:endpoints:utils:serializers:output:oembed');
2
+ const mappers = require('./mappers');
2
3
 
3
4
  module.exports = {
4
5
  all(data, apiConfig, frame) {
5
6
  debug('all');
7
+ if (data?.metadata?.thumbnail) {
8
+ data.metadata.thumbnail = mappers.oembed(data.metadata.thumbnail);
9
+ }
10
+ if (data?.metadata?.icon) {
11
+ data.metadata.icon = mappers.oembed(data.metadata.icon);
12
+ }
6
13
  frame.response = data;
7
14
  }
8
15
  };
@@ -3,7 +3,7 @@ const fs = require('fs-extra');
3
3
  const path = require('path');
4
4
  const os = require('os');
5
5
  const glob = require('glob');
6
- const uuid = require('uuid');
6
+ const crypto = require('crypto');
7
7
  const config = require('../../../shared/config');
8
8
  const {extract} = require('@tryghost/zip');
9
9
  const tpl = require('@tryghost/tpl');
@@ -220,7 +220,7 @@ class ImportManager {
220
220
  * @returns {Promise<string>} full path to the extracted folder
221
221
  */
222
222
  async extractZip(filePath) {
223
- const tmpDir = path.join(os.tmpdir(), uuid.v4());
223
+ const tmpDir = path.join(os.tmpdir(), crypto.randomUUID());
224
224
  this.fileToDelete = tmpDir;
225
225
 
226
226
  try {
@@ -1,6 +1,6 @@
1
1
  const debug = require('@tryghost/debug')('importer:posts');
2
2
  const _ = require('lodash');
3
- const uuid = require('uuid');
3
+ const crypto = require('crypto');
4
4
  const BaseImporter = require('./Base');
5
5
  const mobiledocLib = require('../../../../lib/mobiledoc');
6
6
  const validator = require('@tryghost/validator');
@@ -29,7 +29,7 @@ class PostsImporter extends BaseImporter {
29
29
  sanitizeAttributes() {
30
30
  _.each(this.dataToImport, (obj) => {
31
31
  if (!validator.isUUID(obj.uuid || '')) {
32
- obj.uuid = uuid.v4();
32
+ obj.uuid = crypto.randomUUID();
33
33
  }
34
34
 
35
35
  // we used to have post.page=true/false
@@ -1,5 +1,5 @@
1
1
  const logging = require('@tryghost/logging');
2
- const uuid = require('uuid');
2
+ const crypto = require('crypto');
3
3
  const {createTransactionalMigration} = require('../../utils');
4
4
 
5
5
  module.exports = createTransactionalMigration(
@@ -10,7 +10,7 @@ module.exports = createTransactionalMigration(
10
10
 
11
11
  // eslint-disable-next-line no-restricted-syntax
12
12
  for (const newsletter of newslettersWithoutUUID) {
13
- await knex('newsletters').update('uuid', uuid.v4()).where('id', newsletter.id);
13
+ await knex('newsletters').update('uuid', crypto.randomUUID()).where('id', newsletter.id);
14
14
  }
15
15
  },
16
16
  async function down() {
@@ -1,5 +1,5 @@
1
1
  const ObjectId = require('bson-objectid').default;
2
- const uuid = require('uuid');
2
+ const crypto = require('crypto');
3
3
  const logging = require('@tryghost/logging');
4
4
  const startsWith = require('lodash/startsWith');
5
5
  const {createTransactionalMigration} = require('../../utils');
@@ -9,7 +9,7 @@ module.exports = createTransactionalMigration(
9
9
  // This uses the default settings from core/server/data/schema/default-settings/default-settings.json
10
10
  const newsletter = {
11
11
  id: (new ObjectId()).toHexString(),
12
- uuid: uuid.v4(),
12
+ uuid: crypto.randomUUID(),
13
13
  name: 'Ghost',
14
14
  description: '',
15
15
  slug: 'default-newsletter',
@@ -1,4 +1,4 @@
1
- const uuid = require('uuid');
1
+ const crypto = require('crypto');
2
2
  const ghostBookshelf = require('./base');
3
3
 
4
4
  const Email = ghostBookshelf.Model.extend({
@@ -6,7 +6,7 @@ const Email = ghostBookshelf.Model.extend({
6
6
 
7
7
  defaults: function defaults() {
8
8
  return {
9
- uuid: uuid.v4(),
9
+ uuid: crypto.randomUUID(),
10
10
  status: 'pending',
11
11
  recipient_filter: 'status:-free',
12
12
  track_opens: false,
@@ -1,5 +1,5 @@
1
1
  const ghostBookshelf = require('./base');
2
- const uuid = require('uuid');
2
+ const crypto = require('crypto');
3
3
  const _ = require('lodash');
4
4
  const config = require('../../shared/config');
5
5
  const {gravatar} = require('../lib/image');
@@ -10,8 +10,8 @@ const Member = ghostBookshelf.Model.extend({
10
10
  defaults() {
11
11
  return {
12
12
  status: 'free',
13
- uuid: uuid.v4(),
14
- transient_id: uuid.v4(),
13
+ uuid: crypto.randomUUID(),
14
+ transient_id: crypto.randomUUID(),
15
15
  email_count: 0,
16
16
  email_opened_count: 0,
17
17
  enable_comment_notifications: true
@@ -1,6 +1,6 @@
1
1
  const ghostBookshelf = require('./base');
2
2
  const ObjectID = require('bson-objectid').default;
3
- const uuid = require('uuid');
3
+ const crypto = require('crypto');
4
4
  const urlUtils = require('../../shared/url-utils');
5
5
 
6
6
  const Newsletter = ghostBookshelf.Model.extend({
@@ -8,7 +8,7 @@ const Newsletter = ghostBookshelf.Model.extend({
8
8
 
9
9
  defaults: function defaults() {
10
10
  return {
11
- uuid: uuid.v4(),
11
+ uuid: crypto.randomUUID(),
12
12
  sender_reply_to: 'newsletter',
13
13
  status: 'active',
14
14
  visibility: 'members',
@@ -1,6 +1,6 @@
1
1
  // # Post Model
2
2
  const _ = require('lodash');
3
- const uuid = require('uuid');
3
+ const crypto = require('crypto');
4
4
  const moment = require('moment');
5
5
  const {sequence} = require('@tryghost/promise');
6
6
  const tpl = require('@tryghost/tpl');
@@ -89,7 +89,7 @@ Post = ghostBookshelf.Model.extend({
89
89
  }
90
90
 
91
91
  return {
92
- uuid: uuid.v4(),
92
+ uuid: crypto.randomUUID(),
93
93
  status: 'draft',
94
94
  featured: false,
95
95
  type: 'post',
@@ -1,5 +1,4 @@
1
1
  const _ = require('lodash');
2
- const uuid = require('uuid');
3
2
  const crypto = require('crypto');
4
3
  const keypair = require('keypair');
5
4
  const ObjectID = require('bson-objectid').default;
@@ -50,7 +49,7 @@ function parseDefaultSettings() {
50
49
  const defaultSettingsFlattened = {};
51
50
 
52
51
  const dynamicDefault = {
53
- db_hash: () => uuid.v4(),
52
+ db_hash: () => crypto.randomUUID(),
54
53
  public_hash: () => crypto.randomBytes(15).toString('hex'),
55
54
  admin_session_secret: () => crypto.randomBytes(32).toString('hex'),
56
55
  theme_session_secret: () => crypto.randomBytes(32).toString('hex'),
@@ -117,8 +117,8 @@ module.exports = {
117
117
  await db.knex('jobs').insert({
118
118
  id: new ObjectID().toHexString(),
119
119
  name: jobName,
120
- [updateField]: date,
121
- updated_at: date,
120
+ [updateField]: date.toISOString(), // force to iso string for sqlite
121
+ updated_at: date.toISOString(), // force to iso string for sqlite
122
122
  status: status
123
123
  });
124
124
  }
@@ -12,7 +12,7 @@ class MembersEventsServiceWrapper {
12
12
  }
13
13
 
14
14
  // Wire up all the dependencies
15
- const {EventStorage, LastSeenAtUpdater} = require('@tryghost/members-events-service');
15
+ const {EventStorage, LastSeenAtUpdater, LastSeenAtCache} = require('@tryghost/members-events-service');
16
16
  const models = require('../../models');
17
17
 
18
18
  // Listen for events and store them in the database
@@ -26,6 +26,14 @@ class MembersEventsServiceWrapper {
26
26
 
27
27
  const db = require('../../data/db');
28
28
 
29
+ // Create the last seen at cache and inject it into the last seen at updater
30
+ this.lastSeenAtCache = new LastSeenAtCache({
31
+ services: {
32
+ settingsCache
33
+ }
34
+ });
35
+
36
+ // Create the last seen at updater
29
37
  this.lastSeenAtUpdater = new LastSeenAtUpdater({
30
38
  services: {
31
39
  settingsCache
@@ -34,12 +42,22 @@ class MembersEventsServiceWrapper {
34
42
  return members.api;
35
43
  },
36
44
  db,
37
- events
45
+ events,
46
+ lastSeenAtCache: this.lastSeenAtCache
38
47
  });
39
48
 
49
+ // Subscribe to domain events
40
50
  this.eventStorage.subscribe(DomainEvents);
41
51
  this.lastSeenAtUpdater.subscribe(DomainEvents);
42
52
  }
53
+
54
+ // Clear the last seen at cache
55
+ // Utility used for testing purposes
56
+ clearLastSeenAtCache() {
57
+ if (this.lastSeenAtCache) {
58
+ this.lastSeenAtCache.clear();
59
+ }
60
+ }
43
61
  }
44
62
 
45
63
  module.exports = new MembersEventsServiceWrapper();
@@ -1,4 +1,4 @@
1
- const uuid = require('uuid');
1
+ const crypto = require('crypto');
2
2
 
3
3
  /**
4
4
  * @TODO: move this middleware to Framework monorepo?
@@ -8,7 +8,7 @@ const uuid = require('uuid');
8
8
  * @param {import('express').NextFunction} next
9
9
  */
10
10
  module.exports = function requestIdMw(req, res, next) {
11
- const requestId = req.get('X-Request-ID') || uuid.v4();
11
+ const requestId = req.get('X-Request-ID') || crypto.randomUUID();
12
12
 
13
13
  // Set a value for internal use
14
14
  req.requestId = requestId;
@@ -44,7 +44,8 @@ const ALPHA_FEATURES = [
44
44
  'importMemberTier',
45
45
  'lexicalIndicators',
46
46
  'adminXDemo',
47
- 'contentVisibility'
47
+ 'contentVisibility',
48
+ 'commentImprovements'
48
49
  ];
49
50
 
50
51
  module.exports.GA_KEYS = [...GA_FEATURES];
@@ -46,5 +46,6 @@ module.exports = {
46
46
  outbound_link_tagging: 'outbound_link_tagging',
47
47
  default_email_address: 'default_email_address',
48
48
  support_email_address: 'support_email_address',
49
- editor_default_email_recipients: 'editor_default_email_recipients'
49
+ editor_default_email_recipients: 'editor_default_email_recipients',
50
+ labs: 'labs'
50
51
  };