ghost 5.17.1 → 5.17.2

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 (89) hide show
  1. package/components/{tryghost-adapter-manager-5.17.1.tgz → tryghost-adapter-manager-5.17.2.tgz} +0 -0
  2. package/components/{tryghost-api-framework-5.17.1.tgz → tryghost-api-framework-5.17.2.tgz} +0 -0
  3. package/components/tryghost-api-version-compatibility-service-5.17.2.tgz +0 -0
  4. package/components/tryghost-bootstrap-socket-5.17.2.tgz +0 -0
  5. package/components/tryghost-constants-5.17.2.tgz +0 -0
  6. package/components/tryghost-custom-theme-settings-service-5.17.2.tgz +0 -0
  7. package/components/tryghost-domain-events-5.17.2.tgz +0 -0
  8. package/components/tryghost-email-analytics-provider-mailgun-5.17.2.tgz +0 -0
  9. package/components/{tryghost-email-analytics-service-5.17.1.tgz → tryghost-email-analytics-service-5.17.2.tgz} +0 -0
  10. package/components/tryghost-email-content-generator-5.17.2.tgz +0 -0
  11. package/components/tryghost-express-dynamic-redirects-5.17.2.tgz +0 -0
  12. package/components/{tryghost-extract-api-key-5.17.1.tgz → tryghost-extract-api-key-5.17.2.tgz} +0 -0
  13. package/components/{tryghost-html-to-plaintext-5.17.1.tgz → tryghost-html-to-plaintext-5.17.2.tgz} +0 -0
  14. package/components/{tryghost-job-manager-5.17.1.tgz → tryghost-job-manager-5.17.2.tgz} +0 -0
  15. package/components/{tryghost-link-redirects-5.17.1.tgz → tryghost-link-redirects-5.17.2.tgz} +0 -0
  16. package/components/tryghost-link-replacer-5.17.2.tgz +0 -0
  17. package/components/tryghost-link-tracking-5.17.2.tgz +0 -0
  18. package/components/tryghost-magic-link-5.17.2.tgz +0 -0
  19. package/components/tryghost-mailgun-client-5.17.2.tgz +0 -0
  20. package/components/tryghost-member-analytics-service-5.17.2.tgz +0 -0
  21. package/components/tryghost-member-attribution-5.17.2.tgz +0 -0
  22. package/components/tryghost-member-events-5.17.2.tgz +0 -0
  23. package/components/{tryghost-members-analytics-ingress-5.17.1.tgz → tryghost-members-analytics-ingress-5.17.2.tgz} +0 -0
  24. package/components/tryghost-members-api-5.17.2.tgz +0 -0
  25. package/components/tryghost-members-csv-5.17.2.tgz +0 -0
  26. package/components/tryghost-members-events-service-5.17.2.tgz +0 -0
  27. package/components/tryghost-members-importer-5.17.2.tgz +0 -0
  28. package/components/{tryghost-members-offers-5.17.1.tgz → tryghost-members-offers-5.17.2.tgz} +0 -0
  29. package/components/{tryghost-members-payments-5.17.1.tgz → tryghost-members-payments-5.17.2.tgz} +0 -0
  30. package/components/tryghost-members-ssr-5.17.2.tgz +0 -0
  31. package/components/tryghost-members-stripe-service-5.17.2.tgz +0 -0
  32. package/components/{tryghost-minifier-5.17.1.tgz → tryghost-minifier-5.17.2.tgz} +0 -0
  33. package/components/tryghost-mw-api-version-mismatch-5.17.2.tgz +0 -0
  34. package/components/tryghost-mw-cache-control-5.17.2.tgz +0 -0
  35. package/components/{tryghost-mw-error-handler-5.17.1.tgz → tryghost-mw-error-handler-5.17.2.tgz} +0 -0
  36. package/components/tryghost-mw-session-from-token-5.17.2.tgz +0 -0
  37. package/components/tryghost-mw-update-user-last-seen-5.17.2.tgz +0 -0
  38. package/components/tryghost-mw-vhost-5.17.2.tgz +0 -0
  39. package/components/tryghost-oembed-service-5.17.2.tgz +0 -0
  40. package/components/{tryghost-package-json-5.17.1.tgz → tryghost-package-json-5.17.2.tgz} +0 -0
  41. package/components/{tryghost-referrers-5.17.1.tgz → tryghost-referrers-5.17.2.tgz} +0 -0
  42. package/components/{tryghost-security-5.17.1.tgz → tryghost-security-5.17.2.tgz} +0 -0
  43. package/components/{tryghost-session-service-5.17.1.tgz → tryghost-session-service-5.17.2.tgz} +0 -0
  44. package/components/tryghost-settings-path-manager-5.17.2.tgz +0 -0
  45. package/components/{tryghost-staff-service-5.17.1.tgz → tryghost-staff-service-5.17.2.tgz} +0 -0
  46. package/components/{tryghost-stats-service-5.17.1.tgz → tryghost-stats-service-5.17.2.tgz} +0 -0
  47. package/components/tryghost-update-check-service-5.17.2.tgz +0 -0
  48. package/components/{tryghost-verification-trigger-5.17.1.tgz → tryghost-verification-trigger-5.17.2.tgz} +0 -0
  49. package/components/{tryghost-version-notifications-data-service-5.17.1.tgz → tryghost-version-notifications-data-service-5.17.2.tgz} +0 -0
  50. package/core/built/admin/assets/{chunk.143.a252ca5afc89e52c049a.js → chunk.143.3f2f5cbbd1ef4b1425d9.js} +5 -5
  51. package/core/built/admin/assets/{chunk.178.23e9f243eba5320fe15b.js → chunk.178.8fa31be80e639cbd2df2.js} +4 -4
  52. package/core/built/admin/assets/{ghost-fa7772f8aa2522b3935efed71fa75619.js → ghost-3577dfa3f54651db5ae5b9fd3d9b2824.js} +7 -7
  53. package/core/built/admin/index.html +2 -2
  54. package/core/server/api/endpoints/member-signin-urls.js +1 -1
  55. package/core/server/services/members/middleware.js +1 -0
  56. package/core/server/web/members/app.js +9 -1
  57. package/core/server/web/shared/middleware/api/spam-prevention.js +65 -9
  58. package/core/server/web/shared/middleware/brute.js +8 -0
  59. package/core/shared/config/defaults.json +7 -1
  60. package/package.json +92 -92
  61. package/components/tryghost-api-version-compatibility-service-5.17.1.tgz +0 -0
  62. package/components/tryghost-bootstrap-socket-5.17.1.tgz +0 -0
  63. package/components/tryghost-constants-5.17.1.tgz +0 -0
  64. package/components/tryghost-custom-theme-settings-service-5.17.1.tgz +0 -0
  65. package/components/tryghost-domain-events-5.17.1.tgz +0 -0
  66. package/components/tryghost-email-analytics-provider-mailgun-5.17.1.tgz +0 -0
  67. package/components/tryghost-email-content-generator-5.17.1.tgz +0 -0
  68. package/components/tryghost-express-dynamic-redirects-5.17.1.tgz +0 -0
  69. package/components/tryghost-link-replacer-5.17.1.tgz +0 -0
  70. package/components/tryghost-link-tracking-5.17.1.tgz +0 -0
  71. package/components/tryghost-magic-link-5.17.1.tgz +0 -0
  72. package/components/tryghost-mailgun-client-5.17.1.tgz +0 -0
  73. package/components/tryghost-member-analytics-service-5.17.1.tgz +0 -0
  74. package/components/tryghost-member-attribution-5.17.1.tgz +0 -0
  75. package/components/tryghost-member-events-5.17.1.tgz +0 -0
  76. package/components/tryghost-members-api-5.17.1.tgz +0 -0
  77. package/components/tryghost-members-csv-5.17.1.tgz +0 -0
  78. package/components/tryghost-members-events-service-5.17.1.tgz +0 -0
  79. package/components/tryghost-members-importer-5.17.1.tgz +0 -0
  80. package/components/tryghost-members-ssr-5.17.1.tgz +0 -0
  81. package/components/tryghost-members-stripe-service-5.17.1.tgz +0 -0
  82. package/components/tryghost-mw-api-version-mismatch-5.17.1.tgz +0 -0
  83. package/components/tryghost-mw-cache-control-5.17.1.tgz +0 -0
  84. package/components/tryghost-mw-session-from-token-5.17.1.tgz +0 -0
  85. package/components/tryghost-mw-update-user-last-seen-5.17.1.tgz +0 -0
  86. package/components/tryghost-mw-vhost-5.17.1.tgz +0 -0
  87. package/components/tryghost-oembed-service-5.17.1.tgz +0 -0
  88. package/components/tryghost-settings-path-manager-5.17.1.tgz +0 -0
  89. package/components/tryghost-update-check-service-5.17.1.tgz +0 -0
