ghost 4.47.4 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/Gruntfile.js +24 -24
  2. package/README.md +3 -2
  3. package/content/themes/casper/assets/built/global.css +1 -1
  4. package/content/themes/casper/assets/built/global.css.map +1 -1
  5. package/content/themes/casper/assets/built/screen.css +1 -1
  6. package/content/themes/casper/assets/built/screen.css.map +1 -1
  7. package/content/themes/casper/assets/css/global.css +2 -2
  8. package/content/themes/casper/assets/css/screen.css +412 -664
  9. package/content/themes/casper/author.hbs +48 -35
  10. package/content/themes/casper/default.hbs +5 -23
  11. package/content/themes/casper/error-404.hbs +1 -1
  12. package/content/themes/casper/index.hbs +29 -22
  13. package/content/themes/casper/package.json +25 -37
  14. package/content/themes/casper/page.hbs +12 -12
  15. package/content/themes/casper/partials/icons/facebook.hbs +1 -1
  16. package/content/themes/casper/partials/icons/twitter.hbs +1 -1
  17. package/content/themes/casper/partials/post-card.hbs +26 -40
  18. package/content/themes/casper/post.hbs +54 -50
  19. package/content/themes/casper/tag.hbs +42 -47
  20. package/core/boot.js +18 -15
  21. package/core/bridge.js +24 -25
  22. package/core/built/assets/ghost-dark-b6e3268bcae976a8675b0d9ae54540f2.css +1 -0
  23. package/core/built/assets/{ghost.min-a2a47979b0b61d15a3914042a7b1cd20.js → ghost.min-2cc3688ea6600a54e0cd83107a8577e8.js} +1138 -1212
  24. package/core/built/assets/ghost.min-a40c7b301c702bd84c2fae19366ab5d7.css +1 -0
  25. package/core/built/assets/icons/analytics.svg +14 -0
  26. package/core/built/assets/icons/calendar.svg +4 -1
  27. package/core/built/assets/icons/email-at.svg +1 -1
  28. package/core/built/assets/icons/email-name.svg +1 -1
  29. package/core/built/assets/icons/info.svg +1 -1
  30. package/core/built/assets/icons/twitter-logo.svg +3 -0
  31. package/core/built/assets/{vendor.min-97fd438f4772c5ec6bb30ad779b8530e.js → vendor.min-2bca41946dea27dc292428db605d466d.js} +99 -93
  32. package/core/cli/README.md +88 -0
  33. package/core/cli/command.js +129 -0
  34. package/core/cli/repl.js +32 -0
  35. package/core/cli/timetravel.js +87 -0
  36. package/core/frontend/apps/amp/lib/helpers/amp_content.js +10 -12
  37. package/core/frontend/apps/amp/lib/router.js +2 -3
  38. package/core/frontend/helpers/body_class.js +2 -2
  39. package/core/frontend/helpers/excerpt.js +0 -2
  40. package/core/frontend/helpers/get.js +23 -24
  41. package/core/frontend/helpers/ghost_head.js +104 -108
  42. package/core/frontend/helpers/navigation.js +0 -2
  43. package/core/frontend/helpers/prev_post.js +20 -26
  44. package/core/frontend/helpers/price.js +2 -2
  45. package/core/frontend/meta/author-url.js +2 -2
  46. package/core/frontend/meta/description.js +3 -3
  47. package/core/frontend/meta/excerpt.js +1 -2
  48. package/core/frontend/meta/generate-excerpt.js +2 -11
  49. package/core/frontend/meta/paginated-url.js +1 -1
  50. package/core/frontend/meta/rss-url.js +0 -1
  51. package/core/frontend/meta/url.js +4 -4
  52. package/core/frontend/services/data/entry-lookup.js +1 -1
  53. package/core/frontend/services/data/fetch-data.js +1 -1
  54. package/core/frontend/services/helpers/handlebars.js +11 -12
  55. package/core/frontend/services/proxy.js +11 -1
  56. package/core/frontend/services/rendering/context.js +1 -5
  57. package/core/frontend/services/rendering/format-response.js +9 -2
  58. package/core/frontend/services/rendering/index.js +0 -4
  59. package/core/frontend/services/rendering/render-entry.js +1 -1
  60. package/core/frontend/services/rendering/templates.js +15 -5
  61. package/core/frontend/services/routing/CollectionRouter.js +2 -2
  62. package/core/frontend/services/routing/EmailRouter.js +2 -2
  63. package/core/frontend/services/routing/ParentRouter.js +1 -1
  64. package/core/frontend/services/routing/PreviewRouter.js +3 -3
  65. package/core/frontend/services/routing/{config/v4.js → config.js} +3 -5
  66. package/core/frontend/services/routing/controllers/channel.js +0 -10
  67. package/core/frontend/services/routing/controllers/collection.js +0 -9
  68. package/core/frontend/services/routing/controllers/email-post.js +2 -7
  69. package/core/frontend/services/routing/controllers/entry.js +1 -3
  70. package/core/frontend/services/routing/controllers/index.js +2 -2
  71. package/core/frontend/services/routing/controllers/{preview.js → previews.js} +3 -8
  72. package/core/frontend/services/routing/controllers/static.js +1 -6
  73. package/core/frontend/services/routing/router-manager.js +38 -20
  74. package/core/frontend/services/rss/generate-feed.js +7 -9
  75. package/core/frontend/services/theme-engine/active.js +0 -8
  76. package/core/frontend/services/theme-engine/config/defaults.json +1 -3
  77. package/core/frontend/services/theme-engine/middleware/index.js +0 -1
  78. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +0 -69
  79. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +3 -6
  80. package/core/frontend/web/middleware/static-theme.js +14 -6
  81. package/core/frontend/web/routes.js +9 -9
  82. package/core/frontend/web/site.js +15 -18
  83. package/core/server/adapters/scheduling/post-scheduling/index.js +1 -1
  84. package/core/server/api/README.md +2 -6
  85. package/core/server/api/canary/authentication.js +4 -3
  86. package/core/server/api/canary/{email-preview.js → email-previews.js} +9 -8
  87. package/core/server/api/canary/index.js +14 -18
  88. package/core/server/api/canary/members.js +4 -24
  89. package/core/server/api/{v3/actions.js → canary/newsletters-public.js} +6 -6
  90. package/core/server/api/canary/newsletters.js +1 -13
  91. package/core/server/api/canary/notifications.js +17 -22
  92. package/core/server/api/canary/offers-public.js +28 -0
  93. package/core/server/api/canary/pages.js +1 -1
  94. package/core/server/api/canary/posts.js +4 -8
  95. package/core/server/api/canary/{preview.js → previews.js} +1 -1
  96. package/core/server/api/canary/schedules.js +1 -1
  97. package/core/server/api/canary/session.js +1 -1
  98. package/core/server/api/canary/settings-public.js +3 -1
  99. package/core/server/api/canary/settings.js +30 -16
  100. package/core/server/api/canary/utils/index.js +2 -4
  101. package/core/server/api/canary/utils/serializers/input/index.js +0 -4
  102. package/core/server/api/canary/utils/serializers/input/members.js +46 -17
  103. package/core/server/api/canary/utils/serializers/input/pages.js +0 -17
  104. package/core/server/api/canary/utils/serializers/input/posts.js +1 -28
  105. package/core/server/api/canary/utils/serializers/input/settings.js +61 -142
  106. package/core/server/api/canary/utils/serializers/input/tiers.js +56 -12
  107. package/core/server/api/canary/utils/serializers/output/authentication.js +2 -6
  108. package/core/server/api/canary/utils/serializers/output/index.js +2 -10
  109. package/core/server/api/canary/utils/serializers/output/mappers/index.js +1 -0
  110. package/core/server/api/canary/utils/serializers/output/mappers/newsletters.js +24 -0
  111. package/core/server/api/canary/utils/serializers/output/mappers/pages.js +1 -1
  112. package/core/server/api/canary/utils/serializers/output/mappers/posts.js +9 -7
  113. package/core/server/api/canary/utils/serializers/output/mappers/settings.js +5 -31
  114. package/core/server/api/canary/utils/serializers/output/members.js +21 -11
  115. package/core/server/api/canary/utils/serializers/output/offers.js +9 -1
  116. package/core/server/api/canary/utils/serializers/output/{preview.js → previews.js} +2 -2
  117. package/core/server/api/canary/utils/serializers/output/settings.js +6 -14
  118. package/core/server/api/canary/utils/serializers/output/site.js +0 -1
  119. package/core/server/api/canary/utils/serializers/output/tiers.js +35 -75
  120. package/core/server/api/canary/utils/serializers/output/utils/clean.js +5 -10
  121. package/core/server/api/canary/utils/serializers/output/utils/extra-attrs.js +0 -126
  122. package/core/server/api/canary/utils/serializers/output/utils/post-gating.js +1 -1
  123. package/core/server/api/canary/utils/serializers/output/utils/url.js +0 -5
  124. package/core/server/api/canary/utils/validators/input/index.js +2 -2
  125. package/core/server/api/canary/utils/validators/input/{passwordreset.js → password_reset.js} +2 -2
  126. package/core/server/api/canary/utils/validators/input/settings.js +2 -23
  127. package/core/server/api/canary/utils/validators/utils/json-schema.js +1 -2
  128. package/core/server/api/index.js +1 -7
  129. package/core/server/api/shared/serializers/input/utils/settings-key-group-mapper.js +2 -2
  130. package/core/server/api/shared/serializers/input/utils/settings-key-type-mapper.js +2 -4
  131. package/core/server/data/db/connection.js +0 -13
  132. package/core/server/data/exporter/index.js +4 -1
  133. package/core/server/data/exporter/table-lists.js +13 -15
  134. package/core/server/data/importer/importers/data/base.js +16 -7
  135. package/core/server/data/importer/importers/data/data-importer.js +38 -1
  136. package/core/server/data/importer/importers/data/newsletters.js +45 -0
  137. package/core/server/data/importer/importers/data/posts.js +40 -12
  138. package/core/server/data/importer/importers/data/products.js +68 -0
  139. package/core/server/data/importer/importers/data/settings.js +10 -10
  140. package/core/server/data/importer/importers/data/stripe-prices.js +59 -0
  141. package/core/server/data/importer/importers/data/stripe-products.js +61 -0
  142. package/core/server/data/migrations/utils/constants.js +3 -0
  143. package/core/server/data/migrations/utils/index.js +10 -0
  144. package/core/server/data/migrations/utils/migrations.js +156 -0
  145. package/core/server/data/migrations/utils/permissions.js +291 -0
  146. package/core/server/data/migrations/utils/schema.js +158 -0
  147. package/core/server/data/migrations/utils/settings.js +59 -0
  148. package/core/server/data/migrations/utils/tables.js +94 -0
  149. package/core/server/data/migrations/versions/1.25/01-final-v1.js +2 -0
  150. package/core/server/data/migrations/versions/1.25/02-noop.js +6 -0
  151. package/core/server/data/migrations/versions/2.37/01-final-v2.js +2 -0
  152. package/core/server/data/migrations/versions/3.41/01-final-v3.js +2 -0
  153. package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +3 -9
  154. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +2 -11
  155. package/core/server/data/migrations/versions/4.11/02-add-email-verification-required-setting.js +1 -1
  156. package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +1 -1
  157. package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +1 -1
  158. package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +1 -1
  159. package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +1 -1
  160. package/core/server/data/migrations/versions/4.35/2022-02-02-10-38-add-default-content-visibility-tiers-setting.js +1 -1
  161. package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +1 -1
  162. package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +1 -1
  163. package/core/server/data/migrations/versions/4.7/03-add-labs-setting.js +1 -1
  164. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -1
  165. package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +1 -1
  166. package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +1 -1
  167. package/core/server/data/migrations/versions/5.0/2022-03-14-12-33-delete-duplicate-offer-redemptions.js +36 -0
  168. package/core/server/data/migrations/versions/5.0/2022-03-28-15-25-backfill-mrr-adjustments-for-offers.js +108 -0
  169. package/core/server/data/migrations/versions/5.0/2022-04-25-10-32-backfill-mrr-for-discounted-subscriptions.js +44 -0
  170. package/core/server/data/migrations/versions/5.0/2022-04-26-15-44-backfill-mrr-events-for-canceled-subscriptions.js +73 -0
  171. package/core/server/data/migrations/versions/5.0/2022-04-27-11-26-backfill-mrr-for-canceled-subscriptions.js +31 -0
  172. package/core/server/data/migrations/versions/5.0/2022-04-28-03-26-remove-author-id-column-from-posts-table.js +7 -0
  173. package/core/server/data/migrations/versions/5.0/2022-05-03-09-39-drop-nullable-subscribe-event-newsletter-id.js +4 -0
  174. package/core/server/data/migrations/versions/5.0/2022-05-04-15-24-map-existing-emails-to-default-newsletter.js +44 -0
  175. package/core/server/data/migrations/versions/5.0/2022-05-05-13-13-migrate-legacy-recipient-filters.js +30 -0
  176. package/core/server/data/migrations/versions/5.0/2022-05-05-13-29-add-newsletters-admin-integration-permission-roles.js +20 -0
  177. package/core/server/data/migrations/versions/5.0/2022-05-05-15-17-drop-oauth-table.js +3 -0
  178. package/core/server/data/migrations/versions/5.0/2022-05-06-08-16-cleanup-client-subscriber-permissions.js +68 -0
  179. package/core/server/data/migrations/versions/5.0/2022-05-06-13-22-add-frontend-integration.js +68 -0
  180. package/core/server/data/migrations/versions/5.0/2022-05-09-10-00-drop-members-subscribed-column.js +18 -0
  181. package/core/server/data/migrations/versions/5.0/2022-05-09-14-17-cleanup-invalid-users-status.js +17 -0
  182. package/core/server/data/migrations/versions/5.0/2022-05-10-08-33-drop-members-analytics-table.js +3 -0
  183. package/core/server/data/migrations/versions/5.0/2022-05-10-14-57-cleanup-invalid-posts-status.js +17 -0
  184. package/core/server/data/migrations/versions/5.0/2022-05-11-12-08-drop-webhooks-status-column.js +18 -0
  185. package/core/server/data/migrations/versions/5.0/2022-05-11-13-12-rename-settings.js +51 -0
  186. package/core/server/data/migrations/versions/5.0/2022-05-11-16-36-remove-unused-settings.js +54 -0
  187. package/core/server/data/migrations/versions/5.0/2022-05-12-10-29-add-newsletter-permissions-for-editors-and-authors.js +20 -0
  188. package/core/server/data/migrations/versions/5.0/2022-05-12-13-51-add-label-permissions-for-authors.js +12 -0
  189. package/core/server/data/migrations/versions/5.0/2022-05-13-11-38-drop-none-email-recipient-filter.js +28 -0
  190. package/core/server/data/migrations/versions/5.0/2022-05-21-00-00-regenerate-posts-html.js +70 -0
  191. package/core/server/data/schema/commands.js +35 -3
  192. package/core/server/data/schema/default-settings/default-settings.json +2 -159
  193. package/core/server/data/schema/fixtures/fixture-manager.js +11 -2
  194. package/core/server/data/schema/fixtures/fixtures.json +16 -7
  195. package/core/server/data/schema/schema.js +26 -38
  196. package/core/server/data/schema/validator.js +2 -0
  197. package/core/server/ghost-server.js +34 -64
  198. package/core/server/lib/image/gravatar.js +25 -9
  199. package/core/server/models/api-key.js +3 -26
  200. package/core/server/models/base/plugins/bulk-operations.js +14 -6
  201. package/core/server/models/integration.js +17 -0
  202. package/core/server/models/member.js +8 -4
  203. package/core/server/models/newsletter.js +27 -0
  204. package/core/server/models/post.js +30 -32
  205. package/core/server/models/relations/authors.js +74 -100
  206. package/core/server/models/settings.js +6 -2
  207. package/core/server/models/webhook.js +2 -1
  208. package/core/server/run-update-check.js +1 -1
  209. package/core/server/services/api-version-compatibility/index.js +24 -18
  210. package/core/server/services/api-version-compatibility/legacy-api-path-match.js +23 -0
  211. package/core/server/services/api-version-compatibility/mw-version-rewrites.js +36 -0
  212. package/core/server/services/auth/api-key/admin.js +8 -7
  213. package/core/server/services/auth/passwordreset.js +3 -3
  214. package/core/server/services/auth/session/express-session.js +1 -1
  215. package/core/server/services/auth/session/index.js +1 -1
  216. package/core/server/services/auth/setup.js +8 -8
  217. package/core/server/services/bulk-email/bulk-email-processor.js +5 -1
  218. package/core/server/services/email-analytics/lib/event-processor.js +25 -14
  219. package/core/server/services/frontend-data-service/frontend-data-service.js +27 -0
  220. package/core/server/services/frontend-data-service/index.js +6 -0
  221. package/core/server/services/mail/index.js +14 -1
  222. package/core/server/services/mega/email-preview.js +14 -15
  223. package/core/server/services/mega/mega.js +37 -52
  224. package/core/server/services/mega/post-email-serializer.js +18 -28
  225. package/core/server/services/members/api.js +0 -3
  226. package/core/server/services/members/config.js +0 -49
  227. package/core/server/services/members/exporter/query.js +88 -0
  228. package/core/server/services/members/middleware.js +3 -135
  229. package/core/server/services/members/service.js +2 -29
  230. package/core/server/services/members/settings.js +3 -9
  231. package/core/server/services/newsletters/service.js +78 -10
  232. package/core/server/services/posts/post-scheduling-service.js +5 -17
  233. package/core/server/services/posts/posts-service.js +15 -62
  234. package/core/server/services/public-config/site.js +0 -6
  235. package/core/server/services/route-settings/index.js +0 -3
  236. package/core/server/services/route-settings/settings-loader.js +10 -34
  237. package/core/server/services/route-settings/validate.js +1 -7
  238. package/core/server/services/settings/index.js +1 -77
  239. package/core/server/services/settings/settings-service.js +184 -0
  240. package/core/server/services/themes/validate.js +1 -1
  241. package/core/server/services/url/Resources.js +1 -3
  242. package/core/server/services/url/UrlGenerator.js +1 -1
  243. package/core/server/services/url/UrlService.js +6 -20
  244. package/core/server/services/url/{configs/v2.js → config.js} +0 -0
  245. package/core/server/services/users.js +2 -2
  246. package/core/server/services/webhooks/listen.js +5 -2
  247. package/core/server/services/webhooks/serialize.js +6 -7
  248. package/core/server/services/webhooks/trigger.js +62 -47
  249. package/core/server/update-check.js +1 -1
  250. package/core/server/web/admin/app.js +1 -1
  251. package/core/server/web/admin/views/default-prod.html +4 -4
  252. package/core/server/web/admin/views/default.html +4 -4
  253. package/core/server/web/api/app.js +3 -15
  254. package/core/server/web/api/canary/admin/app.js +1 -1
  255. package/core/server/web/api/canary/admin/middleware.js +3 -1
  256. package/core/server/web/api/canary/admin/routes.js +7 -23
  257. package/core/server/web/api/canary/content/app.js +2 -3
  258. package/core/server/web/api/canary/content/routes.js +5 -4
  259. package/core/server/web/members/app.js +5 -4
  260. package/core/server/web/parent/backend.js +0 -1
  261. package/core/server/web/parent/frontend.js +5 -6
  262. package/core/server/web/parent/middleware/ghost-locals.js +0 -3
  263. package/core/server/web/well-known.js +14 -1
  264. package/core/shared/config/defaults.json +5 -2
  265. package/core/shared/config/overrides.json +1 -27
  266. package/core/shared/html-to-plaintext.js +78 -10
  267. package/core/shared/labs.js +4 -8
  268. package/core/shared/settings-cache/cache.js +38 -4
  269. package/core/shared/settings-cache/public.js +13 -7
  270. package/core/shared/url-utils.js +0 -2
  271. package/ghost.js +6 -0
  272. package/package.json +66 -64
  273. package/yarn.lock +765 -1300
  274. package/core/built/assets/ghost-dark-c94ae212747200ca4bafc37cfb0714d8.css +0 -1
  275. package/core/built/assets/ghost.min-4084931bc22e794fe3722139050a80b3.css +0 -1
  276. package/core/frontend/helpers/author.js +0 -41
  277. package/core/frontend/helpers/products.js +0 -65
  278. package/core/frontend/services/rendering/secure.js +0 -19
  279. package/core/frontend/services/routing/config/canary.js +0 -61
  280. package/core/frontend/services/routing/config/v2.js +0 -54
  281. package/core/frontend/services/routing/config/v3.js +0 -54
  282. package/core/frontend/services/theme-engine/engines/create.js +0 -45
  283. package/core/frontend/services/theme-engine/engines/index.js +0 -5
  284. package/core/frontend/services/theme-engine/middleware/update-local-template-data.js +0 -9
  285. package/core/server/api/canary/products-public.js +0 -34
  286. package/core/server/api/canary/products.js +0 -116
  287. package/core/server/api/canary/utils/serializers/input/products.js +0 -28
  288. package/core/server/api/canary/utils/serializers/output/email-previews.js +0 -7
  289. package/core/server/api/canary/utils/serializers/output/products.js +0 -213
  290. package/core/server/api/v2/actions.js +0 -38
  291. package/core/server/api/v2/authentication.js +0 -191
  292. package/core/server/api/v2/authors-public.js +0 -69
  293. package/core/server/api/v2/config.js +0 -12
  294. package/core/server/api/v2/db.js +0 -120
  295. package/core/server/api/v2/images.js +0 -20
  296. package/core/server/api/v2/index.js +0 -147
  297. package/core/server/api/v2/integrations.js +0 -144
  298. package/core/server/api/v2/invites.js +0 -126
  299. package/core/server/api/v2/mail.js +0 -66
  300. package/core/server/api/v2/notifications.js +0 -96
  301. package/core/server/api/v2/oembed.js +0 -186
  302. package/core/server/api/v2/pages-public.js +0 -78
  303. package/core/server/api/v2/pages.js +0 -197
  304. package/core/server/api/v2/posts-public.js +0 -78
  305. package/core/server/api/v2/posts.js +0 -192
  306. package/core/server/api/v2/preview.js +0 -46
  307. package/core/server/api/v2/redirects.js +0 -28
  308. package/core/server/api/v2/roles.js +0 -19
  309. package/core/server/api/v2/schedules.js +0 -77
  310. package/core/server/api/v2/session.js +0 -70
  311. package/core/server/api/v2/settings-public.js +0 -17
  312. package/core/server/api/v2/settings.js +0 -195
  313. package/core/server/api/v2/site.js +0 -14
  314. package/core/server/api/v2/slack.js +0 -12
  315. package/core/server/api/v2/slugs.js +0 -51
  316. package/core/server/api/v2/tags-public.js +0 -71
  317. package/core/server/api/v2/tags.js +0 -159
  318. package/core/server/api/v2/themes.js +0 -133
  319. package/core/server/api/v2/users.js +0 -179
  320. package/core/server/api/v2/utils/index.js +0 -34
  321. package/core/server/api/v2/utils/permissions.js +0 -112
  322. package/core/server/api/v2/utils/serializers/index.js +0 -9
  323. package/core/server/api/v2/utils/serializers/input/db.js +0 -20
  324. package/core/server/api/v2/utils/serializers/input/index.js +0 -33
  325. package/core/server/api/v2/utils/serializers/input/integrations.js +0 -33
  326. package/core/server/api/v2/utils/serializers/input/pages.js +0 -203
  327. package/core/server/api/v2/utils/serializers/input/posts.js +0 -218
  328. package/core/server/api/v2/utils/serializers/input/settings.js +0 -152
  329. package/core/server/api/v2/utils/serializers/input/tags.js +0 -35
  330. package/core/server/api/v2/utils/serializers/input/users.js +0 -26
  331. package/core/server/api/v2/utils/serializers/input/utils/url.js +0 -71
  332. package/core/server/api/v2/utils/serializers/input/webhooks.js +0 -12
  333. package/core/server/api/v2/utils/serializers/output/actions.js +0 -13
  334. package/core/server/api/v2/utils/serializers/output/all.js +0 -25
  335. package/core/server/api/v2/utils/serializers/output/authentication.js +0 -68
  336. package/core/server/api/v2/utils/serializers/output/authors.js +0 -21
  337. package/core/server/api/v2/utils/serializers/output/config.js +0 -21
  338. package/core/server/api/v2/utils/serializers/output/db.js +0 -40
  339. package/core/server/api/v2/utils/serializers/output/images.js +0 -19
  340. package/core/server/api/v2/utils/serializers/output/index.js +0 -107
  341. package/core/server/api/v2/utils/serializers/output/integrations.js +0 -35
  342. package/core/server/api/v2/utils/serializers/output/invites.js +0 -24
  343. package/core/server/api/v2/utils/serializers/output/mail.js +0 -19
  344. package/core/server/api/v2/utils/serializers/output/notifications.js +0 -29
  345. package/core/server/api/v2/utils/serializers/output/oembed.js +0 -8
  346. package/core/server/api/v2/utils/serializers/output/pages.js +0 -26
  347. package/core/server/api/v2/utils/serializers/output/posts.js +0 -26
  348. package/core/server/api/v2/utils/serializers/output/preview.js +0 -9
  349. package/core/server/api/v2/utils/serializers/output/redirects.js +0 -5
  350. package/core/server/api/v2/utils/serializers/output/roles.js +0 -29
  351. package/core/server/api/v2/utils/serializers/output/schedules.js +0 -5
  352. package/core/server/api/v2/utils/serializers/output/settings.js +0 -61
  353. package/core/server/api/v2/utils/serializers/output/site.js +0 -16
  354. package/core/server/api/v2/utils/serializers/output/slugs.js +0 -11
  355. package/core/server/api/v2/utils/serializers/output/tags.js +0 -25
  356. package/core/server/api/v2/utils/serializers/output/themes.js +0 -25
  357. package/core/server/api/v2/utils/serializers/output/users.js +0 -45
  358. package/core/server/api/v2/utils/serializers/output/utils/clean.js +0 -174
  359. package/core/server/api/v2/utils/serializers/output/utils/date.js +0 -21
  360. package/core/server/api/v2/utils/serializers/output/utils/extra-attrs.js +0 -161
  361. package/core/server/api/v2/utils/serializers/output/utils/mapper.js +0 -136
  362. package/core/server/api/v2/utils/serializers/output/utils/post-gating.js +0 -29
  363. package/core/server/api/v2/utils/serializers/output/utils/settings-type-group-mapper.js +0 -24
  364. package/core/server/api/v2/utils/serializers/output/utils/url.js +0 -67
  365. package/core/server/api/v2/utils/serializers/output/webhooks.js +0 -15
  366. package/core/server/api/v2/utils/validators/index.js +0 -9
  367. package/core/server/api/v2/utils/validators/input/images.js +0 -85
  368. package/core/server/api/v2/utils/validators/input/index.js +0 -45
  369. package/core/server/api/v2/utils/validators/input/invitations.js +0 -49
  370. package/core/server/api/v2/utils/validators/input/invites.js +0 -21
  371. package/core/server/api/v2/utils/validators/input/oembed.js +0 -17
  372. package/core/server/api/v2/utils/validators/input/pages.js +0 -46
  373. package/core/server/api/v2/utils/validators/input/passwordreset.js +0 -36
  374. package/core/server/api/v2/utils/validators/input/posts.js +0 -46
  375. package/core/server/api/v2/utils/validators/input/settings.js +0 -79
  376. package/core/server/api/v2/utils/validators/input/setup.js +0 -17
  377. package/core/server/api/v2/utils/validators/input/tags.js +0 -6
  378. package/core/server/api/v2/utils/validators/input/users.js +0 -21
  379. package/core/server/api/v2/utils/validators/output/index.js +0 -1
  380. package/core/server/api/v2/utils/validators/utils/json-schema.js +0 -17
  381. package/core/server/api/v2/webhooks.js +0 -163
  382. package/core/server/api/v3/authentication.js +0 -192
  383. package/core/server/api/v3/authors-public.js +0 -69
  384. package/core/server/api/v3/config.js +0 -12
  385. package/core/server/api/v3/db.js +0 -131
  386. package/core/server/api/v3/email-preview.js +0 -74
  387. package/core/server/api/v3/email.js +0 -65
  388. package/core/server/api/v3/identities.js +0 -36
  389. package/core/server/api/v3/images.js +0 -20
  390. package/core/server/api/v3/index.js +0 -179
  391. package/core/server/api/v3/integrations.js +0 -150
  392. package/core/server/api/v3/invites.js +0 -125
  393. package/core/server/api/v3/labels.js +0 -162
  394. package/core/server/api/v3/mail.js +0 -66
  395. package/core/server/api/v3/memberSigninUrls.js +0 -33
  396. package/core/server/api/v3/members.js +0 -412
  397. package/core/server/api/v3/membersStripeConnect.js +0 -29
  398. package/core/server/api/v3/notifications.js +0 -96
  399. package/core/server/api/v3/oembed.js +0 -23
  400. package/core/server/api/v3/pages-public.js +0 -77
  401. package/core/server/api/v3/pages.js +0 -199
  402. package/core/server/api/v3/posts-public.js +0 -76
  403. package/core/server/api/v3/posts.js +0 -200
  404. package/core/server/api/v3/preview.js +0 -44
  405. package/core/server/api/v3/redirects.js +0 -47
  406. package/core/server/api/v3/roles.js +0 -19
  407. package/core/server/api/v3/schedules.js +0 -77
  408. package/core/server/api/v3/session.js +0 -70
  409. package/core/server/api/v3/settings-public.js +0 -17
  410. package/core/server/api/v3/settings.js +0 -224
  411. package/core/server/api/v3/site.js +0 -14
  412. package/core/server/api/v3/slack.js +0 -12
  413. package/core/server/api/v3/slugs.js +0 -48
  414. package/core/server/api/v3/snippets.js +0 -115
  415. package/core/server/api/v3/tags-public.js +0 -71
  416. package/core/server/api/v3/tags.js +0 -159
  417. package/core/server/api/v3/themes.js +0 -131
  418. package/core/server/api/v3/users.js +0 -242
  419. package/core/server/api/v3/utils/index.js +0 -34
  420. package/core/server/api/v3/utils/permissions.js +0 -116
  421. package/core/server/api/v3/utils/serializers/index.js +0 -9
  422. package/core/server/api/v3/utils/serializers/input/authors.js +0 -31
  423. package/core/server/api/v3/utils/serializers/input/db.js +0 -20
  424. package/core/server/api/v3/utils/serializers/input/index.js +0 -41
  425. package/core/server/api/v3/utils/serializers/input/integrations.js +0 -33
  426. package/core/server/api/v3/utils/serializers/input/members.js +0 -62
  427. package/core/server/api/v3/utils/serializers/input/pages.js +0 -208
  428. package/core/server/api/v3/utils/serializers/input/posts.js +0 -242
  429. package/core/server/api/v3/utils/serializers/input/settings.js +0 -168
  430. package/core/server/api/v3/utils/serializers/input/tags.js +0 -42
  431. package/core/server/api/v3/utils/serializers/input/users.js +0 -26
  432. package/core/server/api/v3/utils/serializers/input/utils/slug-filter-order.js +0 -18
  433. package/core/server/api/v3/utils/serializers/input/utils/url.js +0 -71
  434. package/core/server/api/v3/utils/serializers/input/webhooks.js +0 -12
  435. package/core/server/api/v3/utils/serializers/output/actions.js +0 -13
  436. package/core/server/api/v3/utils/serializers/output/all.js +0 -25
  437. package/core/server/api/v3/utils/serializers/output/authentication.js +0 -69
  438. package/core/server/api/v3/utils/serializers/output/authors.js +0 -21
  439. package/core/server/api/v3/utils/serializers/output/config.js +0 -25
  440. package/core/server/api/v3/utils/serializers/output/db.js +0 -40
  441. package/core/server/api/v3/utils/serializers/output/email-preview.js +0 -7
  442. package/core/server/api/v3/utils/serializers/output/emails.js +0 -13
  443. package/core/server/api/v3/utils/serializers/output/identities.js +0 -7
  444. package/core/server/api/v3/utils/serializers/output/images.js +0 -19
  445. package/core/server/api/v3/utils/serializers/output/index.js +0 -135
  446. package/core/server/api/v3/utils/serializers/output/integrations.js +0 -35
  447. package/core/server/api/v3/utils/serializers/output/invites.js +0 -24
  448. package/core/server/api/v3/utils/serializers/output/labels.js +0 -25
  449. package/core/server/api/v3/utils/serializers/output/mail.js +0 -19
  450. package/core/server/api/v3/utils/serializers/output/member-signin_urls.js +0 -7
  451. package/core/server/api/v3/utils/serializers/output/members.js +0 -228
  452. package/core/server/api/v3/utils/serializers/output/notifications.js +0 -29
  453. package/core/server/api/v3/utils/serializers/output/oembed.js +0 -8
  454. package/core/server/api/v3/utils/serializers/output/pages.js +0 -26
  455. package/core/server/api/v3/utils/serializers/output/posts.js +0 -26
  456. package/core/server/api/v3/utils/serializers/output/preview.js +0 -10
  457. package/core/server/api/v3/utils/serializers/output/redirects.js +0 -5
  458. package/core/server/api/v3/utils/serializers/output/roles.js +0 -29
  459. package/core/server/api/v3/utils/serializers/output/schedules.js +0 -5
  460. package/core/server/api/v3/utils/serializers/output/settings.js +0 -65
  461. package/core/server/api/v3/utils/serializers/output/site.js +0 -19
  462. package/core/server/api/v3/utils/serializers/output/slugs.js +0 -11
  463. package/core/server/api/v3/utils/serializers/output/snippets.js +0 -97
  464. package/core/server/api/v3/utils/serializers/output/tags.js +0 -25
  465. package/core/server/api/v3/utils/serializers/output/themes.js +0 -25
  466. package/core/server/api/v3/utils/serializers/output/users.js +0 -74
  467. package/core/server/api/v3/utils/serializers/output/utils/clean.js +0 -166
  468. package/core/server/api/v3/utils/serializers/output/utils/date.js +0 -21
  469. package/core/server/api/v3/utils/serializers/output/utils/extra-attrs.js +0 -174
  470. package/core/server/api/v3/utils/serializers/output/utils/mapper.js +0 -197
  471. package/core/server/api/v3/utils/serializers/output/utils/post-gating.js +0 -39
  472. package/core/server/api/v3/utils/serializers/output/utils/settings-type-group-mapper.js +0 -24
  473. package/core/server/api/v3/utils/serializers/output/utils/url.js +0 -67
  474. package/core/server/api/v3/utils/serializers/output/webhooks.js +0 -15
  475. package/core/server/api/v3/utils/validators/index.js +0 -9
  476. package/core/server/api/v3/utils/validators/input/images.js +0 -85
  477. package/core/server/api/v3/utils/validators/input/index.js +0 -61
  478. package/core/server/api/v3/utils/validators/input/invitations.js +0 -49
  479. package/core/server/api/v3/utils/validators/input/invites.js +0 -21
  480. package/core/server/api/v3/utils/validators/input/labels.js +0 -6
  481. package/core/server/api/v3/utils/validators/input/members.js +0 -6
  482. package/core/server/api/v3/utils/validators/input/oembed.js +0 -17
  483. package/core/server/api/v3/utils/validators/input/pages.js +0 -46
  484. package/core/server/api/v3/utils/validators/input/passwordreset.js +0 -36
  485. package/core/server/api/v3/utils/validators/input/posts.js +0 -46
  486. package/core/server/api/v3/utils/validators/input/settings.js +0 -89
  487. package/core/server/api/v3/utils/validators/input/setup.js +0 -17
  488. package/core/server/api/v3/utils/validators/input/snippets.js +0 -6
  489. package/core/server/api/v3/utils/validators/input/tags.js +0 -6
  490. package/core/server/api/v3/utils/validators/input/users.js +0 -22
  491. package/core/server/api/v3/utils/validators/input/webhooks.js +0 -27
  492. package/core/server/api/v3/utils/validators/output/index.js +0 -1
  493. package/core/server/api/v3/utils/validators/utils/json-schema.js +0 -17
  494. package/core/server/api/v3/webhooks.js +0 -130
  495. package/core/server/data/migrations/utils.js +0 -571
  496. package/core/server/data/migrations/versions/1.13/1-custom-template-post.js +0 -7
  497. package/core/server/data/migrations/versions/1.13/2-theme-permissions.js +0 -58
  498. package/core/server/data/migrations/versions/1.18/1-add-webhooks-table.js +0 -2
  499. package/core/server/data/migrations/versions/1.19/1-webhook-permissions.js +0 -31
  500. package/core/server/data/migrations/versions/1.20/1-remove-settings-keys.js +0 -65
  501. package/core/server/data/migrations/versions/1.21/1-add-contributor-role.js +0 -58
  502. package/core/server/data/migrations/versions/1.22/1-multiple-authors-DDL.js +0 -2
  503. package/core/server/data/migrations/versions/1.22/1-multiple-authors-DML.js +0 -63
  504. package/core/server/data/migrations/versions/1.25/1-update-koenig-beta-html.js +0 -70
  505. package/core/server/data/migrations/versions/1.25/2-demo-post.js +0 -55
  506. package/core/server/data/migrations/versions/1.3/1-post-excerpt.js +0 -7
  507. package/core/server/data/migrations/versions/1.4/1-codeinjection-post.js +0 -14
  508. package/core/server/data/migrations/versions/1.5/1-og-twitter-post.js +0 -34
  509. package/core/server/data/migrations/versions/1.7/1-add-backup-client.js +0 -10
  510. package/core/server/data/migrations/versions/1.9/1-add-permissions-redirect.js +0 -23
  511. package/core/server/data/migrations/versions/2.0/1-rename-amp-column.js +0 -44
  512. package/core/server/data/migrations/versions/2.0/2-update-posts.js +0 -7
  513. package/core/server/data/migrations/versions/2.0/3-remove-koenig-labs.js +0 -42
  514. package/core/server/data/migrations/versions/2.0/4-permalink-setting.js +0 -85
  515. package/core/server/data/migrations/versions/2.0/5-remove-demo-post.js +0 -85
  516. package/core/server/data/migrations/versions/2.0/6-replace-fixture-posts.js +0 -10
  517. package/core/server/data/migrations/versions/2.13/1-remove-empty-strings.js +0 -5
  518. package/core/server/data/migrations/versions/2.14/1-add-actions-table.js +0 -2
  519. package/core/server/data/migrations/versions/2.14/2-add-actions-permissions.js +0 -12
  520. package/core/server/data/migrations/versions/2.15/1-add-type-column-to-integrations.js +0 -8
  521. package/core/server/data/migrations/versions/2.15/2-insert-zapier-integration.js +0 -69
  522. package/core/server/data/migrations/versions/2.16/1-add-members-perrmissions.js +0 -1
  523. package/core/server/data/migrations/versions/2.17/1-normalize-settings.js +0 -74
  524. package/core/server/data/migrations/versions/2.17/2-posts-add-canonical-url.js +0 -7
  525. package/core/server/data/migrations/versions/2.18/1-restore-settings-from-backup.js +0 -134
  526. package/core/server/data/migrations/versions/2.2/1-add-sessions-table.js +0 -2
  527. package/core/server/data/migrations/versions/2.2/2-add-integrations-and-api-key-tables.js +0 -6
  528. package/core/server/data/migrations/versions/2.2/3-insert-admin-integration-role.js +0 -83
  529. package/core/server/data/migrations/versions/2.2/4-insert-integration-and-api-key-permissions.js +0 -77
  530. package/core/server/data/migrations/versions/2.2/5-add-mobiledoc-revisions-table.js +0 -2
  531. package/core/server/data/migrations/versions/2.21/1-update-editor-permissions.js +0 -28
  532. package/core/server/data/migrations/versions/2.22/1-add-member-permissions-to-roles.js +0 -47
  533. package/core/server/data/migrations/versions/2.27/1-insert-ghost-db-backup-role.js +0 -83
  534. package/core/server/data/migrations/versions/2.27/2-insert-db-backup-integration.js +0 -69
  535. package/core/server/data/migrations/versions/2.27/3-add-subdirectory-to-relative-canonical-urls.js +0 -100
  536. package/core/server/data/migrations/versions/2.28/1-add-db-backup-content-permission.js +0 -9
  537. package/core/server/data/migrations/versions/2.28/2-add-db-backup-content-permission-to-roles.js +0 -15
  538. package/core/server/data/migrations/versions/2.28/3-insert-ghost-scheduler-role.js +0 -84
  539. package/core/server/data/migrations/versions/2.28/4-insert-scheduler-integration.js +0 -69
  540. package/core/server/data/migrations/versions/2.28/5-add-scheduler-permission-to-roles.js +0 -23
  541. package/core/server/data/migrations/versions/2.28/6-add-type-column.js +0 -6
  542. package/core/server/data/migrations/versions/2.28/7-populate-type-column.js +0 -6
  543. package/core/server/data/migrations/versions/2.28/8-remove-page-column.js +0 -6
  544. package/core/server/data/migrations/versions/2.29/1-add-post-page-column.js +0 -20
  545. package/core/server/data/migrations/versions/2.29/2-populate-post-page-column.js +0 -98
  546. package/core/server/data/migrations/versions/2.29/3-remove-page-type-column.js +0 -15
  547. package/core/server/data/migrations/versions/2.3/1-add-webhook-columns.js +0 -45
  548. package/core/server/data/migrations/versions/2.3/2-add-webhook-edit-permission.js +0 -9
  549. package/core/server/data/migrations/versions/2.31/1-remove-name-and-password-from-members-table.js +0 -15
  550. package/core/server/data/migrations/versions/2.32/01-add-members-stripe-customers-table.js +0 -4
  551. package/core/server/data/migrations/versions/2.32/02-add-name-to-members-table.js +0 -7
  552. package/core/server/data/migrations/versions/2.33/01-correct-members-stripe-customers-table.js +0 -37
  553. package/core/server/data/migrations/versions/2.34/01-add-stripe-customers-subscriptions-table.js +0 -2
  554. package/core/server/data/migrations/versions/2.34/02-add-email-to-members-stripe-customers-table.js +0 -7
  555. package/core/server/data/migrations/versions/2.34/03-add-name-to-members-stripe-customers-table.js +0 -7
  556. package/core/server/data/migrations/versions/2.35/01-add-note-to-members-table.js +0 -7
  557. package/core/server/data/migrations/versions/2.37/01-add-self-signup-and-from address-to-members-settings.js +0 -67
  558. package/core/server/data/migrations/versions/2.6/1-add-webhook-permission-roles.js +0 -31
  559. package/core/server/data/migrations/versions/2.8/1-add-members-table.js +0 -2
  560. package/core/server/data/migrations/versions/3.0/01-remove-user-ghost-auth-columns.js +0 -14
  561. package/core/server/data/migrations/versions/3.0/02-drop-token-auth-tables.js +0 -31
  562. package/core/server/data/migrations/versions/3.0/03-drop-client-auth-tables.js +0 -35
  563. package/core/server/data/migrations/versions/3.0/04-add-posts-meta-table.js +0 -2
  564. package/core/server/data/migrations/versions/3.0/05-populate-posts-meta-table.js +0 -83
  565. package/core/server/data/migrations/versions/3.0/06-remove-posts-meta-columns.js +0 -44
  566. package/core/server/data/migrations/versions/3.0/07-add-posts-type-column.js +0 -8
  567. package/core/server/data/migrations/versions/3.0/08-populate-posts-type-column.js +0 -94
  568. package/core/server/data/migrations/versions/3.0/09-remove-posts-page-column.js +0 -7
  569. package/core/server/data/migrations/versions/3.0/10-remove-empty-strings.js +0 -81
  570. package/core/server/data/migrations/versions/3.0/11-update-posts-html.js +0 -7
  571. package/core/server/data/migrations/versions/3.0/12-populate-members-table-from-subscribers.js +0 -54
  572. package/core/server/data/migrations/versions/3.0/13-drop-subscribers-table.js +0 -34
  573. package/core/server/data/migrations/versions/3.0/14-remove-subscribers-flag.js +0 -24
  574. package/core/server/data/migrations/versions/3.1/01-add-send-email-when-published-to-posts.js +0 -7
  575. package/core/server/data/migrations/versions/3.1/02-add-email-subject-to-posts-meta.js +0 -7
  576. package/core/server/data/migrations/versions/3.1/03-add-email-preview-permissions.js +0 -18
  577. package/core/server/data/migrations/versions/3.1/04-add-subscribed-flag-to-members.js +0 -7
  578. package/core/server/data/migrations/versions/3.1/05-add-emails-table.js +0 -2
  579. package/core/server/data/migrations/versions/3.1/06-add-email-permissions.js +0 -15
  580. package/core/server/data/migrations/versions/3.1/07-add-uuid-field-to-members.js +0 -8
  581. package/core/server/data/migrations/versions/3.1/08-add-uuid-values-to-members.js +0 -23
  582. package/core/server/data/migrations/versions/3.1/09-add-further-email-permissions.js +0 -25
  583. package/core/server/data/migrations/versions/3.1/10-add-email-error-data-column.js +0 -8
  584. package/core/server/data/migrations/versions/3.11/01-remove-broken-complimentary-plan-from-members-settings.js +0 -68
  585. package/core/server/data/migrations/versions/3.12/01-add-identity-permission.js +0 -7
  586. package/core/server/data/migrations/versions/3.12/02-remove-legacy-is-paid-flag-from-settings.js +0 -93
  587. package/core/server/data/migrations/versions/3.18/01-add-email-preview-permissions-to-roles.js +0 -39
  588. package/core/server/data/migrations/versions/3.18/02-add-members_stripe_connect-auth-permissions.js +0 -7
  589. package/core/server/data/migrations/versions/3.19/01-update-member-from-email-address.js +0 -91
  590. package/core/server/data/migrations/versions/3.2/01-add-cancel-at-period-end-to-subscriptions.js +0 -7
  591. package/core/server/data/migrations/versions/3.22/01-removed-legacy-values-from-settings-table.js +0 -65
  592. package/core/server/data/migrations/versions/3.22/02-settings-key-renames.js +0 -90
  593. package/core/server/data/migrations/versions/3.22/03-add-group-and-flags-to-settings.js +0 -15
  594. package/core/server/data/migrations/versions/3.22/04-populate-settings-groups-and-flags.js +0 -194
  595. package/core/server/data/migrations/versions/3.22/05-migrate-members-subscription-settings.js +0 -182
  596. package/core/server/data/migrations/versions/3.22/06-migrate-stripe-connect-settings.js +0 -132
  597. package/core/server/data/migrations/versions/3.22/07-update-type-for-settings.js +0 -137
  598. package/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js +0 -65
  599. package/core/server/data/migrations/versions/3.23/02-remove-bulk-email-settings.js +0 -48
  600. package/core/server/data/migrations/versions/3.23/03-update-portal-button-setting.js +0 -24
  601. package/core/server/data/migrations/versions/3.23/04-add-meta-columns-to-tags-table.js +0 -54
  602. package/core/server/data/migrations/versions/3.24/01-populate-group-for-new-portal-settings.js +0 -38
  603. package/core/server/data/migrations/versions/3.25/01-add-members-stripe-webhook-settings.js +0 -22
  604. package/core/server/data/migrations/versions/3.26/01-add-amp-gtag-id-setting.js +0 -20
  605. package/core/server/data/migrations/versions/3.29/01-remove-duplicate-subscriptions.js +0 -53
  606. package/core/server/data/migrations/versions/3.29/02-remove-duplicate-customers.js +0 -53
  607. package/core/server/data/migrations/versions/3.29/03-remove-orphaned-customers.js +0 -35
  608. package/core/server/data/migrations/versions/3.29/04-remove-orphaned-subscriptions.js +0 -35
  609. package/core/server/data/migrations/versions/3.29/05-add-member-constraints.js +0 -177
  610. package/core/server/data/migrations/versions/3.30/01-add-member-signin-url-permission-roles.js +0 -8
  611. package/core/server/data/migrations/versions/3.32/01-add-member-support-address-setting.js +0 -27
  612. package/core/server/data/migrations/versions/3.32/02-add-member-reply-address-setting.js +0 -20
  613. package/core/server/data/migrations/versions/3.32/03-add-routes-hash-setting.js +0 -20
  614. package/core/server/data/migrations/versions/3.33/01-add-email-recipients-tables.js +0 -8
  615. package/core/server/data/migrations/versions/3.34/01-add-tokens-table.js +0 -2
  616. package/core/server/data/migrations/versions/3.35/01-add-address-columns-to-emails-table.js +0 -14
  617. package/core/server/data/migrations/versions/3.36/01-add-snippets-table.js +0 -2
  618. package/core/server/data/migrations/versions/3.36/02-add-snippets-permissions.js +0 -56
  619. package/core/server/data/migrations/versions/3.37/01-update-portal-button-setting.js +0 -30
  620. package/core/server/data/migrations/versions/3.38/01-add-email-recipient-filter-column.js +0 -8
  621. package/core/server/data/migrations/versions/3.38/02-populate-email-recipient-filter-column.js +0 -34
  622. package/core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js +0 -8
  623. package/core/server/data/migrations/versions/3.38/04-populate-recipient-filter-column.js +0 -49
  624. package/core/server/data/migrations/versions/3.38/05-add-emails-track-opens-column.js +0 -7
  625. package/core/server/data/migrations/versions/3.38/06-add-newsletter-settings.js +0 -16
  626. package/core/server/data/migrations/versions/3.38/07-migrate-newsletter-settings-from-config.js +0 -48
  627. package/core/server/data/migrations/versions/3.38/08-repopulate-send-email-when-published-down-migration.js +0 -25
  628. package/core/server/data/migrations/versions/3.38/09-remove-send-email-when-published-column.js +0 -7
  629. package/core/server/data/migrations/versions/3.39/01-add-members-signup-redirect-settings.js +0 -16
  630. package/core/server/data/migrations/versions/3.39/02-add-user-id-to-api-keys-table.js +0 -7
  631. package/core/server/data/migrations/versions/3.39/03-add-email-track-opens-setting.js +0 -16
  632. package/core/server/data/migrations/versions/3.39/04-add-cancellation-reason-column.js +0 -7
  633. package/core/server/data/migrations/versions/3.39/05-remove-unused-columns-on-emails.js +0 -14
  634. package/core/server/data/migrations/versions/3.39/06-add-email-recipient-index.js +0 -58
  635. package/core/server/data/migrations/versions/3.39/07-add-email-recipients-event-timestamps.js +0 -19
  636. package/core/server/data/migrations/versions/3.39/08-add-email-stats-columns.js +0 -22
  637. package/core/server/data/migrations/versions/3.40/01-add-members-email-open-rate-column.js +0 -8
  638. package/core/server/data/migrations/versions/3.40/02-add members-email-aggregation-columns.js +0 -16
  639. package/core/server/data/migrations/versions/3.40/03-populate-members-email-counts.js +0 -15
  640. package/core/server/data/migrations/versions/3.41/01-add-firstpromoter-settings.js +0 -16
  641. package/core/server/data/migrations/versions/3.6/1-add-labels-table.js +0 -2
  642. package/core/server/data/migrations/versions/3.6/2-add-members-labels-table.js +0 -2
  643. package/core/server/data/migrations/versions/3.6/3-add-labels-permissions.js +0 -47
  644. package/core/server/data/migrations/versions/3.7/01-fix-incorrect-member-labels-foreign-keys.js +0 -46
  645. package/core/server/data/migrations/versions/3.8/01-add-geolocation-to-members.js +0 -7
  646. package/core/server/data/migrations/versions/3.9/01-add-member-sigin-url-permissions.js +0 -7
  647. package/core/server/services/mail/utils.js +0 -34
  648. package/core/server/services/url/configs/canary.js +0 -143
  649. package/core/server/services/url/configs/v3.js +0 -141
  650. package/core/server/services/url/configs/v4.js +0 -143
  651. package/core/server/web/api/v2/admin/app.js +0 -43
  652. package/core/server/web/api/v2/admin/middleware.js +0 -85
  653. package/core/server/web/api/v2/admin/routes.js +0 -200
  654. package/core/server/web/api/v2/content/app.js +0 -38
  655. package/core/server/web/api/v2/content/middleware.js +0 -23
  656. package/core/server/web/api/v2/content/routes.js +0 -37
  657. package/core/server/web/api/v3/admin/app.js +0 -43
  658. package/core/server/web/api/v3/admin/middleware.js +0 -89
  659. package/core/server/web/api/v3/admin/routes.js +0 -267
  660. package/core/server/web/api/v3/content/app.js +0 -38
  661. package/core/server/web/api/v3/content/middleware.js +0 -23
  662. package/core/server/web/api/v3/content/routes.js +0 -37
  663. package/core/server/web/oauth/app.js +0 -153
  664. package/core/server/web/oauth/index.js +0 -1
