ghost 5.6.0 → 5.8.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 (450) hide show
  1. package/components/tryghost-custom-theme-settings-service-0.0.0.tgz +0 -0
  2. package/components/tryghost-email-analytics-service-0.0.0.tgz +0 -0
  3. package/components/tryghost-html-to-plaintext-0.0.0.tgz +0 -0
  4. package/components/tryghost-job-manager-0.0.0.tgz +0 -0
  5. package/components/tryghost-magic-link-0.0.0.tgz +0 -0
  6. package/components/tryghost-members-api-0.0.0.tgz +0 -0
  7. package/components/tryghost-members-offers-0.0.0.tgz +0 -0
  8. package/components/tryghost-members-ssr-0.0.0.tgz +0 -0
  9. package/components/tryghost-members-stripe-service-0.0.0.tgz +0 -0
  10. package/components/tryghost-minifier-0.0.0.tgz +0 -0
  11. package/components/tryghost-security-0.0.0.tgz +0 -0
  12. package/content/themes/casper/assets/built/screen.css +1 -1
  13. package/content/themes/casper/assets/built/screen.css.map +1 -1
  14. package/content/themes/casper/assets/css/screen.css +21 -0
  15. package/content/themes/casper/package.json +1 -1
  16. package/core/built/admin/assets/chunk.143.85b848fc430f289d64b8.js +41 -0
  17. package/core/built/admin/assets/chunk.174.eec7f6398cef4c3e2485.js +239 -0
  18. package/core/built/admin/assets/chunk.178.11b2d387c027bafd815d.js +11 -0
  19. package/core/built/admin/assets/chunk.351.cbc224ca65c14ef5322d.js +9272 -0
  20. package/core/built/admin/assets/chunk.351.cbc224ca65c14ef5322d.js.LICENSE.txt +138 -0
  21. package/core/built/{assets/codemirror/codemirror-30201ab2cff61db847193fc9f5ed922d.js → admin/assets/codemirror/codemirror-1b460af155bb0ecaab9591678ac8c942.js} +1 -1
  22. package/core/built/{assets → admin/assets}/fonts/Inter.ttf +0 -0
  23. package/core/built/{assets/ghost.min-b0576e0e36343533e70992f3e5bb02bb.css → admin/assets/ghost-365d87dc3d1d5ee26cba6d952dc52d5b.css} +1 -1
  24. package/core/built/{assets/ghost.min-31bd482d1bcfe706448bc6f401481a28.js → admin/assets/ghost-50d38cd0f3736f23fc59ca91bb176d54.js} +368 -340
  25. package/core/built/admin/assets/ghost-dark-92b1e3544fb91e071fe3db40f0acae31.css +1 -0
  26. package/core/built/{assets → admin/assets}/icons/account-group.svg +0 -0
  27. package/core/built/{assets → admin/assets}/icons/activity-placeholder.svg +0 -0
  28. package/core/built/{assets → admin/assets}/icons/add-stroke.svg +0 -0
  29. package/core/built/{assets → admin/assets}/icons/add-view.svg +0 -0
  30. package/core/built/{assets → admin/assets}/icons/add.svg +0 -0
  31. package/core/built/{assets → admin/assets}/icons/align-center.svg +0 -0
  32. package/core/built/{assets → admin/assets}/icons/align-left.svg +0 -0
  33. package/core/built/{assets → admin/assets}/icons/ambulance.svg +0 -0
  34. package/core/built/{assets → admin/assets}/icons/analytics.svg +0 -0
  35. package/core/built/{assets → admin/assets}/icons/arrow-down-small.svg +0 -0
  36. package/core/built/{assets → admin/assets}/icons/arrow-down-stroke.svg +0 -0
  37. package/core/built/{assets → admin/assets}/icons/arrow-down.svg +0 -0
  38. package/core/built/{assets → admin/assets}/icons/arrow-left-small.svg +0 -0
  39. package/core/built/{assets → admin/assets}/icons/arrow-left-stroke.svg +0 -0
  40. package/core/built/{assets → admin/assets}/icons/arrow-left-tail.svg +0 -0
  41. package/core/built/{assets → admin/assets}/icons/arrow-left.svg +0 -0
  42. package/core/built/{assets → admin/assets}/icons/arrow-right-small.svg +0 -0
  43. package/core/built/{assets → admin/assets}/icons/arrow-right-stroke.svg +0 -0
  44. package/core/built/{assets → admin/assets}/icons/arrow-right-tail.svg +0 -0
  45. package/core/built/{assets → admin/assets}/icons/arrow-right.svg +0 -0
  46. package/core/built/{assets → admin/assets}/icons/arrow-up-small.svg +0 -0
  47. package/core/built/{assets → admin/assets}/icons/arrow-up-stroke.svg +0 -0
  48. package/core/built/{assets → admin/assets}/icons/arrow-up.svg +0 -0
  49. package/core/built/{assets → admin/assets}/icons/arrow2-down.svg +0 -0
  50. package/core/built/{assets → admin/assets}/icons/arrow2-right.svg +0 -0
  51. package/core/built/{assets → admin/assets}/icons/audio-file.svg +0 -0
  52. package/core/built/{assets → admin/assets}/icons/audio-upload.svg +0 -0
  53. package/core/built/{assets → admin/assets}/icons/book-open.svg +0 -0
  54. package/core/built/{assets → admin/assets}/icons/bookmark-article.svg +0 -0
  55. package/core/built/{assets → admin/assets}/icons/box-hands.svg +0 -0
  56. package/core/built/{assets → admin/assets}/icons/box.svg +0 -0
  57. package/core/built/{assets → admin/assets}/icons/boxes.svg +0 -0
  58. package/core/built/{assets → admin/assets}/icons/brackets.svg +0 -0
  59. package/core/built/{assets → admin/assets}/icons/button.svg +0 -0
  60. package/core/built/{assets → admin/assets}/icons/calendar.svg +0 -0
  61. package/core/built/{assets → admin/assets}/icons/cash.svg +0 -0
  62. package/core/built/{assets → admin/assets}/icons/chat-double-bubble.svg +0 -0
  63. package/core/built/{assets → admin/assets}/icons/check-2.svg +0 -0
  64. package/core/built/{assets → admin/assets}/icons/check-circle-stroke.svg +0 -0
  65. package/core/built/{assets → admin/assets}/icons/check-circle.svg +0 -0
  66. package/core/built/{assets → admin/assets}/icons/check.svg +0 -0
  67. package/core/built/{assets → admin/assets}/icons/cheeseburger.svg +0 -0
  68. package/core/built/{assets → admin/assets}/icons/circle-ellipsis.svg +0 -0
  69. package/core/built/{assets → admin/assets}/icons/clock.svg +0 -0
  70. package/core/built/{assets → admin/assets}/icons/clockface.svg +0 -0
  71. package/core/built/{assets → admin/assets}/icons/close-stroke.svg +0 -0
  72. package/core/built/{assets → admin/assets}/icons/close.svg +0 -0
  73. package/core/built/{assets → admin/assets}/icons/cloud.svg +0 -0
  74. package/core/built/{assets → admin/assets}/icons/compass-2.svg +0 -0
  75. package/core/built/{assets → admin/assets}/icons/compass.svg +0 -0
  76. package/core/built/{assets → admin/assets}/icons/computer.svg +0 -0
  77. package/core/built/{assets → admin/assets}/icons/confetti.svg +0 -0
  78. package/core/built/{assets → admin/assets}/icons/content-bold.svg +0 -0
  79. package/core/built/{assets → admin/assets}/icons/content.svg +0 -0
  80. package/core/built/{assets → admin/assets}/icons/copy.svg +0 -0
  81. package/core/built/{assets → admin/assets}/icons/credit-card.svg +0 -0
  82. package/core/built/{assets → admin/assets}/icons/cross-circle.svg +0 -0
  83. package/core/built/{assets → admin/assets}/icons/cycle.svg +0 -0
  84. package/core/built/{assets → admin/assets}/icons/default-favicon.svg +0 -0
  85. package/core/built/{assets → admin/assets}/icons/desert.svg +0 -0
  86. package/core/built/{assets → admin/assets}/icons/desktop.svg +0 -0
  87. package/core/built/{assets → admin/assets}/icons/diamond.svg +0 -0
  88. package/core/built/{assets → admin/assets}/icons/discount-bubble.svg +0 -0
  89. package/core/built/{assets → admin/assets}/icons/dividers.svg +0 -0
  90. package/core/built/{assets → admin/assets}/icons/dotdotdot.svg +0 -0
  91. package/core/built/{assets → admin/assets}/icons/download-circle.svg +0 -0
  92. package/core/built/{assets → admin/assets}/icons/download.svg +0 -0
  93. package/core/built/{assets → admin/assets}/icons/eco-globe.svg +0 -0
  94. package/core/built/{assets → admin/assets}/icons/eco-lightbulb.svg +0 -0
  95. package/core/built/{assets → admin/assets}/icons/edit-view.svg +0 -0
  96. package/core/built/{assets → admin/assets}/icons/ellipsis.svg +0 -0
  97. package/core/built/{assets → admin/assets}/icons/email-at.svg +0 -0
  98. package/core/built/{assets → admin/assets}/icons/email-body.svg +0 -0
  99. package/core/built/{assets → admin/assets}/icons/email-footer.svg +0 -0
  100. package/core/built/{assets → admin/assets}/icons/email-header.svg +0 -0
  101. package/core/built/{assets → admin/assets}/icons/email-love-letter.svg +0 -0
  102. package/core/built/{assets → admin/assets}/icons/email-member.svg +0 -0
  103. package/core/built/{assets → admin/assets}/icons/email-name.svg +0 -0
  104. package/core/built/{assets → admin/assets}/icons/email-send.svg +0 -0
  105. package/core/built/{assets → admin/assets}/icons/email-stroke.svg +0 -0
  106. package/core/built/{assets → admin/assets}/icons/email-unread.svg +0 -0
  107. package/core/built/{assets → admin/assets}/icons/email.svg +0 -0
  108. package/core/built/{assets → admin/assets}/icons/event-canceled-subscription.svg +0 -0
  109. package/core/built/{assets → admin/assets}/icons/event-comment.svg +0 -0
  110. package/core/built/{assets → admin/assets}/icons/event-email-delivery-failed.svg +0 -0
  111. package/core/built/{assets → admin/assets}/icons/event-logged-in.svg +0 -0
  112. package/core/built/{assets → admin/assets}/icons/event-made-a-payment.svg +0 -0
  113. package/core/built/{assets → admin/assets}/icons/event-opened-email.svg +0 -0
  114. package/core/built/{assets → admin/assets}/icons/event-received-email.svg +0 -0
  115. package/core/built/{assets → admin/assets}/icons/event-signed-up.svg +0 -0
  116. package/core/built/{assets → admin/assets}/icons/event-subscribed-to-email.svg +0 -0
  117. package/core/built/{assets → admin/assets}/icons/event-subscriptions.svg +0 -0
  118. package/core/built/{assets → admin/assets}/icons/event-unsubscribed-from-email.svg +0 -0
  119. package/core/built/{assets → admin/assets}/icons/expand.svg +0 -0
  120. package/core/built/{assets → admin/assets}/icons/external.svg +0 -0
  121. package/core/built/{assets → admin/assets}/icons/eye.svg +0 -0
  122. package/core/built/{assets → admin/assets}/icons/facebook-heart.svg +0 -0
  123. package/core/built/{assets → admin/assets}/icons/facebook-like.svg +0 -0
  124. package/core/built/{assets → admin/assets}/icons/facebook.svg +0 -0
  125. package/core/built/{assets → admin/assets}/icons/feature-image.svg +0 -0
  126. package/core/built/{assets → admin/assets}/icons/file-download.svg +0 -0
  127. package/core/built/{assets → admin/assets}/icons/file-tabular-data.svg +0 -0
  128. package/core/built/{assets → admin/assets}/icons/file-text-document.svg +0 -0
  129. package/core/built/{assets → admin/assets}/icons/file-upload.svg +0 -0
  130. package/core/built/{assets → admin/assets}/icons/film-camera.svg +0 -0
  131. package/core/built/{assets → admin/assets}/icons/filter.svg +0 -0
  132. package/core/built/{assets → admin/assets}/icons/firstpromoter-ce8b5219e5b5ebda463bd60396c6ab81.png +0 -0
  133. package/core/built/{assets → admin/assets}/icons/folder.svg +0 -0
  134. package/core/built/{assets → admin/assets}/icons/gallery-placeholder.svg +0 -0
  135. package/core/built/{assets → admin/assets}/icons/get-started-import.svg +0 -0
  136. package/core/built/{assets → admin/assets}/icons/get-started-members.svg +0 -0
  137. package/core/built/{assets → admin/assets}/icons/get-started-migrations.svg +0 -0
  138. package/core/built/{assets → admin/assets}/icons/get-started.svg +0 -0
  139. package/core/built/{assets → admin/assets}/icons/ghost-logo-orb.svg +0 -0
  140. package/core/built/{assets → admin/assets}/icons/ghost-logo.svg +0 -0
  141. package/core/built/{assets → admin/assets}/icons/ghost-orb.svg +0 -0
  142. package/core/built/{assets → admin/assets}/icons/ghost-squircle.svg +0 -0
  143. package/core/built/{assets → admin/assets}/icons/gift.svg +0 -0
  144. package/core/built/{assets → admin/assets}/icons/github-outline.svg +0 -0
  145. package/core/built/{assets → admin/assets}/icons/github-star.svg +0 -0
  146. package/core/built/{assets → admin/assets}/icons/github.svg +0 -0
  147. package/core/built/{assets → admin/assets}/icons/globe.svg +0 -0
  148. package/core/built/{assets → admin/assets}/icons/google-favicon.svg +0 -0
  149. package/core/built/{assets → admin/assets}/icons/google-search.svg +0 -0
  150. package/core/built/{assets → admin/assets}/icons/google.svg +0 -0
  151. package/core/built/{assets → admin/assets}/icons/grab.svg +0 -0
  152. package/core/built/{assets → admin/assets}/icons/graph-line.svg +0 -0
  153. package/core/built/{assets → admin/assets}/icons/heart-beat.svg +0 -0
  154. package/core/built/{assets → admin/assets}/icons/heart-circle.svg +0 -0
  155. package/core/built/{assets → admin/assets}/icons/heart.svg +0 -0
  156. package/core/built/{assets → admin/assets}/icons/help.svg +0 -0
  157. package/core/built/{assets → admin/assets}/icons/hotspot.svg +0 -0
  158. package/core/built/{assets → admin/assets}/icons/house-bold.svg +0 -0
  159. package/core/built/{assets → admin/assets}/icons/house.svg +0 -0
  160. package/core/built/{assets → admin/assets}/icons/icon.svg +0 -0
  161. package/core/built/{assets → admin/assets}/icons/id-card.svg +0 -0
  162. package/core/built/{assets → admin/assets}/icons/idea.svg +0 -0
  163. package/core/built/{assets → admin/assets}/icons/info.svg +0 -0
  164. package/core/built/{assets → admin/assets}/icons/instagram.svg +0 -0
  165. package/core/built/{assets → admin/assets}/icons/integration.svg +0 -0
  166. package/core/built/{assets → admin/assets}/icons/labs.svg +0 -0
  167. package/core/built/{assets → admin/assets}/icons/laptop.svg +0 -0
  168. package/core/built/{assets → admin/assets}/icons/line.svg +0 -0
  169. package/core/built/{assets → admin/assets}/icons/link.svg +0 -0
  170. package/core/built/{assets → admin/assets}/icons/list-bullet.svg +0 -0
  171. package/core/built/{assets → admin/assets}/icons/list-number.svg +0 -0
  172. package/core/built/{assets → admin/assets}/icons/lock.svg +0 -0
  173. package/core/built/{assets → admin/assets}/icons/lock2.svg +0 -0
  174. package/core/built/{assets → admin/assets}/icons/loop-infinite.svg +0 -0
  175. package/core/built/{assets → admin/assets}/icons/lotus.svg +0 -0
  176. package/core/built/{assets → admin/assets}/icons/markdown.svg +0 -0
  177. package/core/built/{assets → admin/assets}/icons/member-add.svg +0 -0
  178. package/core/built/{assets → admin/assets}/icons/member.svg +0 -0
  179. package/core/built/{assets → admin/assets}/icons/members-all.svg +0 -0
  180. package/core/built/{assets → admin/assets}/icons/members-bold.svg +0 -0
  181. package/core/built/{assets → admin/assets}/icons/members-outline.svg +0 -0
  182. package/core/built/{assets → admin/assets}/icons/members-paid.svg +0 -0
  183. package/core/built/{assets → admin/assets}/icons/members-placeholder.svg +0 -0
  184. package/core/built/{assets → admin/assets}/icons/members-post.svg +0 -0
  185. package/core/built/{assets → admin/assets}/icons/members-segment.svg +0 -0
  186. package/core/built/{assets → admin/assets}/icons/members.svg +0 -0
  187. package/core/built/{assets → admin/assets}/icons/mobile-phone-heart.svg +0 -0
  188. package/core/built/{assets → admin/assets}/icons/mobile-phone.svg +0 -0
  189. package/core/built/{assets → admin/assets}/icons/module.svg +0 -0
  190. package/core/built/{assets → admin/assets}/icons/modules.svg +0 -0
  191. package/core/built/{assets → admin/assets}/icons/monitor-labs.svg +0 -0
  192. package/core/built/{assets → admin/assets}/icons/moon.svg +0 -0
  193. package/core/built/{assets → admin/assets}/icons/mountains.svg +0 -0
  194. package/core/built/{assets → admin/assets}/icons/mute.svg +0 -0
  195. package/core/built/{assets → admin/assets}/icons/navigation.svg +0 -0
  196. package/core/built/{assets → admin/assets}/icons/network.svg +0 -0
  197. package/core/built/{assets → admin/assets}/icons/news-article.svg +0 -0
  198. package/core/built/{assets → admin/assets}/icons/nightshift.svg +0 -0
  199. package/core/built/{assets → admin/assets}/icons/no-data-line-chart.svg +0 -0
  200. package/core/built/{assets → admin/assets}/icons/no-data-list.svg +0 -0
  201. package/core/built/{assets → admin/assets}/icons/no-data-subscription.svg +0 -0
  202. package/core/built/{assets → admin/assets}/icons/no-email.svg +0 -0
  203. package/core/built/{assets → admin/assets}/icons/no-members.svg +0 -0
  204. package/core/built/{assets → admin/assets}/icons/offer.svg +0 -0
  205. package/core/built/{assets → admin/assets}/icons/page-bold.svg +0 -0
  206. package/core/built/{assets → admin/assets}/icons/page.svg +0 -0
  207. package/core/built/{assets → admin/assets}/icons/pages-placeholder.svg +0 -0
  208. package/core/built/{assets → admin/assets}/icons/paint-palette.svg +0 -0
  209. package/core/built/{assets → admin/assets}/icons/paintbrush.svg +0 -0
  210. package/core/built/{assets → admin/assets}/icons/pause.svg +0 -0
  211. package/core/built/{assets → admin/assets}/icons/pen.svg +0 -0
  212. package/core/built/{assets → admin/assets}/icons/pencil-circle.svg +0 -0
  213. package/core/built/{assets → admin/assets}/icons/pencil.svg +0 -0
  214. package/core/built/{assets → admin/assets}/icons/percentage.svg +0 -0
  215. package/core/built/{assets → admin/assets}/icons/photos-people.svg +0 -0
  216. package/core/built/{assets → admin/assets}/icons/photos.svg +0 -0
  217. package/core/built/{assets → admin/assets}/icons/piggy-bank.svg +0 -0
  218. package/core/built/{assets → admin/assets}/icons/pin.svg +0 -0
  219. package/core/built/{assets → admin/assets}/icons/plane.svg +0 -0
  220. package/core/built/{assets → admin/assets}/icons/play.svg +0 -0
  221. package/core/built/{assets → admin/assets}/icons/plus.svg +0 -0
  222. package/core/built/{assets → admin/assets}/icons/portal-icon-1.svg +0 -0
  223. package/core/built/{assets → admin/assets}/icons/portal-icon-2.svg +0 -0
  224. package/core/built/{assets → admin/assets}/icons/portal-icon-3.svg +0 -0
  225. package/core/built/{assets → admin/assets}/icons/portal-icon-4.svg +0 -0
  226. package/core/built/{assets → admin/assets}/icons/portal-icon-5.svg +0 -0
  227. package/core/built/{assets → admin/assets}/icons/portal-logo-stroke.svg +0 -0
  228. package/core/built/{assets → admin/assets}/icons/portal-logo.svg +0 -0
  229. package/core/built/{assets → admin/assets}/icons/post.svg +0 -0
  230. package/core/built/{assets → admin/assets}/icons/posts-placeholder.svg +0 -0
  231. package/core/built/{assets → admin/assets}/icons/posts.svg +0 -0
  232. package/core/built/{assets → admin/assets}/icons/powered-by-stripe.svg +0 -0
  233. package/core/built/{assets → admin/assets}/icons/powered-by-tenor.svg +0 -0
  234. package/core/built/{assets → admin/assets}/icons/presentation-code.svg +0 -0
  235. package/core/built/{assets → admin/assets}/icons/published-post.svg +0 -0
  236. package/core/built/{assets → admin/assets}/icons/recycle.svg +0 -0
  237. package/core/built/{assets → admin/assets}/icons/reload.svg +0 -0
  238. package/core/built/{assets → admin/assets}/icons/repo.svg +0 -0
  239. package/core/built/{assets → admin/assets}/icons/retry.svg +0 -0
  240. package/core/built/{assets → admin/assets}/icons/satellite.svg +0 -0
  241. package/core/built/{assets → admin/assets}/icons/search.svg +0 -0
  242. package/core/built/{assets → admin/assets}/icons/send-email.svg +0 -0
  243. package/core/built/{assets → admin/assets}/icons/server.svg +0 -0
  244. package/core/built/{assets → admin/assets}/icons/settings.svg +0 -0
  245. package/core/built/{assets → admin/assets}/icons/shield-lock.svg +0 -0
  246. package/core/built/{assets → admin/assets}/icons/shield.svg +0 -0
  247. package/core/built/{assets → admin/assets}/icons/sidemenu-open.svg +0 -0
  248. package/core/built/{assets → admin/assets}/icons/sidemenu.svg +0 -0
  249. package/core/built/{assets → admin/assets}/icons/signal-tower.svg +0 -0
  250. package/core/built/{assets → admin/assets}/icons/signout.svg +0 -0
  251. package/core/built/{assets → admin/assets}/icons/smiley.svg +0 -0
  252. package/core/built/{assets → admin/assets}/icons/social-facebook.svg +0 -0
  253. package/core/built/{assets → admin/assets}/icons/social-share.svg +0 -0
  254. package/core/built/{assets → admin/assets}/icons/social-twitter.svg +0 -0
  255. package/core/built/{assets → admin/assets}/icons/spinner.svg +0 -0
  256. package/core/built/{assets → admin/assets}/icons/staff.svg +0 -0
  257. package/core/built/{assets → admin/assets}/icons/star-filled.svg +0 -0
  258. package/core/built/{assets → admin/assets}/icons/store.svg +0 -0
  259. package/core/built/{assets → admin/assets}/icons/stripe-verified-partner-badge.svg +0 -0
  260. package/core/built/{assets → admin/assets}/icons/summer.svg +0 -0
  261. package/core/built/{assets → admin/assets}/icons/sun.svg +0 -0
  262. package/core/built/{assets → admin/assets}/icons/support.svg +0 -0
  263. package/core/built/{assets → admin/assets}/icons/sync.svg +0 -0
  264. package/core/built/{assets → admin/assets}/icons/tag.svg +0 -0
  265. package/core/built/{assets → admin/assets}/icons/tags-placeholder.svg +0 -0
  266. package/core/built/{assets → admin/assets}/icons/tenor.svg +0 -0
  267. package/core/built/{assets → admin/assets}/icons/terminal.svg +0 -0
  268. package/core/built/{assets → admin/assets}/icons/text-vector.svg +0 -0
  269. package/core/built/{assets → admin/assets}/icons/text.svg +0 -0
  270. package/core/built/{assets → admin/assets}/icons/theme.svg +0 -0
  271. package/core/built/{assets → admin/assets}/icons/ticket.svg +0 -0
  272. package/core/built/{assets → admin/assets}/icons/trash.svg +0 -0
  273. package/core/built/{assets → admin/assets}/icons/trophy.svg +0 -0
  274. package/core/built/{assets → admin/assets}/icons/tumbleweed.svg +0 -0
  275. package/core/built/{assets → admin/assets}/icons/twitter-comment.svg +0 -0
  276. package/core/built/{assets → admin/assets}/icons/twitter-like.svg +0 -0
  277. package/core/built/{assets → admin/assets}/icons/twitter-link.svg +0 -0
  278. package/core/built/{assets → admin/assets}/icons/twitter-logo.svg +0 -0
  279. package/core/built/{assets → admin/assets}/icons/twitter-retweet.svg +0 -0
  280. package/core/built/{assets → admin/assets}/icons/twitter-share.svg +0 -0
  281. package/core/built/{assets → admin/assets}/icons/twitter.svg +0 -0
  282. package/core/built/{assets → admin/assets}/icons/ufo-attack.svg +0 -0
  283. package/core/built/{assets → admin/assets}/icons/unmute.svg +0 -0
  284. package/core/built/{assets → admin/assets}/icons/unsplash-heart.svg +0 -0
  285. package/core/built/{assets → admin/assets}/icons/unsplash.svg +0 -0
  286. package/core/built/{assets → admin/assets}/icons/unsubscribed.svg +0 -0
  287. package/core/built/{assets → admin/assets}/icons/upload-fill.svg +0 -0
  288. package/core/built/{assets → admin/assets}/icons/upload.svg +0 -0
  289. package/core/built/{assets → admin/assets}/icons/user-circle.svg +0 -0
  290. package/core/built/{assets → admin/assets}/icons/user-group.svg +0 -0
  291. package/core/built/{assets → admin/assets}/icons/user-group2.svg +0 -0
  292. package/core/built/{assets → admin/assets}/icons/v-ellipsis.svg +0 -0
  293. package/core/built/{assets → admin/assets}/icons/view-site.svg +0 -0
  294. package/core/built/{assets → admin/assets}/icons/warning-stroke.svg +0 -0
  295. package/core/built/{assets → admin/assets}/icons/warning.svg +0 -0
  296. package/core/built/{assets → admin/assets}/icons/window-app.svg +0 -0
  297. package/core/built/{assets → admin/assets}/icons/window-pulse.svg +0 -0
  298. package/core/built/{assets → admin/assets}/icons/wrench-double.svg +0 -0
  299. package/core/built/{assets → admin/assets}/icons/zap.svg +0 -0
  300. package/core/built/{assets → admin/assets}/img/404-ghost-e112dbfadde79cf30dbca8e8cfe7a21a.png +0 -0
  301. package/core/built/{assets → admin/assets}/img/404-ghost@2x-34c1119ed15cc3ea71e4406f80c8e810.png +0 -0
  302. package/core/built/{assets → admin/assets}/img/abstract-2-2937e2902b64360d0cbe4cec8bd8479b.jpg +0 -0
  303. package/core/built/{assets → admin/assets}/img/abstract-c52b2f4208e7fd2e7b8abd8b1eec4f7b.jpg +0 -0
  304. package/core/built/{assets → admin/assets}/img/amp.svg +0 -0
  305. package/core/built/{assets → admin/assets}/img/apple-touch-icon-74680e326a7e87b159d366c7d4fb3d4b.png +0 -0
  306. package/core/built/{assets → admin/assets}/img/buffer-db31f6b5dc27a298050e16312619c586.png +0 -0
  307. package/core/built/{assets → admin/assets}/img/community-background-3f501ff1d764d0cb81f7c2cbacfc6503.jpg +0 -0
  308. package/core/built/{assets → admin/assets}/img/community-be8c1dcecfb157f2bfba5cababc8e686.jpg +0 -0
  309. package/core/built/{assets → admin/assets}/img/dashboard/bp1-03a13253453b372d0bbd5e6a19b20fca.jpg +0 -0
  310. package/core/built/{assets → admin/assets}/img/dashboard/bp2-ed14f9f48c56d5d6fe997dc637a8b1ad.jpg +0 -0
  311. package/core/built/{assets → admin/assets}/img/dashboard/join-community-bb5478f7dca6c04a2d0baf2b02f880fb.jpg +0 -0
  312. package/core/built/{assets → admin/assets}/img/dashboard-feature-image-8949197550decb94a8f1dea57ad47819.jpeg +0 -0
  313. package/core/built/{assets → admin/assets}/img/disqus.svg +0 -0
  314. package/core/built/{assets → admin/assets}/img/favicon.ico +0 -0
  315. package/core/built/{assets → admin/assets}/img/firstpromoter-ce8b5219e5b5ebda463bd60396c6ab81.png +0 -0
  316. package/core/built/{assets → admin/assets}/img/footer-marketplace-bg-572b6c6486a7e26316954d599eaa9f30.png +0 -0
  317. package/core/built/{assets → admin/assets}/img/get-started-995c36b9ede90bb3777c83751e798ef7.jpg +0 -0
  318. package/core/built/{assets → admin/assets}/img/github.svg +0 -0
  319. package/core/built/{assets → admin/assets}/img/google-analytics-e05fc1327377939663407200d4978eba.png +0 -0
  320. package/core/built/{assets → admin/assets}/img/google-docs.svg +0 -0
  321. package/core/built/{assets → admin/assets}/img/install-welcome-ff3912d18bf8949df89c83b1c3b8bb66.png +0 -0
  322. package/core/built/{assets → admin/assets}/img/invite-placeholder-4b3731d47c6c8f6cb3aaa6bc4d870c9f.png +0 -0
  323. package/core/built/{assets → admin/assets}/img/large-ac90af7c93a4b47e8d956fa9fef31d9d.png +0 -0
  324. package/core/built/{assets → admin/assets}/img/launch-wizard-bg-13b995b1f02bce34b269db3190897384.png +0 -0
  325. package/core/built/{assets → admin/assets}/img/loadingcat-5f501b7a8c7bd54b253463e261c99634.gif +0 -0
  326. package/core/built/{assets → admin/assets}/img/logos/ghost-logo-black-1-fb561a374422b405ec90fa586b05ebdf.png +0 -0
  327. package/core/built/{assets → admin/assets}/img/logos/orb-black-1-32b72766be2164fdea6ab2565fb1c137.png +0 -0
  328. package/core/built/{assets → admin/assets}/img/logos/orb-black-2-4b0baef1ec34816af6f3fbede7ab191d.png +0 -0
  329. package/core/built/{assets → admin/assets}/img/logos/orb-black-3-9780c5e9991b69ed2303b526aa3e3252.png +0 -0
  330. package/core/built/{assets → admin/assets}/img/logos/orb-black-4-d9c3caacb8d2ba98a52517ff2971433c.png +0 -0
  331. package/core/built/{assets → admin/assets}/img/logos/orb-black-5-063a200f749e09c587b9443ffd2c4cfa.png +0 -0
  332. package/core/built/{assets → admin/assets}/img/mailchimp.svg +0 -0
  333. package/core/built/{assets → admin/assets}/img/marketing/members-1-8b89a1f48fe7b336754e91a429531f65.jpg +0 -0
  334. package/core/built/{assets → admin/assets}/img/marketing/members-2-791205c82d5cf221f8c99a74f9ee1739.jpg +0 -0
  335. package/core/built/{assets → admin/assets}/img/marketing/offers-1-f2e1b653c4d5bb90eea9d7a2862530f9.jpg +0 -0
  336. package/core/built/{assets → admin/assets}/img/marketing/offers-2-28a225d34cc39d133748431536961d00.jpg +0 -0
  337. package/core/built/{assets → admin/assets}/img/marketing/offers-3-2094c91ab21a16c37fbe6ec16c140160.jpg +0 -0
  338. package/core/built/{assets → admin/assets}/img/medium-fef07013cffd5c45a655a250912a0ad7.png +0 -0
  339. package/core/built/{assets → admin/assets}/img/more-fe5480ab76c7be7aec28bcfe844f41c1.png +0 -0
  340. package/core/built/{assets → admin/assets}/img/newsletter-1-197ae8063dfb2e22278d355198029c9e.jpg +0 -0
  341. package/core/built/{assets → admin/assets}/img/newsletter-2-5a2c7693ea9380d4282061302c01267a.jpg +0 -0
  342. package/core/built/{assets → admin/assets}/img/orb-squircle-645fd62e92a80557905c0cb60874b699.png +0 -0
  343. package/core/built/{assets → admin/assets}/img/patreon.svg +0 -0
  344. package/core/built/{assets → admin/assets}/img/paypal.svg +0 -0
  345. package/core/built/{assets → admin/assets}/img/plausible-1b754a95e19a6d935e0bc8bf6790ba56.png +0 -0
  346. package/core/built/{assets → admin/assets}/img/resource-1-722f202795856e4a5596c8a3b7bedc43.jpg +0 -0
  347. package/core/built/{assets → admin/assets}/img/slackicon-406aadea8994ca2ddee9c1d7157208db.png +0 -0
  348. package/core/built/{assets → admin/assets}/img/small-b90396925485f17b2ca82c31be42de5f.png +0 -0
  349. package/core/built/{assets → admin/assets}/img/themes/Alto-a5172a42994782321d8c9f268928d987.jpg +0 -0
  350. package/core/built/{assets → admin/assets}/img/themes/Alto-cut-c667d9d6457c5e981aa7bdc8946b215a.jpg +0 -0
  351. package/core/built/{assets → admin/assets}/img/themes/Alto-f4db5af43ca9771c7ac1f754de3ddf2f.png +0 -0
  352. package/core/built/{assets → admin/assets}/img/themes/Bulletin-57d45b992ff0e26e0acdce7ed4cccd67.png +0 -0
  353. package/core/built/{assets → admin/assets}/img/themes/Casper-19b7267aac5acc6abfaaed7e41eddae8.jpg +0 -0
  354. package/core/built/{assets → admin/assets}/img/themes/Dawn-be81aa8c8caae8fcfb5d5fbec823fdcc.png +0 -0
  355. package/core/built/{assets → admin/assets}/img/themes/Digest-d3467ac22a290e1ad3a543014758286e.png +0 -0
  356. package/core/built/{assets → admin/assets}/img/themes/Dope-6f8e0bbc199ce4af9a60859e9e6a74ad.png +0 -0
  357. package/core/built/{assets → admin/assets}/img/themes/Ease-7cfb8f06f9b66b1aa04b92493a471fef.jpg +0 -0
  358. package/core/built/{assets → admin/assets}/img/themes/Ease-9c279ea6cec3c0f1823f81c9dd24b116.png +0 -0
  359. package/core/built/{assets → admin/assets}/img/themes/Ease-cut-78d5aa00682bee6a4cf22155f09e49e8.jpg +0 -0
  360. package/core/built/{assets → admin/assets}/img/themes/Edge-0258906309e11fd075a1d9880aa09b20.png +0 -0
  361. package/core/built/{assets → admin/assets}/img/themes/Edition-b94372eb5c88fce0f4befba39148ff28.jpg +0 -0
  362. package/core/built/{assets → admin/assets}/img/themes/Edition-cut-e6545bab2768aafa1996100774f310ff.jpg +0 -0
  363. package/core/built/{assets → admin/assets}/img/themes/Edition-d8f508e93bc24bdf2716ae6f8b3d44f8.png +0 -0
  364. package/core/built/{assets → admin/assets}/img/themes/Headline-c5070cf549e797a6a72b87237caa1617.jpg +0 -0
  365. package/core/built/{assets → admin/assets}/img/themes/Journal-accf0031bbae0919900a049061e65a04.png +0 -0
  366. package/core/built/{assets → admin/assets}/img/themes/London-3f07efcee9e5bfb9a33827064eb77e70.jpg +0 -0
  367. package/core/built/{assets → admin/assets}/img/themes/London-cut-599cba221f81a15ad37fe395cf4e572c.jpg +0 -0
  368. package/core/built/{assets → admin/assets}/img/themes/Ruby-11a53c62015612f4b3aca8f503121225.png +0 -0
  369. package/core/built/{assets → admin/assets}/img/themes/Wave-86e8044c2d76cb57a9030e4c24ac9520.png +0 -0
  370. package/core/built/{assets → admin/assets}/img/touch-icon-ipad-2e78629d62ad05746f980f14623dfadb.png +0 -0
  371. package/core/built/{assets → admin/assets}/img/touch-icon-iphone-93ed4382d391be9180093fd77ce8f410.png +0 -0
  372. package/core/built/{assets → admin/assets}/img/twitter.svg +0 -0
  373. package/core/built/{assets → admin/assets}/img/typeform.svg +0 -0
  374. package/core/built/{assets → admin/assets}/img/ulysses-3c66b59fb45c285bf336b4b613dc86e4.png +0 -0
  375. package/core/built/{assets → admin/assets}/img/unsplash-404-71ab3705c9920a9706bb822c3d7e34d1.png +0 -0
  376. package/core/built/{assets → admin/assets}/img/user-cover-e8f42b12b5fcba292a8b5dfa81e13dd2.png +0 -0
  377. package/core/built/{assets → admin/assets}/img/user-image-639a88b784fb5f10964be8b975ca9fdf.png +0 -0
  378. package/core/built/{assets → admin/assets}/img/users-33427addfe0f11c78b42cccaf83be073.png +0 -0
  379. package/core/built/{assets → admin/assets}/img/whats-new-header-bg.svg +0 -0
  380. package/core/built/{assets → admin/assets}/img/zapier-logo.svg +0 -0
  381. package/core/built/{assets → admin/assets}/img/zapier.svg +0 -0
  382. package/core/built/{assets → admin/assets}/img/zero-bounce-ee799eddb1f88e33ab8c462858cbfed9.png +0 -0
  383. package/core/built/{assets/simplemde/simplemde-fb4527da6e489b34dc24b28ea870b286.js → admin/assets/simplemde/simplemde-0cd04dbb388ed0cf571a6808464ea57e.js} +1 -1
  384. package/core/built/admin/assets/vendor-46baf13852f545c6c89756c8e0ccbff2.js +13821 -0
  385. package/core/built/{assets/vendor.min-4a6661c574707ceca220aa2e76558995.css → admin/assets/vendor-bc9d2c9e5c8a33f0c92e81189d48e04c.css} +17 -9
  386. package/core/{server/web/admin/views/default.html → built/admin/index.html} +13 -15
  387. package/core/frontend/helpers/comment_count.js +15 -9
  388. package/core/frontend/helpers/img_url.js +67 -6
  389. package/core/frontend/helpers/title.js +1 -1
  390. package/core/frontend/public/ghost.min.css +1 -1
  391. package/core/frontend/services/admin-auth-assets/service.js +19 -3
  392. package/core/frontend/src/admin-auth/message-handler.js +7 -3
  393. package/core/frontend/src/comment-counts/js/comment-counts.js +17 -2
  394. package/core/frontend/web/middleware/handle-image-sizes.js +7 -11
  395. package/core/server/adapters/cache/Base.js +12 -0
  396. package/core/server/adapters/cache/Memory.js +36 -0
  397. package/core/server/adapters/cache/index.js +17 -0
  398. package/core/server/api/endpoints/comments-members.js +2 -19
  399. package/core/server/api/endpoints/integrations.js +12 -8
  400. package/core/server/api/endpoints/utils/serializers/input/tiers.js +5 -0
  401. package/core/server/api/endpoints/utils/serializers/output/mappers/comments.js +1 -1
  402. package/core/server/api/endpoints/utils/serializers/output/tiers.js +5 -0
  403. package/core/server/api/endpoints/utils/serializers/output/utils/post-gating.js +1 -1
  404. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +1 -1
  405. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -1
  406. package/core/server/data/migrations/versions/5.0/2022-05-21-00-00-regenerate-posts-html.js +1 -1
  407. package/core/server/data/migrations/versions/5.8/2022-08-02-06-09-add-trial-period-days-column-to-tiers.js +8 -0
  408. package/core/server/data/migrations/versions/5.8/2022-08-03-15-28-add-trial-start-column-to-stripe-subscriptions.js +6 -0
  409. package/core/server/data/migrations/versions/5.8/2022-08-03-15-29-add-trial-end-column-to-stripe-subscriptions.js +6 -0
  410. package/core/server/data/schema/schema.js +3 -0
  411. package/core/server/ghost-server.js +7 -0
  412. package/core/server/models/base/index.js +1 -1
  413. package/core/server/models/base/plugins/filtered-collection.js +3 -3
  414. package/core/server/models/comment.js +39 -14
  415. package/core/server/models/post.js +1 -1
  416. package/core/server/models/product.js +2 -1
  417. package/core/server/models/tag.js +1 -1
  418. package/core/server/models/user.js +2 -2
  419. package/core/server/services/adapter-manager/index.js +2 -1
  420. package/core/server/services/comments/controller.js +11 -1
  421. package/core/server/services/comments/email-templates/new-comment-reply.hbs +9 -11
  422. package/core/server/services/comments/email-templates/new-comment-reply.txt.js +1 -1
  423. package/core/server/services/comments/email-templates/new-comment.hbs +8 -10
  424. package/core/server/services/comments/email-templates/new-comment.txt.js +1 -1
  425. package/core/server/services/comments/email-templates/report.hbs +7 -9
  426. package/core/server/services/comments/email-templates/report.txt.js +1 -1
  427. package/core/server/services/comments/emails.js +4 -4
  428. package/core/server/services/comments/index.js +5 -1
  429. package/core/server/services/comments/stats.js +44 -0
  430. package/core/server/services/mega/mega.js +1 -1
  431. package/core/server/services/mega/post-email-serializer.js +3 -3
  432. package/core/server/services/members/middleware.js +1 -1
  433. package/core/server/services/members/utils.js +1 -0
  434. package/core/server/services/settings/settings-service.js +3 -1
  435. package/core/server/services/url/Resources.js +1 -1
  436. package/core/server/web/admin/app.js +2 -1
  437. package/core/server/web/admin/controller.js +1 -2
  438. package/core/shared/config/defaults.json +7 -4
  439. package/core/shared/config/overrides.json +1 -2
  440. package/core/shared/labs.js +4 -3
  441. package/core/shared/settings-cache/cache.js +124 -87
  442. package/core/shared/settings-cache/index.js +6 -9
  443. package/loggingrc.js +1 -1
  444. package/package.json +30 -33
  445. package/yarn.lock +13987 -3229
  446. package/core/built/assets/chunk.3.33097bb5eb150719bdd2.js +0 -197
  447. package/core/built/assets/ghost-dark-1bdd57aba1fa4a23388121740454dab2.css +0 -1
  448. package/core/built/assets/vendor.min-3dd40d3052381526f38fd290d13baa47.js +0 -22339
  449. package/core/server/web/admin/views/default-prod.html +0 -63
  450. package/core/shared/html-to-plaintext.js +0 -80
