ghost 5.77.0 → 5.78.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 (126) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.78.0.tgz +0 -0
  2. package/components/tryghost-adapter-cache-redis-5.78.0.tgz +0 -0
  3. package/components/{tryghost-adapter-manager-5.77.0.tgz → tryghost-adapter-manager-5.78.0.tgz} +0 -0
  4. package/components/tryghost-announcement-bar-settings-5.78.0.tgz +0 -0
  5. package/components/{tryghost-api-framework-5.77.0.tgz → tryghost-api-framework-5.78.0.tgz} +0 -0
  6. package/components/tryghost-api-version-compatibility-service-5.78.0.tgz +0 -0
  7. package/components/{tryghost-audience-feedback-5.77.0.tgz → tryghost-audience-feedback-5.78.0.tgz} +0 -0
  8. package/components/tryghost-bookshelf-repository-5.78.0.tgz +0 -0
  9. package/components/tryghost-bootstrap-socket-5.78.0.tgz +0 -0
  10. package/components/tryghost-collections-5.78.0.tgz +0 -0
  11. package/components/tryghost-constants-5.78.0.tgz +0 -0
  12. package/components/tryghost-custom-theme-settings-service-5.78.0.tgz +0 -0
  13. package/components/{tryghost-data-generator-5.77.0.tgz → tryghost-data-generator-5.78.0.tgz} +0 -0
  14. package/components/{tryghost-domain-events-5.77.0.tgz → tryghost-domain-events-5.78.0.tgz} +0 -0
  15. package/components/tryghost-donations-5.78.0.tgz +0 -0
  16. package/components/tryghost-dynamic-routing-events-5.78.0.tgz +0 -0
  17. package/components/{tryghost-email-addresses-5.77.0.tgz → tryghost-email-addresses-5.78.0.tgz} +0 -0
  18. package/components/tryghost-email-analytics-provider-mailgun-5.78.0.tgz +0 -0
  19. package/components/tryghost-email-analytics-service-5.78.0.tgz +0 -0
  20. package/components/tryghost-email-content-generator-5.78.0.tgz +0 -0
  21. package/components/{tryghost-email-events-5.77.0.tgz → tryghost-email-events-5.78.0.tgz} +0 -0
  22. package/components/{tryghost-email-service-5.77.0.tgz → tryghost-email-service-5.78.0.tgz} +0 -0
  23. package/components/tryghost-email-suppression-list-5.78.0.tgz +0 -0
  24. package/components/tryghost-express-dynamic-redirects-5.78.0.tgz +0 -0
  25. package/components/tryghost-external-media-inliner-5.78.0.tgz +0 -0
  26. package/components/tryghost-extract-api-key-5.78.0.tgz +0 -0
  27. package/components/{tryghost-html-to-plaintext-5.77.0.tgz → tryghost-html-to-plaintext-5.78.0.tgz} +0 -0
  28. package/components/{tryghost-i18n-5.77.0.tgz → tryghost-i18n-5.78.0.tgz} +0 -0
  29. package/components/{tryghost-importer-handler-content-files-5.77.0.tgz → tryghost-importer-handler-content-files-5.78.0.tgz} +0 -0
  30. package/components/{tryghost-importer-revue-5.77.0.tgz → tryghost-importer-revue-5.78.0.tgz} +0 -0
  31. package/components/tryghost-in-memory-repository-5.78.0.tgz +0 -0
  32. package/components/{tryghost-job-manager-5.77.0.tgz → tryghost-job-manager-5.78.0.tgz} +0 -0
  33. package/components/{tryghost-link-redirects-5.77.0.tgz → tryghost-link-redirects-5.78.0.tgz} +0 -0
  34. package/components/tryghost-link-replacer-5.78.0.tgz +0 -0
  35. package/components/tryghost-link-tracking-5.78.0.tgz +0 -0
  36. package/components/{tryghost-magic-link-5.77.0.tgz → tryghost-magic-link-5.78.0.tgz} +0 -0
  37. package/components/tryghost-mail-events-5.78.0.tgz +0 -0
  38. package/components/{tryghost-mailgun-client-5.77.0.tgz → tryghost-mailgun-client-5.78.0.tgz} +0 -0
  39. package/components/{tryghost-member-attribution-5.77.0.tgz → tryghost-member-attribution-5.78.0.tgz} +0 -0
  40. package/components/tryghost-member-events-5.78.0.tgz +0 -0
  41. package/components/{tryghost-members-api-5.77.0.tgz → tryghost-members-api-5.78.0.tgz} +0 -0
  42. package/components/tryghost-members-csv-5.78.0.tgz +0 -0
  43. package/components/{tryghost-members-events-service-5.77.0.tgz → tryghost-members-events-service-5.78.0.tgz} +0 -0
  44. package/components/{tryghost-members-importer-5.77.0.tgz → tryghost-members-importer-5.78.0.tgz} +0 -0
  45. package/components/{tryghost-members-offers-5.77.0.tgz → tryghost-members-offers-5.78.0.tgz} +0 -0
  46. package/components/{tryghost-members-payments-5.77.0.tgz → tryghost-members-payments-5.78.0.tgz} +0 -0
  47. package/components/{tryghost-members-ssr-5.77.0.tgz → tryghost-members-ssr-5.78.0.tgz} +0 -0
  48. package/components/{tryghost-members-stripe-service-5.77.0.tgz → tryghost-members-stripe-service-5.78.0.tgz} +0 -0
  49. package/components/{tryghost-mentions-email-report-5.77.0.tgz → tryghost-mentions-email-report-5.78.0.tgz} +0 -0
  50. package/components/{tryghost-milestones-5.77.0.tgz → tryghost-milestones-5.78.0.tgz} +0 -0
  51. package/components/{tryghost-minifier-5.77.0.tgz → tryghost-minifier-5.78.0.tgz} +0 -0
  52. package/components/tryghost-model-to-domain-event-interceptor-5.78.0.tgz +0 -0
  53. package/components/tryghost-mw-api-version-mismatch-5.78.0.tgz +0 -0
  54. package/components/{tryghost-mw-cache-control-5.77.0.tgz → tryghost-mw-cache-control-5.78.0.tgz} +0 -0
  55. package/components/{tryghost-mw-error-handler-5.77.0.tgz → tryghost-mw-error-handler-5.78.0.tgz} +0 -0
  56. package/components/tryghost-mw-session-from-token-5.78.0.tgz +0 -0
  57. package/components/tryghost-mw-update-user-last-seen-5.78.0.tgz +0 -0
  58. package/components/tryghost-mw-version-match-5.78.0.tgz +0 -0
  59. package/components/tryghost-mw-vhost-5.78.0.tgz +0 -0
  60. package/components/tryghost-nql-filter-expansions-5.78.0.tgz +0 -0
  61. package/components/tryghost-oembed-service-5.78.0.tgz +0 -0
  62. package/components/{tryghost-package-json-5.77.0.tgz → tryghost-package-json-5.78.0.tgz} +0 -0
  63. package/components/tryghost-post-events-5.78.0.tgz +0 -0
  64. package/components/tryghost-post-revisions-5.78.0.tgz +0 -0
  65. package/components/{tryghost-posts-service-5.77.0.tgz → tryghost-posts-service-5.78.0.tgz} +0 -0
  66. package/components/tryghost-recommendations-5.78.0.tgz +0 -0
  67. package/components/{tryghost-referrers-5.77.0.tgz → tryghost-referrers-5.78.0.tgz} +0 -0
  68. package/components/{tryghost-security-5.77.0.tgz → tryghost-security-5.78.0.tgz} +0 -0
  69. package/components/{tryghost-session-service-5.77.0.tgz → tryghost-session-service-5.78.0.tgz} +0 -0
  70. package/components/{tryghost-settings-path-manager-5.77.0.tgz → tryghost-settings-path-manager-5.78.0.tgz} +0 -0
  71. package/components/tryghost-slack-notifications-5.78.0.tgz +0 -0
  72. package/components/{tryghost-staff-service-5.77.0.tgz → tryghost-staff-service-5.78.0.tgz} +0 -0
  73. package/components/{tryghost-stats-service-5.77.0.tgz → tryghost-stats-service-5.78.0.tgz} +0 -0
  74. package/components/tryghost-tiers-5.78.0.tgz +0 -0
  75. package/components/tryghost-update-check-service-5.78.0.tgz +0 -0
  76. package/components/{tryghost-verification-trigger-5.77.0.tgz → tryghost-verification-trigger-5.78.0.tgz} +0 -0
  77. package/components/tryghost-version-notifications-data-service-5.78.0.tgz +0 -0
  78. package/components/{tryghost-webmentions-5.77.0.tgz → tryghost-webmentions-5.78.0.tgz} +0 -0
  79. package/core/built/admin/assets/{chunk.143.16228699a88898175515.js → chunk.143.6e73a50be0209a7256b6.js} +5 -5
  80. package/core/built/admin/assets/{chunk.178.09e01be47e7daa486981.js → chunk.178.75b9357c8d68006957a4.js} +4 -4
  81. package/core/built/admin/assets/{ghost-90accaf45b85c7bc55ca781472d27e8e.js → ghost-e4af0146175c424ff8b5bfbee8f04258.js} +2 -2
  82. package/core/built/admin/index.html +3 -3
  83. package/core/server/data/db/ConnectionPoolInstrumentation.js +142 -0
  84. package/core/server/data/db/connection.js +6 -0
  85. package/core/server/data/db/index.js +9 -0
  86. package/core/shared/labs.js +2 -2
  87. package/package.json +145 -145
  88. package/components/tryghost-adapter-cache-memory-ttl-5.77.0.tgz +0 -0
  89. package/components/tryghost-adapter-cache-redis-5.77.0.tgz +0 -0
  90. package/components/tryghost-announcement-bar-settings-5.77.0.tgz +0 -0
  91. package/components/tryghost-api-version-compatibility-service-5.77.0.tgz +0 -0
  92. package/components/tryghost-bookshelf-repository-5.77.0.tgz +0 -0
  93. package/components/tryghost-bootstrap-socket-5.77.0.tgz +0 -0
  94. package/components/tryghost-collections-5.77.0.tgz +0 -0
  95. package/components/tryghost-constants-5.77.0.tgz +0 -0
  96. package/components/tryghost-custom-theme-settings-service-5.77.0.tgz +0 -0
  97. package/components/tryghost-donations-5.77.0.tgz +0 -0
  98. package/components/tryghost-dynamic-routing-events-5.77.0.tgz +0 -0
  99. package/components/tryghost-email-analytics-provider-mailgun-5.77.0.tgz +0 -0
  100. package/components/tryghost-email-analytics-service-5.77.0.tgz +0 -0
  101. package/components/tryghost-email-content-generator-5.77.0.tgz +0 -0
  102. package/components/tryghost-email-suppression-list-5.77.0.tgz +0 -0
  103. package/components/tryghost-express-dynamic-redirects-5.77.0.tgz +0 -0
  104. package/components/tryghost-external-media-inliner-5.77.0.tgz +0 -0
  105. package/components/tryghost-extract-api-key-5.77.0.tgz +0 -0
  106. package/components/tryghost-in-memory-repository-5.77.0.tgz +0 -0
  107. package/components/tryghost-link-replacer-5.77.0.tgz +0 -0
  108. package/components/tryghost-link-tracking-5.77.0.tgz +0 -0
  109. package/components/tryghost-mail-events-5.77.0.tgz +0 -0
  110. package/components/tryghost-member-events-5.77.0.tgz +0 -0
  111. package/components/tryghost-members-csv-5.77.0.tgz +0 -0
  112. package/components/tryghost-model-to-domain-event-interceptor-5.77.0.tgz +0 -0
  113. package/components/tryghost-mw-api-version-mismatch-5.77.0.tgz +0 -0
  114. package/components/tryghost-mw-session-from-token-5.77.0.tgz +0 -0
  115. package/components/tryghost-mw-update-user-last-seen-5.77.0.tgz +0 -0
  116. package/components/tryghost-mw-version-match-5.77.0.tgz +0 -0
  117. package/components/tryghost-mw-vhost-5.77.0.tgz +0 -0
  118. package/components/tryghost-nql-filter-expansions-5.77.0.tgz +0 -0
  119. package/components/tryghost-oembed-service-5.77.0.tgz +0 -0
  120. package/components/tryghost-post-events-5.77.0.tgz +0 -0
  121. package/components/tryghost-post-revisions-5.77.0.tgz +0 -0
  122. package/components/tryghost-recommendations-5.77.0.tgz +0 -0
  123. package/components/tryghost-slack-notifications-5.77.0.tgz +0 -0
  124. package/components/tryghost-tiers-5.77.0.tgz +0 -0
  125. package/components/tryghost-update-check-service-5.77.0.tgz +0 -0
  126. package/components/tryghost-version-notifications-data-service-5.77.0.tgz +0 -0
