ghost 6.9.0 → 6.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-i18n-6.9.1.tgz +0 -0
- package/content/themes/source/package.json +1 -1
- package/core/built/admin/assets/admin-x-settings/{CodeEditorView-BNKxdfRt.mjs → CodeEditorView-C0HG4CwA.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
- package/core/built/admin/assets/admin-x-settings/{index-B-_a183c.mjs → index-Cjl9AHTm.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-Q0XmL0KU.mjs → index-Cz3Y1eRN.mjs} +5 -5
- package/core/built/admin/assets/admin-x-settings/{index-CjRGpMVv.mjs → index-DRpMCs_c.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{modals-omgXN6i-.mjs → modals-DXD3MDLp.mjs} +8791 -8799
- package/core/built/admin/assets/{chunk.524.774a2df444e2ffde4942.js → chunk.524.56454d8add89b041f4df.js} +7 -7
- package/core/built/admin/assets/{chunk.582.ca4f05f3c39fda05b54c.js → chunk.582.a4916bd533becb58fd9c.js} +10 -10
- package/core/built/admin/index.html +2 -2
- package/core/server/services/email-analytics/EmailAnalyticsService.js +53 -6
- package/package.json +3 -3
- package/components/tryghost-i18n-6.9.0.tgz +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var __ember_auto_import__;(()=>{var e,r={
|
|
1
|
+
var __ember_auto_import__;(()=>{var e,r={31048:()=>{},32186:e=>{"use strict"
|
|
2
2
|
e.exports=require("@ember/test-waiters")},56857:(e,r,n)=>{var t={"./af":58547,"./af.js":58547,"./ar":28167,"./ar-dz":35298,"./ar-dz.js":35298,"./ar-kw":11314,"./ar-kw.js":11314,"./ar-ly":66455,"./ar-ly.js":66455,"./ar-ma":15998,"./ar-ma.js":15998,"./ar-sa":55388,"./ar-sa.js":55388,"./ar-tn":73358,"./ar-tn.js":73358,"./ar.js":28167,"./az":92367,"./az.js":92367,"./be":9161,"./be.js":9161,"./bg":359,"./bg.js":359,"./bm":32625,"./bm.js":32625,"./bn":52984,"./bn.js":52984,"./bo":87343,"./bo.js":87343,"./br":87948,"./br.js":87948,"./bs":88211,"./bs.js":88211,"./ca":34700,"./ca.js":34700,"./cs":27430,"./cs.js":27430,"./cv":55913,"./cv.js":55913,"./cy":16004,"./cy.js":16004,"./da":26839,"./da.js":26839,"./de":22131,"./de-at":6729,"./de-at.js":6729,"./de-ch":74743,"./de-ch.js":74743,"./de.js":22131,"./dv":14598,"./dv.js":14598,"./el":38737,"./el.js":38737,"./en-SG":94978,"./en-SG.js":94978,"./en-au":22606,"./en-au.js":22606,"./en-ca":60052,"./en-ca.js":60052,"./en-gb":17305,"./en-gb.js":17305,"./en-ie":76390,"./en-ie.js":76390,"./en-il":89549,"./en-il.js":89549,"./en-nz":67584,"./en-nz.js":67584,"./eo":24408,"./eo.js":24408,"./es":45644,"./es-do":21888,"./es-do.js":21888,"./es-us":23537,"./es-us.js":23537,"./es.js":45644,"./et":27257,"./et.js":27257,"./eu":57002,"./eu.js":57002,"./fa":90241,"./fa.js":90241,"./fi":74009,"./fi.js":74009,"./fo":81267,"./fo.js":81267,"./fr":71160,"./fr-ca":39433,"./fr-ca.js":39433,"./fr-ch":20130,"./fr-ch.js":20130,"./fr.js":71160,"./fy":20553,"./fy.js":20553,"./ga":18232,"./ga.js":18232,"./gd":33771,"./gd.js":33771,"./gl":99747,"./gl.js":99747,"./gom-latn":80289,"./gom-latn.js":80289,"./gu":148,"./gu.js":148,"./he":68247,"./he.js":68247,"./hi":39835,"./hi.js":39835,"./hr":69734,"./hr.js":69734,"./hu":40999,"./hu.js":40999,"./hy-am":95002,"./hy-am.js":95002,"./id":23021,"./id.js":23021,"./is":96232,"./is.js":96232,"./it":15581,"./it-ch":4809,"./it-ch.js":4809,"./it.js":15581,"./ja":45981,"./ja.js":45981,"./jv":12568,"./jv.js":12568,"./ka":17924,"./ka.js":17924,"./kk":1062,"./kk.js":1062,"./km":65456,"./km.js":65456,"./kn":15817,"./kn.js":15817,"./ko":45306,"./ko.js":45306,"./ku":39016,"./ku.js":39016,"./ky":71308,"./ky.js":71308,"./lb":67330,"./lb.js":67330,"./lo":18949,"./lo.js":18949,"./lt":58804,"./lt.js":58804,"./lv":47006,"./lv.js":47006,"./me":83346,"./me.js":83346,"./mi":630,"./mi.js":630,"./mk":88876,"./mk.js":88876,"./ml":86841,"./ml.js":86841,"./mn":93847,"./mn.js":93847,"./mr":57515,"./mr.js":57515,"./ms":51844,"./ms-my":44391,"./ms-my.js":44391,"./ms.js":51844,"./mt":81969,"./mt.js":81969,"./my":34982,"./my.js":34982,"./nb":41632,"./nb.js":41632,"./ne":81781,"./ne.js":81781,"./nl":14910,"./nl-be":72506,"./nl-be.js":72506,"./nl.js":14910,"./nn":12980,"./nn.js":12980,"./pa-in":33791,"./pa-in.js":33791,"./pl":1872,"./pl.js":1872,"./pt":9064,"./pt-br":85273,"./pt-br.js":85273,"./pt.js":9064,"./ro":63167,"./ro.js":63167,"./ru":28649,"./ru.js":28649,"./sd":14823,"./sd.js":14823,"./se":90672,"./se.js":90672,"./si":26244,"./si.js":26244,"./sk":40654,"./sk.js":40654,"./sl":44335,"./sl.js":44335,"./sq":79116,"./sq.js":79116,"./sr":60693,"./sr-cyrl":1436,"./sr-cyrl.js":1436,"./sr.js":60693,"./ss":51734,"./ss.js":51734,"./sv":37945,"./sv.js":37945,"./sw":41514,"./sw.js":41514,"./ta":1991,"./ta.js":1991,"./te":95011,"./te.js":95011,"./tet":19463,"./tet.js":19463,"./tg":43109,"./tg.js":43109,"./th":97144,"./th.js":97144,"./tl-ph":70401,"./tl-ph.js":70401,"./tlh":26678,"./tlh.js":26678,"./tr":28682,"./tr.js":28682,"./tzl":59084,"./tzl.js":59084,"./tzm":64307,"./tzm-latn":68869,"./tzm-latn.js":68869,"./tzm.js":64307,"./ug-cn":78812,"./ug-cn.js":78812,"./uk":25812,"./uk.js":25812,"./ur":25411,"./ur.js":25411,"./uz":59435,"./uz-latn":94589,"./uz-latn.js":94589,"./uz.js":59435,"./vi":50569,"./vi.js":50569,"./x-pseudo":85241,"./x-pseudo.js":85241,"./yo":96972,"./yo.js":96972,"./zh-cn":18422,"./zh-cn.js":18422,"./zh-hk":84106,"./zh-hk.js":84106,"./zh-tw":69362,"./zh-tw.js":69362}
|
|
3
3
|
function s(e){var r=o(e)
|
|
4
4
|
return n(r)}function o(e){if(!n.o(t,e)){var r=new Error("Cannot find module '"+e+"'")
|
|
5
|
-
throw r.code="MODULE_NOT_FOUND",r}return t[e]}s.keys=function(){return Object.keys(t)},s.resolve=o,e.exports=s,s.id=56857},
|
|
6
|
-
|
|
7
|
-
e.
|
|
5
|
+
throw r.code="MODULE_NOT_FOUND",r}return t[e]}s.keys=function(){return Object.keys(t)},s.resolve=o,e.exports=s,s.id=56857},80032:e=>{"use strict"
|
|
6
|
+
e.exports=require("ember-tracked-storage-polyfill")},86625:()=>{},92480:(e,r,n)=>{e.exports=function(){var e=_eai_d,r=_eai_r
|
|
7
|
+
function t(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 t(n(32314))}),e("@sentry/core",[],function(){return t(n(67723))}),e("@sentry/integrations",[],function(){return t(n(20080))}),e("@sentry/replay",[],function(){return t(n(51633))}),e("@sentry/utils",[],function(){return t(n(5423))}),e("@tryghost/color-utils",[],function(){return t(n(86797))}),e("@tryghost/kg-clean-basic-html",[],function(){return t(n(3414))}),e("@tryghost/kg-converters",[],function(){return t(n(23075))}),e("@tryghost/limit-service",[],function(){return t(n(55983))}),e("@tryghost/members-csv/lib/unparse",[],function(){return t(n(17246))}),e("@tryghost/nql",[],function(){return t(n(39365))}),e("@tryghost/nql-lang",[],function(){return t(n(716))}),e("@tryghost/string",[],function(){return t(n(96107))}),e("@tryghost/timezone-data",[],function(){return t(n(27019))}),e("animejs/lib/anime.es.js",[],function(){return t(n(62282))}),e("element-resize-detector",[],function(){return t(n(29540))}),e("ember-assign-helper/helpers/assign",[],function(){return t(n(31113))}),e("ember-css-transitions/modifiers/css-transition",["@ember/test-waiters"],function(){return t(n(95895))}),e("ember-keyboard/helpers/if-key.js",[],function(){return t(n(10530))}),e("ember-keyboard/helpers/on-key.js",[],function(){return t(n(13692))}),e("ember-keyboard/modifiers/on-key.js",[],function(){return t(n(40985))}),e("ember-keyboard/services/keyboard.js",[],function(){return t(n(89697))}),e("ember-modifier",[],function(){return t(n(37777))}),e("ember-moment/helpers/-base",[],function(){return t(n(91366))}),e("ember-moment/helpers/is-after",[],function(){return t(n(91461))}),e("ember-moment/helpers/is-before",[],function(){return t(n(61e3))}),e("ember-moment/helpers/is-between",[],function(){return t(n(447))}),e("ember-moment/helpers/is-same",[],function(){return t(n(64193))}),e("ember-moment/helpers/is-same-or-after",[],function(){return t(n(7916))}),e("ember-moment/helpers/is-same-or-before",[],function(){return t(n(54351))}),e("ember-moment/helpers/moment",[],function(){return t(n(41678))}),e("ember-moment/helpers/moment-add",[],function(){return t(n(50080))}),e("ember-moment/helpers/moment-calendar",[],function(){return t(n(96625))}),e("ember-moment/helpers/moment-diff",[],function(){return t(n(85340))}),e("ember-moment/helpers/moment-duration",[],function(){return t(n(42967))}),e("ember-moment/helpers/moment-format",[],function(){return t(n(10536))}),e("ember-moment/helpers/moment-from",[],function(){return t(n(50727))}),e("ember-moment/helpers/moment-from-now",[],function(){return t(n(706))}),e("ember-moment/helpers/moment-subtract",[],function(){return t(n(54651))}),e("ember-moment/helpers/moment-to",[],function(){return t(n(84818))}),e("ember-moment/helpers/moment-to-date",[],function(){return t(n(81183))}),e("ember-moment/helpers/moment-to-now",[],function(){return t(n(17083))}),e("ember-moment/helpers/now",[],function(){return t(n(34980))}),e("ember-moment/helpers/unix",[],function(){return t(n(79272))}),e("ember-moment/helpers/utc",[],function(){return t(n(36022))}),e("ember-moment/services/moment",[],function(){return t(n(39879))}),e("fast-deep-equal",[],function(){return t(n(25383))}),e("flexsearch",[],function(){return t(n(12248))}),e("focus-trap",[],function(){return t(n(39632))}),e("intersection-observer-admin",[],function(){return t(n(21431))}),e("microdiff",[],function(){return t(n(59086))}),e("moment-timezone",[],function(){return t(n(41101))}),e("papaparse",[],function(){return t(n(78695))}),e("raf-pool",[],function(){return t(n(60695))}),e("react",[],function(){return t(n(72854))}),e("react-dom",[],function(){return t(n(95303))}),e("react-dom/client",[],function(){return t(n(70816))}),e("semver/functions/coerce",[],function(){return t(n(18576))}),e("semver/functions/lt",[],function(){return t(n(32817))}),e("semver/functions/parse",[],function(){return t(n(47898))}),e("tooltip.js",[],function(){return t(n(85557))}),e("tracked-built-ins",["ember-tracked-storage-polyfill"],function(){return t(n(67708))}),e("validator",[],function(){return t(n(29119))}),e("_eai_dyn_@sentry/browser",[],function(){return Promise.resolve().then(n.bind(n,32314))})}()},94973:function(e,r){window._eai_r=require,window._eai_d=define}},n={}
|
|
8
8
|
function t(e){var s=n[e]
|
|
9
9
|
if(void 0!==s)return s.exports
|
|
10
10
|
var o=n[e]={id:e,loaded:!1,exports:{}}
|
|
@@ -21,8 +21,8 @@ var r=(r,n)=>{var s,o,[i,u,m]=n,a=0
|
|
|
21
21
|
if(i.some(r=>0!==e[r])){for(s in u)t.o(u,s)&&(t.m[s]=u[s])
|
|
22
22
|
if(m)var c=m(t)}for(r&&r(n);a<i.length;a++)o=i[a],t.o(e,o)&&e[o]&&e[o][0](),e[o]=0
|
|
23
23
|
return t.O(c)},n=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
|
|
24
|
-
n.forEach(r.bind(null,0)),n.push=r.bind(null,n.push.bind(n))})(),t.O(void 0,[397],()=>t(t.s=
|
|
25
|
-
var s=t.O(void 0,[397],()=>t(t.s=
|
|
24
|
+
n.forEach(r.bind(null,0)),n.push=r.bind(null,n.push.bind(n))})(),t.O(void 0,[397],()=>t(t.s=94973))
|
|
25
|
+
var s=t.O(void 0,[397],()=>t(t.s=92480))
|
|
26
26
|
s=t.O(s),__ember_auto_import__=s})()
|
|
27
27
|
|
|
28
|
-
//# sourceMappingURL=chunk.524.
|
|
28
|
+
//# sourceMappingURL=chunk.524.56454d8add89b041f4df.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
var __ember_auto_import__;(()=>{var e,r={
|
|
2
|
-
e.exports=require("@ember/test-waiters")},
|
|
1
|
+
var __ember_auto_import__;(()=>{var e,r={31048:()=>{},32186:e=>{"use strict"
|
|
2
|
+
e.exports=require("@ember/test-waiters")},40474:(e,r,t)=>{e.exports=function(){_eai_d
|
|
3
|
+
var e=_eai_r
|
|
4
|
+
window.emberAutoImportDynamic=function(r){return 1===arguments.length?e("_eai_dyn_"+r):e("_eai_dynt_"+r)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(r){return e("_eai_sync_"+r)(Array.prototype.slice.call(arguments,1))},t(92480)}()},56857:(e,r,t)=>{var n={"./af":58547,"./af.js":58547,"./ar":28167,"./ar-dz":35298,"./ar-dz.js":35298,"./ar-kw":11314,"./ar-kw.js":11314,"./ar-ly":66455,"./ar-ly.js":66455,"./ar-ma":15998,"./ar-ma.js":15998,"./ar-sa":55388,"./ar-sa.js":55388,"./ar-tn":73358,"./ar-tn.js":73358,"./ar.js":28167,"./az":92367,"./az.js":92367,"./be":9161,"./be.js":9161,"./bg":359,"./bg.js":359,"./bm":32625,"./bm.js":32625,"./bn":52984,"./bn.js":52984,"./bo":87343,"./bo.js":87343,"./br":87948,"./br.js":87948,"./bs":88211,"./bs.js":88211,"./ca":34700,"./ca.js":34700,"./cs":27430,"./cs.js":27430,"./cv":55913,"./cv.js":55913,"./cy":16004,"./cy.js":16004,"./da":26839,"./da.js":26839,"./de":22131,"./de-at":6729,"./de-at.js":6729,"./de-ch":74743,"./de-ch.js":74743,"./de.js":22131,"./dv":14598,"./dv.js":14598,"./el":38737,"./el.js":38737,"./en-SG":94978,"./en-SG.js":94978,"./en-au":22606,"./en-au.js":22606,"./en-ca":60052,"./en-ca.js":60052,"./en-gb":17305,"./en-gb.js":17305,"./en-ie":76390,"./en-ie.js":76390,"./en-il":89549,"./en-il.js":89549,"./en-nz":67584,"./en-nz.js":67584,"./eo":24408,"./eo.js":24408,"./es":45644,"./es-do":21888,"./es-do.js":21888,"./es-us":23537,"./es-us.js":23537,"./es.js":45644,"./et":27257,"./et.js":27257,"./eu":57002,"./eu.js":57002,"./fa":90241,"./fa.js":90241,"./fi":74009,"./fi.js":74009,"./fo":81267,"./fo.js":81267,"./fr":71160,"./fr-ca":39433,"./fr-ca.js":39433,"./fr-ch":20130,"./fr-ch.js":20130,"./fr.js":71160,"./fy":20553,"./fy.js":20553,"./ga":18232,"./ga.js":18232,"./gd":33771,"./gd.js":33771,"./gl":99747,"./gl.js":99747,"./gom-latn":80289,"./gom-latn.js":80289,"./gu":148,"./gu.js":148,"./he":68247,"./he.js":68247,"./hi":39835,"./hi.js":39835,"./hr":69734,"./hr.js":69734,"./hu":40999,"./hu.js":40999,"./hy-am":95002,"./hy-am.js":95002,"./id":23021,"./id.js":23021,"./is":96232,"./is.js":96232,"./it":15581,"./it-ch":4809,"./it-ch.js":4809,"./it.js":15581,"./ja":45981,"./ja.js":45981,"./jv":12568,"./jv.js":12568,"./ka":17924,"./ka.js":17924,"./kk":1062,"./kk.js":1062,"./km":65456,"./km.js":65456,"./kn":15817,"./kn.js":15817,"./ko":45306,"./ko.js":45306,"./ku":39016,"./ku.js":39016,"./ky":71308,"./ky.js":71308,"./lb":67330,"./lb.js":67330,"./lo":18949,"./lo.js":18949,"./lt":58804,"./lt.js":58804,"./lv":47006,"./lv.js":47006,"./me":83346,"./me.js":83346,"./mi":630,"./mi.js":630,"./mk":88876,"./mk.js":88876,"./ml":86841,"./ml.js":86841,"./mn":93847,"./mn.js":93847,"./mr":57515,"./mr.js":57515,"./ms":51844,"./ms-my":44391,"./ms-my.js":44391,"./ms.js":51844,"./mt":81969,"./mt.js":81969,"./my":34982,"./my.js":34982,"./nb":41632,"./nb.js":41632,"./ne":81781,"./ne.js":81781,"./nl":14910,"./nl-be":72506,"./nl-be.js":72506,"./nl.js":14910,"./nn":12980,"./nn.js":12980,"./pa-in":33791,"./pa-in.js":33791,"./pl":1872,"./pl.js":1872,"./pt":9064,"./pt-br":85273,"./pt-br.js":85273,"./pt.js":9064,"./ro":63167,"./ro.js":63167,"./ru":28649,"./ru.js":28649,"./sd":14823,"./sd.js":14823,"./se":90672,"./se.js":90672,"./si":26244,"./si.js":26244,"./sk":40654,"./sk.js":40654,"./sl":44335,"./sl.js":44335,"./sq":79116,"./sq.js":79116,"./sr":60693,"./sr-cyrl":1436,"./sr-cyrl.js":1436,"./sr.js":60693,"./ss":51734,"./ss.js":51734,"./sv":37945,"./sv.js":37945,"./sw":41514,"./sw.js":41514,"./ta":1991,"./ta.js":1991,"./te":95011,"./te.js":95011,"./tet":19463,"./tet.js":19463,"./tg":43109,"./tg.js":43109,"./th":97144,"./th.js":97144,"./tl-ph":70401,"./tl-ph.js":70401,"./tlh":26678,"./tlh.js":26678,"./tr":28682,"./tr.js":28682,"./tzl":59084,"./tzl.js":59084,"./tzm":64307,"./tzm-latn":68869,"./tzm-latn.js":68869,"./tzm.js":64307,"./ug-cn":78812,"./ug-cn.js":78812,"./uk":25812,"./uk.js":25812,"./ur":25411,"./ur.js":25411,"./uz":59435,"./uz-latn":94589,"./uz-latn.js":94589,"./uz.js":59435,"./vi":50569,"./vi.js":50569,"./x-pseudo":85241,"./x-pseudo.js":85241,"./yo":96972,"./yo.js":96972,"./zh-cn":18422,"./zh-cn.js":18422,"./zh-hk":84106,"./zh-hk.js":84106,"./zh-tw":69362,"./zh-tw.js":69362}
|
|
3
5
|
function s(e){var r=o(e)
|
|
4
6
|
return t(r)}function o(e){if(!t.o(n,e)){var r=new Error("Cannot find module '"+e+"'")
|
|
5
|
-
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=56857},
|
|
6
|
-
|
|
7
|
-
e.
|
|
8
|
-
var e=_eai_r
|
|
9
|
-
window.emberAutoImportDynamic=function(r){return 1===arguments.length?e("_eai_dyn_"+r):e("_eai_dynt_"+r)(Array.prototype.slice.call(arguments,1))},window.emberAutoImportSync=function(r){return e("_eai_sync_"+r)(Array.prototype.slice.call(arguments,1))},t(76690)}()}},t={}
|
|
7
|
+
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=56857},80032:e=>{"use strict"
|
|
8
|
+
e.exports=require("ember-tracked-storage-polyfill")},86625:()=>{},92480:(e,r,t)=>{e.exports=function(){var e=_eai_d,r=_eai_r
|
|
9
|
+
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",EAI_DISCOVERED_EXTERNALS("@sentry/browser"),function(){return n(t(32314))}),e("@sentry/core",EAI_DISCOVERED_EXTERNALS("@sentry/core"),function(){return n(t(67723))}),e("@sentry/integrations",EAI_DISCOVERED_EXTERNALS("@sentry/integrations"),function(){return n(t(20080))}),e("@sentry/replay",EAI_DISCOVERED_EXTERNALS("@sentry/replay"),function(){return n(t(51633))}),e("@sentry/utils",EAI_DISCOVERED_EXTERNALS("@sentry/utils"),function(){return n(t(5423))}),e("@tryghost/color-utils",EAI_DISCOVERED_EXTERNALS("@tryghost/color-utils"),function(){return n(t(86797))}),e("@tryghost/kg-clean-basic-html",EAI_DISCOVERED_EXTERNALS("@tryghost/kg-clean-basic-html"),function(){return n(t(3414))}),e("@tryghost/kg-converters",EAI_DISCOVERED_EXTERNALS("@tryghost/kg-converters"),function(){return n(t(23075))}),e("@tryghost/limit-service",EAI_DISCOVERED_EXTERNALS("@tryghost/limit-service"),function(){return n(t(55983))}),e("@tryghost/members-csv/lib/unparse",EAI_DISCOVERED_EXTERNALS("@tryghost/members-csv/lib/unparse"),function(){return n(t(17246))}),e("@tryghost/nql",EAI_DISCOVERED_EXTERNALS("@tryghost/nql"),function(){return n(t(39365))}),e("@tryghost/nql-lang",EAI_DISCOVERED_EXTERNALS("@tryghost/nql-lang"),function(){return n(t(716))}),e("@tryghost/string",EAI_DISCOVERED_EXTERNALS("@tryghost/string"),function(){return n(t(96107))}),e("@tryghost/timezone-data",EAI_DISCOVERED_EXTERNALS("@tryghost/timezone-data"),function(){return n(t(27019))}),e("animejs/lib/anime.es.js",EAI_DISCOVERED_EXTERNALS("animejs/lib/anime.es.js"),function(){return n(t(62282))}),e("element-resize-detector",EAI_DISCOVERED_EXTERNALS("element-resize-detector"),function(){return n(t(29540))}),e("ember-assign-helper/helpers/assign",EAI_DISCOVERED_EXTERNALS("ember-assign-helper/helpers/assign"),function(){return n(t(31113))}),e("ember-css-transitions/modifiers/css-transition",EAI_DISCOVERED_EXTERNALS("ember-css-transitions/modifiers/css-transition"),function(){return n(t(95895))}),e("ember-keyboard/helpers/if-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/helpers/if-key.js"),function(){return n(t(10530))}),e("ember-keyboard/helpers/on-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/helpers/on-key.js"),function(){return n(t(13692))}),e("ember-keyboard/modifiers/on-key.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/modifiers/on-key.js"),function(){return n(t(40985))}),e("ember-keyboard/services/keyboard.js",EAI_DISCOVERED_EXTERNALS("ember-keyboard/services/keyboard.js"),function(){return n(t(89697))}),e("ember-modifier",EAI_DISCOVERED_EXTERNALS("ember-modifier"),function(){return n(t(37777))}),e("ember-moment/helpers/-base",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/-base"),function(){return n(t(91366))}),e("ember-moment/helpers/is-after",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-after"),function(){return n(t(91461))}),e("ember-moment/helpers/is-before",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-before"),function(){return n(t(61e3))}),e("ember-moment/helpers/is-between",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-between"),function(){return n(t(447))}),e("ember-moment/helpers/is-same",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same"),function(){return n(t(64193))}),e("ember-moment/helpers/is-same-or-after",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same-or-after"),function(){return n(t(7916))}),e("ember-moment/helpers/is-same-or-before",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/is-same-or-before"),function(){return n(t(54351))}),e("ember-moment/helpers/moment",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment"),function(){return n(t(41678))}),e("ember-moment/helpers/moment-add",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-add"),function(){return n(t(50080))}),e("ember-moment/helpers/moment-calendar",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-calendar"),function(){return n(t(96625))}),e("ember-moment/helpers/moment-diff",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-diff"),function(){return n(t(85340))}),e("ember-moment/helpers/moment-duration",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-duration"),function(){return n(t(42967))}),e("ember-moment/helpers/moment-format",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-format"),function(){return n(t(10536))}),e("ember-moment/helpers/moment-from",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-from"),function(){return n(t(50727))}),e("ember-moment/helpers/moment-from-now",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-from-now"),function(){return n(t(706))}),e("ember-moment/helpers/moment-subtract",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-subtract"),function(){return n(t(54651))}),e("ember-moment/helpers/moment-to",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to"),function(){return n(t(84818))}),e("ember-moment/helpers/moment-to-date",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to-date"),function(){return n(t(81183))}),e("ember-moment/helpers/moment-to-now",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/moment-to-now"),function(){return n(t(17083))}),e("ember-moment/helpers/now",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/now"),function(){return n(t(34980))}),e("ember-moment/helpers/unix",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/unix"),function(){return n(t(79272))}),e("ember-moment/helpers/utc",EAI_DISCOVERED_EXTERNALS("ember-moment/helpers/utc"),function(){return n(t(36022))}),e("ember-moment/services/moment",EAI_DISCOVERED_EXTERNALS("ember-moment/services/moment"),function(){return n(t(39879))}),e("fast-deep-equal",EAI_DISCOVERED_EXTERNALS("fast-deep-equal"),function(){return n(t(25383))}),e("flexsearch",EAI_DISCOVERED_EXTERNALS("flexsearch"),function(){return n(t(12248))}),e("focus-trap",EAI_DISCOVERED_EXTERNALS("focus-trap"),function(){return n(t(39632))}),e("intersection-observer-admin",EAI_DISCOVERED_EXTERNALS("intersection-observer-admin"),function(){return n(t(21431))}),e("microdiff",EAI_DISCOVERED_EXTERNALS("microdiff"),function(){return n(t(59086))}),e("moment-timezone",EAI_DISCOVERED_EXTERNALS("moment-timezone"),function(){return n(t(41101))}),e("papaparse",EAI_DISCOVERED_EXTERNALS("papaparse"),function(){return n(t(78695))}),e("raf-pool",EAI_DISCOVERED_EXTERNALS("raf-pool"),function(){return n(t(60695))}),e("react",EAI_DISCOVERED_EXTERNALS("react"),function(){return n(t(72854))}),e("react-dom",EAI_DISCOVERED_EXTERNALS("react-dom"),function(){return n(t(95303))}),e("react-dom/client",EAI_DISCOVERED_EXTERNALS("react-dom/client"),function(){return n(t(70816))}),e("semver/functions/coerce",EAI_DISCOVERED_EXTERNALS("semver/functions/coerce"),function(){return n(t(18576))}),e("semver/functions/lt",EAI_DISCOVERED_EXTERNALS("semver/functions/lt"),function(){return n(t(32817))}),e("semver/functions/parse",EAI_DISCOVERED_EXTERNALS("semver/functions/parse"),function(){return n(t(47898))}),e("tooltip.js",EAI_DISCOVERED_EXTERNALS("tooltip.js"),function(){return n(t(85557))}),e("tracked-built-ins",EAI_DISCOVERED_EXTERNALS("tracked-built-ins"),function(){return n(t(67708))}),e("validator",EAI_DISCOVERED_EXTERNALS("validator"),function(){return n(t(29119))}),e("_eai_dyn_@sentry/browser",[],function(){return Promise.resolve().then(t.bind(t,32314))})}()},94973:function(e,r){window._eai_r=require,window._eai_d=define}},t={}
|
|
10
10
|
function n(e){var s=t[e]
|
|
11
11
|
if(void 0!==s)return s.exports
|
|
12
12
|
var o=t[e]={id:e,loaded:!1,exports:{}}
|
|
@@ -23,8 +23,8 @@ var r=(r,t)=>{var s,o,[m,E,i]=t,u=0
|
|
|
23
23
|
if(m.some(r=>0!==e[r])){for(s in E)n.o(E,s)&&(n.m[s]=E[s])
|
|
24
24
|
if(i)var a=i(n)}for(r&&r(t);u<m.length;u++)o=m[u],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0
|
|
25
25
|
return n.O(a)},t=globalThis.webpackChunk_ember_auto_import_=globalThis.webpackChunk_ember_auto_import_||[]
|
|
26
|
-
t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[397],()=>n(n.s=
|
|
27
|
-
var s=n.O(void 0,[397],()=>n(n.s=
|
|
26
|
+
t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),n.O(void 0,[397],()=>n(n.s=94973))
|
|
27
|
+
var s=n.O(void 0,[397],()=>n(n.s=40474))
|
|
28
28
|
s=n.O(s),__ember_auto_import__=s})()
|
|
29
29
|
|
|
30
|
-
//# sourceMappingURL=chunk.582.
|
|
30
|
+
//# sourceMappingURL=chunk.582.a4916bd533becb58fd9c.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Ghost</title>
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
<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%226.9%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%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%2237bd1e3e4d%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%
|
|
9
|
+
<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%226.9%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%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%2237bd1e3e4d%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%22594913de7a%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%2238e5073e2a%22%2C%22postsFilename%22%3A%22posts.js%22%2C%22postsHash%22%3A%22460f25b871%22%2C%22statsFilename%22%3A%22stats.js%22%2C%22statsHash%22%3A%22c820ebd57d%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D" />
|
|
10
10
|
|
|
11
11
|
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1, minimal-ui, viewport-fit=cover" />
|
|
12
12
|
<meta name="pinterest" content="nopin" />
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
|
|
50
50
|
<script src="assets/vendor-aed0068cf9b67d042dd23a6343545b7b.js"></script>
|
|
51
51
|
<script src="assets/chunk.397.a720333cfffc99c47e71.js"></script>
|
|
52
|
-
<script src="assets/chunk.524.
|
|
52
|
+
<script src="assets/chunk.524.56454d8add89b041f4df.js"></script>
|
|
53
53
|
<script src="assets/ghost-94d0fbb20e8e880fa9ba144cf26ab050.js"></script>
|
|
54
54
|
</body>
|
|
55
55
|
</html>
|
|
@@ -330,22 +330,56 @@ module.exports = class EmailAnalyticsService {
|
|
|
330
330
|
|
|
331
331
|
// We keep the processing result here, so we also have a result in case of failures
|
|
332
332
|
let processingResult = new EventProcessingResult();
|
|
333
|
+
// Track cumulative event counts separately since processingResult gets reset during intermediate aggregations
|
|
334
|
+
const cumulativeResult = new EventProcessingResult();
|
|
335
|
+
// Track all unique emailIds and memberIds that need aggregation
|
|
336
|
+
const allEmailIds = new Set();
|
|
337
|
+
const allMemberIds = new Set();
|
|
333
338
|
let error = null;
|
|
334
339
|
|
|
335
340
|
/**
|
|
336
341
|
* Process a batch of events
|
|
337
342
|
* @param {Array<Object>} events - Array of event objects to process
|
|
338
|
-
* @param {EventProcessingResult} processingResult - Object to store the processing results
|
|
339
|
-
* @param {FetchData} fetchData - Object containing fetch operation data
|
|
340
343
|
* @returns {Promise<void>}
|
|
341
344
|
*/
|
|
342
345
|
const processBatch = async (events) => {
|
|
343
346
|
// Even if the fetching is interrupted because of an error, we still store the last event timestamp
|
|
344
347
|
const processingStart = Date.now();
|
|
348
|
+
// Capture the state before processing to calculate delta
|
|
349
|
+
const beforeCounts = {
|
|
350
|
+
opened: processingResult.opened,
|
|
351
|
+
delivered: processingResult.delivered,
|
|
352
|
+
temporaryFailed: processingResult.temporaryFailed,
|
|
353
|
+
permanentFailed: processingResult.permanentFailed,
|
|
354
|
+
unsubscribed: processingResult.unsubscribed,
|
|
355
|
+
complained: processingResult.complained,
|
|
356
|
+
unhandled: processingResult.unhandled,
|
|
357
|
+
unprocessable: processingResult.unprocessable
|
|
358
|
+
};
|
|
359
|
+
const beforeEmailIds = new Set(processingResult.emailIds);
|
|
360
|
+
const beforeMemberIds = new Set(processingResult.memberIds);
|
|
361
|
+
|
|
345
362
|
await this.processEventBatch(events, processingResult, fetchData);
|
|
346
363
|
processingTimeMs += (Date.now() - processingStart);
|
|
347
364
|
eventCount += events.length;
|
|
348
365
|
|
|
366
|
+
// Calculate delta (only new counts from this batch) and accumulate for final reporting
|
|
367
|
+
const batchDelta = new EventProcessingResult({
|
|
368
|
+
opened: processingResult.opened - beforeCounts.opened,
|
|
369
|
+
delivered: processingResult.delivered - beforeCounts.delivered,
|
|
370
|
+
temporaryFailed: processingResult.temporaryFailed - beforeCounts.temporaryFailed,
|
|
371
|
+
permanentFailed: processingResult.permanentFailed - beforeCounts.permanentFailed,
|
|
372
|
+
unsubscribed: processingResult.unsubscribed - beforeCounts.unsubscribed,
|
|
373
|
+
complained: processingResult.complained - beforeCounts.complained,
|
|
374
|
+
unhandled: processingResult.unhandled - beforeCounts.unhandled,
|
|
375
|
+
unprocessable: processingResult.unprocessable - beforeCounts.unprocessable,
|
|
376
|
+
emailIds: processingResult.emailIds.filter(id => !beforeEmailIds.has(id)),
|
|
377
|
+
memberIds: processingResult.memberIds.filter(id => !beforeMemberIds.has(id))
|
|
378
|
+
});
|
|
379
|
+
cumulativeResult.merge(batchDelta);
|
|
380
|
+
batchDelta.emailIds.forEach(id => allEmailIds.add(id));
|
|
381
|
+
batchDelta.memberIds.forEach(id => allMemberIds.add(id));
|
|
382
|
+
|
|
349
383
|
// Every 5 minutes or 5000 members we do an aggregation and clear the processingResult
|
|
350
384
|
// Otherwise we need to loop a lot of members afterwards, and this takes too long without updating the stat counts in between
|
|
351
385
|
if ((Date.now() - lastAggregation > 5 * 60 * 1000 || processingResult.memberIds.length > 5000) && eventCount > 0) {
|
|
@@ -356,6 +390,9 @@ module.exports = class EmailAnalyticsService {
|
|
|
356
390
|
await this.aggregateStats(processingResult, includeOpenedEvents);
|
|
357
391
|
aggregationTimeMs += (Date.now() - aggregationStart);
|
|
358
392
|
lastAggregation = Date.now();
|
|
393
|
+
// Remove aggregated emailIds and memberIds from tracking sets to avoid re-aggregating at the end
|
|
394
|
+
processingResult.emailIds.forEach(id => allEmailIds.delete(id));
|
|
395
|
+
processingResult.memberIds.forEach(id => allMemberIds.delete(id));
|
|
359
396
|
processingResult = new EventProcessingResult();
|
|
360
397
|
} catch (err) {
|
|
361
398
|
logging.error('[EmailAnalytics] Error while aggregating stats');
|
|
@@ -386,10 +423,20 @@ module.exports = class EmailAnalyticsService {
|
|
|
386
423
|
}
|
|
387
424
|
}
|
|
388
425
|
|
|
389
|
-
|
|
426
|
+
// Final aggregation: aggregate any remaining events and ensure all emailIds are aggregated
|
|
427
|
+
// We need to aggregate all unique emailIds to ensure the emails table is updated
|
|
428
|
+
const finalEmailIds = Array.from(new Set([...processingResult.emailIds, ...allEmailIds]));
|
|
429
|
+
const finalMemberIds = Array.from(new Set([...processingResult.memberIds, ...allMemberIds]));
|
|
430
|
+
|
|
431
|
+
if (finalMemberIds.length > 0 || finalEmailIds.length > 0) {
|
|
390
432
|
try {
|
|
391
433
|
const aggregationStart = Date.now();
|
|
392
|
-
|
|
434
|
+
// Create a result object with all emailIds and memberIds for final aggregation
|
|
435
|
+
const finalAggregationResult = {
|
|
436
|
+
emailIds: finalEmailIds,
|
|
437
|
+
memberIds: finalMemberIds
|
|
438
|
+
};
|
|
439
|
+
await this.aggregateStats(finalAggregationResult, includeOpenedEvents);
|
|
393
440
|
aggregationTimeMs += (Date.now() - aggregationStart);
|
|
394
441
|
} catch (err) {
|
|
395
442
|
logging.error('[EmailAnalytics] Error while aggregating stats');
|
|
@@ -404,7 +451,7 @@ module.exports = class EmailAnalyticsService {
|
|
|
404
451
|
// Small trick: if reached the end of new events, we are going to keep
|
|
405
452
|
// fetching the same events because 'begin' won't change
|
|
406
453
|
// So if we didn't have errors while fetching, and total events < maxEvents, increase lastEventTimestamp with one second
|
|
407
|
-
if (!error && eventCount > 0 &&
|
|
454
|
+
if (!error && eventCount > 0 && fetchData.lastEventTimestamp && fetchData.lastEventTimestamp.getTime() < Date.now() - 2000) {
|
|
408
455
|
// set the data on the db so we can store it for fetching after reboot
|
|
409
456
|
await this.queries.setJobTimestamp(fetchData.jobName, 'finished', new Date(fetchData.lastEventTimestamp.getTime()));
|
|
410
457
|
// increment and store in local memory
|
|
@@ -425,7 +472,7 @@ module.exports = class EmailAnalyticsService {
|
|
|
425
472
|
apiPollingTimeMs,
|
|
426
473
|
processingTimeMs,
|
|
427
474
|
aggregationTimeMs,
|
|
428
|
-
result:
|
|
475
|
+
result: cumulativeResult
|
|
429
476
|
};
|
|
430
477
|
}
|
|
431
478
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "6.9.
|
|
3
|
+
"version": "6.9.1",
|
|
4
4
|
"description": "The professional publishing platform",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"homepage": "https://ghost.org",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"@tryghost/helpers": "1.1.97",
|
|
88
88
|
"@tryghost/html-to-plaintext": "1.0.4",
|
|
89
89
|
"@tryghost/http-cache-utils": "0.1.20",
|
|
90
|
-
"@tryghost/i18n": "file:components/tryghost-i18n-6.9.
|
|
90
|
+
"@tryghost/i18n": "file:components/tryghost-i18n-6.9.1.tgz",
|
|
91
91
|
"@tryghost/image-transform": "1.4.6",
|
|
92
92
|
"@tryghost/job-manager": "1.0.3",
|
|
93
93
|
"@tryghost/kg-card-factory": "5.1.2",
|
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
"jackspeak": "2.3.6",
|
|
275
275
|
"moment": "2.24.0",
|
|
276
276
|
"moment-timezone": "0.5.45",
|
|
277
|
-
"@tryghost/i18n": "file:components/tryghost-i18n-6.9.
|
|
277
|
+
"@tryghost/i18n": "file:components/tryghost-i18n-6.9.1.tgz"
|
|
278
278
|
},
|
|
279
279
|
"nx": {
|
|
280
280
|
"targets": {
|
|
Binary file
|