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