@@ -2,7 +2,7 @@
2
2
  // Usage: `{{ghost_head}}`
3
3
  //
4
4
  // Outputs scripts and other assets at the top of a Ghost theme
5
- const {metaData, settingsCache, config, blogIcon, urlUtils, labs} = require('../services/proxy');
5
+ const {metaData, settingsCache, config, blogIcon, urlUtils, labs, getFrontendKey} = require('../services/proxy');
6
6
  const {escapeExpression, SafeString} = require('../services/handlebars');
7
7
 
8
8
  // BAD REQUIRE
@@ -43,19 +43,15 @@ function finaliseStructuredData(meta) {
43
43
  return head;
44
44
  }
45
45
 
46
- function getMembersHelper(data) {
47
- if (settingsCache.get('members_signup_access') === 'none') {
46
+ function getMembersHelper(data, frontendKey) {
47
+ if (!settingsCache.get('members_enabled')) {
48
48
  return '';
49
49
  }
50
50
 
51
- const stripeDirectSecretKey = settingsCache.get('stripe_secret_key');
52
- const stripeDirectPublishableKey = settingsCache.get('stripe_publishable_key');
53
- const stripeConnectAccountId = settingsCache.get('stripe_connect_account_id');
54
51
  const colorString = _.has(data, 'site._preview') && data.site.accent_color ? ` data-accent-color="${data.site.accent_color}"` : '';
55
- const portalUrl = config.get('portal:url');
56
- let membersHelper = `<script defer src="${portalUrl}" data-ghost="${urlUtils.getSiteUrl()}"${colorString} crossorigin="anonymous"></script>`;
52
+ let membersHelper = `<script defer src="${config.get('portal:url')}" data-ghost="${urlUtils.getSiteUrl()}"${colorString} data-key="${frontendKey}" data-api="${urlUtils.urlFor('api', {type: 'content'}, true)}" crossorigin="anonymous"></script>`;
57
53
  membersHelper += (`<style id="gh-members-styles">${templateStyles}</style>`);
58
- if ((!!stripeDirectSecretKey && !!stripeDirectPublishableKey) || !!stripeConnectAccountId) {
54
+ if (settingsCache.get('paid_members_enabled')) {
59
55
  membersHelper += '<script async src="https://js.stripe.com/v3/"></script>';
60
56
  }
61
57
  return membersHelper;
@@ -96,7 +92,7 @@ function getMembersHelper(data) {
96
92
  * Also see how the root object gets created, https://github.com/wycats/handlebars.js/blob/v4.0.6/lib/handlebars/runtime.js#L259
97
93
  */
98
94
  // We use the name ghost_head to match the helper for consistency:
99
- module.exports = function ghost_head(options) { // eslint-disable-line camelcase
95
+ module.exports = async function ghost_head(options) { // eslint-disable-line camelcase
100
96
  debug('begin');
101
97
 
102
98
  // if server error page do nothing
@@ -118,128 +114,128 @@ module.exports = function ghost_head(options) { // eslint-disable-line camelcase
118
114
 
119
115
  debug('preparation complete, begin fetch');
120
116
 
121
- /**
122
- * @TODO:
123
- * - getMetaData(dataRoot, dataRoot) -> yes that looks confusing!
124
- * - there is a very mixed usage of `data.context` vs. `root.context` vs `root._locals.context` vs. `this.context`
125
- * - NOTE: getMetaData won't live here anymore soon, see https://github.com/TryGhost/Ghost/issues/8995
126
- * - therefore we get rid of using `getMetaData(this, dataRoot)`
127
- * - dataRoot has access to *ALL* locals, see function description
128
- * - it should not break anything
129
- */
130
- return getMetaData(dataRoot, dataRoot)
131
- .then(function handleMetaData(meta) {
132
- debug('end fetch');
133
-
134
- if (context) {
135
- // head is our main array that holds our meta data
136
- if (meta.metaDescription && meta.metaDescription.length > 0) {
137
- head.push('<meta name="description" content="' + escapeExpression(meta.metaDescription) + '" />');
138
- }
117
+ try {
118
+ /**
119
+ * @TODO:
120
+ * - getMetaData(dataRoot, dataRoot) -> yes that looks confusing!
121
+ * - there is a very mixed usage of `data.context` vs. `root.context` vs `root._locals.context` vs. `this.context`
122
+ * - NOTE: getMetaData won't live here anymore soon, see https://github.com/TryGhost/Ghost/issues/8995
123
+ * - therefore we get rid of using `getMetaData(this, dataRoot)`
124
+ * - dataRoot has access to *ALL* locals, see function description
125
+ * - it should not break anything
126
+ */
127
+ const meta = await getMetaData(dataRoot, dataRoot);
128
+ const frontendKey = await getFrontendKey();
129
+
130
+ debug('end fetch');
131
+
132
+ if (context) {
133
+ // head is our main array that holds our meta data
134
+ if (meta.metaDescription && meta.metaDescription.length > 0) {
135
+ head.push('<meta name="description" content="' + escapeExpression(meta.metaDescription) + '" />');
136
+ }
139
137
 
140
- // no output in head if a publication icon is not set
141
- if (settingsCache.get('icon')) {
142
- head.push('<link rel="icon" href="' + favicon + '" type="image/' + iconType + '" />');
143
- }
138
+ // no output in head if a publication icon is not set
139
+ if (settingsCache.get('icon')) {
140
+ head.push('<link rel="icon" href="' + favicon + '" type="image/' + iconType + '" />');
141
+ }
144
142
 
145
- head.push('<link rel="canonical" href="' +
146
- escapeExpression(meta.canonicalUrl) + '" />');
147
- head.push('<meta name="referrer" content="' + referrerPolicy + '" />');
143
+ head.push('<link rel="canonical" href="' + escapeExpression(meta.canonicalUrl) + '" />');
144
+ head.push('<meta name="referrer" content="' + referrerPolicy + '" />');
148
145
 
149
- // don't allow indexing of preview URLs!
150
- if (_.includes(context, 'preview')) {
151
- head.push(writeMetaTag('robots', 'noindex,nofollow', 'name'));
152
- }
146
+ // don't allow indexing of preview URLs!
147
+ if (_.includes(context, 'preview')) {
148
+ head.push(writeMetaTag('robots', 'noindex,nofollow', 'name'));
149
+ }
153
150
 
154
- // show amp link in post when 1. we are not on the amp page and 2. amp is enabled
155
- if (_.includes(context, 'post') && !_.includes(context, 'amp') && settingsCache.get('amp')) {
156
- head.push('<link rel="amphtml" href="' +
157
- escapeExpression(meta.ampUrl) + '" />');
158
- }
151
+ // show amp link in post when 1. we are not on the amp page and 2. amp is enabled
152
+ if (_.includes(context, 'post') && !_.includes(context, 'amp') && settingsCache.get('amp')) {
153
+ head.push('<link rel="amphtml" href="' +
154
+ escapeExpression(meta.ampUrl) + '" />');
155
+ }
159
156
 
160
- if (meta.previousUrl) {
161
- head.push('<link rel="prev" href="' +
162
- escapeExpression(meta.previousUrl) + '" />');
163
- }
157
+ if (meta.previousUrl) {
158
+ head.push('<link rel="prev" href="' +
159
+ escapeExpression(meta.previousUrl) + '" />');
160
+ }
164
161
 
165
- if (meta.nextUrl) {
166
- head.push('<link rel="next" href="' +
167
- escapeExpression(meta.nextUrl) + '" />');
168
- }
162
+ if (meta.nextUrl) {
163
+ head.push('<link rel="next" href="' +
164
+ escapeExpression(meta.nextUrl) + '" />');
165
+ }
169
166
 
170
- if (!_.includes(context, 'paged') && useStructuredData) {
171
- head.push('');
172
- head.push.apply(head, finaliseStructuredData(meta));
173
- head.push('');
167
+ if (!_.includes(context, 'paged') && useStructuredData) {
168
+ head.push('');
169
+ head.push.apply(head, finaliseStructuredData(meta));
170
+ head.push('');
174
171
 
175
- if (meta.schema) {
176
- head.push('<script type="application/ld+json">\n' +
177
- JSON.stringify(meta.schema, null, ' ') +
178
- '\n </script>\n');
179
- }
172
+ if (meta.schema) {
173
+ head.push('<script type="application/ld+json">\n' +
174
+ JSON.stringify(meta.schema, null, ' ') +
175
+ '\n </script>\n');
180
176
  }
181
177
  }
178
+ }
182
179
 
183
- head.push('<meta name="generator" content="Ghost ' +
184
- escapeExpression(safeVersion) + '" />');
180
+ head.push('<meta name="generator" content="Ghost ' +
181
+ escapeExpression(safeVersion) + '" />');
185
182
 
186
- // Ghost analytics tag
187
- if (labs.isSet('membersActivity')) {
188
- const postId = (dataRoot && dataRoot.post) ? dataRoot.post.id : '';
189
- head.push(writeMetaTag('ghost-analytics-id', postId, 'name'));
190
- }
183
+ // Ghost analytics tag
184
+ if (labs.isSet('membersActivity')) {
185
+ const postId = (dataRoot && dataRoot.post) ? dataRoot.post.id : '';
186
+ head.push(writeMetaTag('ghost-analytics-id', postId, 'name'));
187
+ }
191
188
 
192
- head.push('<link rel="alternate" type="application/rss+xml" title="' +
193
- escapeExpression(meta.site.title) + '" href="' +
194
- escapeExpression(meta.rssUrl) + '" />');
189
+ head.push('<link rel="alternate" type="application/rss+xml" title="' +
190
+ escapeExpression(meta.site.title) + '" href="' +
191
+ escapeExpression(meta.rssUrl) + '" />');
195
192
 
196
- // no code injection for amp context!!!
197
- if (!_.includes(context, 'amp')) {
198
- head.push(getMembersHelper(options.data));
193
+ // no code injection for amp context!!!
194
+ if (!_.includes(context, 'amp')) {
195
+ head.push(getMembersHelper(options.data, frontendKey));
199
196
 
200
- // @TODO do this in a more "frameworky" way
201
- if (cardAssetService.hasFile('js')) {
202
- head.push(`<script defer src="${getAssetUrl('public/cards.min.js')}"></script>`);
203
- }
204
- if (cardAssetService.hasFile('css')) {
205
- head.push(`<link rel="stylesheet" type="text/css" href="${getAssetUrl('public/cards.min.css')}">`);
206
- }
197
+ // @TODO do this in a more "frameworky" way
198
+ if (cardAssetService.hasFile('js')) {
199
+ head.push(`<script defer src="${getAssetUrl('public/cards.min.js')}"></script>`);
200
+ }
201
+ if (cardAssetService.hasFile('css')) {
202
+ head.push(`<link rel="stylesheet" type="text/css" href="${getAssetUrl('public/cards.min.css')}">`);
203
+ }
207
204
 
208
- if (!_.isEmpty(globalCodeinjection)) {
209
- head.push(globalCodeinjection);
210
- }
205
+ if (!_.isEmpty(globalCodeinjection)) {
206
+ head.push(globalCodeinjection);
207
+ }
211
208
 
212
- if (!_.isEmpty(postCodeInjection)) {
213
- head.push(postCodeInjection);
214
- }
209
+ if (!_.isEmpty(postCodeInjection)) {
210
+ head.push(postCodeInjection);
211
+ }
215
212
 
216
- if (!_.isEmpty(tagCodeInjection)) {
217
- head.push(tagCodeInjection);
218
- }
213
+ if (!_.isEmpty(tagCodeInjection)) {
214
+ head.push(tagCodeInjection);
219
215
  }
216
+ }
220
217
 
221
- // AMP template has style injected directly because there can only be one <style amp-custom> tag
222
- if (options.data.site.accent_color && !_.includes(context, 'amp')) {
223
- const accentColor = escapeExpression(options.data.site.accent_color);
224
- const styleTag = `<style>:root {--ghost-accent-color: ${accentColor};}</style>`;
225
- const existingScriptIndex = _.findLastIndex(head, str => str.match(/<\/(style|script)>/));
218
+ // AMP template has style injected directly because there can only be one <style amp-custom> tag
219
+ if (options.data.site.accent_color && !_.includes(context, 'amp')) {
220
+ const accentColor = escapeExpression(options.data.site.accent_color);
221
+ const styleTag = `<style>:root {--ghost-accent-color: ${accentColor};}</style>`;
222
+ const existingScriptIndex = _.findLastIndex(head, str => str.match(/<\/(style|script)>/));
226
223
 
227
- if (existingScriptIndex !== -1) {
228
- head[existingScriptIndex] = head[existingScriptIndex] + styleTag;
229
- } else {
230
- head.push(styleTag);
231
- }
224
+ if (existingScriptIndex !== -1) {
225
+ head[existingScriptIndex] = head[existingScriptIndex] + styleTag;
226
+ } else {
227
+ head.push(styleTag);
232
228
  }
229
+ }
233
230
 
234
- debug('end');
235
- return new SafeString(head.join('\n ').trim());
236
- })
237
- .catch(function handleError(err) {
238
- logging.error(err);
231
+ debug('end');
232
+ return new SafeString(head.join('\n ').trim());
233
+ } catch (error) {
234
+ logging.error(error);
239
235
 
240
- // Return what we have so far (currently nothing)
241
- return new SafeString(head.join('\n ').trim());
242
- });
236
+ // Return what we have so far (currently nothing)
237
+ return new SafeString(head.join('\n ').trim());
238
+ }
243
239
  };
244
240
 
245
241
  module.exports.async = true;
@@ -29,7 +29,6 @@ module.exports = function navigation(options) {
29
29
 
30
30
  const navigationData = options.data.site[key];
31
31
  const currentUrl = options.data.root.relativeUrl;
32
- const self = this;
33
32
  let output;
34
33
 
35
34
  if (!_.isObject(navigationData) || _.isFunction(navigationData)) {
@@ -78,7 +77,6 @@ module.exports = function navigation(options) {
78
77
  out.label = e.label;
79
78
  out.slug = slugify(e.label);
80
79
  out.url = e.url;
81
- out.secure = self.secure;
82
80
  return out;
83
81
  });
84
82
 
@@ -9,7 +9,6 @@ const {checks} = require('../services/data');
9
9
  const logging = require('@tryghost/logging');
10
10
  const tpl = require('@tryghost/tpl');
11
11
  const get = require('lodash/get');
12
- const Promise = require('bluebird');
13
12
  const moment = require('moment');
14
13
 
15
14
  const messages = {
@@ -55,30 +54,25 @@ const buildApiOptions = function buildApiOptions(options, post) {
55
54
  * @param {*} data
56
55
  * @returns {Promise<any>}
57
56
  */
58
- const fetch = function fetch(options, data) {
57
+ const fetch = async function fetch(options, data) {
59
58
  const self = this;
60
59
  const apiOptions = buildApiOptions(options, this);
61
- const apiVersion = data.root._locals.apiVersion;
62
-
63
- // @TODO: https://github.com/TryGhost/Ghost/issues/10548
64
- const controller = api[apiVersion].postsPublic || api[apiVersion].posts;
65
-
66
- return controller
67
- .browse(apiOptions)
68
- .then(function handleSuccess(result) {
69
- const related = result.posts[0];
70
-
71
- if (related) {
72
- return options.fn(related, {data: data});
73
- } else {
74
- return options.inverse(self, {data: data});
75
- }
76
- })
77
- .catch(function handleError(err) {
78
- logging.error(err);
79
- data.error = err.message;
60
+
61
+ try {
62
+ const response = await api.postsPublic.browse(apiOptions);
63
+
64
+ const related = response.posts[0];
65
+
66
+ if (related) {
67
+ return options.fn(related, {data: data});
68
+ } else {
80
69
  return options.inverse(self, {data: data});
81
- });
70
+ }
71
+ } catch (error) {
72
+ logging.error(error);
73
+ data.error = error.message;
74
+ return options.inverse(self, {data: data});
75
+ }
82
76
  };
83
77
 
84
78
  // If prevNext method is called without valid post data then we must return a promise, if there is valid post data
@@ -88,7 +82,7 @@ const fetch = function fetch(options, data) {
88
82
  * @param {*} options
89
83
  * @returns {Promise<any>}
90
84
  */
91
- module.exports = function prevNext(options) {
85
+ module.exports = async function prevNext(options) {
92
86
  options = options || {};
93
87
 
94
88
  const data = createFrame(options.data);
@@ -98,16 +92,16 @@ module.exports = function prevNext(options) {
98
92
  if (!options.fn || !options.inverse) {
99
93
  data.error = tpl(messages.mustBeCalledAsBlock, {helperName: options.name});
100
94
  logging.warn(data.error);
101
- return Promise.resolve();
95
+ return;
102
96
  }
103
97
 
104
98
  if (context.includes('preview')) {
105
- return Promise.resolve(options.inverse(this, {data: data}));
99
+ return options.inverse(this, {data: data});
106
100
  }
107
101
 
108
102
  // Guard against trying to execute prev/next on pages, or other resources
109
103
  if (!checks.isPost(this) || this.page) {
110
- return Promise.resolve(options.inverse(this, {data: data}));
104
+ return options.inverse(this, {data: data});
111
105
  }
112
106
 
113
107
  // With the guards out of the way, attempt to build the apiOptions, and then fetch the data
@@ -58,8 +58,8 @@ module.exports = function price(planOrAmount, options) {
58
58
  }
59
59
  options = options || {};
60
60
  options.hash = options.hash || {};
61
- // NOTE: potentially breaking place once site.lang is removed in favor of site.locale
62
- const {currency, numberFormat = 'short', currencyFormat = 'symbol', locale = _.get(options, 'data.site.lang', 'en')} = options.hash;
61
+
62
+ const {currency, numberFormat = 'short', currencyFormat = 'symbol', locale = _.get(options, 'data.site.locale', 'en')} = options.hash;
63
63
  if (plan) {
64
64
  return formatter({
65
65
  amount: plan.amount && (plan.amount / 100),
@@ -7,11 +7,11 @@ function getAuthorUrl(data, absolute) {
7
7
  const contextObject = getContextObject(data, context);
8
8
 
9
9
  if (data.author) {
10
- return urlService.getUrlByResourceId(data.author.id, {absolute: absolute, secure: data.author.secure, withSubdirectory: true});
10
+ return urlService.getUrlByResourceId(data.author.id, {absolute: absolute, withSubdirectory: true});
11
11
  }
12
12
 
13
13
  if (contextObject && contextObject.primary_author) {
14
- return urlService.getUrlByResourceId(contextObject.primary_author.id, {absolute: absolute, secure: contextObject.secure, withSubdirectory: true});
14
+ return urlService.getUrlByResourceId(contextObject.primary_author.id, {absolute: absolute, withSubdirectory: true});
15
15
  }
16
16
 
17
17
  return null;
@@ -47,7 +47,7 @@ function getDescription(data, root, options = {}) {
47
47
  description = data.post[`${options.property}_description`]
48
48
  || data.post.custom_excerpt
49
49
  || data.post.meta_description
50
- || generateExcerpt(data.post.html || '', {words: 50})
50
+ || generateExcerpt(data.post.excerpt || '', {words: 50})
51
51
  || settingsCache.get('description')
52
52
  || '';
53
53
  } else {
@@ -59,7 +59,7 @@ function getDescription(data, root, options = {}) {
59
59
  description = data.post[`${options.property}_description`]
60
60
  || data.post.custom_excerpt
61
61
  || data.post.meta_description
62
- || generateExcerpt(data.post.html || '', {words: 50})
62
+ || generateExcerpt(data.post.excerpt || '', {words: 50})
63
63
  || settingsCache.get('description')
64
64
  || '';
65
65
  } else {
@@ -70,7 +70,7 @@ function getDescription(data, root, options = {}) {
70
70
  description = data.page[`${options.property}_description`]
71
71
  || data.page.custom_excerpt
72
72
  || data.page.meta_description
73
- || generateExcerpt(data.page.html || '', {words: 50})
73
+ || generateExcerpt(data.page.excerpt || '', {words: 50})
74
74
  || settingsCache.get('description')
75
75
  || '';
76
76
  } else {
@@ -10,10 +10,9 @@ function getExcerpt(data) {
10
10
  // 1. CASE: custom_excerpt is populated via the UI
11
11
  // 2. CASE: no custom_excerpt, but meta_description is poplated via the UI
12
12
  // 3. CASE: fall back to automated excerpt of 50 words if neither custom_excerpt nor meta_description is provided
13
- // @TODO: https://github.com/TryGhost/Ghost/issues/10062
14
13
  const customExcerpt = data.post.excerpt || data.post.custom_excerpt;
15
14
  const metaDescription = data.post.meta_description;
16
- const fallbackExcerpt = data.post.html ? generateExcerpt(data.post.html, {words: 50}) : '';
15
+ const fallbackExcerpt = data.post.excerpt ? generateExcerpt(data.post.excerpt, {words: 50}) : '';
17
16
 
18
17
  return customExcerpt ? customExcerpt : metaDescription ? metaDescription : fallbackExcerpt;
19
18
  }
@@ -1,22 +1,13 @@
1
1
  const downsize = require('downsize');
2
2
 
3
- function generateExcerpt(html, truncateOptions) {
3
+ function generateExcerpt(excerpt, truncateOptions) {
4
4
  truncateOptions = truncateOptions || {};
5
- // Strip inline and bottom footnotes
6
- let excerpt = html.replace(/<a href="#fn.*?rel="footnote">.*?<\/a>/gi, '');
7
- excerpt = excerpt.replace(/<div class="footnotes"><ol>.*?<\/ol><\/div>/, '');
8
-
9
- // Make sure to have space between paragraphs and new lines
10
- excerpt = excerpt.replace(/(<\/p>|<br>)/gi, ' ');
11
-
12
- // Strip other html
13
- excerpt = excerpt.replace(/<\/?[^>]+>/gi, '');
14
- excerpt = excerpt.replace(/(\r\n|\n|\r)+/gm, ' ');
15
5
 
16
6
  if (!truncateOptions.words && !truncateOptions.characters) {
17
7
  truncateOptions.words = 50;
18
8
  }
19
9
 
10
+ // Just uses downsize to truncate, not format
20
11
  return downsize(excerpt, truncateOptions);
21
12
  }
22
13
 
@@ -35,7 +35,7 @@ function getPaginatedUrl(page, data, absolute) {
35
35
  // baseUrl can be undefined, if there was nothing preceding the pagePath (e.g. first page of the index channel)
36
36
  newRelativeUrl = baseUrl ? urlUtils.urlJoin(baseUrl, newRelativeUrl) : newRelativeUrl;
37
37
 
38
- return urlUtils.urlFor({relativeUrl: newRelativeUrl, secure: data.secure}, absolute);
38
+ return urlUtils.urlFor({relativeUrl: newRelativeUrl}, absolute);
39
39
  }
40
40
 
41
41
  module.exports = getPaginatedUrl;
@@ -2,7 +2,6 @@ const routingService = require('../services/routing');
2
2
 
3
3
  function getRssUrl(data, absolute) {
4
4
  return routingService.registry.getRssUrl({
5
- secure: data.secure,
6
5
  absolute: absolute
7
6
  });
8
7
  }
@@ -27,18 +27,18 @@ function getUrl(data, absolute) {
27
27
  * A long term solution should be part of the final version of Dynamic Routing.
28
28
  */
29
29
  if (data.status !== 'published' && urlService.getUrlByResourceId(data.id) === '/404/') {
30
- return urlUtils.urlFor({relativeUrl: urlUtils.urlJoin('/p', data.uuid, '/'), secure: data.secure}, null, absolute);
30
+ return urlUtils.urlFor({relativeUrl: urlUtils.urlJoin('/p', data.uuid, '/')}, null, absolute);
31
31
  }
32
32
 
33
- return urlService.getUrlByResourceId(data.id, {secure: data.secure, absolute: absolute, withSubdirectory: true});
33
+ return urlService.getUrlByResourceId(data.id, {absolute: absolute, withSubdirectory: true});
34
34
  }
35
35
 
36
36
  if (checks.isTag(data) || checks.isUser(data)) {
37
- return urlService.getUrlByResourceId(data.id, {secure: data.secure, absolute: absolute, withSubdirectory: true});
37
+ return urlService.getUrlByResourceId(data.id, {absolute: absolute, withSubdirectory: true});
38
38
  }
39
39
 
40
40
  if (checks.isNav(data)) {
41
- return urlUtils.urlFor('nav', {nav: data, secure: data.secure}, absolute);
41
+ return urlUtils.urlFor('nav', {nav: data}, absolute);
42
42
  }
43
43
 
44
44
  // sanitize any trailing `/amp` in the url
@@ -14,7 +14,7 @@ const routeMatch = require('path-match')();
14
14
  function entryLookup(postUrl, routerOptions, locals) {
15
15
  debug(postUrl);
16
16
 
17
- const api = require('../proxy').api[locals.apiVersion];
17
+ const api = require('../proxy').api;
18
18
  const targetPath = url.parse(postUrl).path;
19
19
  const permalinks = routerOptions.permalinks;
20
20
  let isEditURL = false;
@@ -45,7 +45,7 @@ defaultPostQuery.options = defaultQueryOptions.options;
45
45
  * @returns {Promise}
46
46
  */
47
47
  function processQuery(query, slugParam, locals) {
48
- const api = require('../proxy').api[locals.apiVersion];
48
+ const api = require('../proxy').api;
49
49
 
50
50
  query = _.cloneDeep(query);
51
51
 
@@ -1,4 +1,3 @@
1
- const Promise = require('bluebird');
2
1
  const errors = require('@tryghost/errors');
3
2
  const logging = require('@tryghost/logging');
4
3
 
@@ -6,31 +5,31 @@ const {hbs} = require('../handlebars');
6
5
 
7
6
  // Register an async handlebars helper for a given handlebars instance
8
7
  function asyncHelperWrapper(hbsInstance, name, fn) {
9
- hbsInstance.registerAsyncHelper(name, function returnAsync(context, options, cb) {
8
+ hbsInstance.registerAsyncHelper(name, async function returnAsync(context, options, cb) {
10
9
  // Handle the case where we only get context and cb
11
10
  if (!cb) {
12
11
  cb = options;
13
12
  options = undefined;
14
13
  }
15
14
 
16
- // Wrap the function passed in with a Promise.resolve so it can return either a promise or a value
17
- Promise.resolve(fn.call(this, context, options)).then(function asyncHelperSuccess(result) {
18
- cb(result);
19
- }).catch(function asyncHelperError(err) {
20
- const wrappedErr = errors.utils.isGhostError(err) ? err : new errors.IncorrectUsageError({
21
- err: err,
15
+ try {
16
+ const response = await fn.call(this, context, options);
17
+ cb(response);
18
+ } catch (error) {
19
+ const wrappedErr = errors.utils.isGhostError(error) ? error : new errors.IncorrectUsageError({
20
+ err: error,
22
21
  context: 'registerAsyncThemeHelper: ' + name,
23
22
  errorDetails: {
24
- originalError: err
23
+ originalError: error
25
24
  }
26
25
  });
27
26
 
28
- const result = process.env.NODE_ENV === 'development' ? wrappedErr : '';
27
+ const response = process.env.NODE_ENV === 'development' ? wrappedErr : '';
29
28
 
30
29
  logging.error(wrappedErr);
31
30
 
32
- cb(new hbsInstance.SafeString(result));
33
- });
31
+ cb(new hbsInstance.SafeString(response));
32
+ }
34
33
  });
35
34
  }
36
35
 
@@ -5,7 +5,13 @@ const config = require('../../shared/config');
5
5
  // Require from the handlebars framework
6
6
  const {SafeString} = require('./handlebars');
7
7
 
8
+ let _dataService = {};
9
+
8
10
  module.exports = {
11
+ getFrontendKey: () => {
12
+ return _dataService.getFrontendKey();
13
+ },
14
+
9
15
  /**
10
16
  * Section two: data manipulation
11
17
  * Stuff that modifies API data (SDK layer)
@@ -39,7 +45,7 @@ module.exports = {
39
45
  settingsCache: settingsCache,
40
46
 
41
47
  // TODO: Expose less of the API to make this safe
42
- api: require('../../server/api'),
48
+ api: require('../../server/api').endpoints,
43
49
 
44
50
  // Labs utils for enabling/disabling helpers
45
51
  labs: require('../../shared/labs'),
@@ -47,3 +53,7 @@ module.exports = {
47
53
  urlService: require('../../server/services/url'),
48
54
  urlUtils: require('../../shared/url-utils')
49
55
  };
56
+
57
+ module.exports.init = ({dataService}) => {
58
+ _dataService = dataService;
59
+ };
@@ -60,7 +60,7 @@ function setResponseContext(req, res, data) {
60
60
  // @TODO: remove first if condition when only page key is returned
61
61
  // ref.: https://github.com/TryGhost/Ghost/issues/10042
62
62
  // The first if is now used by the preview route
63
- if (data && data.post && data.post.page) {
63
+ if (data && data.page) {
64
64
  if (!res.locals.context.includes('page')) {
65
65
  res.locals.context.push('page');
66
66
  }
@@ -68,10 +68,6 @@ function setResponseContext(req, res, data) {
68
68
  if (!res.locals.context.includes('post')) {
69
69
  res.locals.context.push('post');
70
70
  }
71
- } else if (data && data.page) {
72
- if (!res.locals.context.includes('page')) {
73
- res.locals.context.push('page');
74
- }
75
71
  } else if (data && data.tag) {
76
72
  if (!res.locals.context.includes('tag')) {
77
73
  res.locals.context.push('tag');