ghost 4.48.0 → 5.0.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 (660) 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-08acba9994ea4f9478dfdca2a97b36f1.css +1 -0
  23. package/core/built/assets/{ghost.min-10ba0de3ecb93d63d62bb43ac11c740f.js → ghost.min-75bec566fbea362ed98811fe6d5b6e24.js} +1115 -1185
  24. package/core/built/assets/ghost.min-855c93486d789aa09dbe97f272672bf9.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-14ad7269e0529dd20f61d2989e69fa1e.js} +95 -90
  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 +102 -103
  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/format-response.js +9 -2
  57. package/core/frontend/services/rendering/index.js +0 -4
  58. package/core/frontend/services/rendering/render-entry.js +1 -1
  59. package/core/frontend/services/rendering/templates.js +15 -5
  60. package/core/frontend/services/routing/CollectionRouter.js +2 -2
  61. package/core/frontend/services/routing/EmailRouter.js +2 -2
  62. package/core/frontend/services/routing/ParentRouter.js +1 -1
  63. package/core/frontend/services/routing/PreviewRouter.js +3 -3
  64. package/core/frontend/services/routing/{config/v4.js → config.js} +3 -5
  65. package/core/frontend/services/routing/controllers/channel.js +0 -10
  66. package/core/frontend/services/routing/controllers/collection.js +0 -9
  67. package/core/frontend/services/routing/controllers/email-post.js +2 -7
  68. package/core/frontend/services/routing/controllers/entry.js +1 -3
  69. package/core/frontend/services/routing/controllers/index.js +2 -2
  70. package/core/frontend/services/routing/controllers/{preview.js → previews.js} +3 -8
  71. package/core/frontend/services/routing/controllers/static.js +1 -6
  72. package/core/frontend/services/routing/router-manager.js +38 -20
  73. package/core/frontend/services/rss/generate-feed.js +7 -9
  74. package/core/frontend/services/theme-engine/active.js +0 -8
  75. package/core/frontend/services/theme-engine/config/defaults.json +1 -3
  76. package/core/frontend/services/theme-engine/middleware/index.js +0 -1
  77. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +0 -69
  78. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +3 -6
  79. package/core/frontend/web/middleware/static-theme.js +14 -6
  80. package/core/frontend/web/routes.js +9 -9
  81. package/core/frontend/web/site.js +15 -18
  82. package/core/server/adapters/scheduling/post-scheduling/index.js +1 -1
  83. package/core/server/api/README.md +2 -6
  84. package/core/server/api/canary/authentication.js +4 -3
  85. package/core/server/api/canary/{email-preview.js → email-previews.js} +9 -8
  86. package/core/server/api/canary/index.js +14 -18
  87. package/core/server/api/canary/members.js +1 -13
  88. package/core/server/api/{v3/actions.js → canary/newsletters-public.js} +6 -6
  89. package/core/server/api/canary/newsletters.js +1 -13
  90. package/core/server/api/canary/notifications.js +17 -22
  91. package/core/server/api/canary/offers-public.js +28 -0
  92. package/core/server/api/canary/pages.js +1 -1
  93. package/core/server/api/canary/posts.js +4 -8
  94. package/core/server/api/canary/{preview.js → previews.js} +1 -1
  95. package/core/server/api/canary/schedules.js +1 -1
  96. package/core/server/api/canary/session.js +1 -1
  97. package/core/server/api/canary/settings-public.js +3 -1
  98. package/core/server/api/canary/settings.js +28 -16
  99. package/core/server/api/canary/utils/index.js +2 -4
  100. package/core/server/api/canary/utils/serializers/input/index.js +0 -4
  101. package/core/server/api/canary/utils/serializers/input/members.js +46 -17
  102. package/core/server/api/canary/utils/serializers/input/pages.js +0 -17
  103. package/core/server/api/canary/utils/serializers/input/posts.js +1 -28
  104. package/core/server/api/canary/utils/serializers/input/settings.js +61 -142
  105. package/core/server/api/canary/utils/serializers/input/tiers.js +39 -4
  106. package/core/server/api/canary/utils/serializers/output/authentication.js +2 -6
  107. package/core/server/api/canary/utils/serializers/output/index.js +2 -10
  108. package/core/server/api/canary/utils/serializers/output/mappers/index.js +1 -0
  109. package/core/server/api/canary/utils/serializers/output/mappers/newsletters.js +24 -0
  110. package/core/server/api/canary/utils/serializers/output/mappers/pages.js +1 -1
  111. package/core/server/api/canary/utils/serializers/output/mappers/posts.js +9 -7
  112. package/core/server/api/canary/utils/serializers/output/mappers/settings.js +5 -31
  113. package/core/server/api/canary/utils/serializers/output/members.js +18 -3
  114. package/core/server/api/canary/utils/serializers/output/offers.js +9 -1
  115. package/core/server/api/canary/utils/serializers/output/{preview.js → previews.js} +2 -2
  116. package/core/server/api/canary/utils/serializers/output/settings.js +6 -14
  117. package/core/server/api/canary/utils/serializers/output/site.js +0 -1
  118. package/core/server/api/canary/utils/serializers/output/tiers.js +21 -62
  119. package/core/server/api/canary/utils/serializers/output/utils/clean.js +5 -10
  120. package/core/server/api/canary/utils/serializers/output/utils/extra-attrs.js +0 -126
  121. package/core/server/api/canary/utils/serializers/output/utils/post-gating.js +1 -1
  122. package/core/server/api/canary/utils/serializers/output/utils/url.js +0 -5
  123. package/core/server/api/canary/utils/validators/input/index.js +2 -2
  124. package/core/server/api/canary/utils/validators/input/{passwordreset.js → password_reset.js} +2 -2
  125. package/core/server/api/canary/utils/validators/input/settings.js +2 -23
  126. package/core/server/api/canary/utils/validators/utils/json-schema.js +1 -2
  127. package/core/server/api/index.js +1 -7
  128. package/core/server/api/shared/serializers/input/utils/settings-key-group-mapper.js +2 -2
  129. package/core/server/api/shared/serializers/input/utils/settings-key-type-mapper.js +2 -4
  130. package/core/server/data/db/connection.js +0 -13
  131. package/core/server/data/exporter/table-lists.js +0 -3
  132. package/core/server/data/importer/importers/data/base.js +16 -7
  133. package/core/server/data/importer/importers/data/data-importer.js +38 -1
  134. package/core/server/data/importer/importers/data/newsletters.js +45 -0
  135. package/core/server/data/importer/importers/data/posts.js +40 -12
  136. package/core/server/data/importer/importers/data/products.js +68 -0
  137. package/core/server/data/importer/importers/data/settings.js +10 -10
  138. package/core/server/data/importer/importers/data/stripe-prices.js +59 -0
  139. package/core/server/data/importer/importers/data/stripe-products.js +61 -0
  140. package/core/server/data/migrations/utils/constants.js +3 -0
  141. package/core/server/data/migrations/utils/index.js +10 -0
  142. package/core/server/data/migrations/utils/migrations.js +156 -0
  143. package/core/server/data/migrations/utils/permissions.js +291 -0
  144. package/core/server/data/migrations/utils/schema.js +158 -0
  145. package/core/server/data/migrations/utils/settings.js +59 -0
  146. package/core/server/data/migrations/utils/tables.js +94 -0
  147. package/core/server/data/migrations/versions/1.25/01-final-v1.js +2 -0
  148. package/core/server/data/migrations/versions/1.25/02-noop.js +6 -0
  149. package/core/server/data/migrations/versions/2.37/01-final-v2.js +2 -0
  150. package/core/server/data/migrations/versions/3.41/01-final-v3.js +2 -0
  151. package/core/server/data/migrations/versions/4.0/22-solve-orphaned-webhooks.js +3 -9
  152. package/core/server/data/migrations/versions/4.0/23-regenerate-posts-html.js +2 -11
  153. package/core/server/data/migrations/versions/4.11/02-add-email-verification-required-setting.js +1 -1
  154. package/core/server/data/migrations/versions/4.12/02-fix-member-statuses.js +1 -1
  155. package/core/server/data/migrations/versions/4.14/02-fix-free-members-status-events.js +1 -1
  156. package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +1 -1
  157. package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +1 -1
  158. package/core/server/data/migrations/versions/4.35/2022-02-02-10-38-add-default-content-visibility-tiers-setting.js +1 -1
  159. package/core/server/data/migrations/versions/4.45/2022-04-21-02-55-add-notifications-key-entry-to-settings-table.js +1 -1
  160. package/core/server/data/migrations/versions/4.6/01-remove-comped-status.js +1 -1
  161. package/core/server/data/migrations/versions/4.7/03-add-labs-setting.js +1 -1
  162. package/core/server/data/migrations/versions/4.9/05-fix-missed-mobiledoc-url-transforms.js +1 -1
  163. package/core/server/data/migrations/versions/4.9/06-add-comped-status.js +1 -1
  164. package/core/server/data/migrations/versions/4.9/07-update-comped-members-status-events.js +1 -1
  165. package/core/server/data/migrations/versions/5.0/2022-03-14-12-33-delete-duplicate-offer-redemptions.js +36 -0
  166. package/core/server/data/migrations/versions/5.0/2022-03-28-15-25-backfill-mrr-adjustments-for-offers.js +108 -0
  167. package/core/server/data/migrations/versions/5.0/2022-04-25-10-32-backfill-mrr-for-discounted-subscriptions.js +44 -0
  168. package/core/server/data/migrations/versions/5.0/2022-04-26-15-44-backfill-mrr-events-for-canceled-subscriptions.js +73 -0
  169. package/core/server/data/migrations/versions/5.0/2022-04-27-11-26-backfill-mrr-for-canceled-subscriptions.js +31 -0
  170. package/core/server/data/migrations/versions/5.0/2022-04-28-03-26-remove-author-id-column-from-posts-table.js +7 -0
  171. package/core/server/data/migrations/versions/5.0/2022-05-03-09-39-drop-nullable-subscribe-event-newsletter-id.js +4 -0
  172. package/core/server/data/migrations/versions/5.0/2022-05-04-15-24-map-existing-emails-to-default-newsletter.js +44 -0
  173. package/core/server/data/migrations/versions/5.0/2022-05-05-13-13-migrate-legacy-recipient-filters.js +30 -0
  174. package/core/server/data/migrations/versions/5.0/2022-05-05-13-29-add-newsletters-admin-integration-permission-roles.js +20 -0
  175. package/core/server/data/migrations/versions/5.0/2022-05-05-15-17-drop-oauth-table.js +3 -0
  176. package/core/server/data/migrations/versions/5.0/2022-05-06-08-16-cleanup-client-subscriber-permissions.js +68 -0
  177. package/core/server/data/migrations/versions/5.0/2022-05-06-13-22-add-frontend-integration.js +68 -0
  178. package/core/server/data/migrations/versions/5.0/2022-05-09-10-00-drop-members-subscribed-column.js +18 -0
  179. package/core/server/data/migrations/versions/5.0/2022-05-09-14-17-cleanup-invalid-users-status.js +17 -0
  180. package/core/server/data/migrations/versions/5.0/2022-05-10-08-33-drop-members-analytics-table.js +3 -0
  181. package/core/server/data/migrations/versions/5.0/2022-05-10-14-57-cleanup-invalid-posts-status.js +17 -0
  182. package/core/server/data/migrations/versions/5.0/2022-05-11-12-08-drop-webhooks-status-column.js +18 -0
  183. package/core/server/data/migrations/versions/5.0/2022-05-11-13-12-rename-settings.js +51 -0
  184. package/core/server/data/migrations/versions/5.0/2022-05-11-16-36-remove-unused-settings.js +54 -0
  185. package/core/server/data/migrations/versions/5.0/2022-05-12-10-29-add-newsletter-permissions-for-editors-and-authors.js +20 -0
  186. package/core/server/data/migrations/versions/5.0/2022-05-12-13-51-add-label-permissions-for-authors.js +12 -0
  187. package/core/server/data/migrations/versions/5.0/2022-05-13-11-38-drop-none-email-recipient-filter.js +28 -0
  188. package/core/server/data/migrations/versions/5.0/2022-05-21-00-00-regenerate-posts-html.js +70 -0
  189. package/core/server/data/schema/commands.js +35 -3
  190. package/core/server/data/schema/default-settings/default-settings.json +2 -159
  191. package/core/server/data/schema/fixtures/fixture-manager.js +11 -2
  192. package/core/server/data/schema/fixtures/fixtures.json +16 -7
  193. package/core/server/data/schema/schema.js +26 -38
  194. package/core/server/data/schema/validator.js +2 -0
  195. package/core/server/ghost-server.js +34 -64
  196. package/core/server/lib/image/gravatar.js +25 -9
  197. package/core/server/models/api-key.js +3 -26
  198. package/core/server/models/base/plugins/bulk-operations.js +14 -6
  199. package/core/server/models/integration.js +17 -0
  200. package/core/server/models/member.js +8 -4
  201. package/core/server/models/newsletter.js +27 -0
  202. package/core/server/models/post.js +30 -32
  203. package/core/server/models/relations/authors.js +74 -100
  204. package/core/server/models/settings.js +6 -2
  205. package/core/server/models/webhook.js +2 -1
  206. package/core/server/run-update-check.js +1 -1
  207. package/core/server/services/api-version-compatibility/index.js +24 -18
  208. package/core/server/services/api-version-compatibility/legacy-api-path-match.js +23 -0
  209. package/core/server/services/api-version-compatibility/mw-version-rewrites.js +36 -0
  210. package/core/server/services/auth/api-key/admin.js +8 -7
  211. package/core/server/services/auth/passwordreset.js +3 -3
  212. package/core/server/services/auth/session/express-session.js +1 -1
  213. package/core/server/services/auth/session/index.js +1 -1
  214. package/core/server/services/auth/setup.js +8 -8
  215. package/core/server/services/bulk-email/bulk-email-processor.js +5 -1
  216. package/core/server/services/frontend-data-service/frontend-data-service.js +27 -0
  217. package/core/server/services/frontend-data-service/index.js +6 -0
  218. package/core/server/services/mail/index.js +14 -1
  219. package/core/server/services/mega/email-preview.js +14 -15
  220. package/core/server/services/mega/mega.js +37 -52
  221. package/core/server/services/mega/post-email-serializer.js +18 -28
  222. package/core/server/services/members/api.js +0 -3
  223. package/core/server/services/members/config.js +0 -49
  224. package/core/server/services/members/exporter/query.js +7 -7
  225. package/core/server/services/members/middleware.js +3 -135
  226. package/core/server/services/members/service.js +0 -27
  227. package/core/server/services/members/settings.js +3 -9
  228. package/core/server/services/newsletters/service.js +78 -10
  229. package/core/server/services/posts/post-scheduling-service.js +5 -17
  230. package/core/server/services/posts/posts-service.js +15 -62
  231. package/core/server/services/public-config/site.js +0 -6
  232. package/core/server/services/route-settings/index.js +0 -3
  233. package/core/server/services/route-settings/settings-loader.js +10 -34
  234. package/core/server/services/route-settings/validate.js +1 -7
  235. package/core/server/services/settings/index.js +1 -77
  236. package/core/server/services/settings/settings-service.js +184 -0
  237. package/core/server/services/themes/validate.js +1 -1
  238. package/core/server/services/url/Resources.js +1 -3
  239. package/core/server/services/url/UrlGenerator.js +1 -1
  240. package/core/server/services/url/UrlService.js +6 -20
  241. package/core/server/services/url/{configs/v2.js → config.js} +0 -0
  242. package/core/server/services/users.js +2 -2
  243. package/core/server/services/webhooks/listen.js +5 -2
  244. package/core/server/services/webhooks/serialize.js +6 -7
  245. package/core/server/services/webhooks/trigger.js +62 -47
  246. package/core/server/update-check.js +1 -1
  247. package/core/server/web/admin/app.js +1 -1
  248. package/core/server/web/admin/views/default-prod.html +4 -4
  249. package/core/server/web/admin/views/default.html +4 -4
  250. package/core/server/web/api/app.js +3 -15
  251. package/core/server/web/api/canary/admin/app.js +1 -1
  252. package/core/server/web/api/canary/admin/middleware.js +3 -1
  253. package/core/server/web/api/canary/admin/routes.js +7 -23
  254. package/core/server/web/api/canary/content/app.js +2 -3
  255. package/core/server/web/api/canary/content/routes.js +5 -4
  256. package/core/server/web/members/app.js +5 -4
  257. package/core/server/web/parent/backend.js +0 -1
  258. package/core/server/web/parent/frontend.js +5 -6
  259. package/core/server/web/parent/middleware/ghost-locals.js +0 -3
  260. package/core/shared/config/defaults.json +5 -2
  261. package/core/shared/config/overrides.json +1 -27
  262. package/core/shared/html-to-plaintext.js +74 -10
  263. package/core/shared/labs.js +4 -8
  264. package/core/shared/settings-cache/cache.js +38 -4
  265. package/core/shared/settings-cache/public.js +13 -7
  266. package/core/shared/url-utils.js +0 -2
  267. package/ghost.js +6 -0
  268. package/package.json +66 -64
  269. package/yarn.lock +751 -1295
  270. package/core/built/assets/ghost-dark-c94ae212747200ca4bafc37cfb0714d8.css +0 -1
  271. package/core/built/assets/ghost.min-4084931bc22e794fe3722139050a80b3.css +0 -1
  272. package/core/frontend/helpers/author.js +0 -41
  273. package/core/frontend/helpers/products.js +0 -65
  274. package/core/frontend/services/rendering/secure.js +0 -19
  275. package/core/frontend/services/routing/config/canary.js +0 -61
  276. package/core/frontend/services/routing/config/v2.js +0 -54
  277. package/core/frontend/services/routing/config/v3.js +0 -54
  278. package/core/frontend/services/theme-engine/engines/create.js +0 -45
  279. package/core/frontend/services/theme-engine/engines/index.js +0 -5
  280. package/core/frontend/services/theme-engine/middleware/update-local-template-data.js +0 -9
  281. package/core/server/api/canary/products-public.js +0 -34
  282. package/core/server/api/canary/products.js +0 -116
  283. package/core/server/api/canary/utils/serializers/input/products.js +0 -28
  284. package/core/server/api/canary/utils/serializers/output/email-previews.js +0 -7
  285. package/core/server/api/canary/utils/serializers/output/products.js +0 -213
  286. package/core/server/api/v2/actions.js +0 -38
  287. package/core/server/api/v2/authentication.js +0 -191
  288. package/core/server/api/v2/authors-public.js +0 -69
  289. package/core/server/api/v2/config.js +0 -12
  290. package/core/server/api/v2/db.js +0 -120
  291. package/core/server/api/v2/images.js +0 -20
  292. package/core/server/api/v2/index.js +0 -147
  293. package/core/server/api/v2/integrations.js +0 -144
  294. package/core/server/api/v2/invites.js +0 -126
  295. package/core/server/api/v2/mail.js +0 -66
  296. package/core/server/api/v2/notifications.js +0 -96
  297. package/core/server/api/v2/oembed.js +0 -186
  298. package/core/server/api/v2/pages-public.js +0 -78
  299. package/core/server/api/v2/pages.js +0 -197
  300. package/core/server/api/v2/posts-public.js +0 -78
  301. package/core/server/api/v2/posts.js +0 -192
  302. package/core/server/api/v2/preview.js +0 -46
  303. package/core/server/api/v2/redirects.js +0 -28
  304. package/core/server/api/v2/roles.js +0 -19
  305. package/core/server/api/v2/schedules.js +0 -77
  306. package/core/server/api/v2/session.js +0 -70
  307. package/core/server/api/v2/settings-public.js +0 -17
  308. package/core/server/api/v2/settings.js +0 -195
  309. package/core/server/api/v2/site.js +0 -14
  310. package/core/server/api/v2/slack.js +0 -12
  311. package/core/server/api/v2/slugs.js +0 -51
  312. package/core/server/api/v2/tags-public.js +0 -71
  313. package/core/server/api/v2/tags.js +0 -159
  314. package/core/server/api/v2/themes.js +0 -133
  315. package/core/server/api/v2/users.js +0 -179
  316. package/core/server/api/v2/utils/index.js +0 -34
  317. package/core/server/api/v2/utils/permissions.js +0 -112
  318. package/core/server/api/v2/utils/serializers/index.js +0 -9
  319. package/core/server/api/v2/utils/serializers/input/db.js +0 -20
  320. package/core/server/api/v2/utils/serializers/input/index.js +0 -33
  321. package/core/server/api/v2/utils/serializers/input/integrations.js +0 -33
  322. package/core/server/api/v2/utils/serializers/input/pages.js +0 -203
  323. package/core/server/api/v2/utils/serializers/input/posts.js +0 -218
  324. package/core/server/api/v2/utils/serializers/input/settings.js +0 -152
  325. package/core/server/api/v2/utils/serializers/input/tags.js +0 -35
  326. package/core/server/api/v2/utils/serializers/input/users.js +0 -26
  327. package/core/server/api/v2/utils/serializers/input/utils/url.js +0 -71
  328. package/core/server/api/v2/utils/serializers/input/webhooks.js +0 -12
  329. package/core/server/api/v2/utils/serializers/output/actions.js +0 -13
  330. package/core/server/api/v2/utils/serializers/output/all.js +0 -25
  331. package/core/server/api/v2/utils/serializers/output/authentication.js +0 -68
  332. package/core/server/api/v2/utils/serializers/output/authors.js +0 -21
  333. package/core/server/api/v2/utils/serializers/output/config.js +0 -21
  334. package/core/server/api/v2/utils/serializers/output/db.js +0 -40
  335. package/core/server/api/v2/utils/serializers/output/images.js +0 -19
  336. package/core/server/api/v2/utils/serializers/output/index.js +0 -107
  337. package/core/server/api/v2/utils/serializers/output/integrations.js +0 -35
  338. package/core/server/api/v2/utils/serializers/output/invites.js +0 -24
  339. package/core/server/api/v2/utils/serializers/output/mail.js +0 -19
  340. package/core/server/api/v2/utils/serializers/output/notifications.js +0 -29
  341. package/core/server/api/v2/utils/serializers/output/oembed.js +0 -8
  342. package/core/server/api/v2/utils/serializers/output/pages.js +0 -26
  343. package/core/server/api/v2/utils/serializers/output/posts.js +0 -26
  344. package/core/server/api/v2/utils/serializers/output/preview.js +0 -9
  345. package/core/server/api/v2/utils/serializers/output/redirects.js +0 -5
  346. package/core/server/api/v2/utils/serializers/output/roles.js +0 -29
  347. package/core/server/api/v2/utils/serializers/output/schedules.js +0 -5
  348. package/core/server/api/v2/utils/serializers/output/settings.js +0 -61
  349. package/core/server/api/v2/utils/serializers/output/site.js +0 -16
  350. package/core/server/api/v2/utils/serializers/output/slugs.js +0 -11
  351. package/core/server/api/v2/utils/serializers/output/tags.js +0 -25
  352. package/core/server/api/v2/utils/serializers/output/themes.js +0 -25
  353. package/core/server/api/v2/utils/serializers/output/users.js +0 -45
  354. package/core/server/api/v2/utils/serializers/output/utils/clean.js +0 -174
  355. package/core/server/api/v2/utils/serializers/output/utils/date.js +0 -21
  356. package/core/server/api/v2/utils/serializers/output/utils/extra-attrs.js +0 -161
  357. package/core/server/api/v2/utils/serializers/output/utils/mapper.js +0 -136
  358. package/core/server/api/v2/utils/serializers/output/utils/post-gating.js +0 -29
  359. package/core/server/api/v2/utils/serializers/output/utils/settings-type-group-mapper.js +0 -24
  360. package/core/server/api/v2/utils/serializers/output/utils/url.js +0 -67
  361. package/core/server/api/v2/utils/serializers/output/webhooks.js +0 -15
  362. package/core/server/api/v2/utils/validators/index.js +0 -9
  363. package/core/server/api/v2/utils/validators/input/images.js +0 -85
  364. package/core/server/api/v2/utils/validators/input/index.js +0 -45
  365. package/core/server/api/v2/utils/validators/input/invitations.js +0 -49
  366. package/core/server/api/v2/utils/validators/input/invites.js +0 -21
  367. package/core/server/api/v2/utils/validators/input/oembed.js +0 -17
  368. package/core/server/api/v2/utils/validators/input/pages.js +0 -46
  369. package/core/server/api/v2/utils/validators/input/passwordreset.js +0 -36
  370. package/core/server/api/v2/utils/validators/input/posts.js +0 -46
  371. package/core/server/api/v2/utils/validators/input/settings.js +0 -79
  372. package/core/server/api/v2/utils/validators/input/setup.js +0 -17
  373. package/core/server/api/v2/utils/validators/input/tags.js +0 -6
  374. package/core/server/api/v2/utils/validators/input/users.js +0 -21
  375. package/core/server/api/v2/utils/validators/output/index.js +0 -1
  376. package/core/server/api/v2/utils/validators/utils/json-schema.js +0 -17
  377. package/core/server/api/v2/webhooks.js +0 -163
  378. package/core/server/api/v3/authentication.js +0 -192
  379. package/core/server/api/v3/authors-public.js +0 -69
  380. package/core/server/api/v3/config.js +0 -12
  381. package/core/server/api/v3/db.js +0 -131
  382. package/core/server/api/v3/email-preview.js +0 -74
  383. package/core/server/api/v3/email.js +0 -65
  384. package/core/server/api/v3/identities.js +0 -36
  385. package/core/server/api/v3/images.js +0 -20
  386. package/core/server/api/v3/index.js +0 -179
  387. package/core/server/api/v3/integrations.js +0 -150
  388. package/core/server/api/v3/invites.js +0 -125
  389. package/core/server/api/v3/labels.js +0 -162
  390. package/core/server/api/v3/mail.js +0 -66
  391. package/core/server/api/v3/memberSigninUrls.js +0 -33
  392. package/core/server/api/v3/members.js +0 -412
  393. package/core/server/api/v3/membersStripeConnect.js +0 -29
  394. package/core/server/api/v3/notifications.js +0 -96
  395. package/core/server/api/v3/oembed.js +0 -23
  396. package/core/server/api/v3/pages-public.js +0 -77
  397. package/core/server/api/v3/pages.js +0 -199
  398. package/core/server/api/v3/posts-public.js +0 -76
  399. package/core/server/api/v3/posts.js +0 -200
  400. package/core/server/api/v3/preview.js +0 -44
  401. package/core/server/api/v3/redirects.js +0 -47
  402. package/core/server/api/v3/roles.js +0 -19
  403. package/core/server/api/v3/schedules.js +0 -77
  404. package/core/server/api/v3/session.js +0 -70
  405. package/core/server/api/v3/settings-public.js +0 -17
  406. package/core/server/api/v3/settings.js +0 -224
  407. package/core/server/api/v3/site.js +0 -14
  408. package/core/server/api/v3/slack.js +0 -12
  409. package/core/server/api/v3/slugs.js +0 -48
  410. package/core/server/api/v3/snippets.js +0 -115
  411. package/core/server/api/v3/tags-public.js +0 -71
  412. package/core/server/api/v3/tags.js +0 -159
  413. package/core/server/api/v3/themes.js +0 -131
  414. package/core/server/api/v3/users.js +0 -242
  415. package/core/server/api/v3/utils/index.js +0 -34
  416. package/core/server/api/v3/utils/permissions.js +0 -116
  417. package/core/server/api/v3/utils/serializers/index.js +0 -9
  418. package/core/server/api/v3/utils/serializers/input/authors.js +0 -31
  419. package/core/server/api/v3/utils/serializers/input/db.js +0 -20
  420. package/core/server/api/v3/utils/serializers/input/index.js +0 -41
  421. package/core/server/api/v3/utils/serializers/input/integrations.js +0 -33
  422. package/core/server/api/v3/utils/serializers/input/members.js +0 -62
  423. package/core/server/api/v3/utils/serializers/input/pages.js +0 -208
  424. package/core/server/api/v3/utils/serializers/input/posts.js +0 -242
  425. package/core/server/api/v3/utils/serializers/input/settings.js +0 -168
  426. package/core/server/api/v3/utils/serializers/input/tags.js +0 -42
  427. package/core/server/api/v3/utils/serializers/input/users.js +0 -26
  428. package/core/server/api/v3/utils/serializers/input/utils/slug-filter-order.js +0 -18
  429. package/core/server/api/v3/utils/serializers/input/utils/url.js +0 -71
  430. package/core/server/api/v3/utils/serializers/input/webhooks.js +0 -12
  431. package/core/server/api/v3/utils/serializers/output/actions.js +0 -13
  432. package/core/server/api/v3/utils/serializers/output/all.js +0 -25
  433. package/core/server/api/v3/utils/serializers/output/authentication.js +0 -69
  434. package/core/server/api/v3/utils/serializers/output/authors.js +0 -21
  435. package/core/server/api/v3/utils/serializers/output/config.js +0 -25
  436. package/core/server/api/v3/utils/serializers/output/db.js +0 -40
  437. package/core/server/api/v3/utils/serializers/output/email-preview.js +0 -7
  438. package/core/server/api/v3/utils/serializers/output/emails.js +0 -13
  439. package/core/server/api/v3/utils/serializers/output/identities.js +0 -7
  440. package/core/server/api/v3/utils/serializers/output/images.js +0 -19
  441. package/core/server/api/v3/utils/serializers/output/index.js +0 -135
  442. package/core/server/api/v3/utils/serializers/output/integrations.js +0 -35
  443. package/core/server/api/v3/utils/serializers/output/invites.js +0 -24
  444. package/core/server/api/v3/utils/serializers/output/labels.js +0 -25
  445. package/core/server/api/v3/utils/serializers/output/mail.js +0 -19
  446. package/core/server/api/v3/utils/serializers/output/member-signin_urls.js +0 -7
  447. package/core/server/api/v3/utils/serializers/output/members.js +0 -228
  448. package/core/server/api/v3/utils/serializers/output/notifications.js +0 -29
  449. package/core/server/api/v3/utils/serializers/output/oembed.js +0 -8
  450. package/core/server/api/v3/utils/serializers/output/pages.js +0 -26
  451. package/core/server/api/v3/utils/serializers/output/posts.js +0 -26
  452. package/core/server/api/v3/utils/serializers/output/preview.js +0 -10
  453. package/core/server/api/v3/utils/serializers/output/redirects.js +0 -5
  454. package/core/server/api/v3/utils/serializers/output/roles.js +0 -29
  455. package/core/server/api/v3/utils/serializers/output/schedules.js +0 -5
  456. package/core/server/api/v3/utils/serializers/output/settings.js +0 -65
  457. package/core/server/api/v3/utils/serializers/output/site.js +0 -19
  458. package/core/server/api/v3/utils/serializers/output/slugs.js +0 -11
  459. package/core/server/api/v3/utils/serializers/output/snippets.js +0 -97
  460. package/core/server/api/v3/utils/serializers/output/tags.js +0 -25
  461. package/core/server/api/v3/utils/serializers/output/themes.js +0 -25
  462. package/core/server/api/v3/utils/serializers/output/users.js +0 -74
  463. package/core/server/api/v3/utils/serializers/output/utils/clean.js +0 -166
  464. package/core/server/api/v3/utils/serializers/output/utils/date.js +0 -21
  465. package/core/server/api/v3/utils/serializers/output/utils/extra-attrs.js +0 -174
  466. package/core/server/api/v3/utils/serializers/output/utils/mapper.js +0 -197
  467. package/core/server/api/v3/utils/serializers/output/utils/post-gating.js +0 -39
  468. package/core/server/api/v3/utils/serializers/output/utils/settings-type-group-mapper.js +0 -24
  469. package/core/server/api/v3/utils/serializers/output/utils/url.js +0 -67
  470. package/core/server/api/v3/utils/serializers/output/webhooks.js +0 -15
  471. package/core/server/api/v3/utils/validators/index.js +0 -9
  472. package/core/server/api/v3/utils/validators/input/images.js +0 -85
  473. package/core/server/api/v3/utils/validators/input/index.js +0 -61
  474. package/core/server/api/v3/utils/validators/input/invitations.js +0 -49
  475. package/core/server/api/v3/utils/validators/input/invites.js +0 -21
  476. package/core/server/api/v3/utils/validators/input/labels.js +0 -6
  477. package/core/server/api/v3/utils/validators/input/members.js +0 -6
  478. package/core/server/api/v3/utils/validators/input/oembed.js +0 -17
  479. package/core/server/api/v3/utils/validators/input/pages.js +0 -46
  480. package/core/server/api/v3/utils/validators/input/passwordreset.js +0 -36
  481. package/core/server/api/v3/utils/validators/input/posts.js +0 -46
  482. package/core/server/api/v3/utils/validators/input/settings.js +0 -89
  483. package/core/server/api/v3/utils/validators/input/setup.js +0 -17
  484. package/core/server/api/v3/utils/validators/input/snippets.js +0 -6
  485. package/core/server/api/v3/utils/validators/input/tags.js +0 -6
  486. package/core/server/api/v3/utils/validators/input/users.js +0 -22
  487. package/core/server/api/v3/utils/validators/input/webhooks.js +0 -27
  488. package/core/server/api/v3/utils/validators/output/index.js +0 -1
  489. package/core/server/api/v3/utils/validators/utils/json-schema.js +0 -17
  490. package/core/server/api/v3/webhooks.js +0 -130
  491. package/core/server/data/migrations/utils.js +0 -571
  492. package/core/server/data/migrations/versions/1.13/1-custom-template-post.js +0 -7
  493. package/core/server/data/migrations/versions/1.13/2-theme-permissions.js +0 -58
  494. package/core/server/data/migrations/versions/1.18/1-add-webhooks-table.js +0 -2
  495. package/core/server/data/migrations/versions/1.19/1-webhook-permissions.js +0 -31
  496. package/core/server/data/migrations/versions/1.20/1-remove-settings-keys.js +0 -65
  497. package/core/server/data/migrations/versions/1.21/1-add-contributor-role.js +0 -58
  498. package/core/server/data/migrations/versions/1.22/1-multiple-authors-DDL.js +0 -2
  499. package/core/server/data/migrations/versions/1.22/1-multiple-authors-DML.js +0 -63
  500. package/core/server/data/migrations/versions/1.25/1-update-koenig-beta-html.js +0 -70
  501. package/core/server/data/migrations/versions/1.25/2-demo-post.js +0 -55
  502. package/core/server/data/migrations/versions/1.3/1-post-excerpt.js +0 -7
  503. package/core/server/data/migrations/versions/1.4/1-codeinjection-post.js +0 -14
  504. package/core/server/data/migrations/versions/1.5/1-og-twitter-post.js +0 -34
  505. package/core/server/data/migrations/versions/1.7/1-add-backup-client.js +0 -10
  506. package/core/server/data/migrations/versions/1.9/1-add-permissions-redirect.js +0 -23
  507. package/core/server/data/migrations/versions/2.0/1-rename-amp-column.js +0 -44
  508. package/core/server/data/migrations/versions/2.0/2-update-posts.js +0 -7
  509. package/core/server/data/migrations/versions/2.0/3-remove-koenig-labs.js +0 -42
  510. package/core/server/data/migrations/versions/2.0/4-permalink-setting.js +0 -85
  511. package/core/server/data/migrations/versions/2.0/5-remove-demo-post.js +0 -85
  512. package/core/server/data/migrations/versions/2.0/6-replace-fixture-posts.js +0 -10
  513. package/core/server/data/migrations/versions/2.13/1-remove-empty-strings.js +0 -5
  514. package/core/server/data/migrations/versions/2.14/1-add-actions-table.js +0 -2
  515. package/core/server/data/migrations/versions/2.14/2-add-actions-permissions.js +0 -12
  516. package/core/server/data/migrations/versions/2.15/1-add-type-column-to-integrations.js +0 -8
  517. package/core/server/data/migrations/versions/2.15/2-insert-zapier-integration.js +0 -69
  518. package/core/server/data/migrations/versions/2.16/1-add-members-perrmissions.js +0 -1
  519. package/core/server/data/migrations/versions/2.17/1-normalize-settings.js +0 -74
  520. package/core/server/data/migrations/versions/2.17/2-posts-add-canonical-url.js +0 -7
  521. package/core/server/data/migrations/versions/2.18/1-restore-settings-from-backup.js +0 -134
  522. package/core/server/data/migrations/versions/2.2/1-add-sessions-table.js +0 -2
  523. package/core/server/data/migrations/versions/2.2/2-add-integrations-and-api-key-tables.js +0 -6
  524. package/core/server/data/migrations/versions/2.2/3-insert-admin-integration-role.js +0 -83
  525. package/core/server/data/migrations/versions/2.2/4-insert-integration-and-api-key-permissions.js +0 -77
  526. package/core/server/data/migrations/versions/2.2/5-add-mobiledoc-revisions-table.js +0 -2
  527. package/core/server/data/migrations/versions/2.21/1-update-editor-permissions.js +0 -28
  528. package/core/server/data/migrations/versions/2.22/1-add-member-permissions-to-roles.js +0 -47
  529. package/core/server/data/migrations/versions/2.27/1-insert-ghost-db-backup-role.js +0 -83
  530. package/core/server/data/migrations/versions/2.27/2-insert-db-backup-integration.js +0 -69
  531. package/core/server/data/migrations/versions/2.27/3-add-subdirectory-to-relative-canonical-urls.js +0 -100
  532. package/core/server/data/migrations/versions/2.28/1-add-db-backup-content-permission.js +0 -9
  533. package/core/server/data/migrations/versions/2.28/2-add-db-backup-content-permission-to-roles.js +0 -15
  534. package/core/server/data/migrations/versions/2.28/3-insert-ghost-scheduler-role.js +0 -84
  535. package/core/server/data/migrations/versions/2.28/4-insert-scheduler-integration.js +0 -69
  536. package/core/server/data/migrations/versions/2.28/5-add-scheduler-permission-to-roles.js +0 -23
  537. package/core/server/data/migrations/versions/2.28/6-add-type-column.js +0 -6
  538. package/core/server/data/migrations/versions/2.28/7-populate-type-column.js +0 -6
  539. package/core/server/data/migrations/versions/2.28/8-remove-page-column.js +0 -6
  540. package/core/server/data/migrations/versions/2.29/1-add-post-page-column.js +0 -20
  541. package/core/server/data/migrations/versions/2.29/2-populate-post-page-column.js +0 -98
  542. package/core/server/data/migrations/versions/2.29/3-remove-page-type-column.js +0 -15
  543. package/core/server/data/migrations/versions/2.3/1-add-webhook-columns.js +0 -45
  544. package/core/server/data/migrations/versions/2.3/2-add-webhook-edit-permission.js +0 -9
  545. package/core/server/data/migrations/versions/2.31/1-remove-name-and-password-from-members-table.js +0 -15
  546. package/core/server/data/migrations/versions/2.32/01-add-members-stripe-customers-table.js +0 -4
  547. package/core/server/data/migrations/versions/2.32/02-add-name-to-members-table.js +0 -7
  548. package/core/server/data/migrations/versions/2.33/01-correct-members-stripe-customers-table.js +0 -37
  549. package/core/server/data/migrations/versions/2.34/01-add-stripe-customers-subscriptions-table.js +0 -2
  550. package/core/server/data/migrations/versions/2.34/02-add-email-to-members-stripe-customers-table.js +0 -7
  551. package/core/server/data/migrations/versions/2.34/03-add-name-to-members-stripe-customers-table.js +0 -7
  552. package/core/server/data/migrations/versions/2.35/01-add-note-to-members-table.js +0 -7
  553. package/core/server/data/migrations/versions/2.37/01-add-self-signup-and-from address-to-members-settings.js +0 -67
  554. package/core/server/data/migrations/versions/2.6/1-add-webhook-permission-roles.js +0 -31
  555. package/core/server/data/migrations/versions/2.8/1-add-members-table.js +0 -2
  556. package/core/server/data/migrations/versions/3.0/01-remove-user-ghost-auth-columns.js +0 -14
  557. package/core/server/data/migrations/versions/3.0/02-drop-token-auth-tables.js +0 -31
  558. package/core/server/data/migrations/versions/3.0/03-drop-client-auth-tables.js +0 -35
  559. package/core/server/data/migrations/versions/3.0/04-add-posts-meta-table.js +0 -2
  560. package/core/server/data/migrations/versions/3.0/05-populate-posts-meta-table.js +0 -83
  561. package/core/server/data/migrations/versions/3.0/06-remove-posts-meta-columns.js +0 -44
  562. package/core/server/data/migrations/versions/3.0/07-add-posts-type-column.js +0 -8
  563. package/core/server/data/migrations/versions/3.0/08-populate-posts-type-column.js +0 -94
  564. package/core/server/data/migrations/versions/3.0/09-remove-posts-page-column.js +0 -7
  565. package/core/server/data/migrations/versions/3.0/10-remove-empty-strings.js +0 -81
  566. package/core/server/data/migrations/versions/3.0/11-update-posts-html.js +0 -7
  567. package/core/server/data/migrations/versions/3.0/12-populate-members-table-from-subscribers.js +0 -54
  568. package/core/server/data/migrations/versions/3.0/13-drop-subscribers-table.js +0 -34
  569. package/core/server/data/migrations/versions/3.0/14-remove-subscribers-flag.js +0 -24
  570. package/core/server/data/migrations/versions/3.1/01-add-send-email-when-published-to-posts.js +0 -7
  571. package/core/server/data/migrations/versions/3.1/02-add-email-subject-to-posts-meta.js +0 -7
  572. package/core/server/data/migrations/versions/3.1/03-add-email-preview-permissions.js +0 -18
  573. package/core/server/data/migrations/versions/3.1/04-add-subscribed-flag-to-members.js +0 -7
  574. package/core/server/data/migrations/versions/3.1/05-add-emails-table.js +0 -2
  575. package/core/server/data/migrations/versions/3.1/06-add-email-permissions.js +0 -15
  576. package/core/server/data/migrations/versions/3.1/07-add-uuid-field-to-members.js +0 -8
  577. package/core/server/data/migrations/versions/3.1/08-add-uuid-values-to-members.js +0 -23
  578. package/core/server/data/migrations/versions/3.1/09-add-further-email-permissions.js +0 -25
  579. package/core/server/data/migrations/versions/3.1/10-add-email-error-data-column.js +0 -8
  580. package/core/server/data/migrations/versions/3.11/01-remove-broken-complimentary-plan-from-members-settings.js +0 -68
  581. package/core/server/data/migrations/versions/3.12/01-add-identity-permission.js +0 -7
  582. package/core/server/data/migrations/versions/3.12/02-remove-legacy-is-paid-flag-from-settings.js +0 -93
  583. package/core/server/data/migrations/versions/3.18/01-add-email-preview-permissions-to-roles.js +0 -39
  584. package/core/server/data/migrations/versions/3.18/02-add-members_stripe_connect-auth-permissions.js +0 -7
  585. package/core/server/data/migrations/versions/3.19/01-update-member-from-email-address.js +0 -91
  586. package/core/server/data/migrations/versions/3.2/01-add-cancel-at-period-end-to-subscriptions.js +0 -7
  587. package/core/server/data/migrations/versions/3.22/01-removed-legacy-values-from-settings-table.js +0 -65
  588. package/core/server/data/migrations/versions/3.22/02-settings-key-renames.js +0 -90
  589. package/core/server/data/migrations/versions/3.22/03-add-group-and-flags-to-settings.js +0 -15
  590. package/core/server/data/migrations/versions/3.22/04-populate-settings-groups-and-flags.js +0 -194
  591. package/core/server/data/migrations/versions/3.22/05-migrate-members-subscription-settings.js +0 -182
  592. package/core/server/data/migrations/versions/3.22/06-migrate-stripe-connect-settings.js +0 -132
  593. package/core/server/data/migrations/versions/3.22/07-update-type-for-settings.js +0 -137
  594. package/core/server/data/migrations/versions/3.23/01-migrate-bulk-email-settings.js +0 -65
  595. package/core/server/data/migrations/versions/3.23/02-remove-bulk-email-settings.js +0 -48
  596. package/core/server/data/migrations/versions/3.23/03-update-portal-button-setting.js +0 -24
  597. package/core/server/data/migrations/versions/3.23/04-add-meta-columns-to-tags-table.js +0 -54
  598. package/core/server/data/migrations/versions/3.24/01-populate-group-for-new-portal-settings.js +0 -38
  599. package/core/server/data/migrations/versions/3.25/01-add-members-stripe-webhook-settings.js +0 -22
  600. package/core/server/data/migrations/versions/3.26/01-add-amp-gtag-id-setting.js +0 -20
  601. package/core/server/data/migrations/versions/3.29/01-remove-duplicate-subscriptions.js +0 -53
  602. package/core/server/data/migrations/versions/3.29/02-remove-duplicate-customers.js +0 -53
  603. package/core/server/data/migrations/versions/3.29/03-remove-orphaned-customers.js +0 -35
  604. package/core/server/data/migrations/versions/3.29/04-remove-orphaned-subscriptions.js +0 -35
  605. package/core/server/data/migrations/versions/3.29/05-add-member-constraints.js +0 -177
  606. package/core/server/data/migrations/versions/3.30/01-add-member-signin-url-permission-roles.js +0 -8
  607. package/core/server/data/migrations/versions/3.32/01-add-member-support-address-setting.js +0 -27
  608. package/core/server/data/migrations/versions/3.32/02-add-member-reply-address-setting.js +0 -20
  609. package/core/server/data/migrations/versions/3.32/03-add-routes-hash-setting.js +0 -20
  610. package/core/server/data/migrations/versions/3.33/01-add-email-recipients-tables.js +0 -8
  611. package/core/server/data/migrations/versions/3.34/01-add-tokens-table.js +0 -2
  612. package/core/server/data/migrations/versions/3.35/01-add-address-columns-to-emails-table.js +0 -14
  613. package/core/server/data/migrations/versions/3.36/01-add-snippets-table.js +0 -2
  614. package/core/server/data/migrations/versions/3.36/02-add-snippets-permissions.js +0 -56
  615. package/core/server/data/migrations/versions/3.37/01-update-portal-button-setting.js +0 -30
  616. package/core/server/data/migrations/versions/3.38/01-add-email-recipient-filter-column.js +0 -8
  617. package/core/server/data/migrations/versions/3.38/02-populate-email-recipient-filter-column.js +0 -34
  618. package/core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js +0 -8
  619. package/core/server/data/migrations/versions/3.38/04-populate-recipient-filter-column.js +0 -49
  620. package/core/server/data/migrations/versions/3.38/05-add-emails-track-opens-column.js +0 -7
  621. package/core/server/data/migrations/versions/3.38/06-add-newsletter-settings.js +0 -16
  622. package/core/server/data/migrations/versions/3.38/07-migrate-newsletter-settings-from-config.js +0 -48
  623. package/core/server/data/migrations/versions/3.38/08-repopulate-send-email-when-published-down-migration.js +0 -25
  624. package/core/server/data/migrations/versions/3.38/09-remove-send-email-when-published-column.js +0 -7
  625. package/core/server/data/migrations/versions/3.39/01-add-members-signup-redirect-settings.js +0 -16
  626. package/core/server/data/migrations/versions/3.39/02-add-user-id-to-api-keys-table.js +0 -7
  627. package/core/server/data/migrations/versions/3.39/03-add-email-track-opens-setting.js +0 -16
  628. package/core/server/data/migrations/versions/3.39/04-add-cancellation-reason-column.js +0 -7
  629. package/core/server/data/migrations/versions/3.39/05-remove-unused-columns-on-emails.js +0 -14
  630. package/core/server/data/migrations/versions/3.39/06-add-email-recipient-index.js +0 -58
  631. package/core/server/data/migrations/versions/3.39/07-add-email-recipients-event-timestamps.js +0 -19
  632. package/core/server/data/migrations/versions/3.39/08-add-email-stats-columns.js +0 -22
  633. package/core/server/data/migrations/versions/3.40/01-add-members-email-open-rate-column.js +0 -8
  634. package/core/server/data/migrations/versions/3.40/02-add members-email-aggregation-columns.js +0 -16
  635. package/core/server/data/migrations/versions/3.40/03-populate-members-email-counts.js +0 -15
  636. package/core/server/data/migrations/versions/3.41/01-add-firstpromoter-settings.js +0 -16
  637. package/core/server/data/migrations/versions/3.6/1-add-labels-table.js +0 -2
  638. package/core/server/data/migrations/versions/3.6/2-add-members-labels-table.js +0 -2
  639. package/core/server/data/migrations/versions/3.6/3-add-labels-permissions.js +0 -47
  640. package/core/server/data/migrations/versions/3.7/01-fix-incorrect-member-labels-foreign-keys.js +0 -46
  641. package/core/server/data/migrations/versions/3.8/01-add-geolocation-to-members.js +0 -7
  642. package/core/server/data/migrations/versions/3.9/01-add-member-sigin-url-permissions.js +0 -7
  643. package/core/server/services/mail/utils.js +0 -34
  644. package/core/server/services/url/configs/canary.js +0 -143
  645. package/core/server/services/url/configs/v3.js +0 -141
  646. package/core/server/services/url/configs/v4.js +0 -143
  647. package/core/server/web/api/v2/admin/app.js +0 -43
  648. package/core/server/web/api/v2/admin/middleware.js +0 -85
  649. package/core/server/web/api/v2/admin/routes.js +0 -200
  650. package/core/server/web/api/v2/content/app.js +0 -38
  651. package/core/server/web/api/v2/content/middleware.js +0 -23
  652. package/core/server/web/api/v2/content/routes.js +0 -37
  653. package/core/server/web/api/v3/admin/app.js +0 -43
  654. package/core/server/web/api/v3/admin/middleware.js +0 -89
  655. package/core/server/web/api/v3/admin/routes.js +0 -267
  656. package/core/server/web/api/v3/content/app.js +0 -38
  657. package/core/server/web/api/v3/content/middleware.js +0 -23
  658. package/core/server/web/api/v3/content/routes.js +0 -37
  659. package/core/server/web/oauth/app.js +0 -153
  660. 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,7 +43,7 @@ function finaliseStructuredData(meta) {
43
43
  return head;
44
44
  }