@@ -8,7 +8,7 @@ const api = require('../../api').endpoints;
8
8
  const apiShared = require('../../api').shared;
9
9
  const {URL} = require('url');
10
10
  const mobiledocLib = require('../../lib/mobiledoc');
11
- const htmlToPlaintext = require('../../../shared/html-to-plaintext');
11
+ const htmlToPlaintext = require('@tryghost/html-to-plaintext');
12
12
  const membersService = require('../members');
13
13
  const {isUnsplashImage, isLocalContentImage} = require('@tryghost/kg-default-cards/lib/utils');
14
14
  const {textColorForBackgroundColor, darkenToContrastThreshold} = require('@tryghost/color-utils');
@@ -351,8 +351,8 @@ function renderPaywallCTA(post) {
351
351
  <h2
352
352
  style="margin-top: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 1.11em; font-weight: 700; text-rendering: optimizeLegibility; margin: 1.5em 0 0.5em 0; font-size: 26px;">
353
353
  Subscribe to <span style="white-space: nowrap; font-size: 26px !important;">continue reading.</span></h2>
354
- <p style="margin: 0 auto 1.5em auto; line-height: 1.6em; max-width: 440px;">Become a paid member of ${siteTitle} to get access to
355
- <span style="white-space: nowrap;">all subscriber-only content.</span></p>
354
+ <p style="margin: 0 auto 1.5em auto; line-height: 1.6em; max-width: 440px;">Become a paid member of ${siteTitle} to get access to all
355
+ <span style="white-space: nowrap;">subscriber-only content.</span></p>
356
356
  <div class="btn btn-accent" style="box-sizing: border-box; width: 100%; display: table;">
357
357
  <table border="0" cellspacing="0" cellpadding="0" align="center"
358
358
  style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
@@ -116,7 +116,7 @@ const updateMemberNewsletters = async function (req, res) {
116
116
 
117
117
  const updateMemberData = async function (req, res) {
118
118
  try {
119
- const data = _.pick(req.body, 'name', 'subscribed', 'newsletters', 'enable_comment_notifications');
119
+ const data = _.pick(req.body, 'name', 'bio', 'subscribed', 'newsletters', 'enable_comment_notifications');
120
120
  const member = await membersService.ssr.getMemberDataFromSession(req, res);
121
121
  if (member) {
122
122
  const options = {
@@ -13,6 +13,7 @@ module.exports.formattedMemberResponse = function formattedMemberResponse(member
13
13
  email: member.email,
14
14
  name: member.name,
15
15
  firstname: member.name && member.name.split(' ')[0],
16
+ bio: member.bio,
16
17
  avatar_image: member.avatar_image,
17
18
  subscribed: !!member.subscribed,
18
19
  subscriptions: member.subscriptions || [],
@@ -9,6 +9,7 @@ const events = require('../../lib/common/events');
9
9
  const models = require('../../models');
10
10
  const labs = require('../../../shared/labs');
11
11
  const config = require('../../../shared/config');
12
+ const adapterManager = require('../adapter-manager');
12
13
  const SettingsCache = require('../../../shared/settings-cache');
13
14
  const SettingsBREADService = require('./settings-bread-service');
14
15
  const {obfuscatedSetting, isSecretSetting, hideValueIfSecret} = require('./settings-utils');
@@ -66,8 +67,9 @@ module.exports = {
66
67
  * Initialize the cache, used in boot and in testing
67
68
  */
68
69
  async init() {
70
+ const cacheStore = adapterManager.getAdapter('cache');
69
71
  const settingsCollection = await models.Settings.populateDefaults();
70
- SettingsCache.init(events, settingsCollection, this.getCalculatedFields());
72
+ SettingsCache.init(events, settingsCollection, this.getCalculatedFields(), cacheStore);
71
73
  },
72
74
 
73
75
  /**
@@ -159,7 +159,7 @@ class Resources {
159
159
  * @description Call the model layer to fetch a single resource via raw knex queries.
160
160
  *
161
161
  * This function was invented, because the model event is a generic event, which is independent of any
162
- * api version behaviour. We have to ensure that a model matches the conditions of the configured api version
162
+ * api version behavior. We have to ensure that a model matches the conditions of the configured api version
163
163
  * in the theme.
164
164
  *
165
165
  * See https://github.com/TryGhost/Ghost/issues/10124.
@@ -1,4 +1,5 @@
1
1
  const debug = require('@tryghost/debug')('web:admin:app');
2
+ const path = require('path');
2
3
  const express = require('../../../shared/express');
3
4
  const serveStatic = express.static;
4
5
  const config = require('../../../shared/config');
@@ -17,7 +18,7 @@ module.exports = function setupAdminApp() {
17
18
  // @TODO ensure this gets a local 404 error handler
18
19
  const configMaxAge = config.get('caching:admin:maxAge');
19
20
  adminApp.use('/assets', serveStatic(
20
- config.get('paths').adminAssets,
21
+ path.join(config.get('paths').adminAssets, 'assets'),
21
22
  {maxAge: (configMaxAge || configMaxAge === 0) ? configMaxAge : constants.ONE_YEAR_MS, fallthrough: false}
22
23
  ));
23
24
 
@@ -29,8 +29,7 @@ module.exports = function adminController(req, res) {
29
29
  // CASE: trigger update check unit and let it run in background, don't block the admin rendering
30
30
  updateCheck();
31
31
 
32
- const defaultTemplate = config.get('env') === 'production' ? 'default-prod.html' : 'default.html';
33
- const templatePath = path.resolve(config.get('paths').adminViews, defaultTemplate);
32
+ const templatePath = path.resolve(config.get('paths').adminAssets, 'index.html');
34
33
  const headers = {};
35
34
 
36
35
  try {
@@ -23,6 +23,9 @@
23
23
  "adapters": {
24
24
  "sso": {
25
25
  "active": "Default"
26
+ },
27
+ "cache": {
28
+ "active": "Memory"
26
29
  }
27
30
  },
28
31
  "storage": {
@@ -134,7 +137,7 @@
134
137
  },
135
138
  "portal": {
136
139
  "url": "https://cdn.jsdelivr.net/npm/@tryghost/portal@~{version}/umd/portal.min.js",
137
- "version": "2.3"
140
+ "version": "2.5"
138
141
  },
139
142
  "sodoSearch": {
140
143
  "url": "https://cdn.jsdelivr.net/npm/@tryghost/sodo-search@~{version}/umd/sodo-search.min.js",
@@ -144,13 +147,13 @@
144
147
  "comments": {
145
148
  "url": "https://cdn.jsdelivr.net/npm/@tryghost/comments-ui@~{version}/umd/comments-ui.min.js",
146
149
  "styles": "https://cdn.jsdelivr.net/npm/@tryghost/comments-ui@~{version}/umd/main.css",
147
- "version": "0.2"
150
+ "version": "0.4"
148
151
  },
149
152
  "editor": {
150
- "url": "https://cdn.jsdelivr.net/npm/@tryghost/koenig-react/dist/umd/koenig-react.min.js"
153
+ "url": "https://unpkg.com/@tryghost/koenig-react/dist/umd/koenig-react.min.js"
151
154
  },
152
155
  "tenor": {
153
- "publicReadOnlyApiKey": null,
156
+ "googleApiKey": null,
154
157
  "contentFilter": "off"
155
158
  },
156
159
  "opensea": {
@@ -2,10 +2,9 @@
2
2
  "paths": {
3
3
  "appRoot": ".",
4
4
  "corePath": "core/",
5
- "adminAssets": "core/built/assets",
5
+ "adminAssets": "core/built/admin",
6
6
  "adminAuthAssets": "content/public/admin-auth",
7
7
  "helperTemplates": "core/frontend/helpers/tpl/",
8
- "adminViews": "core/server/web/admin/views/",
9
8
  "defaultViews": "core/server/views/",
10
9
  "defaultRouteSettings": "core/server/services/route-settings/",
11
10
  "internalAppPath": "core/frontend/apps/",
@@ -14,7 +14,9 @@ const messages = {
14
14
  };
15
15
 
16
16
  // flags in this list always return `true`, allows quick global enable prior to full flag removal
17
- const GA_FEATURES = [];
17
+ const GA_FEATURES = [
18
+ 'newsletterPaywall'
19
+ ];
18
20
 
19
21
  // NOTE: this allowlist is meant to be used to filter out any unexpected
20
22
  // input for the "labs" setting value
@@ -26,8 +28,7 @@ const ALPHA_FEATURES = [
26
28
  'urlCache',
27
29
  'beforeAfterCard',
28
30
  'comments',
29
- 'newsletterPaywall',
30
- 'explore'
31
+ 'freeTrial'
31
32
  ];
32
33
 
33
34
  module.exports.GA_KEYS = [...GA_FEATURES];
@@ -4,77 +4,94 @@
4
4
  const debug = require('@tryghost/debug')('settings:cache');
5
5
  const _ = require('lodash');
6
6
 
7
- const publicSettings = require('./public');
8
-
9
- // Local function, only ever used for initializing
10
- // We deliberately call "set" on each model so that set is a consistent interface
11
- const updateSettingFromModel = function updateSettingFromModel(settingModel) {
12
- debug('Auto updating', settingModel.get('key'));
13
- module.exports.set(settingModel.get('key'), settingModel.toJSON());
14
- };
15
-
16
- const updateCalculatedField = function updateCalculatedField(field) {
17
- return () => {
18
- debug('Auto updating', field.key);
19
- module.exports.set(field.key, field.getSetting());
20
- };
21
- };
22
-
23
7
  /**
24
- * ## Cache
25
- * Holds cached settings
26
- * Keyed by setting.key
27
- * Contains the JSON version of the model
28
- * @type {{}} - object of objects
8
+ * Why hasn't this been moved to @tryghost/settings-cache yet?
9
+ *
10
+ * - It currently still couples the frontend and server together in a weird way via the event system
11
+ * - See the notes in core/server/lib/common/events
12
+ * - There's also a plan to introduce a proper caching layer, and rewrite this on top of that
29
13
  */
30
- let settingsCache = {};
31
- let _calculatedFields = [];
14
+ class CacheManager {
15
+ /**
16
+ * @prop {Object} options
17
+ * @prop {Object} options.publicSettings - key/value pairs of settings which are publicly accessible
18
+ */
19
+ constructor({publicSettings}) {
20
+ // settingsCache holds cached settings, keyed by setting.key, contains the JSON version of the model
21
+ this.settingsCache;
22
+ this.publicSettings = publicSettings;
23
+ this.calculatedFields = [];
24
+
25
+ this.get = this.get.bind(this);
26
+ this.set = this.set.bind(this);
27
+ this.getAll = this.getAll.bind(this);
28
+ this.getPublic = this.getPublic.bind(this);
29
+ this.reset = this.reset.bind(this);
30
+ this._doGet = this._doGet.bind(this);
31
+ this._updateSettingFromModel = this._updateSettingFromModel.bind(this);
32
+ this._updateCalculatedField = this._updateCalculatedField.bind(this);
33
+ }
32
34
 
33
- const doGet = (key, options) => {
34
- if (!settingsCache[key]) {
35
- return;
35
+ // Local function, only ever used for initializing
36
+ // We deliberately call "set" on each model so that set is a consistent interface
37
+ _updateSettingFromModel(settingModel) {
38
+ debug('Auto updating', settingModel.get('key'));
39
+ this.set(settingModel.get('key'), settingModel.toJSON());
36
40
  }
37
41
 
38
- // Don't try to resolve to the value of the setting
39
- if (options && options.resolve === false) {
40
- return settingsCache[key];
42
+ _updateCalculatedField(field) {
43
+ return () => {
44
+ debug('Auto updating', field.key);
45
+ this.set(field.key, field.getSetting());
46
+ };
41
47
  }
42
48
 
43
- // Default behaviour is to try to resolve the value and return that
44
- try {
45
- // CASE: handle literal false
46
- if (settingsCache[key].value === false || settingsCache[key].value === 'false') {
47
- return false;
49
+ _doGet(key, options) {
50
+ // NOTE: "!this.settingsCache" is for when setting's cache is used
51
+ // before it had a chance to initialize. Should be fixed when
52
+ // it is decoupled from the model layer
53
+ if (!this.settingsCache || !this.settingsCache.get(key)) {
54
+ return;
48
55
  }
49
56
 
50
- // CASE: if a string contains a number e.g. "1", JSON.parse will auto convert into integer
51
- if (!isNaN(Number(settingsCache[key].value))) {
52
- return settingsCache[key].value || null;
57
+ // Don't try to resolve to the value of the setting
58
+ if (options && options.resolve === false) {
59
+ return this.settingsCache.get(key);
53
60
  }
54
61
 
55
- return JSON.parse(settingsCache[key].value) || null;
56
- } catch (err) {
57
- return settingsCache[key].value || null;
62
+ // Default behavior is to try to resolve the value and return that
63
+ try {
64
+ // CASE: handle literal false
65
+ if (this.settingsCache.get(key).value === false || this.settingsCache.get(key).value === 'false') {
66
+ return false;
67
+ }
68
+
69
+ // CASE: if a string contains a number e.g. "1", JSON.parse will auto convert into integer
70
+ if (!isNaN(Number(this.settingsCache.get(key).value))) {
71
+ return this.settingsCache.get(key).value || null;
72
+ }
73
+
74
+ return JSON.parse(this.settingsCache.get(key).value) || null;
75
+ } catch (err) {
76
+ return this.settingsCache.get(key).value || null;
77
+ }
58
78
  }
59
- };
60
79
 
61
- /**
62
- *
63
- * IMPORTANT:
64
- * We store settings with a type and a key in the database.
65
- *
66
- * {
67
- * type: core
68
- * key: db_hash
69
- * value: ...
70
- * }
71
- *
72
- * But the settings cache does not allow requesting a value by type, only by key.
73
- * e.g. settingsCache.get('db_hash')
74
- */
75
- module.exports = {
76
80
  /**
77
- * Get a key from the settingsCache
81
+ *
82
+ * IMPORTANT:
83
+ * We store settings with a type and a key in the database.
84
+ *
85
+ * {
86
+ * type: core
87
+ * key: db_hash
88
+ * value: ...
89
+ * }
90
+ *
91
+ * But the settings cache does not allow requesting a value by type, only by key.
92
+ * e.g. settingsCache.get('db_hash')
93
+ *
94
+ * Get a key from the this.settingsCache
78
95
  * Will resolve to the value, including parsing JSON, unless {resolve: false} is passed in as an option
79
96
  * In which case the full JSON version of the model will be resolved
80
97
  *
@@ -83,8 +100,9 @@ module.exports = {
83
100
  * @return {*}
84
101
  */
85
102
  get(key, options) {
86
- return doGet(key, options);
87
- },
103
+ return this._doGet(key, options);
104
+ }
105
+
88
106
  /**
89
107
  * Set a key on the cache
90
108
  * The only way to get an object into the cache
@@ -93,16 +111,28 @@ module.exports = {
93
111
  * @param {object} value json version of settings model
94
112
  */
95
113
  set(key, value) {
96
- settingsCache[key] = _.cloneDeep(value);
97
- },
114
+ this.settingsCache.set(key, _.cloneDeep(value));
115
+ }
116
+
98
117
  /**
99
118
  * Get the entire cache object
100
119
  * Uses clone to prevent modifications from being reflected
120
+ * This method is dangerous in case the cache is "lazily" initialized
121
+ * could result in returning only a partially filled cache
101
122
  * @return {object} cache
123
+ * @deprecated this method is not "cache-friendly" and should be avoided from furhter usage
124
+ * instead using multiple "get" calls
102
125
  */
103
126
  getAll() {
104
- return _.cloneDeep(settingsCache);
105
- },
127
+ const keys = this.settingsCache.keys();
128
+ const all = {};
129
+
130
+ keys.forEach((key) => {
131
+ all[key] = _.cloneDeep(this.settingsCache.get(key));
132
+ });
133
+
134
+ return all;
135
+ }
106
136
 
107
137
  /**
108
138
  * Get all the publically accessible cache entries with their correct names
@@ -112,67 +142,74 @@ module.exports = {
112
142
  getPublic() {
113
143
  let settings = {};
114
144
 
115
- _.each(publicSettings, (key, newKey) => {
116
- settings[newKey] = doGet(key) ?? null;
145
+ _.each(this.publicSettings, (key, newKey) => {
146
+ settings[newKey] = this._doGet(key) ?? null;
117
147
  });
118
148
 
119
149
  return settings;
120
- },
150
+ }
151
+
121
152
  /**
122
- * Initialise the cache
153
+ * Initialize the cache
123
154
  *
124
155
  * Optionally takes a collection of settings & can populate the cache with these.
125
156
  *
126
157
  * @param {EventEmitter} events
127
158
  * @param {Bookshelf.Collection<Settings>} settingsCollection
128
159
  * @param {Array} calculatedFields
129
- * @return {object}
160
+ * @param {Object} cacheStore - cache storage instance base on Cache Base Adapter
161
+ * @return {Object} - filled out instance for Cache Base Adapter
130
162
  */
131
- init(events, settingsCollection, calculatedFields) {
163
+ init(events, settingsCollection, calculatedFields, cacheStore) {
164
+ this.settingsCache = cacheStore;
132
165
  // First, reset the cache and
133
166
  this.reset(events);
134
167
 
135
168
  // // if we have been passed a collection of settings, use this to populate the cache
136
169
  if (settingsCollection && settingsCollection.models) {
137
- _.each(settingsCollection.models, updateSettingFromModel);
170
+ _.each(settingsCollection.models, this._updateSettingFromModel);
138
171
  }
139
172
 
140
- _calculatedFields = Array.isArray(calculatedFields) ? calculatedFields : [];
173
+ this.calculatedFields = Array.isArray(calculatedFields) ? calculatedFields : [];
141
174
 
142
175
  // Bind to events to automatically keep up-to-date
143
- events.on('settings.edited', updateSettingFromModel);
144
- events.on('settings.added', updateSettingFromModel);
145
- events.on('settings.deleted', updateSettingFromModel);
176
+ events.on('settings.edited', this._updateSettingFromModel);
177
+ events.on('settings.added', this._updateSettingFromModel);
178
+ events.on('settings.deleted', this._updateSettingFromModel);
146
179
 
147
180
  // set and bind calculated fields
148
- _calculatedFields.forEach((field) => {
149
- updateCalculatedField(field)();
181
+ this.calculatedFields.forEach((field) => {
182
+ this._updateCalculatedField(field)();
150
183
  field.dependents.forEach((dependent) => {
151
- events.on(`settings.${dependent}.edited`, updateCalculatedField(field));
184
+ events.on(`settings.${dependent}.edited`, this._updateCalculatedField(field));
152
185
  });
153
186
  });
154
187
 
155
- return settingsCache;
156
- },
188
+ return this.settingsCache;
189
+ }
157
190
 
158
191
  /**
159
192
  * Reset both the cache and the listeners, must be called during init
160
193
  * @param {EventEmitter} events
161
194
  */
162
195
  reset(events) {
163
- settingsCache = {};
196
+ if (this.settingsCache) {
197
+ this.settingsCache.reset();
198
+ }
164
199
 
165
- events.removeListener('settings.edited', updateSettingFromModel);
166
- events.removeListener('settings.added', updateSettingFromModel);
167
- events.removeListener('settings.deleted', updateSettingFromModel);
200
+ events.removeListener('settings.edited', this._updateSettingFromModel);
201
+ events.removeListener('settings.added', this._updateSettingFromModel);
202
+ events.removeListener('settings.deleted', this._updateSettingFromModel);
168
203
 
169
204
  //unbind calculated fields
170
- _calculatedFields.forEach((field) => {
205
+ this.calculatedFields.forEach((field) => {
171
206
  field.dependents.forEach((dependent) => {
172
- events.removeListener(`settings.${dependent}.edited`, updateCalculatedField(field));
207
+ events.removeListener(`settings.${dependent}.edited`, this._updateCalculatedField(field));
173
208
  });
174
209
  });
175
210
 
176
- _calculatedFields = [];
211
+ this.calculatedFields = [];
177
212
  }
178
- };
213
+ }
214
+
215
+ module.exports = CacheManager;
@@ -1,9 +1,6 @@
1
- /**
2
- * Why hasn't this been moved to @tryghost/settings-cache yet?
3
- *
4
- * - It currently still couples the frontend and server together in a weird way via the event system
5
- * - See the notes in core/server/lib/common/events
6
- * - There's also a plan to introduce a proper caching layer, and rewrite this on top of that
7
- * - Finally, I'm not sure if this shouldn't be two things - a cache, and a cache manager (the update system)
8
- */
9
- module.exports = require('./cache');
1
+ const CacheManager = require('./cache');
2
+ const publicSettings = require('./public');
3
+
4
+ const cacheManager = new CacheManager({publicSettings});
5
+
6
+ module.exports = cacheManager;
package/loggingrc.js CHANGED
@@ -18,7 +18,7 @@ loggingConfig.metrics.metadata = {
18
18
  // Undefined if unavailable
19
19
  siteId: config.get('hostSettings:siteId'),
20
20
  domain: config.get('url'),
21
- version: ghostVersion.safe
21
+ version: ghostVersion.original
22
22
  };
23
23
 
24
24
  module.exports = loggingConfig;