@@ -10,8 +10,8 @@ function s(e){var r=o(e)
10
10
  return t(r)}function o(e){if(!t.o(n,e)){var r=new Error("Cannot find module '"+e+"'")
11
11
  throw r.code="MODULE_NOT_FOUND",r}return n[e]}s.keys=function(){return Object.keys(n)},s.resolve=o,e.exports=s,s.id=96616},7456:e=>{"use strict"
12
12
  e.exports=require("@ember/test-waiters")},57498:e=>{"use strict"
13
- e.exports=require("ember-tracked-storage-polyfill")},11975:()=>{},31776:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
14
- function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},e("@sentry/browser",[],(function(){return n(t(52707))})),e("@sentry/integrations",[],(function(){return n(t(87643))})),e("@sentry/utils",[],(function(){return n(t(78926))})),e("@tryghost/color-utils",[],(function(){return n(t(82485))})),e("@tryghost/kg-clean-basic-html",[],(function(){return n(t(89096))})),e("@tryghost/kg-converters",[],(function(){return n(t(9138))})),e("@tryghost/limit-service",[],(function(){return n(t(38583))})),e("@tryghost/members-csv/lib/unparse",[],(function(){return n(t(91883))})),e("@tryghost/nql",[],(function(){return n(t(97490))})),e("@tryghost/nql-lang",[],(function(){return n(t(75420))})),e("@tryghost/string",[],(function(){return n(t(57348))})),e("@tryghost/timezone-data",[],(function(){return n(t(28961))})),e("element-resize-detector",[],(function(){return n(t(87381))})),e("ember-css-transitions/modifiers/css-transition",["@ember/test-waiters"],(function(){return n(t(56112))})),e("ember-keyboard/helpers/if-key.js",[],(function(){return n(t(43481))})),e("ember-keyboard/helpers/on-key.js",[],(function(){return n(t(66415))})),e("ember-keyboard/modifiers/on-key.js",[],(function(){return n(t(4146))})),e("ember-keyboard/services/keyboard.js",[],(function(){return n(t(79690))})),e("ember-modifier",[],(function(){return n(t(92509))})),e("ember-moment/helpers/-base.js",[],(function(){return n(t(76465))})),e("ember-moment/helpers/is-after.js",[],(function(){return n(t(876))})),e("ember-moment/helpers/is-before.js",[],(function(){return n(t(13971))})),e("ember-moment/helpers/is-between.js",[],(function(){return n(t(2063))})),e("ember-moment/helpers/is-same-or-after.js",[],(function(){return n(t(12915))})),e("ember-moment/helpers/is-same-or-before.js",[],(function(){return n(t(46102))})),e("ember-moment/helpers/is-same.js",[],(function(){return n(t(71465))})),e("ember-moment/helpers/moment-add.js",[],(function(){return n(t(64462))})),e("ember-moment/helpers/moment-calendar.js",[],(function(){return n(t(69021))})),e("ember-moment/helpers/moment-diff.js",[],(function(){return n(t(95198))})),e("ember-moment/helpers/moment-duration.js",[],(function(){return n(t(17216))})),e("ember-moment/helpers/moment-format.js",[],(function(){return n(t(99152))})),e("ember-moment/helpers/moment-from-now.js",[],(function(){return n(t(16396))})),e("ember-moment/helpers/moment-from.js",[],(function(){return n(t(48478))})),e("ember-moment/helpers/moment-subtract.js",[],(function(){return n(t(4647))})),e("ember-moment/helpers/moment-to-date.js",[],(function(){return n(t(18351))})),e("ember-moment/helpers/moment-to-now.js",[],(function(){return n(t(94612))})),e("ember-moment/helpers/moment-to.js",[],(function(){return n(t(91857))})),e("ember-moment/helpers/moment.js",[],(function(){return n(t(26852))})),e("ember-moment/helpers/now.js",[],(function(){return n(t(67842))})),e("ember-moment/helpers/unix.js",[],(function(){return n(t(29700))})),e("ember-moment/helpers/utc.js",[],(function(){return n(t(71755))})),e("ember-moment/services/moment.js",[],(function(){return n(t(27475))})),e("fast-deep-equal",[],(function(){return n(t(64710))})),e("focus-trap",[],(function(){return n(t(6657))})),e("intersection-observer-admin",[],(function(){return n(t(77577))})),e("jose",[],(function(){return n(t(64965))})),e("moment-timezone",[],(function(){return n(t(19127))})),e("papaparse",[],(function(){return n(t(99112))})),e("raf-pool",[],(function(){return n(t(42586))})),e("react",[],(function(){return n(t(11591))})),e("react-dom",[],(function(){return n(t(96027))})),e("react-dom/client",[],(function(){return n(t(22609))})),e("semver/functions/coerce",[],(function(){return n(t(57305))})),e("semver/functions/lt",[],(function(){return n(t(63721))})),e("semver/functions/parse",[],(function(){return n(t(62919))})),e("tooltip.js",[],(function(){return n(t(15028))})),e("tracked-built-ins",["ember-tracked-storage-polyfill"],(function(){return n(t(98350))})),e("urijs",[],(function(){return n(t(3491))})),e("validator",[],(function(){return n(t(2228))})),e("_eai_dyn_@sentry/browser",[],(function(){return Promise.resolve().then(t.bind(t,52707))}))}()},91137:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
13
+ e.exports=require("ember-tracked-storage-polyfill")},11975:()=>{},58224:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
14
+ function n(e){return e&&e.__esModule?e:Object.assign({default:e},e)}window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},e("@sentry/browser",[],(function(){return n(t(52707))})),e("@sentry/integrations",[],(function(){return n(t(87643))})),e("@sentry/utils",[],(function(){return n(t(78926))})),e("@tryghost/color-utils",[],(function(){return n(t(82485))})),e("@tryghost/kg-clean-basic-html",[],(function(){return n(t(89096))})),e("@tryghost/kg-converters",[],(function(){return n(t(9138))})),e("@tryghost/limit-service",[],(function(){return n(t(38583))})),e("@tryghost/members-csv/lib/unparse",[],(function(){return n(t(91883))})),e("@tryghost/nql",[],(function(){return n(t(97490))})),e("@tryghost/nql-lang",[],(function(){return n(t(75420))})),e("@tryghost/string",[],(function(){return n(t(57348))})),e("@tryghost/timezone-data",[],(function(){return n(t(28961))})),e("element-resize-detector",[],(function(){return n(t(87381))})),e("ember-css-transitions/modifiers/css-transition",["@ember/test-waiters"],(function(){return n(t(56112))})),e("ember-keyboard/helpers/if-key.js",[],(function(){return n(t(43481))})),e("ember-keyboard/helpers/on-key.js",[],(function(){return n(t(66415))})),e("ember-keyboard/modifiers/on-key.js",[],(function(){return n(t(4146))})),e("ember-keyboard/services/keyboard.js",[],(function(){return n(t(79690))})),e("ember-modifier",[],(function(){return n(t(92509))})),e("ember-moment/helpers/-base.js",[],(function(){return n(t(76465))})),e("ember-moment/helpers/is-after.js",[],(function(){return n(t(876))})),e("ember-moment/helpers/is-before.js",[],(function(){return n(t(13971))})),e("ember-moment/helpers/is-between.js",[],(function(){return n(t(2063))})),e("ember-moment/helpers/is-same-or-after.js",[],(function(){return n(t(12915))})),e("ember-moment/helpers/is-same-or-before.js",[],(function(){return n(t(46102))})),e("ember-moment/helpers/is-same.js",[],(function(){return n(t(71465))})),e("ember-moment/helpers/moment-add.js",[],(function(){return n(t(64462))})),e("ember-moment/helpers/moment-calendar.js",[],(function(){return n(t(69021))})),e("ember-moment/helpers/moment-diff.js",[],(function(){return n(t(95198))})),e("ember-moment/helpers/moment-duration.js",[],(function(){return n(t(17216))})),e("ember-moment/helpers/moment-format.js",[],(function(){return n(t(99152))})),e("ember-moment/helpers/moment-from-now.js",[],(function(){return n(t(16396))})),e("ember-moment/helpers/moment-from.js",[],(function(){return n(t(48478))})),e("ember-moment/helpers/moment-subtract.js",[],(function(){return n(t(4647))})),e("ember-moment/helpers/moment-to-date.js",[],(function(){return n(t(18351))})),e("ember-moment/helpers/moment-to-now.js",[],(function(){return n(t(94612))})),e("ember-moment/helpers/moment-to.js",[],(function(){return n(t(91857))})),e("ember-moment/helpers/moment.js",[],(function(){return n(t(26852))})),e("ember-moment/helpers/now.js",[],(function(){return n(t(67842))})),e("ember-moment/helpers/unix.js",[],(function(){return n(t(29700))})),e("ember-moment/helpers/utc.js",[],(function(){return n(t(71755))})),e("ember-moment/services/moment.js",[],(function(){return n(t(27475))})),e("fast-deep-equal",[],(function(){return n(t(64710))})),e("focus-trap",[],(function(){return n(t(6657))})),e("intersection-observer-admin",[],(function(){return n(t(77577))})),e("jose",[],(function(){return n(t(64965))})),e("moment-timezone",[],(function(){return n(t(19127))})),e("papaparse",[],(function(){return n(t(99112))})),e("raf-pool",[],(function(){return n(t(42586))})),e("react",[],(function(){return n(t(11591))})),e("react-dom",[],(function(){return n(t(96027))})),e("react-dom/client",[],(function(){return n(t(22609))})),e("semver/functions/coerce",[],(function(){return n(t(57305))})),e("semver/functions/lt",[],(function(){return n(t(63721))})),e("semver/functions/parse",[],(function(){return n(t(62919))})),e("tooltip.js",[],(function(){return n(t(15028))})),e("tracked-built-ins",["ember-tracked-storage-polyfill"],(function(){return n(t(98350))})),e("urijs",[],(function(){return n(t(3491))})),e("validator",[],(function(){return n(t(2228))})),e("_eai_dyn_@sentry/browser",[],(function(){return Promise.resolve().then(t.bind(t,52707))}))}()},17618:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
15
15
  function n(e){var s=t[e]
16
16
  if(void 0!==s)return s.exports
17
17
  var o=t[e]={id:e,loaded:!1,exports:{}}
@@ -28,8 +28,8 @@ var r=(r,t)=>{var s,o,[i,u,m]=t,a=0
28
28
  if(i.some((r=>0!==e[r]))){for(s in u)n.o(u,s)&&(n.m[s]=u[s])
29
29
  if(m)var c=m(n)}for(r&&r(t);a<i.length;a++)o=i[a],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0
30
30
  return n.O(c)},t=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
31
- t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[664],(()=>n(n.s=91137)))
32
- var s=n.O(void 0,[664],(()=>n(n.s=31776)))
31
+ t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[664],(()=>n(n.s=17618)))
32
+ var s=n.O(void 0,[664],(()=>n(n.s=58224)))
33
33
  s=n.O(s),__ember_auto_import__=s})()