45
45
 
46
- function getMembersHelper(data) {
46
+ function getMembersHelper(data, frontendKey) {
47
47
  if (settingsCache.get('members_signup_access') === 'none') {
48
48
  return '';
49
49
  }
@@ -52,8 +52,7 @@ function getMembersHelper(data) {
52
52
  const stripeDirectPublishableKey = settingsCache.get('stripe_publishable_key');
53
53
  const stripeConnectAccountId = settingsCache.get('stripe_connect_account_id');
54
54
  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>`;
55
+ 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
56
  membersHelper += (`<style id="gh-members-styles">${templateStyles}</style>`);
58
57
  if ((!!stripeDirectSecretKey && !!stripeDirectPublishableKey) || !!stripeConnectAccountId) {
59
58
  membersHelper += '<script async src="https://js.stripe.com/v3/"></script>';
@@ -96,7 +95,7 @@ function getMembersHelper(data) {
96
95
  * Also see how the root object gets created, https://github.com/wycats/handlebars.js/blob/v4.0.6/lib/handlebars/runtime.js#L259
97
96
  */
98
97
  // We use the name ghost_head to match the helper for consistency:
99
- module.exports = function ghost_head(options) { // eslint-disable-line camelcase
98
+ module.exports = async function ghost_head(options) { // eslint-disable-line camelcase
100
99
  debug('begin');
101
100
 
102
101
  // if server error page do nothing
@@ -118,128 +117,128 @@ module.exports = function ghost_head(options) { // eslint-disable-line camelcase
118
117
 
119
118
  debug('preparation complete, begin fetch');
120
119
 
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
- }
120
+ try {
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
+ const meta = await getMetaData(dataRoot, dataRoot);
131
+ const frontendKey = await getFrontendKey();
132
+
133
+ debug('end fetch');
134
+
135
+ if (context) {
136
+ // head is our main array that holds our meta data
137
+ if (meta.metaDescription && meta.metaDescription.length > 0) {
138
+ head.push('<meta name="description" content="' + escapeExpression(meta.metaDescription) + '" />');
139
+ }
139
140
 
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
- }
141
+ // no output in head if a publication icon is not set
142
+ if (settingsCache.get('icon')) {
143
+ head.push('<link rel="icon" href="' + favicon + '" type="image/' + iconType + '" />');
144
+ }
144
145
 
145
- head.push('<link rel="canonical" href="' +
146
- escapeExpression(meta.canonicalUrl) + '" />');
147
- head.push('<meta name="referrer" content="' + referrerPolicy + '" />');
146
+ head.push('<link rel="canonical" href="' + escapeExpression(meta.canonicalUrl) + '" />');
147
+ head.push('<meta name="referrer" content="' + referrerPolicy + '" />');
148
148
 
149
- // don't allow indexing of preview URLs!
150
- if (_.includes(context, 'preview')) {
151
- head.push(writeMetaTag('robots', 'noindex,nofollow', 'name'));
152
- }
149
+ // don't allow indexing of preview URLs!
150
+ if (_.includes(context, 'preview')) {
151
+ head.push(writeMetaTag('robots', 'noindex,nofollow', 'name'));
152
+ }
153
153
 
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
- }
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
+ }
159
159
 
160
- if (meta.previousUrl) {
161
- head.push('<link rel="prev" href="' +
162
- escapeExpression(meta.previousUrl) + '" />');
163
- }
160
+ if (meta.previousUrl) {
161
+ head.push('<link rel="prev" href="' +
162
+ escapeExpression(meta.previousUrl) + '" />');
163
+ }
164
164
 
165
- if (meta.nextUrl) {
166
- head.push('<link rel="next" href="' +
167
- escapeExpression(meta.nextUrl) + '" />');
168
- }
165
+ if (meta.nextUrl) {
166
+ head.push('<link rel="next" href="' +
167
+ escapeExpression(meta.nextUrl) + '" />');
168
+ }
169
169
 
170
- if (!_.includes(context, 'paged') && useStructuredData) {
171
- head.push('');
172
- head.push.apply(head, finaliseStructuredData(meta));
173
- head.push('');
170
+ if (!_.includes(context, 'paged') && useStructuredData) {
171
+ head.push('');
172
+ head.push.apply(head, finaliseStructuredData(meta));
173
+ head.push('');
174
174
 
175
- if (meta.schema) {
176
- head.push('<script type="application/ld+json">\n' +
177
- JSON.stringify(meta.schema, null, ' ') +
178
- '\n </script>\n');
179
- }
175
+ if (meta.schema) {
176
+ head.push('<script type="application/ld+json">\n' +
177
+ JSON.stringify(meta.schema, null, ' ') +
178
+ '\n </script>\n');
180
179
  }
181
180
  }
181
+ }
182
182
 
183
- head.push('<meta name="generator" content="Ghost ' +
184
- escapeExpression(safeVersion) + '" />');
183
+ head.push('<meta name="generator" content="Ghost ' +
184
+ escapeExpression(safeVersion) + '" />');
185
185
 
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
- }
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
+ }
191
191
 
192
- head.push('<link rel="alternate" type="application/rss+xml" title="' +
193
- escapeExpression(meta.site.title) + '" href="' +
194
- escapeExpression(meta.rssUrl) + '" />');
192
+ head.push('<link rel="alternate" type="application/rss+xml" title="' +
193
+ escapeExpression(meta.site.title) + '" href="' +
194
+ escapeExpression(meta.rssUrl) + '" />');
195
195
 
196
- // no code injection for amp context!!!
197
- if (!_.includes(context, 'amp')) {
198
- head.push(getMembersHelper(options.data));
196
+ // no code injection for amp context!!!
197
+ if (!_.includes(context, 'amp')) {
198
+ head.push(getMembersHelper(options.data, frontendKey));
199
199
 
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
- }
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
+ }
207
207
 
208
- if (!_.isEmpty(globalCodeinjection)) {
209
- head.push(globalCodeinjection);
210
- }
208
+ if (!_.isEmpty(globalCodeinjection)) {
209
+ head.push(globalCodeinjection);
210
+ }
211
211
 
212
- if (!_.isEmpty(postCodeInjection)) {
213
- head.push(postCodeInjection);
214
- }
212
+ if (!_.isEmpty(postCodeInjection)) {
213
+ head.push(postCodeInjection);
214
+ }
215
215
 
216
- if (!_.isEmpty(tagCodeInjection)) {
217
- head.push(tagCodeInjection);
218
- }
216
+ if (!_.isEmpty(tagCodeInjection)) {
217
+ head.push(tagCodeInjection);
219
218
  }
219
+ }
220
220
 
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)>/));
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)>/));
226
226
 
227
- if (existingScriptIndex !== -1) {
228
- head[existingScriptIndex] = head[existingScriptIndex] + styleTag;
229
- } else {
230
- head.push(styleTag);
231
- }
227
+ if (existingScriptIndex !== -1) {
228
+ head[existingScriptIndex] = head[existingScriptIndex] + styleTag;
229
+ } else {
230
+ head.push(styleTag);
232
231
  }
232
+ }
233
233
 
234
- debug('end');
235
- return new SafeString(head.join('\n ').trim());
236
- })
237
- .catch(function handleError(err) {
238
- logging.error(err);
234
+ debug('end');
235
+ return new SafeString(head.join('\n ').trim());
236
+ } catch (error) {
237
+ logging.error(error);
239
238
 
240
- // Return what we have so far (currently nothing)
241
- return new SafeString(head.join('\n ').trim());
242
- });
239
+ // Return what we have so far (currently nothing)
240
+ return new SafeString(head.join('\n ').trim());
241
+ }
243
242
  };
244
243
 
245
244
  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
+ };
@@ -46,12 +46,19 @@ function formatPageResponse(result) {
46
46
  *
47
47
  * @return {Object} containing page variables
48
48
  */
49
- function formatResponse(post) {
49
+ function formatResponse(post, context) {
50
50
  prepareContextResource(post);
51
51
 
52
- return {
52
+ let entry = {
53
53
  post: post
54
54
  };
55
+
56
+ // NOTE: preview context is a special case where the internal preview api returns the post model's type field
57
+ if (context?.includes('page') || (context?.includes('preview') && post.type === 'page')) {
58
+ entry.page = post;
59
+ }
60
+
61
+ return entry;
55
62
  }
56
63
 
57
64
  module.exports = {
@@ -19,10 +19,6 @@ module.exports = {
19
19
  return require('./templates');
20
20
  },
21
21
 
22
- get secure() {
23
- return require('./secure');
24
- },
25
-
26
22
  get handleError() {
27
23
  return require('./error');
28
24
  },