@@ -9,8 +9,8 @@ return Array.isArray(e.tiers)&&(s=e.tiers.map((e=>e.name)).join(",")),{id:e.id,e
9
9
  return s.unparse(t,{columns:r})}},96616:(e,r,t)=>{var n={"./af":21516,"./af.js":21516,"./ar":14874,"./ar-dz":83760,"./ar-dz.js":83760,"./ar-kw":73410,"./ar-kw.js":73410,"./ar-ly":27521,"./ar-ly.js":27521,"./ar-ma":54215,"./ar-ma.js":54215,"./ar-sa":67839,"./ar-sa.js":67839,"./ar-tn":15676,"./ar-tn.js":15676,"./ar.js":14874,"./az":90189,"./az.js":90189,"./be":97510,"./be.js":97510,"./bg":49715,"./bg.js":49715,"./bm":53263,"./bm.js":53263,"./bn":86751,"./bn.js":86751,"./bo":22257,"./bo.js":22257,"./br":66699,"./br.js":66699,"./bs":46338,"./bs.js":46338,"./ca":75498,"./ca.js":75498,"./cs":36471,"./cs.js":36471,"./cv":12500,"./cv.js":12500,"./cy":621,"./cy.js":621,"./da":82493,"./da.js":82493,"./de":56272,"./de-at":70500,"./de-at.js":70500,"./de-ch":71393,"./de-ch.js":71393,"./de.js":56272,"./dv":90967,"./dv.js":90967,"./el":85716,"./el.js":85716,"./en-SG":72902,"./en-SG.js":72902,"./en-au":32645,"./en-au.js":32645,"./en-ca":10280,"./en-ca.js":10280,"./en-gb":31961,"./en-gb.js":31961,"./en-ie":19065,"./en-ie.js":19065,"./en-il":5628,"./en-il.js":5628,"./en-nz":81286,"./en-nz.js":81286,"./eo":37600,"./eo.js":37600,"./es":62109,"./es-do":94611,"./es-do.js":94611,"./es-us":86896,"./es-us.js":86896,"./es.js":62109,"./et":2962,"./et.js":2962,"./eu":30384,"./eu.js":30384,"./fa":35676,"./fa.js":35676,"./fi":18080,"./fi.js":18080,"./fo":99493,"./fo.js":99493,"./fr":59714,"./fr-ca":29035,"./fr-ca.js":29035,"./fr-ch":47594,"./fr-ch.js":47594,"./fr.js":59714,"./fy":10798,"./fy.js":10798,"./ga":62396,"./ga.js":62396,"./gd":95213,"./gd.js":95213,"./gl":85410,"./gl.js":85410,"./gom-latn":88448,"./gom-latn.js":88448,"./gu":97920,"./gu.js":97920,"./he":21797,"./he.js":21797,"./hi":35546,"./hi.js":35546,"./hr":17034,"./hr.js":17034,"./hu":80081,"./hu.js":80081,"./hy-am":2143,"./hy-am.js":2143,"./id":84909,"./id.js":84909,"./is":8002,"./is.js":8002,"./it":59658,"./it-ch":19126,"./it-ch.js":19126,"./it.js":59658,"./ja":47e3,"./ja.js":47e3,"./jv":97205,"./jv.js":97205,"./ka":31706,"./ka.js":31706,"./kk":34894,"./kk.js":34894,"./km":34679,"./km.js":34679,"./kn":89203,"./kn.js":89203,"./ko":87538,"./ko.js":87538,"./ku":62808,"./ku.js":62808,"./ky":95378,"./ky.js":95378,"./lb":12396,"./lb.js":12396,"./lo":90732,"./lo.js":90732,"./lt":59313,"./lt.js":59313,"./lv":8909,"./lv.js":8909,"./me":75539,"./me.js":75539,"./mi":7384,"./mi.js":7384,"./mk":75114,"./mk.js":75114,"./ml":12586,"./ml.js":12586,"./mn":66423,"./mn.js":66423,"./mr":27128,"./mr.js":27128,"./ms":45547,"./ms-my":38106,"./ms-my.js":38106,"./ms.js":45547,"./mt":20114,"./mt.js":20114,"./my":11573,"./my.js":11573,"./nb":49022,"./nb.js":49022,"./ne":88212,"./ne.js":88212,"./nl":47862,"./nl-be":19116,"./nl-be.js":19116,"./nl.js":47862,"./nn":34010,"./nn.js":34010,"./pa-in":80815,"./pa-in.js":80815,"./pl":18099,"./pl.js":18099,"./pt":14527,"./pt-br":81180,"./pt-br.js":81180,"./pt.js":14527,"./ro":74683,"./ro.js":74683,"./ru":41760,"./ru.js":41760,"./sd":79717,"./sd.js":79717,"./se":84167,"./se.js":84167,"./si":72568,"./si.js":72568,"./sk":13702,"./sk.js":13702,"./sl":49968,"./sl.js":49968,"./sq":77303,"./sq.js":77303,"./sr":4993,"./sr-cyrl":98961,"./sr-cyrl.js":98961,"./sr.js":4993,"./ss":6870,"./ss.js":6870,"./sv":92034,"./sv.js":92034,"./sw":51481,"./sw.js":51481,"./ta":208,"./ta.js":208,"./te":36006,"./te.js":36006,"./tet":68816,"./tet.js":68816,"./tg":77378,"./tg.js":77378,"./th":69125,"./th.js":69125,"./tl-ph":43406,"./tl-ph.js":43406,"./tlh":53361,"./tlh.js":53361,"./tr":84119,"./tr.js":84119,"./tzl":47778,"./tzl.js":47778,"./tzm":12617,"./tzm-latn":97187,"./tzm-latn.js":97187,"./tzm.js":12617,"./ug-cn":10438,"./ug-cn.js":10438,"./uk":38128,"./uk.js":38128,"./ur":15367,"./ur.js":15367,"./uz":51582,"./uz-latn":70009,"./uz-latn.js":70009,"./uz.js":51582,"./vi":49036,"./vi.js":49036,"./x-pseudo":11950,"./x-pseudo.js":11950,"./yo":48249,"./yo.js":48249,"./zh-cn":39512,"./zh-cn.js":39512,"./zh-hk":74792,"./zh-hk.js":74792,"./zh-tw":23931,"./zh-tw.js":23931}
10
10
  function s(e){var r=o(e)
11
11
  return t(r)}function o(e){if(!t.o(n,e)){var r=new Error("Cannot find module '"+e+"'")
12
- 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},22644:(e,r,t)=>{var n,s
13
- e.exports=(n=_eai_d,s=_eai_r,window.emberAutoImportDynamic=function(e){return 1===arguments.length?s("_eai_dyn_"+e):s("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return s("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},n("@joeattardi/emoji-button",[],(function(){return t(28936)})),n("@sentry/browser",[],(function(){return t(17435)})),n("@sentry/utils",[],(function(){return t(59517)})),n("@tryghost/color-utils",[],(function(){return t(82485)})),n("@tryghost/helpers",[],(function(){return t(74752)})),n("@tryghost/kg-clean-basic-html",[],(function(){return t(89096)})),n("@tryghost/kg-parser-plugins",[],(function(){return t(3199)})),n("@tryghost/kg-parser-plugins/lib/cards/softReturn",[],(function(){return t(74557)})),n("@tryghost/limit-service",[],(function(){return t(12336)})),n("@tryghost/members-csv/lib/unparse",[],(function(){return t(91883)})),n("@tryghost/nql-lang",[],(function(){return t(75420)})),n("@tryghost/string",[],(function(){return t(57348)})),n("@tryghost/timezone-data",[],(function(){return t(28961)})),n("element-resize-detector",[],(function(){return t(87381)})),n("ember-css-transitions/modifiers/css-transition.js",[],(function(){return t(56112)})),n("ember-keyboard",[],(function(){return t(86771)})),n("ember-keyboard/helpers/if-key.js",[],(function(){return t(43481)})),n("ember-keyboard/helpers/on-key.js",[],(function(){return t(66415)})),n("ember-keyboard/modifiers/on-key.js",[],(function(){return t(4146)})),n("ember-keyboard/services/keyboard.js",[],(function(){return t(35466)})),n("ember-moment/helpers/-base.js",[],(function(){return t(76465)})),n("ember-moment/helpers/is-after.js",[],(function(){return t(876)})),n("ember-moment/helpers/is-before.js",[],(function(){return t(13971)})),n("ember-moment/helpers/is-between.js",[],(function(){return t(2063)})),n("ember-moment/helpers/is-same-or-after.js",[],(function(){return t(12915)})),n("ember-moment/helpers/is-same-or-before.js",[],(function(){return t(46102)})),n("ember-moment/helpers/is-same.js",[],(function(){return t(71465)})),n("ember-moment/helpers/moment-add.js",[],(function(){return t(64462)})),n("ember-moment/helpers/moment-calendar.js",[],(function(){return t(69021)})),n("ember-moment/helpers/moment-diff.js",[],(function(){return t(95198)})),n("ember-moment/helpers/moment-duration.js",[],(function(){return t(17216)})),n("ember-moment/helpers/moment-format.js",[],(function(){return t(99152)})),n("ember-moment/helpers/moment-from-now.js",[],(function(){return t(16396)})),n("ember-moment/helpers/moment-from.js",[],(function(){return t(48478)})),n("ember-moment/helpers/moment-subtract.js",[],(function(){return t(4647)})),n("ember-moment/helpers/moment-to-date.js",[],(function(){return t(18351)})),n("ember-moment/helpers/moment-to-now.js",[],(function(){return t(94612)})),n("ember-moment/helpers/moment-to.js",[],(function(){return t(91857)})),n("ember-moment/helpers/moment.js",[],(function(){return t(26852)})),n("ember-moment/helpers/now.js",[],(function(){return t(67842)})),n("ember-moment/helpers/unix.js",[],(function(){return t(29700)})),n("ember-moment/helpers/utc.js",[],(function(){return t(71755)})),n("ember-moment/services/moment.js",[],(function(){return t(27475)})),n("fast-deep-equal",[],(function(){return t(64710)})),n("focus-trap",[],(function(){return t(10755)})),n("intersection-observer-admin",[],(function(){return t(77577)})),n("markdown-it",[],(function(){return t(77647)})),n("markdown-it-footnote",[],(function(){return t(41297)})),n("markdown-it-lazy-headers",[],(function(){return t(72553)})),n("markdown-it-mark",[],(function(){return t(76519)})),n("markdown-it-sub",[],(function(){return t(8830)})),n("markdown-it-sup",[],(function(){return t(55977)})),n("moment-timezone",[],(function(){return t(19127)})),n("papaparse",[],(function(){return t(99112)})),n("raf-pool",[],(function(){return t(42586)})),n("react",[],(function(){return t(11591)})),n("react-dom",[],(function(){return t(96027)})),n("react-dom/client",[],(function(){return t(22609)})),n("tooltip.js",[],(function(){return t(15028)})),n("validator",[],(function(){return t(2228)})),void n("_eai_dyn_@sentry/tracing",[],(function(){return t.e(174).then(t.bind(t,43174))})))},41851:function(e,r){window._eai_r=require,window._eai_d=define},25831:e=>{"use strict"
12
+ 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},76308:(e,r,t)=>{var n,s
13
+ e.exports=(n=_eai_d,s=_eai_r,window.emberAutoImportDynamic=function(e){return 1===arguments.length?s("_eai_dyn_"+e):s("_eai_dynt_"+e)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(e){return s("_eai_sync_"+e)(Array.prototype.slice.call(arguments,1))},n("@joeattardi/emoji-button",[],(function(){return t(28936)})),n("@sentry/browser",[],(function(){return t(17435)})),n("@sentry/utils",[],(function(){return t(59517)})),n("@tryghost/color-utils",[],(function(){return t(82485)})),n("@tryghost/helpers",[],(function(){return t(74752)})),n("@tryghost/kg-clean-basic-html",[],(function(){return t(89096)})),n("@tryghost/kg-parser-plugins",[],(function(){return t(3199)})),n("@tryghost/kg-parser-plugins/lib/cards/softReturn",[],(function(){return t(74557)})),n("@tryghost/limit-service",[],(function(){return t(12336)})),n("@tryghost/members-csv/lib/unparse",[],(function(){return t(91883)})),n("@tryghost/nql-lang",[],(function(){return t(75420)})),n("@tryghost/string",[],(function(){return t(57348)})),n("@tryghost/timezone-data",[],(function(){return t(28961)})),n("element-resize-detector",[],(function(){return t(87381)})),n("ember-css-transitions/modifiers/css-transition.js",[],(function(){return t(56112)})),n("ember-keyboard",[],(function(){return t(86771)})),n("ember-keyboard/helpers/if-key.js",[],(function(){return t(43481)})),n("ember-keyboard/helpers/on-key.js",[],(function(){return t(66415)})),n("ember-keyboard/modifiers/on-key.js",[],(function(){return t(4146)})),n("ember-keyboard/services/keyboard.js",[],(function(){return t(35466)})),n("ember-moment/helpers/-base.js",[],(function(){return t(76465)})),n("ember-moment/helpers/is-after.js",[],(function(){return t(876)})),n("ember-moment/helpers/is-before.js",[],(function(){return t(13971)})),n("ember-moment/helpers/is-between.js",[],(function(){return t(2063)})),n("ember-moment/helpers/is-same-or-after.js",[],(function(){return t(12915)})),n("ember-moment/helpers/is-same-or-before.js",[],(function(){return t(46102)})),n("ember-moment/helpers/is-same.js",[],(function(){return t(71465)})),n("ember-moment/helpers/moment-add.js",[],(function(){return t(64462)})),n("ember-moment/helpers/moment-calendar.js",[],(function(){return t(69021)})),n("ember-moment/helpers/moment-diff.js",[],(function(){return t(95198)})),n("ember-moment/helpers/moment-duration.js",[],(function(){return t(17216)})),n("ember-moment/helpers/moment-format.js",[],(function(){return t(99152)})),n("ember-moment/helpers/moment-from-now.js",[],(function(){return t(16396)})),n("ember-moment/helpers/moment-from.js",[],(function(){return t(48478)})),n("ember-moment/helpers/moment-subtract.js",[],(function(){return t(4647)})),n("ember-moment/helpers/moment-to-date.js",[],(function(){return t(18351)})),n("ember-moment/helpers/moment-to-now.js",[],(function(){return t(94612)})),n("ember-moment/helpers/moment-to.js",[],(function(){return t(91857)})),n("ember-moment/helpers/moment.js",[],(function(){return t(26852)})),n("ember-moment/helpers/now.js",[],(function(){return t(67842)})),n("ember-moment/helpers/unix.js",[],(function(){return t(29700)})),n("ember-moment/helpers/utc.js",[],(function(){return t(71755)})),n("ember-moment/services/moment.js",[],(function(){return t(27475)})),n("fast-deep-equal",[],(function(){return t(64710)})),n("focus-trap",[],(function(){return t(10755)})),n("intersection-observer-admin",[],(function(){return t(77577)})),n("markdown-it",[],(function(){return t(77647)})),n("markdown-it-footnote",[],(function(){return t(41297)})),n("markdown-it-lazy-headers",[],(function(){return t(72553)})),n("markdown-it-mark",[],(function(){return t(76519)})),n("markdown-it-sub",[],(function(){return t(8830)})),n("markdown-it-sup",[],(function(){return t(55977)})),n("moment-timezone",[],(function(){return t(19127)})),n("papaparse",[],(function(){return t(99112)})),n("raf-pool",[],(function(){return t(42586)})),n("react",[],(function(){return t(11591)})),n("react-dom",[],(function(){return t(96027)})),n("react-dom/client",[],(function(){return t(22609)})),n("tooltip.js",[],(function(){return t(15028)})),n("validator",[],(function(){return t(2228)})),void n("_eai_dyn_@sentry/tracing",[],(function(){return t.e(174).then(t.bind(t,43174))})))},5717:function(e,r){window._eai_r=require,window._eai_d=define},25831:e=>{"use strict"
14
14
  e.exports=require("ember-modifier")},11975:()=>{}},s={}
15
15
  function o(e){var r=s[e]
16
16
  if(void 0!==r)return r.exports
@@ -42,8 +42,8 @@ var r=(r,t)=>{var n,s,[i,u,a]=t,m=0
42
42
  if(i.some((r=>0!==e[r]))){for(n in u)o.o(u,n)&&(o.m[n]=u[n])
43
43
  if(a)var l=a(o)}for(r&&r(t);m<i.length;m++)s=i[m],o.o(e,s)&&e[s]&&e[s][0](),e[s]=0
44
44
  return o.O(l)},t=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
45
- t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),o.O(void 0,[579],(()=>o(o.s=41851)))
46
- var i=o.O(void 0,[579],(()=>o(o.s=22644)))
45
+ t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),o.O(void 0,[579],(()=>o(o.s=5717)))
46
+ var i=o.O(void 0,[579],(()=>o(o.s=76308)))
47
47
  i=o.O(i),__ember_auto_import__=i})()