34
34
 
35
- //# sourceMappingURL=chunk.143.16228699a88898175515.map
35
+ //# sourceMappingURL=chunk.143.6e73a50be0209a7256b6.map
@@ -1,11 +1,11 @@
1
- var __ember_auto_import__;(()=>{var r={91137:function(r,e){window._eai_r=require,window._eai_d=define},6225:r=>{r.exports=function(){_eai_d
1
+ var __ember_auto_import__;(()=>{var r={17618:function(r,e){window._eai_r=require,window._eai_d=define},37816:r=>{r.exports=function(){_eai_d
2
2
  var r=_eai_r
3
3
  window.emberAutoImportDynamic=function(e){return 1===arguments.length?r("_eai_dyn_"+e):r("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return r("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))}}()}},e={}
4
4
  function t(_){var o=e[_]
5
5
  if(void 0!==o)return o.exports
6
6
  var i=e[_]={exports:{}}
7
- return r[_].call(i.exports,i,i.exports,t),i.exports}t(91137)
8
- var _=t(6225)
7
+ return r[_].call(i.exports,i,i.exports,t),i.exports}t(17618)
8
+ var _=t(37816)
9
9
  __ember_auto_import__=_})()
10
10
 
11
- //# sourceMappingURL=chunk.178.09e01be47e7daa486981.map
11
+ //# sourceMappingURL=chunk.178.75b9357c8d68006957a4.map
@@ -4584,6 +4584,6 @@ this.passwordChange(e),e.hasValidated.addObject("password"),Ember.isBlank(t)&&(e
4584
4584
  e.default=n.create()})),define("ghost-admin/validators/webhook",["exports","ghost-admin/validators/base","validator"],(function(e,t,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4585
4585
  e.default=t.default.create({properties:["name","event","targetUrl","secret"],name(e){Ember.isBlank(e.name)?(e.errors.add("name","Please enter a name"),e.hasValidated.pushObject("name"),this.invalidate()):i.default.isLength(e.name,0,191)||(e.errors.add("name","Name is too long, max 191 chars"),e.hasValidated.pushObject("name"),this.invalidate())},event(e){Ember.isBlank(e.event)&&(e.errors.add("event","Please select an event"),e.hasValidated.pushObject("event"),this.invalidate())},targetUrl(e){Ember.isBlank(e.targetUrl)?e.errors.add("targetUrl","Please enter a target URL"):i.default.isURL(e.targetUrl||"",{require_protocol:!1})?i.default.isLength(e.targetUrl,0,2e3)||e.errors.add("targetUrl","Target URL is too long, max 2000 chars"):e.errors.add("targetUrl","Please enter a valid URL"),e.hasValidated.pushObject("targetUrl"),e.errors.has("targetUrl")&&this.invalidate()},secret(e){Ember.isBlank(e.secret)||i.default.isLength(e.secret,0,191)||(e.errors.add("secret","Secret is too long, max 191 chars"),e.hasValidated.pushObject("secret"),this.invalidate())}})})),define("ghost-admin/views/application",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
4586
4586
  e.default=Ember.Component.extend({})})),define("ghost-admin/config/environment",[],(function(){try{var e="ghost-admin/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),i={default:JSON.parse(decodeURIComponent(t))}
4587
- return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.77",name:"ghost-admin"})
4587
+ return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.78",name:"ghost-admin"})
4588
4588
 
4589
- //# sourceMappingURL=ghost-6655fc2d4e07afb535d23a34a599837e.map
4589
+ //# sourceMappingURL=ghost-3a249fa2c674bdc0feb776f1fd208bc4.map
@@ -8,7 +8,7 @@
8
8
  <title>Ghost Admin</title>
9
9
 
10
10
 
11
- <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.77%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22ember-websockets%22%3A%7B%22socketIO%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22a9a58f16a8%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%2233d2c60ad0%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22d07813452e%22%7D" />
11
+ <meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22cdnUrl%22%3A%22%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%225.78%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22ember-websockets%22%3A%7B%22socketIO%22%3Atrue%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22a9a58f16a8%22%2C%22adminXDemoFilename%22%3A%22admin-x-demo.js%22%2C%22adminXDemoHash%22%3A%2233d2c60ad0%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22d07813452e%22%7D" />
12
12
 
13
13
  <meta name="HandheldFriendly" content="True" />
14
14
  <meta name="MobileOptimized" content="320" />
@@ -58,7 +58,7 @@
58
58
 
59
59
  <script src="assets/vendor-6b83da0c6e6fede335947219c59e1543.js"></script>
60
60
  <script src="assets/chunk.664.99d0951b803d7ec00d8b.js"></script>
61
- <script src="assets/chunk.143.16228699a88898175515.js"></script>
62
- <script src="assets/ghost-90accaf45b85c7bc55ca781472d27e8e.js"></script>
61
+ <script src="assets/chunk.143.6e73a50be0209a7256b6.js"></script>
62
+ <script src="assets/ghost-e4af0146175c424ff8b5bfbee8f04258.js"></script>
63
63
  </body>
64
64
  </html>
@@ -0,0 +1,142 @@
1
+ class ConnectionPoolInstrumentation {
2
+ constructor({knex, logging, metrics, config}) {
3
+ this.knex = knex;
4
+ this.pool = this.knex.client.pool;
5
+ this.logging = logging;
6
+ this.metrics = metrics;
7
+ this.enabled = config.get('telemetry:connectionPool');
8
+ this.requestStartTimes = {};
9
+ this.createStartTimes = {};
10
+ }
11
+
12
+ // Get the number of pending creates and acquires plus free and used connections
13
+ getPoolMetrics() {
14
+ return {
15
+ numPendingCreates: this.pool.numPendingCreates(),
16
+ numPendingAcquires: this.pool.numPendingAcquires(),
17
+ numFree: this.pool.numFree(),
18
+ numUsed: this.pool.numUsed()
19
+ };
20
+ }
21
+
22
+ handleCreateRequest(eventId) {
23
+ // Track when the request was submitted for calculating wait time
24
+ this.createStartTimes[eventId] = Date.now();
25
+ const poolMetrics = this.getPoolMetrics();
26
+ this.logging.debug(`[ConnectionPool] Creating a connection. EventID: ${eventId} Pending Creates: ${poolMetrics.numPendingCreates} Free: ${poolMetrics.numFree} Used: ${poolMetrics.numUsed}`);
27
+ this.metrics.metric('metrics-connection-pool', {
28
+ event: 'create-request',
29
+ eventId,
30
+ ...poolMetrics
31
+ });
32
+ }
33
+
34
+ handleCreateSuccess(eventId, resource) {
35
+ // Calculate the time it took to create the connection
36
+ const timeToCreate = Date.now() - this.createStartTimes[eventId];
37
+ // Delete the start time so we don't leak memory
38
+ delete this.createStartTimes[eventId];
39
+ this.logging.debug(`[ConnectionPool] Created a connection. EventID: ${eventId} Connection ID: ${resource.connectionId} Knex ID: ${resource.__knexUid} Time to Create: ${timeToCreate}ms`);
40
+ this.metrics.metric('metrics-connection-pool', {
41
+ event: 'create-success',
42
+ eventId,
43
+ connectionId: resource.connectionId,
44
+ knexUid: resource.__knexUid,
45
+ timeToCreate
46
+ });
47
+ }
48
+
49
+ handleCreateFail(eventId, err) {
50
+ // Calculate the time it took to create the connection
51
+ const timeToFail = Date.now() - this.createStartTimes[eventId];
52
+ // Delete the start time so we don't leak memory
53
+ delete this.createStartTimes[eventId];
54
+ const poolMetrics = this.getPoolMetrics();
55
+ this.logging.error(`[ConnectionPool] Failed to create a connection. EventID: ${eventId} Time to Create: ${timeToFail}ms`, err);
56
+ this.metrics.metric('metrics-connection-pool', {
57
+ event: 'create-fail',
58
+ eventId,
59
+ timeToFail,
60
+ ...poolMetrics
61
+ });
62
+ }
63
+
64
+ handleAcquireRequest(eventId) {
65
+ // Track when the request was submitted for calculating wait time
66
+ this.requestStartTimes[eventId] = Date.now();
67
+ const poolMetrics = this.getPoolMetrics();
68
+ this.logging.debug(`[ConnectionPool] Acquiring a connection. EventID: ${eventId} Pending Acquires: ${poolMetrics.numPendingAcquires} Free: ${poolMetrics.numFree} Used: ${poolMetrics.numUsed}`);
69
+ this.metrics.metric('metrics-connection-pool', {
70
+ event: 'acquire-request',
71
+ eventId,
72
+ ...poolMetrics
73
+ });
74
+ }
75
+
76
+ handleAcquireSuccess(eventId, resource) {
77
+ // Calculate the time it took to acquire the connection
78
+ const timeToAcquire = Date.now() - this.requestStartTimes[eventId];
79
+ // Delete the start time so we don't leak memory
80
+ delete this.requestStartTimes[eventId];
81
+ // Track when the connection was acquired for calculating lifetime upon release
82
+ resource.connectionAcquired = Date.now();
83
+ this.logging.debug(`[ConnectionPool] Acquired a connection. EventID: ${eventId} Connection ID: ${resource.connectionId} Knex Id: ${resource.__knexUid} Time to Acquire: ${timeToAcquire}ms`);
84
+ this.metrics.metric('metrics-connection-pool', {
85
+ event: 'acquire-success',
86
+ eventId,
87
+ connectionId: resource.connectionId,
88
+ knexUid: resource.__knexUid,
89
+ timeToAcquire
90
+ });
91
+ }
92
+
93
+ handleAcquireFail(eventId, err) {
94
+ // Calculate the time it took to acquire the connection
95
+ const timeToFail = Date.now() - this.requestStartTimes[eventId];
96
+ // Delete the start time so we don't leak memory
97
+ delete this.requestStartTimes[eventId];
98
+ const poolMetrics = this.getPoolMetrics();
99
+ this.logging.error(`[ConnectionPool] Failed to acquire a connection. EventID: ${eventId} Time to Acquire: ${timeToFail}ms`, err);
100
+ this.metrics.metric('metrics-connection-pool', {
101
+ event: 'acquire-fail',
102
+ eventId,
103
+ timeToFail,
104
+ ...poolMetrics
105
+ });
106
+ }
107
+
108
+ handleRelease(resource) {
109
+ const lifetime = Date.now() - resource.connectionAcquired;
110
+ this.logging.debug(`[ConnectionPool] Released a connection. Connection ID: ${resource.connectionId} Lifetime: ${lifetime}ms`);
111
+ this.metrics.metric('metrics-connection-pool', {
112
+ event: 'release',
113
+ connectionId: resource.connectionId,
114
+ knexUid: resource.__knexUid,
115
+ lifetime
116
+ });
117
+ }
118
+
119
+ instrument() {
120
+ if (this.enabled) {
121
+ // Check to make sure these event listeners haven't already been added
122
+ if (this.pool.emitter.eventNames().length === 0) {
123
+ // Fires when a connection is requested to be created
124
+ this.pool.on('createRequest', eventId => this.handleCreateRequest(eventId));
125
+ // Fires when a connection is successfully created
126
+ this.pool.on('createSuccess', (eventId, resource) => this.handleCreateSuccess(eventId, resource));
127
+ // Fires when a connection fails to be created
128
+ this.pool.on('createFail', (eventId, err) => this.handleCreateFail(eventId, err));
129
+ // Fires when a connection is requested from the pool
130
+ this.pool.on('acquireRequest', eventId => this.handleAcquireRequest(eventId));
131
+ // Fires when a connection is allocated from the pool
132
+ this.pool.on('acquireSuccess', (eventId, resource) => this.handleAcquireSuccess(eventId, resource));
133
+ // Fires when a connection fails to be allocated from the pool
134
+ this.pool.on('acquireFail', (eventId, err) => this.handleAcquireFail(eventId, err));
135
+ // Fires when a connection is released back into the pool
136
+ this.pool.on('release', resource => this.handleRelease(resource));
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ module.exports = ConnectionPoolInstrumentation;
@@ -4,8 +4,10 @@ const os = require('os');
4
4
  const fs = require('fs');
5
5
 
6
6
  const logging = require('@tryghost/logging');
7
+ const metrics = require('@tryghost/metrics');
7
8
  const config = require('../../../shared/config');
8
9
  const errors = require('@tryghost/errors');
10
+ const ConnectionPoolInstrumentation = require('./ConnectionPoolInstrumentation');
9
11
  let knexInstance;
10
12
 
11
13
  // @TODO:
@@ -62,6 +64,10 @@ function configure(dbConfig) {
62
64
 
63
65
  if (!knexInstance && config.get('database') && config.get('database').client) {
64
66
  knexInstance = knex(configure(config.get('database')));
67
+ if (config.get('telemetry:connectionPool')) {
68
+ const instrumentation = new ConnectionPoolInstrumentation({knex: knexInstance, logging, metrics, config});
69
+ instrumentation.instrument();
70
+ }
65
71
  }
66
72
 
67
73
  module.exports = knexInstance;
@@ -1,3 +1,8 @@
1
+ const logging = require('@tryghost/logging');
2
+ const metrics = require('@tryghost/metrics');
3
+ const config = require('../../../shared/config');
4
+ const ConnectionPoolInstrumentation = require('./ConnectionPoolInstrumentation');
5
+
1
6
  let connection;
2
7
 
3
8
  Object.defineProperty(exports, 'knex', {
@@ -5,6 +10,10 @@ Object.defineProperty(exports, 'knex', {
5
10
  configurable: true,
6
11
  get: function get() {
7
12
  connection = connection || require('./connection');
13
+ if (config.get('telemetry:connectionPool')) {
14
+ const instrumentation = new ConnectionPoolInstrumentation({knex: connection, logging, metrics, config});
15
+ instrumentation.instrument();
16
+ }
8
17
  return connection;
9
18
  }
10
19
  });
@@ -22,7 +22,8 @@ const GA_FEATURES = [
22
22
  'signupForm',
23
23
  'recommendations',
24
24
  'listUnsubscribeHeader',
25
- 'filterEmailDisabled'
25
+ 'filterEmailDisabled',
26
+ 'newEmailAddresses'
26
27
  ];
27
28
 
28
29
  // NOTE: this allowlist is meant to be used to filter out any unexpected
@@ -47,7 +48,6 @@ const ALPHA_FEATURES = [
47
48
  // 'adminXOffers',
48
49
  'filterEmailDisabled',
49
50
  'adminXDemo',
50
- 'newEmailAddresses',
51
51
  'portalImprovements'
52
52
  ];
53
53
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "5.77.0",
3
+ "version": "5.78.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -60,43 +60,43 @@
60
60
  "@extractus/oembed-extractor": "3.2.1",
61
61
  "@sentry/node": "7.86.0",
62
62
  "@tryghost/adapter-base-cache": "0.1.10",
63
- "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.77.0.tgz",
64
- "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.77.0.tgz",
63
+ "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.78.0.tgz",
64
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.78.0.tgz",
65
65
  "@tryghost/admin-api-schema": "4.5.3",
66
- "@tryghost/announcement-bar-settings": "file:components/tryghost-announcement-bar-settings-5.77.0.tgz",
67
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.77.0.tgz",
68
- "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.77.0.tgz",
69
- "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.77.0.tgz",
66
+ "@tryghost/announcement-bar-settings": "file:components/tryghost-announcement-bar-settings-5.78.0.tgz",
67
+ "@tryghost/api-framework": "file:components/tryghost-api-framework-5.78.0.tgz",
68
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.78.0.tgz",
69
+ "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.78.0.tgz",
70
70
  "@tryghost/bookshelf-plugins": "0.6.12",
71
- "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.77.0.tgz",
72
- "@tryghost/collections": "file:components/tryghost-collections-5.77.0.tgz",
71
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.78.0.tgz",
72
+ "@tryghost/collections": "file:components/tryghost-collections-5.78.0.tgz",
73
73
  "@tryghost/color-utils": "0.2.0",
74
74
  "@tryghost/config-url-helpers": "1.0.10",
75
- "@tryghost/constants": "file:components/tryghost-constants-5.77.0.tgz",
76
- "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.77.0.tgz",
77
- "@tryghost/data-generator": "file:components/tryghost-data-generator-5.77.0.tgz",
75
+ "@tryghost/constants": "file:components/tryghost-constants-5.78.0.tgz",
76
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.78.0.tgz",
77
+ "@tryghost/data-generator": "file:components/tryghost-data-generator-5.78.0.tgz",
78
78
  "@tryghost/database-info": "0.3.20",
79
79
  "@tryghost/debug": "0.1.26",
80
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.77.0.tgz",
81
- "@tryghost/donations": "file:components/tryghost-donations-5.77.0.tgz",
82
- "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.77.0.tgz",
83
- "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.77.0.tgz",
84
- "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.77.0.tgz",
85
- "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.77.0.tgz",
80
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-5.78.0.tgz",
81
+ "@tryghost/donations": "file:components/tryghost-donations-5.78.0.tgz",
82
+ "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.78.0.tgz",
83
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.78.0.tgz",
84
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.78.0.tgz",
85
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.78.0.tgz",
86
86
  "@tryghost/email-mock-receiver": "0.3.2",
87
- "@tryghost/email-service": "file:components/tryghost-email-service-5.77.0.tgz",
88
- "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.77.0.tgz",
87
+ "@tryghost/email-service": "file:components/tryghost-email-service-5.78.0.tgz",
88
+ "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.78.0.tgz",
89
89
  "@tryghost/errors": "1.2.26",
90
- "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.77.0.tgz",
91
- "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.77.0.tgz",
90
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.78.0.tgz",
91
+ "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.78.0.tgz",
92
92
  "@tryghost/helpers": "1.1.88",
93
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.77.0.tgz",
93
+ "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.78.0.tgz",
94
94
  "@tryghost/http-cache-utils": "0.1.11",
95
- "@tryghost/i18n": "file:components/tryghost-i18n-5.77.0.tgz",
95
+ "@tryghost/i18n": "file:components/tryghost-i18n-5.78.0.tgz",
96
96
  "@tryghost/image-transform": "1.2.11",
97
- "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.77.0.tgz",
98
- "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.77.0.tgz",
99
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.77.0.tgz",
97
+ "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.78.0.tgz",
98
+ "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.78.0.tgz",
99
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-5.78.0.tgz",
100
100
  "@tryghost/kg-card-factory": "5.0.1",
101
101
  "@tryghost/kg-converters": "0.0.22",
102
102
  "@tryghost/kg-default-atoms": "5.0.1",
@@ -106,59 +106,59 @@
106
106
  "@tryghost/kg-lexical-html-renderer": "1.0.6",
107
107
  "@tryghost/kg-mobiledoc-html-renderer": "7.0.1",
108
108
  "@tryghost/limit-service": "1.2.12",
109
- "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.77.0.tgz",
110
- "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.77.0.tgz",
111
- "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.77.0.tgz",
109
+ "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.78.0.tgz",
110
+ "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.78.0.tgz",
111
+ "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.78.0.tgz",
112
112
  "@tryghost/logging": "2.4.8",
113
- "@tryghost/magic-link": "file:components/tryghost-magic-link-5.77.0.tgz",
114
- "@tryghost/mail-events": "file:components/tryghost-mail-events-5.77.0.tgz",
115
- "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.77.0.tgz",
116
- "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.77.0.tgz",
117
- "@tryghost/member-events": "file:components/tryghost-member-events-5.77.0.tgz",
118
- "@tryghost/members-api": "file:components/tryghost-members-api-5.77.0.tgz",
119
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.77.0.tgz",
120
- "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.77.0.tgz",
121
- "@tryghost/members-importer": "file:components/tryghost-members-importer-5.77.0.tgz",
122
- "@tryghost/members-offers": "file:components/tryghost-members-offers-5.77.0.tgz",
123
- "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.77.0.tgz",
124
- "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.77.0.tgz",
125
- "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.77.0.tgz",
113
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-5.78.0.tgz",
114
+ "@tryghost/mail-events": "file:components/tryghost-mail-events-5.78.0.tgz",
115
+ "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.78.0.tgz",
116
+ "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.78.0.tgz",
117
+ "@tryghost/member-events": "file:components/tryghost-member-events-5.78.0.tgz",
118
+ "@tryghost/members-api": "file:components/tryghost-members-api-5.78.0.tgz",
119
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-5.78.0.tgz",
120
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.78.0.tgz",
121
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-5.78.0.tgz",
122
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-5.78.0.tgz",
123
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.78.0.tgz",
124
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.78.0.tgz",
125
+ "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.78.0.tgz",
126
126
  "@tryghost/metrics": "1.0.27",
127
- "@tryghost/milestones": "file:components/tryghost-milestones-5.77.0.tgz",
128
- "@tryghost/minifier": "file:components/tryghost-minifier-5.77.0.tgz",
129
- "@tryghost/model-to-domain-event-interceptor": "file:components/tryghost-model-to-domain-event-interceptor-5.77.0.tgz",
130
- "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.77.0.tgz",
131
- "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.77.0.tgz",
132
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.77.0.tgz",
133
- "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.77.0.tgz",
134
- "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.77.0.tgz",
135
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.77.0.tgz",
127
+ "@tryghost/milestones": "file:components/tryghost-milestones-5.78.0.tgz",
128
+ "@tryghost/minifier": "file:components/tryghost-minifier-5.78.0.tgz",
129
+ "@tryghost/model-to-domain-event-interceptor": "file:components/tryghost-model-to-domain-event-interceptor-5.78.0.tgz",
130
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.78.0.tgz",
131
+ "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.78.0.tgz",
132
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.78.0.tgz",
133
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.78.0.tgz",
134
+ "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.78.0.tgz",
135
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.78.0.tgz",
136
136
  "@tryghost/nodemailer": "0.3.37",
137
137
  "@tryghost/nql": "0.12.1",
138
- "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.77.0.tgz",
139
- "@tryghost/package-json": "file:components/tryghost-package-json-5.77.0.tgz",
140
- "@tryghost/post-revisions": "file:components/tryghost-post-revisions-5.77.0.tgz",
141
- "@tryghost/posts-service": "file:components/tryghost-posts-service-5.77.0.tgz",
138
+ "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.78.0.tgz",
139
+ "@tryghost/package-json": "file:components/tryghost-package-json-5.78.0.tgz",
140
+ "@tryghost/post-revisions": "file:components/tryghost-post-revisions-5.78.0.tgz",
141
+ "@tryghost/posts-service": "file:components/tryghost-posts-service-5.78.0.tgz",
142
142
  "@tryghost/pretty-cli": "1.2.38",
143
143
  "@tryghost/promise": "0.3.6",
144
- "@tryghost/recommendations": "file:components/tryghost-recommendations-5.77.0.tgz",
144
+ "@tryghost/recommendations": "file:components/tryghost-recommendations-5.78.0.tgz",
145
145
  "@tryghost/request": "1.0.0",
146
- "@tryghost/security": "file:components/tryghost-security-5.77.0.tgz",
147
- "@tryghost/session-service": "file:components/tryghost-session-service-5.77.0.tgz",
148
- "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.77.0.tgz",
149
- "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.77.0.tgz",
146
+ "@tryghost/security": "file:components/tryghost-security-5.78.0.tgz",
147
+ "@tryghost/session-service": "file:components/tryghost-session-service-5.78.0.tgz",
148
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.78.0.tgz",
149
+ "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.78.0.tgz",
150
150
  "@tryghost/social-urls": "0.1.41",
151
- "@tryghost/staff-service": "file:components/tryghost-staff-service-5.77.0.tgz",
152
- "@tryghost/stats-service": "file:components/tryghost-stats-service-5.77.0.tgz",
151
+ "@tryghost/staff-service": "file:components/tryghost-staff-service-5.78.0.tgz",
152
+ "@tryghost/stats-service": "file:components/tryghost-stats-service-5.78.0.tgz",
153
153
  "@tryghost/string": "0.2.10",
154
- "@tryghost/tiers": "file:components/tryghost-tiers-5.77.0.tgz",
154
+ "@tryghost/tiers": "file:components/tryghost-tiers-5.78.0.tgz",
155
155
  "@tryghost/tpl": "0.1.26",
156
- "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.77.0.tgz",
156
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.78.0.tgz",
157
157
  "@tryghost/url-utils": "4.4.6",
158
158
  "@tryghost/validator": "0.2.6",
159
- "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.77.0.tgz",
159
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.78.0.tgz",
160
160
  "@tryghost/version": "0.1.24",
161
- "@tryghost/webmentions": "file:components/tryghost-webmentions-5.77.0.tgz",
161
+ "@tryghost/webmentions": "file:components/tryghost-webmentions-5.78.0.tgz",
162
162
  "@tryghost/zip": "1.1.38",
163
163
  "amperize": "0.6.1",
164
164
  "analytics-node": "6.2.0",
@@ -264,84 +264,84 @@
264
264
  "@tryghost/logging": "2.4.8",
265
265
  "moment": "2.24.0",
266
266
  "moment-timezone": "0.5.23",
267
- "@tryghost/adapter-cache-memory-ttl": "file:components/tryghost-adapter-cache-memory-ttl-5.77.0.tgz",
268
- "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.77.0.tgz",
269
- "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.77.0.tgz",
270
- "@tryghost/announcement-bar-settings": "file:components/tryghost-announcement-bar-settings-5.77.0.tgz",
271
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.77.0.tgz",
272
- "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.77.0.tgz",
273
- "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.77.0.tgz",
274
- "@tryghost/bookshelf-repository": "file:components/tryghost-bookshelf-repository-5.77.0.tgz",
275
- "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.77.0.tgz",
276
- "@tryghost/collections": "file:components/tryghost-collections-5.77.0.tgz",
277
- "@tryghost/constants": "file:components/tryghost-constants-5.77.0.tgz",
278
- "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.77.0.tgz",
279
- "@tryghost/data-generator": "file:components/tryghost-data-generator-5.77.0.tgz",
280
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.77.0.tgz",
281
- "@tryghost/donations": "file:components/tryghost-donations-5.77.0.tgz",
282
- "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.77.0.tgz",
283
- "@tryghost/email-addresses": "file:components/tryghost-email-addresses-5.77.0.tgz",
284
- "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.77.0.tgz",
285
- "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.77.0.tgz",
286
- "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.77.0.tgz",
287
- "@tryghost/email-events": "file:components/tryghost-email-events-5.77.0.tgz",
288
- "@tryghost/email-service": "file:components/tryghost-email-service-5.77.0.tgz",
289
- "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.77.0.tgz",
290
- "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.77.0.tgz",
291
- "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.77.0.tgz",
292
- "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.77.0.tgz",
293
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.77.0.tgz",
294
- "@tryghost/i18n": "file:components/tryghost-i18n-5.77.0.tgz",
295
- "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.77.0.tgz",
296
- "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.77.0.tgz",
297
- "@tryghost/in-memory-repository": "file:components/tryghost-in-memory-repository-5.77.0.tgz",
298
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.77.0.tgz",
299
- "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.77.0.tgz",
300
- "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.77.0.tgz",
301
- "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.77.0.tgz",
302
- "@tryghost/magic-link": "file:components/tryghost-magic-link-5.77.0.tgz",
303
- "@tryghost/mail-events": "file:components/tryghost-mail-events-5.77.0.tgz",
304
- "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.77.0.tgz",
305
- "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.77.0.tgz",
306
- "@tryghost/member-events": "file:components/tryghost-member-events-5.77.0.tgz",
307
- "@tryghost/members-api": "file:components/tryghost-members-api-5.77.0.tgz",
308
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.77.0.tgz",
309
- "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.77.0.tgz",
310
- "@tryghost/members-importer": "file:components/tryghost-members-importer-5.77.0.tgz",
311
- "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.77.0.tgz",
312
- "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.77.0.tgz",
313
- "@tryghost/milestones": "file:components/tryghost-milestones-5.77.0.tgz",
314
- "@tryghost/minifier": "file:components/tryghost-minifier-5.77.0.tgz",
315
- "@tryghost/model-to-domain-event-interceptor": "file:components/tryghost-model-to-domain-event-interceptor-5.77.0.tgz",
316
- "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.77.0.tgz",
317
- "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.77.0.tgz",
318
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.77.0.tgz",
319
- "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.77.0.tgz",
320
- "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.77.0.tgz",
321
- "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.77.0.tgz",
322
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.77.0.tgz",
323
- "@tryghost/nql-filter-expansions": "file:components/tryghost-nql-filter-expansions-5.77.0.tgz",
324
- "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.77.0.tgz",
325
- "@tryghost/members-offers": "file:components/tryghost-members-offers-5.77.0.tgz",
326
- "@tryghost/package-json": "file:components/tryghost-package-json-5.77.0.tgz",
327
- "@tryghost/members-payments": "file:components/tryghost-members-payments-5.77.0.tgz",
328
- "@tryghost/post-events": "file:components/tryghost-post-events-5.77.0.tgz",
329
- "@tryghost/post-revisions": "file:components/tryghost-post-revisions-5.77.0.tgz",
330
- "@tryghost/posts-service": "file:components/tryghost-posts-service-5.77.0.tgz",
331
- "@tryghost/recommendations": "file:components/tryghost-recommendations-5.77.0.tgz",
332
- "@tryghost/referrers": "file:components/tryghost-referrers-5.77.0.tgz",
333
- "@tryghost/security": "file:components/tryghost-security-5.77.0.tgz",
334
- "@tryghost/session-service": "file:components/tryghost-session-service-5.77.0.tgz",
335
- "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.77.0.tgz",
336
- "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.77.0.tgz",
337
- "@tryghost/staff-service": "file:components/tryghost-staff-service-5.77.0.tgz",
338
- "@tryghost/stats-service": "file:components/tryghost-stats-service-5.77.0.tgz",
339
- "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.77.0.tgz",
340
- "@tryghost/tiers": "file:components/tryghost-tiers-5.77.0.tgz",
341
- "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.77.0.tgz",
342
- "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.77.0.tgz",
343
- "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.77.0.tgz",
344
- "@tryghost/webmentions": "file:components/tryghost-webmentions-5.77.0.tgz"
267
+ "@tryghost/adapter-cache-memory-ttl": "file:components/tryghost-adapter-cache-memory-ttl-5.78.0.tgz",
268
+ "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.78.0.tgz",
269
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.78.0.tgz",
270
+ "@tryghost/announcement-bar-settings": "file:components/tryghost-announcement-bar-settings-5.78.0.tgz",
271
+ "@tryghost/api-framework": "file:components/tryghost-api-framework-5.78.0.tgz",
272
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.78.0.tgz",
273
+ "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.78.0.tgz",
274
+ "@tryghost/bookshelf-repository": "file:components/tryghost-bookshelf-repository-5.78.0.tgz",
275
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.78.0.tgz",
276
+ "@tryghost/collections": "file:components/tryghost-collections-5.78.0.tgz",
277
+ "@tryghost/constants": "file:components/tryghost-constants-5.78.0.tgz",
278
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.78.0.tgz",
279
+ "@tryghost/data-generator": "file:components/tryghost-data-generator-5.78.0.tgz",
280
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-5.78.0.tgz",
281
+ "@tryghost/donations": "file:components/tryghost-donations-5.78.0.tgz",
282
+ "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.78.0.tgz",
283
+ "@tryghost/email-addresses": "file:components/tryghost-email-addresses-5.78.0.tgz",
284
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.78.0.tgz",
285
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.78.0.tgz",
286
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.78.0.tgz",
287
+ "@tryghost/email-events": "file:components/tryghost-email-events-5.78.0.tgz",
288
+ "@tryghost/email-service": "file:components/tryghost-email-service-5.78.0.tgz",
289
+ "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.78.0.tgz",
290
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.78.0.tgz",
291
+ "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.78.0.tgz",
292
+ "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.78.0.tgz",
293
+ "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.78.0.tgz",
294
+ "@tryghost/i18n": "file:components/tryghost-i18n-5.78.0.tgz",
295
+ "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.78.0.tgz",
296
+ "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.78.0.tgz",
297
+ "@tryghost/in-memory-repository": "file:components/tryghost-in-memory-repository-5.78.0.tgz",
298
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-5.78.0.tgz",
299
+ "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.78.0.tgz",
300
+ "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.78.0.tgz",
301
+ "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.78.0.tgz",
302
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-5.78.0.tgz",
303
+ "@tryghost/mail-events": "file:components/tryghost-mail-events-5.78.0.tgz",
304
+ "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.78.0.tgz",
305
+ "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.78.0.tgz",
306
+ "@tryghost/member-events": "file:components/tryghost-member-events-5.78.0.tgz",
307
+ "@tryghost/members-api": "file:components/tryghost-members-api-5.78.0.tgz",
308
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-5.78.0.tgz",
309
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.78.0.tgz",
310
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-5.78.0.tgz",
311
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.78.0.tgz",
312
+ "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.78.0.tgz",
313
+ "@tryghost/milestones": "file:components/tryghost-milestones-5.78.0.tgz",
314
+ "@tryghost/minifier": "file:components/tryghost-minifier-5.78.0.tgz",
315
+ "@tryghost/model-to-domain-event-interceptor": "file:components/tryghost-model-to-domain-event-interceptor-5.78.0.tgz",
316
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.78.0.tgz",
317
+ "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.78.0.tgz",
318
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.78.0.tgz",
319
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.78.0.tgz",
320
+ "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.78.0.tgz",
321
+ "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.78.0.tgz",
322
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.78.0.tgz",
323
+ "@tryghost/nql-filter-expansions": "file:components/tryghost-nql-filter-expansions-5.78.0.tgz",
324
+ "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.78.0.tgz",
325
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-5.78.0.tgz",
326
+ "@tryghost/package-json": "file:components/tryghost-package-json-5.78.0.tgz",
327
+ "@tryghost/members-payments": "file:components/tryghost-members-payments-5.78.0.tgz",
328
+ "@tryghost/post-events": "file:components/tryghost-post-events-5.78.0.tgz",
329
+ "@tryghost/post-revisions": "file:components/tryghost-post-revisions-5.78.0.tgz",
330
+ "@tryghost/posts-service": "file:components/tryghost-posts-service-5.78.0.tgz",
331
+ "@tryghost/recommendations": "file:components/tryghost-recommendations-5.78.0.tgz",
332
+ "@tryghost/referrers": "file:components/tryghost-referrers-5.78.0.tgz",
333
+ "@tryghost/security": "file:components/tryghost-security-5.78.0.tgz",
334
+ "@tryghost/session-service": "file:components/tryghost-session-service-5.78.0.tgz",
335
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.78.0.tgz",
336
+ "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.78.0.tgz",
337
+ "@tryghost/staff-service": "file:components/tryghost-staff-service-5.78.0.tgz",
338
+ "@tryghost/stats-service": "file:components/tryghost-stats-service-5.78.0.tgz",
339
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.78.0.tgz",
340
+ "@tryghost/tiers": "file:components/tryghost-tiers-5.78.0.tgz",
341
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.78.0.tgz",
342
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.78.0.tgz",
343
+ "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.78.0.tgz",
344
+ "@tryghost/webmentions": "file:components/tryghost-webmentions-5.78.0.tgz"
345
345
  },
346
346
  "nx": {
347
347
  "targets": {