48
48
 
49
- //# sourceMappingURL=chunk.143.a252ca5afc89e52c049a.map
49
+ //# sourceMappingURL=chunk.143.3f2f5cbbd1ef4b1425d9.map
@@ -1,11 +1,11 @@
1
- var __ember_auto_import__;(()=>{var r={41851:function(r,e){window._eai_r=require,window._eai_d=define},82797:r=>{r.exports=function(){_eai_d
1
+ var __ember_auto_import__;(()=>{var r={5717:function(r,e){window._eai_r=require,window._eai_d=define},21573: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(41851)
8
- var _=t(82797)
7
+ return r[_].call(i.exports,i,i.exports,t),i.exports}t(5717)
8
+ var _=t(21573)
9
9
  __ember_auto_import__=_})()
10
10
 
11
- //# sourceMappingURL=chunk.178.23e9f243eba5320fe15b.map
11
+ //# sourceMappingURL=chunk.178.8fa31be80e639cbd2df2.map
@@ -107,14 +107,14 @@ let l=(i=Ember._action,n=Ember._action,r=class extends t.default{constructor(){s
107
107
  e.default=l,Ember._setComponentTemplate(o,l)})),define("ghost-admin/components/dashboard/charts/anchor-attribution",["exports","@glimmer/component","moment-timezone","ghost-admin/utils/currency","ghost-admin/helpers/gh-price-amount"],(function(e,t,i,n,r){var a,s,o,l,u,d,c,p,m,h,b,g,f
108
108
  function v(e,t,i,n){i&&Object.defineProperty(e,t,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(n):void 0})}function y(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function w(e,t,i,n,r){var a={}
109
109
  return Object.keys(n).forEach((function(e){a[e]=n[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=i.slice().reverse().reduce((function(i,n){return n(e,t,i)||i}),a),r&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(r):void 0,a.initializer=void 0),void 0===a.initializer&&(Object.defineProperty(e,t,a),a=null),a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0
110
- const E=Ember.HTMLBars.template({id:"/RCxLQjw",block:'{"symbols":["option"],"statements":[[11,"section"],[24,0,"gh-dashboard-section gh-dashboard-anchor"],[4,[38,5],[[32,0,["loadCharts"]]],null],[12],[2,"\\n "],[10,"article"],[14,0,"gh-dashboard-box"],[12],[2,"\\n"],[6,[37,1],[[32,0,["hasPaidTiers"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-dashboard-select-title gh-dashboard-select-title-attribution"],[12],[2,"\\n "],[8,"power-select",[],[["@selected","@options","@searchEnabled","@onChange","@triggerComponent","@triggerClass","@dropdownClass","@matchTriggerWidth","@horizontalPosition"],[[32,0,["selectedDisplayOption"]],[32,0,["displayOptions"]],false,[32,0,["onDisplayChange"]],[30,[36,3],["gh-power-select/trigger"],null],"gh-contentfilter-menu-trigger","gh-contentfilter-menu-dropdown is-narrow",false,"left"]],[["default"],[{"statements":[[2,"\\n "],[6,[37,1],[[32,1,["name"]]],null,[["default","else"],[{"statements":[[1,[32,1,["name"]]]],"parameters":[]},{"statements":[[10,"span"],[14,0,"red"],[12],[2,"Unknown option"],[13]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["chartDisplay"]],"mrr"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"dashboard/parts/metric",[],[["@value","@trends","@percentage","@large","@embedded"],[[31,[[32,0,["chartMetric","total"]]]],[32,0,["hasTrends"]],[32,0,["chartMetric","trend"]],true,true]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"dashboard/parts/metric",[],[["@value","@trends","@large","@embedded"],["",false,true,true]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,"dashboard/parts/metric",[],[["@label","@value","@trends","@percentage","@large"],["Total members",[30,[36,2],[[32,0,["totalMembers"]]],null],[32,0,["hasTrends"]],[32,0,["totalMembersTrend"]],true]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[10,"div"],[15,0,[31,["gh-dashboard-hero ",[30,[36,6],[[32,0,["hasPaidTiers"]],"is-solo"],null]," ",[30,[36,1],[[30,[36,0],["sourceAttribution"],null],"source-attribution"],null]]]],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart gh-dashboard-totals"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart-container"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart-box"],[12],[2,"\\n"],[6,[37,1],[[32,0,["loading"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-dashboard-chart-loading"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-loading-spinner"],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"gh-dashboard-fader"],[12],[2,"\\n "],[8,"ember-chart",[],[["@type","@data","@options","@height"],[[32,0,["chartType"]],[32,0,["chartData"]],[32,0,["chartOptions"]],200]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[14,1,"gh-dashboard-anchor-tooltip"],[14,0,"gh-dashboard-tooltip"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-tooltip-label"],[12],[2,"\\n -\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-tooltip-value"],[12],[2,"\\n "],[10,"span"],[14,0,"indicator line"],[12],[13],[2,"\\n "],[10,"span"],[14,0,"value"],[12],[2,"–"],[13],[2,"\\n "],[10,"span"],[14,0,"metric"],[12],[1,[32,0,["selectedDisplayOption","name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart-ticks"],[12],[2,"\\n "],[10,"span"],[14,1,"gh-dashboard-anchor-date-start"],[12],[2,"-"],[13],[2,"\\n "],[10,"span"],[14,1,"gh-dashboard-anchor-date-end"],[12],[2,"-"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,1],[[32,0,["hasPaidTiers"]]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,0],["sourceAttribution"],null]],null,[["default","else"],[{"statements":[],"parameters":[]},{"statements":[[2," "],[10,"article"],[14,0,"gh-dashboard-minicharts"],[12],[2,"\\n "],[8,"dashboard/charts/paid-mrr",[],[[],[]],null],[2,"\\n "],[8,"dashboard/charts/paid-breakdown",[],[[],[]],null],[2,"\\n "],[8,"dashboard/charts/paid-mix",[],[[],[]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["feature","if","format-number","component","eq","did-insert","unless"]}',moduleName:"ghost-admin/components/dashboard/charts/anchor-attribution.hbs"}),k="D MMM, YYYY",O=[{name:"MRR",value:"mrr"},{name:"Total members",value:"total"},{name:"Paid members",value:"paid"},{name:"Free members",value:"free"}]
110
+ const E=Ember.HTMLBars.template({id:"sSh1EJIm",block:'{"symbols":["option"],"statements":[[11,"section"],[24,0,"gh-dashboard-section gh-dashboard-anchor"],[4,[38,5],[[32,0,["loadCharts"]]],null],[12],[2,"\\n "],[10,"article"],[14,0,"gh-dashboard-box"],[12],[2,"\\n"],[6,[37,1],[[32,0,["hasPaidTiers"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-dashboard-select-title gh-dashboard-select-title-attribution"],[12],[2,"\\n "],[8,"power-select",[],[["@selected","@options","@searchEnabled","@onChange","@triggerComponent","@triggerClass","@dropdownClass","@matchTriggerWidth","@horizontalPosition"],[[32,0,["selectedDisplayOption"]],[32,0,["displayOptions"]],false,[32,0,["onDisplayChange"]],[30,[36,3],["gh-power-select/trigger"],null],"gh-contentfilter-menu-trigger","gh-contentfilter-menu-dropdown is-narrow",false,"left"]],[["default"],[{"statements":[[2,"\\n "],[6,[37,1],[[32,1,["name"]]],null,[["default","else"],[{"statements":[[1,[32,1,["name"]]]],"parameters":[]},{"statements":[[10,"span"],[14,0,"red"],[12],[2,"Unknown option"],[13]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,1],[[30,[36,4],[[32,0,["selectedChartDisplay"]],"mrr"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"dashboard/parts/metric",[],[["@value","@trends","@percentage","@large","@embedded"],[[31,[[32,0,["chartMetric","total"]]]],[32,0,["hasTrends"]],[32,0,["chartMetric","trend"]],true,true]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"dashboard/parts/metric",[],[["@value","@trends","@large","@embedded"],["",false,true,true]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,"dashboard/parts/metric",[],[["@label","@value","@trends","@percentage","@large"],["Total members",[30,[36,2],[[32,0,["totalMembers"]]],null],[32,0,["hasTrends"]],[32,0,["totalMembersTrend"]],true]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[10,"div"],[15,0,[31,["gh-dashboard-hero ",[30,[36,6],[[32,0,["hasPaidTiers"]],"is-solo"],null]," ",[30,[36,1],[[30,[36,0],["sourceAttribution"],null],"source-attribution"],null]]]],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart gh-dashboard-totals"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart-container"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart-box"],[12],[2,"\\n"],[6,[37,1],[[32,0,["loading"]]],null,[["default","else"],[{"statements":[[2," "],[10,"div"],[14,0,"gh-dashboard-chart-loading"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-loading-spinner"],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"gh-dashboard-fader"],[12],[2,"\\n "],[8,"ember-chart",[],[["@type","@data","@options","@height"],[[32,0,["chartType"]],[32,0,["chartData"]],[32,0,["chartOptions"]],200]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[14,1,"gh-dashboard-anchor-tooltip"],[14,0,"gh-dashboard-tooltip"],[12],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-tooltip-label"],[12],[2,"\\n -\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-tooltip-value"],[12],[2,"\\n "],[10,"span"],[14,0,"indicator line"],[12],[13],[2,"\\n "],[10,"span"],[14,0,"value"],[12],[2,"–"],[13],[2,"\\n "],[10,"span"],[14,0,"metric"],[12],[1,[32,0,["selectedDisplayOption","name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"gh-dashboard-chart-ticks"],[12],[2,"\\n "],[10,"span"],[14,1,"gh-dashboard-anchor-date-start"],[12],[2,"-"],[13],[2,"\\n "],[10,"span"],[14,1,"gh-dashboard-anchor-date-end"],[12],[2,"-"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,1],[[32,0,["hasPaidTiers"]]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,0],["sourceAttribution"],null]],null,[["default","else"],[{"statements":[],"parameters":[]},{"statements":[[2," "],[10,"article"],[14,0,"gh-dashboard-minicharts"],[12],[2,"\\n "],[8,"dashboard/charts/paid-mrr",[],[[],[]],null],[2,"\\n "],[8,"dashboard/charts/paid-breakdown",[],[[],[]],null],[2,"\\n "],[8,"dashboard/charts/paid-mix",[],[[],[]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["feature","if","format-number","component","eq","did-insert","unless"]}',moduleName:"ghost-admin/components/dashboard/charts/anchor-attribution.hbs"}),k="D MMM, YYYY",O=[{name:"MRR",value:"mrr"},{name:"Total members",value:"total"},{name:"Paid members",value:"paid"},{name:"Free members",value:"free"}]
111
111
  Chart.defaults.hoverLine=Chart.defaults.line,Chart.controllers.hoverLine=Chart.controllers.line.extend({draw:function(e){if(Chart.controllers.line.prototype.draw.call(this,e),this.chart.tooltip._active&&this.chart.tooltip._active.length){let e=this.chart.tooltip._active[0],t=this.chart.ctx,i=e.tooltipPosition().x,n=this.chart.legend.bottom,r=this.chart.chartArea.bottom
112
112
  t.save(),t.beginPath(),t.moveTo(i,n),t.lineTo(i,r),t.setLineDash([3,4]),t.lineWidth=1,t.strokeStyle="#7C8B9A",t.stroke(),t.restore()}}})
113
- let P=(a=Ember.inject.service,s=Ember.inject.service,o=Ember._tracked,l=Ember._tracked,u=Ember._tracked,d=Ember._action,c=Ember._action,p=class extends t.default{constructor(){super(...arguments),v(this,"dashboardStats",m,this),v(this,"feature",h,this),v(this,"chartDisplay",b,this),v(this,"resizing",g,this),v(this,"resizeTimer",f,this),y(this,"displayOptions",O),y(this,"resizer",(()=>{this.resizing=!0,clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout((()=>{this.resizing=!1}),500)}))}willDestroy(){super.willDestroy(...arguments),window.removeEventListener("resize",this.resizer,!1)}loadCharts(){this.dashboardStats.loadMemberCountStats(),window.addEventListener("resize",this.resizer,!1),this.hasPaidTiers&&this.dashboardStats.loadMrrStats()}onDisplayChange(e){this.chartDisplay=e.value}get chartMetric(){return"mrr"===this.chartDisplay?{total:this.currentMRRFormatted,trend:this.mrrTrend}:{}}get selectedDisplayOption(){return this.displayOptions.find((e=>e.value===this.chartDisplay))??this.displayOptions[0]}get loading(){return null===this.dashboardStats.memberCountStats||null===this.dashboardStats.mrrStats||this.resizing}get currentMRR(){return this.dashboardStats.currentMRR??0}get currentMRRFormatted(){if(this.isTotalMembersZero)return"$123"
113
+ let P=(a=Ember.inject.service,s=Ember.inject.service,o=Ember._tracked,l=Ember._tracked,u=Ember._tracked,d=Ember._action,c=Ember._action,p=class extends t.default{constructor(){super(...arguments),v(this,"dashboardStats",m,this),v(this,"feature",h,this),v(this,"chartDisplay",b,this),v(this,"resizing",g,this),v(this,"resizeTimer",f,this),y(this,"displayOptions",O),y(this,"resizer",(()=>{this.resizing=!0,clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout((()=>{this.resizing=!1}),500)}))}willDestroy(){super.willDestroy(...arguments),window.removeEventListener("resize",this.resizer,!1)}loadCharts(){this.dashboardStats.loadMemberCountStats(),window.addEventListener("resize",this.resizer,!1),this.hasPaidTiers&&this.dashboardStats.loadMrrStats()}onDisplayChange(e){this.chartDisplay=e.value}get selectedChartDisplay(){return this.hasPaidTiers||"mrr"!==this.chartDisplay?this.chartDisplay:"total"}get chartMetric(){return"mrr"===this.selectedChartDisplay?{total:this.currentMRRFormatted,trend:this.mrrTrend}:{}}get selectedDisplayOption(){return this.displayOptions.find((e=>e.value===this.selectedChartDisplay))??this.displayOptions[0]}get loading(){return null===this.dashboardStats.memberCountStats||this.hasPaidTiers&&null===this.dashboardStats.mrrStats||this.resizing}get currentMRR(){return this.dashboardStats.currentMRR??0}get currentMRRFormatted(){if(this.isTotalMembersZero)return"$123"
114
114
  if(null===this.dashboardStats.mrrStats)return"-"
115
115
  const e=(0,r.ghPriceAmount)(this.currentMRR,{cents:!1})
116
- return`${this.mrrCurrencySymbol}${e}`}get totalMembers(){return this.dashboardStats.memberCounts?.total??0}get isTotalMembersZero(){return this.dashboardStats.memberCounts&&0===this.totalMembers}get paidMembers(){return this.dashboardStats.memberCounts?.paid??0}get freeMembers(){return this.dashboardStats.memberCounts?.free??0}get hasTrends(){return null!==this.dashboardStats.memberCounts&&null!==this.dashboardStats.memberCountsTrend}get totalMembersTrend(){return this.dashboardStats.memberCountsTrend?this.calculatePercentage(this.dashboardStats.memberCountsTrend.total,this.dashboardStats.memberCounts.total):0}get paidMembersTrend(){return this.dashboardStats.memberCountsTrend?this.calculatePercentage(this.dashboardStats.memberCountsTrend.paid,this.dashboardStats.memberCounts.paid):0}get freeMembersTrend(){return this.dashboardStats.memberCountsTrend?this.calculatePercentage(this.dashboardStats.memberCountsTrend.free,this.dashboardStats.memberCounts.free):0}get mrrTrend(){return this.dashboardStats.currentMRRTrend?this.calculatePercentage(this.dashboardStats.currentMRRTrend,this.dashboardStats.currentMRR):0}get hasPaidTiers(){return this.dashboardStats.siteStatus?.hasPaidTiers}get chartType(){return"hoverLine"}get chartTitle(){return"paid"===this.chartDisplay?"Paid members":"free"===this.chartDisplay?"Free members":"mrr"===this.chartDisplay?"MRR":"Total members"}get chartData(){let e,t,i
117
- "paid"===this.chartDisplay?(e=this.dashboardStats.filledMemberCountStats,t=e.map((e=>e.date)),i=e.map((e=>e.paid+e.comped))):"free"===this.chartDisplay?(e=this.dashboardStats.filledMemberCountStats,t=e.map((e=>e.date)),i=e.map((e=>e.free))):"mrr"===this.chartDisplay?(e=this.dashboardStats.filledMrrStats,t=e.map((e=>e.date)),i=e.map((e=>e.mrr))):(e=this.dashboardStats.filledMemberCountStats,t=e.map((e=>e.date)),i=e.map((e=>e.paid+e.free+e.comped))),this.isTotalMembersZero&&(e=this.emptyData.stats,t=this.emptyData.labels,i=this.emptyData.data)
116
+ return`${this.mrrCurrencySymbol}${e}`}get totalMembers(){return this.dashboardStats.memberCounts?.total??0}get isTotalMembersZero(){return this.dashboardStats.memberCounts&&0===this.totalMembers}get paidMembers(){return this.dashboardStats.memberCounts?.paid??0}get freeMembers(){return this.dashboardStats.memberCounts?.free??0}get hasTrends(){return null!==this.dashboardStats.memberCounts&&null!==this.dashboardStats.memberCountsTrend}get totalMembersTrend(){return this.dashboardStats.memberCountsTrend?this.calculatePercentage(this.dashboardStats.memberCountsTrend.total,this.dashboardStats.memberCounts.total):0}get paidMembersTrend(){return this.dashboardStats.memberCountsTrend?this.calculatePercentage(this.dashboardStats.memberCountsTrend.paid,this.dashboardStats.memberCounts.paid):0}get freeMembersTrend(){return this.dashboardStats.memberCountsTrend?this.calculatePercentage(this.dashboardStats.memberCountsTrend.free,this.dashboardStats.memberCounts.free):0}get mrrTrend(){return this.dashboardStats.currentMRRTrend?this.calculatePercentage(this.dashboardStats.currentMRRTrend,this.dashboardStats.currentMRR):0}get hasPaidTiers(){return this.dashboardStats.siteStatus?.hasPaidTiers}get chartType(){return"hoverLine"}get chartTitle(){return"paid"===this.selectedChartDisplay?"Paid members":"free"===this.selectedChartDisplay?"Free members":"mrr"===this.selectedChartDisplay?"MRR":"Total members"}get chartData(){let e,t,i
117
+ "paid"===this.selectedChartDisplay?(e=this.dashboardStats.filledMemberCountStats,t=e.map((e=>e.date)),i=e.map((e=>e.paid+e.comped))):"free"===this.selectedChartDisplay?(e=this.dashboardStats.filledMemberCountStats,t=e.map((e=>e.date)),i=e.map((e=>e.free))):"mrr"===this.selectedChartDisplay?(e=this.dashboardStats.filledMrrStats,t=e.map((e=>e.date)),i=e.map((e=>e.mrr))):(e=this.dashboardStats.filledMemberCountStats,t=e.map((e=>e.date)),i=e.map((e=>e.paid+e.free+e.comped))),this.isTotalMembersZero&&(e=this.emptyData.stats,t=this.emptyData.labels,i=this.emptyData.data)
118
118
  const n=document.createElement("canvas").getContext("2d").createLinearGradient(0,0,1e3,0)
119
119
  n.addColorStop(0,"rgba(250, 45, 142, 1"),n.addColorStop(1,"rgba(143, 66, 255, 1")
120
120
  const r=document.createElement("canvas").getContext("2d").createLinearGradient(0,0,1e3,0)
@@ -126,9 +126,9 @@ return{maintainAspectRatio:!1,responsiveAnimationDuration:1,animation:!1,title:{
126
126
  if(0===e.opacity)return void(t.style.opacity=0)
127
127
  t.style.opacity=1,t.style.position="absolute"
128
128
  let r=0
129
- e.x>i-n&&(r=n-10),t.style.left=e.x-r+"px",t.style.top=e.y+"px"},callbacks:{label:(t,i)=>{if("mrr"===this.chartDisplay){const n=`${e.mrrCurrencySymbol}${(0,r.ghPriceAmount)(i.datasets[t.datasetIndex].data[t.index],{cents:!1})}`
129
+ e.x>i-n&&(r=n-10),t.style.left=e.x-r+"px",t.style.top=e.y+"px"},callbacks:{label:(t,i)=>{if("mrr"===this.selectedChartDisplay){const n=`${e.mrrCurrencySymbol}${(0,r.ghPriceAmount)(i.datasets[t.datasetIndex].data[t.index],{cents:!1})}`
130
130
  document.querySelector("#gh-dashboard-anchor-tooltip .gh-dashboard-tooltip-value .value").innerHTML=n}else{const e=i.datasets[t.datasetIndex].data[t.index].toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")
131
- document.querySelector("#gh-dashboard-anchor-tooltip .gh-dashboard-tooltip-value .value").innerHTML=e}},title:e=>{if("mrr"===this.chartType){const t=(0,i.default)(e[0].xLabel).format(k)
131
+ document.querySelector("#gh-dashboard-anchor-tooltip .gh-dashboard-tooltip-value .value").innerHTML=e}},title:e=>{if("mrr"===this.selectedChartDisplay){const t=(0,i.default)(e[0].xLabel).format(k)
132
132
  document.querySelector("#gh-dashboard-anchor-tooltip .gh-dashboard-tooltip-label").innerHTML=t}else{const t=(0,i.default)(e[0].xLabel).format(k)
133
133
  document.querySelector("#gh-dashboard-anchor-tooltip .gh-dashboard-tooltip-label").innerHTML=t}}}},scales:{yAxes:[{display:!0,gridLines:{drawTicks:!1,display:!0,drawBorder:!1,color:"transparent",zeroLineColor:n,zeroLineWidth:1},ticks:{display:!1}}],xAxes:[{display:!0,scaleLabel:{align:"start"},gridLines:{color:n,borderDash:[3,4],display:!0,drawBorder:!0,drawTicks:!1,zeroLineWidth:1,zeroLineColor:n,zeroLineBorderDash:[3,4]},ticks:{display:!1,autoSkip:!1,callback:function(e,n,r){if(0===n&&(document.getElementById("gh-dashboard-anchor-date-start").innerHTML=(0,i.default)(e).format(k)),n===r.length-1&&(document.getElementById("gh-dashboard-anchor-date-end").innerHTML=(0,i.default)(e).format(k)),31===t){if(!(n%2))return e}else{if(91!==t)return e
134
134
  if(!(n%3))return e}}}}]}}}get chartHeight(){return 200}get chartHeightSmall(){return 180}get emptyData(){return{stats:[{date:"2022-04-07",free:2610,tier1:295,tier2:20,paid:315,comped:0,paidSubscribed:2,paidCanceled:1},{date:"2022-04-08",free:2765,tier1:298,tier2:24,paid:322,comped:0,paidSubscribed:7,paidCanceled:0},{date:"2022-04-09",free:3160,tier1:299,tier2:28,paid:327,comped:0,paidSubscribed:5,paidCanceled:0},{date:"2022-04-10",free:3580,tier1:300,tier2:30,paid:330,comped:0,paidSubscribed:4,paidCanceled:1},{date:"2022-04-11",free:3583,tier1:301,tier2:31,paid:332,comped:0,paidSubscribed:2,paidCanceled:0},{date:"2022-04-12",free:3857,tier1:303,tier2:36,paid:339,comped:0,paidSubscribed:8,paidCanceled:1},{date:"2022-04-13",free:4223,tier1:304,tier2:39,paid:343,comped:0,paidSubscribed:4,paidCanceled:0},{date:"2022-04-14",free:4289,tier1:306,tier2:42,paid:348,comped:0,paidSubscribed:6,paidCanceled:1},{date:"2022-04-15",free:4458,tier1:307,tier2:49,paid:356,comped:0,paidSubscribed:8,paidCanceled:0},{date:"2022-04-16",free:4752,tier1:307,tier2:49,paid:356,comped:0,paidSubscribed:1,paidCanceled:1},{date:"2022-04-17",free:4947,tier1:310,tier2:50,paid:360,comped:0,paidSubscribed:5,paidCanceled:1},{date:"2022-04-18",free:5047,tier1:312,tier2:49,paid:361,comped:0,paidSubscribed:2,paidCanceled:1},{date:"2022-04-19",free:5430,tier1:314,tier2:55,paid:369,comped:0,paidSubscribed:8,paidCanceled:0},{date:"2022-04-20",free:5760,tier1:316,tier2:57,paid:373,comped:0,paidSubscribed:4,paidCanceled:0},{date:"2022-04-21",free:6022,tier1:318,tier2:63,paid:381,comped:0,paidSubscribed:9,paidCanceled:1},{date:"2022-04-22",free:6294,tier1:319,tier2:64,paid:383,comped:0,paidSubscribed:2,paidCanceled:0},{date:"2022-04-23",free:6664,tier1:320,tier2:69,paid:389,comped:0,paidSubscribed:6,paidCanceled:0},{date:"2022-04-24",free:6721,tier1:320,tier2:70,paid:390,comped:0,paidSubscribed:1,paidCanceled:0},{date:"2022-04-25",free:6841,tier1:321,tier2:80,paid:401,comped:0,paidSubscribed:11,paidCanceled:0},{date:"2022-04-26",free:6880,tier1:323,tier2:89,paid:412,comped:0,paidSubscribed:11,paidCanceled:0},{date:"2022-04-27",free:7179,tier1:325,tier2:92,paid:417,comped:0,paidSubscribed:5,paidCanceled:0},{date:"2022-04-28",free:7288,tier1:325,tier2:100,paid:425,comped:0,paidSubscribed:9,paidCanceled:1},{date:"2022-04-29",free:7430,tier1:325,tier2:101,paid:426,comped:0,paidSubscribed:2,paidCanceled:1},{date:"2022-04-30",free:7458,tier1:326,tier2:102,paid:428,comped:0,paidSubscribed:2,paidCanceled:0},{date:"2022-05-01",free:7621,tier1:327,tier2:117,paid:444,comped:0,paidSubscribed:17,paidCanceled:1},{date:"2022-05-02",free:7721,tier1:328,tier2:123,paid:451,comped:0,paidSubscribed:8,paidCanceled:1},{date:"2022-05-03",free:7897,tier1:327,tier2:137,paid:464,comped:0,paidSubscribed:14,paidCanceled:1},{date:"2022-05-04",free:7937,tier1:327,tier2:143,paid:470,comped:0,paidSubscribed:6,paidCanceled:0},{date:"2022-05-05",free:7961,tier1:328,tier2:158,paid:486,comped:0,paidSubscribed:16,paidCanceled:0},{date:"2022-05-06",free:8006,tier1:328,tier2:162,paid:490,comped:0,paidSubscribed:5,paidCanceled:1}],labels:["2022-04-07","2022-04-08","2022-04-09","2022-04-10","2022-04-11","2022-04-12","2022-04-13","2022-04-14","2022-04-15","2022-04-16","2022-04-17","2022-04-18","2022-04-19","2022-04-20","2022-04-21","2022-04-22","2022-04-23","2022-04-24","2022-04-25","2022-04-26","2022-04-27","2022-04-28","2022-04-29","2022-04-30","2022-05-01","2022-05-02","2022-05-03","2022-05-04","2022-05-05","2022-05-06"],data:[2925,3087,3487,3910,3915,4196,4566,4637,4814,5108,5307,5408,5799,6133,6403,6677,7053,7111,7242,7292,7596,7713,7856,7886,8065,8172,8361,8407,8447,8496]}}calculatePercentage(e,t){return 0===e?t>0?100:0:Math.round((t-e)/e*100)}},m=w(p.prototype,"dashboardStats",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(p.prototype,"feature",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(p.prototype,"chartDisplay",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"mrr"}}),g=w(p.prototype,"resizing",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),f=w(p.prototype,"resizeTimer",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),w(p.prototype,"loadCharts",[d],Object.getOwnPropertyDescriptor(p.prototype,"loadCharts"),p.prototype),w(p.prototype,"onDisplayChange",[c],Object.getOwnPropertyDescriptor(p.prototype,"onDisplayChange"),p.prototype),p)
@@ -4633,4 +4633,4 @@ var t=Ember.Component.extend({})
4633
4633
  e.default=t})),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))}
4634
4634
  return Object.defineProperty(i,"__esModule",{value:!0}),i}catch(n){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.17",name:"ghost-admin"})
4635
4635
 
4636
- //# sourceMappingURL=ghost-fa7772f8aa2522b3935efed71fa75619.map
4636
+ //# sourceMappingURL=ghost-3577dfa3f54651db5ae5b9fd3d9b2824.map
@@ -58,7 +58,7 @@
58
58
 
59
59
  <script src="assets/vendor-325e038b8609f0979f6578cae7a87f9e.js"></script>
60
60
  <script src="assets/chunk.579.a9bccec4d650a7be727a.js"></script>
61
- <script src="assets/chunk.143.a252ca5afc89e52c049a.js"></script>
62
- <script src="assets/ghost-fa7772f8aa2522b3935efed71fa75619.js"></script>
61
+ <script src="assets/chunk.143.3f2f5cbbd1ef4b1425d9.js"></script>
62
+ <script src="assets/ghost-3577dfa3f54651db5ae5b9fd3d9b2824.js"></script>
63
63
  </body>
64
64
  </html>
@@ -22,7 +22,7 @@ module.exports = {
22
22
  });
23
23
  }
24
24
 
25
- const magicLink = await membersService.api.getMagicLink(model.get('email'));
25
+ const magicLink = await membersService.api.getMagicLink(model.get('email'), 'signin');
26
26
 
27
27
  return {
28
28
  member_id: model.get('id'),
@@ -157,6 +157,7 @@ const createSessionFromMagicLink = async function (req, res, next) {
157
157
  try {
158
158
  const member = await membersService.ssr.exchangeTokenForSession(req, res);
159
159
  spamPrevention.membersAuth().reset(req.ip, `${member.email}login`);
160
+ // Note: don't reset 'member_login', or that would give an easy way around user enumeration by logging in to a manually created account
160
161
  const subscriptions = member && member.subscriptions || [];
161
162
 
162
163
  const action = req.query.action;
@@ -48,7 +48,15 @@ module.exports = function setupMembersApp() {
48
48
  membersApp.delete('/api/session', middleware.deleteSession);
49
49
 
50
50
  // NOTE: this is wrapped in a function to ensure we always go via the getter
51
- membersApp.post('/api/send-magic-link', bodyParser.json(), shared.middleware.brute.membersAuth, (req, res, next) => membersService.api.middleware.sendMagicLink(req, res, next));
51
+ membersApp.post(
52
+ '/api/send-magic-link',
53
+ bodyParser.json(),
54
+ // Prevent brute forcing email addresses (user enumeration)
55
+ shared.middleware.brute.membersAuthEnumeration,
56
+ // Prevent brute forcing passwords for the same email address
57
+ shared.middleware.brute.membersAuth,
58
+ (req, res, next) => membersService.api.middleware.sendMagicLink(req, res, next)
59
+ );
52
60
  membersApp.post('/api/create-stripe-checkout-session', (req, res, next) => membersService.api.middleware.createCheckoutSession(req, res, next));
53
61
  membersApp.post('/api/create-stripe-update-session', (req, res, next) => membersService.api.middleware.createCheckoutSetupSession(req, res, next));
54
62
  membersApp.put('/api/subscriptions/:id', (req, res, next) => membersService.api.middleware.updateSubscription(req, res, next));
@@ -5,7 +5,7 @@ const errors = require('@tryghost/errors');
5
5
  const config = require('../../../../../shared/config');
6
6
  const tpl = require('@tryghost/tpl');
7
7
  const logging = require('@tryghost/logging');
8
- const spam = config.get('spam') || {};
8
+ let spam = config.get('spam') || {};
9
9
 
10
10
  const messages = {
11
11
  forgottenPasswordEmail: {
@@ -22,13 +22,13 @@ const messages = {
22
22
  },
23
23
  tooManyAttempts: 'Too many attempts.'
24
24
  };
25
-
26
- const spamPrivateBlock = spam.private_block || {};
27
- const spamGlobalBlock = spam.global_block || {};
28
- const spamGlobalReset = spam.global_reset || {};
29
- const spamUserReset = spam.user_reset || {};
30
- const spamUserLogin = spam.user_login || {};
31
- const spamContentApiKey = spam.content_api_key || {};
25
+ let spamPrivateBlock = spam.private_block || {};
26
+ let spamGlobalBlock = spam.global_block || {};
27
+ let spamGlobalReset = spam.global_reset || {};
28
+ let spamUserReset = spam.user_reset || {};
29
+ let spamUserLogin = spam.user_login || {};
30
+ let spamMemberLogin = spam.member_login || {};
31
+ let spamContentApiKey = spam.content_api_key || {};
32
32
 
33
33
  let store;
34
34
  let memoryStore;
@@ -37,6 +37,7 @@ let globalResetInstance;
37
37
  let globalBlockInstance;
38
38
  let userLoginInstance;
39
39
  let membersAuthInstance;
40
+ let membersAuthEnumerationInstance;
40
41
  let userResetInstance;
41
42
  let contentApiKeyInstance;
42
43
 
@@ -152,6 +153,39 @@ const membersAuth = () => {
152
153
  return membersAuthInstance;
153
154
  };
154
155
 
156
+ /**
157
+ * This one should have higher limits because it checks across all email addresses
158
+ */
159
+ const membersAuthEnumeration = () => {
160
+ const ExpressBrute = require('express-brute');
161
+ const BruteKnex = require('brute-knex');
162
+ const db = require('../../../../data/db');
163
+
164
+ store = store || new BruteKnex({
165
+ tablename: 'brute',
166
+ createTable: false,
167
+ knex: db.knex
168
+ });
169
+
170
+ if (!membersAuthEnumerationInstance) {
171
+ membersAuthEnumerationInstance = new ExpressBrute(store,
172
+ extend({
173
+ attachResetToRequest: true,
174
+ failCallback(req, res, next, nextValidRequestDate) {
175
+ return next(new errors.TooManyRequestsError({
176
+ message: `Too many different sign-in attempts try again in ${moment(nextValidRequestDate).fromNow(true)}`,
177
+ context: tpl(messages.tooManySigninAttempts.context),
178
+ help: tpl(messages.tooManySigninAttempts.context)
179
+ }));
180
+ },
181
+ handleStoreError: handleStoreError
182
+ }, pick(spamMemberLogin, spamConfigKeys))
183
+ );
184
+ }
185
+
186
+ return membersAuthEnumerationInstance;
187
+ };
188
+
155
189
  // Stops login attempts for a user+IP pair with an increasing time period starting from 10 minutes
156
190
  // and rising to a week in a fibonnaci sequence
157
191
  // The user+IP count is reset when on successful login
@@ -281,7 +315,29 @@ module.exports = {
281
315
  globalReset: globalReset,
282
316
  userLogin: userLogin,
283
317
  membersAuth: membersAuth,
318
+ membersAuthEnumeration: membersAuthEnumeration,
284
319
  userReset: userReset,
285
320
  privateBlog: privateBlog,
286
- contentApiKey: contentApiKey
321
+ contentApiKey: contentApiKey,
322
+ reset: () => {
323
+ store = undefined;
324
+ memoryStore = undefined;
325
+ privateBlogInstance = undefined;
326
+ globalResetInstance = undefined;
327
+ globalBlockInstance = undefined;
328
+ userLoginInstance = undefined;
329
+ membersAuthInstance = undefined;
330
+ membersAuthEnumerationInstance = undefined;
331
+ userResetInstance = undefined;
332
+ contentApiKeyInstance = undefined;
333
+
334
+ spam = config.get('spam') || {};
335
+ spamPrivateBlock = spam.private_block || {};
336
+ spamGlobalBlock = spam.global_block || {};
337
+ spamGlobalReset = spam.global_reset || {};
338
+ spamUserReset = spam.user_reset || {};
339
+ spamUserLogin = spam.user_login || {};
340
+ spamMemberLogin = spam.member_login || {};
341
+ spamContentApiKey = spam.content_api_key || {};
342
+ }
287
343
  };
@@ -84,6 +84,7 @@ module.exports = {
84
84
  },
85
85
 
86
86
  /**
87
+ * Block too many password guesses for the same email address
87
88
  */
88
89
  membersAuth(req, res, next) {
89
90
  return spamPrevention.membersAuth().getMiddleware({
@@ -96,5 +97,12 @@ module.exports = {
96
97
  return _next();
97
98
  }
98
99
  })(req, res, next);
100
+ },
101
+
102
+ /**
103
+ * Blocks user enumeration
104
+ */
105
+ membersAuthEnumeration(req, res, next) {
106
+ return spamPrevention.membersAuthEnumeration().prevent(req, res, next);
99
107
  }
100
108
  };
@@ -99,6 +99,12 @@
99
99
  "maxWait": 86400000,
100
100
  "lifetime": 3600,
101
101
  "freeRetries": 99
102
+ },
103
+ "member_login": {
104
+ "minWait": 600000,
105
+ "maxWait": 43200000,
106
+ "lifetime": 43200,
107
+ "freeRetries": 8
102
108
  }
103
109
  },
104
110
  "caching": {
@@ -152,7 +158,7 @@
152
158
  },
153
159
  "portal": {
154
160
  "url": "https://cdn.jsdelivr.net/ghost/portal@~{version}/umd/portal.min.js",
155
- "version": "2.13"
161
+ "version": "2.14"
156
162
  },
157
163
  "sodoSearch": {
158
164
  "url": "https://cdn.jsdelivr.net/ghost/sodo-search@~{version}/umd/sodo-search.min.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "5.17.1",
3
+ "version": "5.17.2",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -54,76 +54,76 @@
54
54
  "dependencies": {
55
55
  "@sentry/node": "7.14.0",
56
56
  "@tryghost/adapter-base-cache": "0.1.2",
57
- "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.17.1.tgz",
57
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.17.2.tgz",
58
58
  "@tryghost/admin-api-schema": "4.2.0",
59
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.17.1.tgz",
60
- "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.17.1.tgz",
59
+ "@tryghost/api-framework": "file:components/tryghost-api-framework-5.17.2.tgz",
60
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.17.2.tgz",
61
61
  "@tryghost/bookshelf-plugins": "0.5.2",
62
- "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.17.1.tgz",
62
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.17.2.tgz",
63
63
  "@tryghost/color-utils": "0.1.21",
64
64
  "@tryghost/config-url-helpers": "1.0.3",
65
- "@tryghost/constants": "file:components/tryghost-constants-5.17.1.tgz",
66
- "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.17.1.tgz",
65
+ "@tryghost/constants": "file:components/tryghost-constants-5.17.2.tgz",
66
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.17.2.tgz",
67
67
  "@tryghost/database-info": "0.3.10",
68
68
  "@tryghost/debug": "0.1.18",
69
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.17.1.tgz",
70
- "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.17.1.tgz",
71
- "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.17.1.tgz",
72
- "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.17.1.tgz",
69
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-5.17.2.tgz",
70
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.17.2.tgz",
71
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.17.2.tgz",
72
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.17.2.tgz",
73
73
  "@tryghost/errors": "1.2.17",
74
- "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.17.1.tgz",
74
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.17.2.tgz",
75
75
  "@tryghost/helpers": "1.1.74",
76
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.17.1.tgz",
76
+ "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.17.2.tgz",
77
77
  "@tryghost/http-cache-utils": "0.1.3",
78
78
  "@tryghost/image-transform": "1.2.2",
79
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.17.1.tgz",
79
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-5.17.2.tgz",
80
80
  "@tryghost/kg-card-factory": "3.1.5",
81
81
  "@tryghost/kg-default-atoms": "3.1.4",
82
82
  "@tryghost/kg-default-cards": "5.18.3",
83
83
  "@tryghost/kg-lexical-html-renderer": "0.0.7",
84
84
  "@tryghost/kg-mobiledoc-html-renderer": "5.3.7",
85
85
  "@tryghost/limit-service": "1.2.3",
86
- "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.17.1.tgz",
87
- "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.17.1.tgz",
88
- "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.17.1.tgz",
86
+ "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.17.2.tgz",
87
+ "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.17.2.tgz",
88
+ "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.17.2.tgz",
89
89
  "@tryghost/logging": "2.3.2",
90
- "@tryghost/magic-link": "file:components/tryghost-magic-link-5.17.1.tgz",
91
- "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.17.1.tgz",
92
- "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.17.1.tgz",
93
- "@tryghost/member-events": "file:components/tryghost-member-events-5.17.1.tgz",
94
- "@tryghost/members-api": "file:components/tryghost-members-api-5.17.1.tgz",
95
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.17.1.tgz",
96
- "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.17.1.tgz",
97
- "@tryghost/members-importer": "file:components/tryghost-members-importer-5.17.1.tgz",
98
- "@tryghost/members-offers": "file:components/tryghost-members-offers-5.17.1.tgz",
99
- "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.17.1.tgz",
100
- "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.17.1.tgz",
90
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-5.17.2.tgz",
91
+ "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.17.2.tgz",
92
+ "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.17.2.tgz",
93
+ "@tryghost/member-events": "file:components/tryghost-member-events-5.17.2.tgz",
94
+ "@tryghost/members-api": "file:components/tryghost-members-api-5.17.2.tgz",
95
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-5.17.2.tgz",
96
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.17.2.tgz",
97
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-5.17.2.tgz",
98
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-5.17.2.tgz",
99
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.17.2.tgz",
100
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.17.2.tgz",
101
101
  "@tryghost/metrics": "1.0.16",
102
- "@tryghost/minifier": "file:components/tryghost-minifier-5.17.1.tgz",
103
- "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.17.1.tgz",
104
- "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.17.1.tgz",
105
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.17.1.tgz",
106
- "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.17.1.tgz",
107
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.17.1.tgz",
102
+ "@tryghost/minifier": "file:components/tryghost-minifier-5.17.2.tgz",
103
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.17.2.tgz",
104
+ "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.17.2.tgz",
105
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.17.2.tgz",
106
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.17.2.tgz",
107
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.17.2.tgz",
108
108
  "@tryghost/nodemailer": "0.3.28",
109
109
  "@tryghost/nql": "0.9.2",
110
- "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.17.1.tgz",
111
- "@tryghost/package-json": "file:components/tryghost-package-json-5.17.1.tgz",
110
+ "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.17.2.tgz",
111
+ "@tryghost/package-json": "file:components/tryghost-package-json-5.17.2.tgz",
112
112
  "@tryghost/pretty-cli": "1.2.30",
113
113
  "@tryghost/promise": "0.1.21",
114
114
  "@tryghost/request": "0.1.31",
115
- "@tryghost/security": "file:components/tryghost-security-5.17.1.tgz",
116
- "@tryghost/session-service": "file:components/tryghost-session-service-5.17.1.tgz",
117
- "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.17.1.tgz",
115
+ "@tryghost/security": "file:components/tryghost-security-5.17.2.tgz",
116
+ "@tryghost/session-service": "file:components/tryghost-session-service-5.17.2.tgz",
117
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.17.2.tgz",
118
118
  "@tryghost/social-urls": "0.1.33",
119
- "@tryghost/staff-service": "file:components/tryghost-staff-service-5.17.1.tgz",
120
- "@tryghost/stats-service": "file:components/tryghost-stats-service-5.17.1.tgz",
119
+ "@tryghost/staff-service": "file:components/tryghost-staff-service-5.17.2.tgz",
120
+ "@tryghost/stats-service": "file:components/tryghost-stats-service-5.17.2.tgz",
121
121
  "@tryghost/string": "0.2.1",
122
122
  "@tryghost/tpl": "0.1.18",
123
- "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.17.1.tgz",
123
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.17.2.tgz",
124
124
  "@tryghost/url-utils": "4.2.0",
125
125
  "@tryghost/validator": "0.1.29",
126
- "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.17.1.tgz",
126
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.17.2.tgz",
127
127
  "@tryghost/version": "0.1.16",
128
128
  "@tryghost/zip": "1.1.28",
129
129
  "amperize": "0.6.1",
@@ -218,54 +218,54 @@
218
218
  "@tryghost/logging": "2.3.2",
219
219
  "moment": "2.24.0",
220
220
  "moment-timezone": "0.5.23",
221
- "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.17.1.tgz",
222
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.17.1.tgz",
223
- "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.17.1.tgz",
224
- "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.17.1.tgz",
225
- "@tryghost/constants": "file:components/tryghost-constants-5.17.1.tgz",
226
- "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.17.1.tgz",
227
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.17.1.tgz",
228
- "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.17.1.tgz",
229
- "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.17.1.tgz",
230
- "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.17.1.tgz",
231
- "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.17.1.tgz",
232
- "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.17.1.tgz",
233
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.17.1.tgz",
234
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.17.1.tgz",
235
- "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.17.1.tgz",
236
- "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.17.1.tgz",
237
- "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.17.1.tgz",
238
- "@tryghost/magic-link": "file:components/tryghost-magic-link-5.17.1.tgz",
239
- "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.17.1.tgz",
240
- "@tryghost/member-analytics-service": "file:components/tryghost-member-analytics-service-5.17.1.tgz",
241
- "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.17.1.tgz",
242
- "@tryghost/member-events": "file:components/tryghost-member-events-5.17.1.tgz",
243
- "@tryghost/members-analytics-ingress": "file:components/tryghost-members-analytics-ingress-5.17.1.tgz",
244
- "@tryghost/members-api": "file:components/tryghost-members-api-5.17.1.tgz",
245
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.17.1.tgz",
246
- "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.17.1.tgz",
247
- "@tryghost/members-importer": "file:components/tryghost-members-importer-5.17.1.tgz",
248
- "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.17.1.tgz",
249
- "@tryghost/minifier": "file:components/tryghost-minifier-5.17.1.tgz",
250
- "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.17.1.tgz",
251
- "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.17.1.tgz",
252
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.17.1.tgz",
253
- "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.17.1.tgz",
254
- "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.17.1.tgz",
255
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.17.1.tgz",
256
- "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.17.1.tgz",
257
- "@tryghost/members-offers": "file:components/tryghost-members-offers-5.17.1.tgz",
258
- "@tryghost/package-json": "file:components/tryghost-package-json-5.17.1.tgz",
259
- "@tryghost/members-payments": "file:components/tryghost-members-payments-5.17.1.tgz",
260
- "@tryghost/referrers": "file:components/tryghost-referrers-5.17.1.tgz",
261
- "@tryghost/security": "file:components/tryghost-security-5.17.1.tgz",
262
- "@tryghost/session-service": "file:components/tryghost-session-service-5.17.1.tgz",
263
- "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.17.1.tgz",
264
- "@tryghost/staff-service": "file:components/tryghost-staff-service-5.17.1.tgz",
265
- "@tryghost/stats-service": "file:components/tryghost-stats-service-5.17.1.tgz",
266
- "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.17.1.tgz",
267
- "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.17.1.tgz",
268
- "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.17.1.tgz",
269
- "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.17.1.tgz"
221
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.17.2.tgz",
222
+ "@tryghost/api-framework": "file:components/tryghost-api-framework-5.17.2.tgz",
223
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.17.2.tgz",
224
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.17.2.tgz",
225
+ "@tryghost/constants": "file:components/tryghost-constants-5.17.2.tgz",
226
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.17.2.tgz",
227
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-5.17.2.tgz",
228
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.17.2.tgz",
229
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.17.2.tgz",
230
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.17.2.tgz",
231
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.17.2.tgz",
232
+ "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.17.2.tgz",
233
+ "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.17.2.tgz",
234
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-5.17.2.tgz",
235
+ "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.17.2.tgz",
236
+ "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.17.2.tgz",
237
+ "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.17.2.tgz",
238
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-5.17.2.tgz",
239
+ "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.17.2.tgz",
240
+ "@tryghost/member-analytics-service": "file:components/tryghost-member-analytics-service-5.17.2.tgz",
241
+ "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.17.2.tgz",
242
+ "@tryghost/member-events": "file:components/tryghost-member-events-5.17.2.tgz",
243
+ "@tryghost/members-analytics-ingress": "file:components/tryghost-members-analytics-ingress-5.17.2.tgz",
244
+ "@tryghost/members-api": "file:components/tryghost-members-api-5.17.2.tgz",
245
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-5.17.2.tgz",
246
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.17.2.tgz",
247
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-5.17.2.tgz",
248
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.17.2.tgz",
249
+ "@tryghost/minifier": "file:components/tryghost-minifier-5.17.2.tgz",
250
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.17.2.tgz",
251
+ "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.17.2.tgz",
252
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.17.2.tgz",
253
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.17.2.tgz",
254
+ "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.17.2.tgz",
255
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.17.2.tgz",
256
+ "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.17.2.tgz",
257
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-5.17.2.tgz",
258
+ "@tryghost/package-json": "file:components/tryghost-package-json-5.17.2.tgz",
259
+ "@tryghost/members-payments": "file:components/tryghost-members-payments-5.17.2.tgz",
260
+ "@tryghost/referrers": "file:components/tryghost-referrers-5.17.2.tgz",
261
+ "@tryghost/security": "file:components/tryghost-security-5.17.2.tgz",
262
+ "@tryghost/session-service": "file:components/tryghost-session-service-5.17.2.tgz",
263
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.17.2.tgz",
264
+ "@tryghost/staff-service": "file:components/tryghost-staff-service-5.17.2.tgz",
265
+ "@tryghost/stats-service": "file:components/tryghost-stats-service-5.17.2.tgz",
266
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.17.2.tgz",
267
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.17.2.tgz",
268
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.17.2.tgz",
269
+ "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.17.2.tgz"
270
270
  }
271
271
  }