ghost 5.33.7 → 5.33.8
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-adapter-manager-5.33.7.tgz → tryghost-adapter-manager-5.33.8.tgz} +0 -0
- package/components/{tryghost-api-framework-5.33.7.tgz → tryghost-api-framework-5.33.8.tgz} +0 -0
- package/components/{tryghost-api-version-compatibility-service-5.33.7.tgz → tryghost-api-version-compatibility-service-5.33.8.tgz} +0 -0
- package/components/tryghost-audience-feedback-5.33.8.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.33.8.tgz +0 -0
- package/components/{tryghost-constants-5.33.7.tgz → tryghost-constants-5.33.8.tgz} +0 -0
- package/components/tryghost-custom-theme-settings-service-5.33.8.tgz +0 -0
- package/components/{tryghost-data-generator-5.33.7.tgz → tryghost-data-generator-5.33.8.tgz} +0 -0
- package/components/tryghost-domain-events-5.33.8.tgz +0 -0
- package/components/tryghost-dynamic-routing-events-5.33.8.tgz +0 -0
- package/components/tryghost-email-analytics-provider-mailgun-5.33.8.tgz +0 -0
- package/components/tryghost-email-analytics-service-5.33.8.tgz +0 -0
- package/components/tryghost-email-content-generator-5.33.8.tgz +0 -0
- package/components/tryghost-email-events-5.33.8.tgz +0 -0
- package/components/tryghost-email-service-5.33.8.tgz +0 -0
- package/components/tryghost-email-suppression-list-5.33.8.tgz +0 -0
- package/components/{tryghost-express-dynamic-redirects-5.33.7.tgz → tryghost-express-dynamic-redirects-5.33.8.tgz} +0 -0
- package/components/tryghost-extract-api-key-5.33.8.tgz +0 -0
- package/components/tryghost-html-to-plaintext-5.33.8.tgz +0 -0
- package/components/tryghost-i18n-5.33.8.tgz +0 -0
- package/components/tryghost-importer-revue-5.33.8.tgz +0 -0
- package/components/{tryghost-job-manager-5.33.7.tgz → tryghost-job-manager-5.33.8.tgz} +0 -0
- package/components/tryghost-link-redirects-5.33.8.tgz +0 -0
- package/components/tryghost-link-replacer-5.33.8.tgz +0 -0
- package/components/tryghost-link-tracking-5.33.8.tgz +0 -0
- package/components/{tryghost-magic-link-5.33.7.tgz → tryghost-magic-link-5.33.8.tgz} +0 -0
- package/components/tryghost-mailgun-client-5.33.8.tgz +0 -0
- package/components/{tryghost-member-attribution-5.33.7.tgz → tryghost-member-attribution-5.33.8.tgz} +0 -0
- package/components/tryghost-member-events-5.33.8.tgz +0 -0
- package/components/tryghost-members-api-5.33.8.tgz +0 -0
- package/components/tryghost-members-csv-5.33.8.tgz +0 -0
- package/components/{tryghost-members-events-service-5.33.7.tgz → tryghost-members-events-service-5.33.8.tgz} +0 -0
- package/components/{tryghost-members-importer-5.33.7.tgz → tryghost-members-importer-5.33.8.tgz} +0 -0
- package/components/tryghost-members-offers-5.33.8.tgz +0 -0
- package/components/tryghost-members-payments-5.33.8.tgz +0 -0
- package/components/tryghost-members-ssr-5.33.8.tgz +0 -0
- package/components/tryghost-members-stripe-service-5.33.8.tgz +0 -0
- package/components/tryghost-minifier-5.33.8.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.33.8.tgz +0 -0
- package/components/{tryghost-mw-cache-control-5.33.7.tgz → tryghost-mw-cache-control-5.33.8.tgz} +0 -0
- package/components/{tryghost-mw-error-handler-5.33.7.tgz → tryghost-mw-error-handler-5.33.8.tgz} +0 -0
- package/components/tryghost-mw-session-from-token-5.33.8.tgz +0 -0
- package/components/tryghost-mw-update-user-last-seen-5.33.8.tgz +0 -0
- package/components/tryghost-mw-vhost-5.33.8.tgz +0 -0
- package/components/tryghost-oembed-service-5.33.8.tgz +0 -0
- package/components/{tryghost-package-json-5.33.7.tgz → tryghost-package-json-5.33.8.tgz} +0 -0
- package/components/{tryghost-referrers-5.33.7.tgz → tryghost-referrers-5.33.8.tgz} +0 -0
- package/components/tryghost-security-5.33.8.tgz +0 -0
- package/components/tryghost-session-service-5.33.8.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.33.8.tgz +0 -0
- package/components/{tryghost-staff-service-5.33.7.tgz → tryghost-staff-service-5.33.8.tgz} +0 -0
- package/components/tryghost-stats-service-5.33.8.tgz +0 -0
- package/components/tryghost-tiers-5.33.8.tgz +0 -0
- package/components/tryghost-update-check-service-5.33.8.tgz +0 -0
- package/components/tryghost-verification-trigger-5.33.8.tgz +0 -0
- package/components/tryghost-version-notifications-data-service-5.33.8.tgz +0 -0
- package/components/tryghost-webmentions-5.33.8.tgz +0 -0
- package/core/boot.js +2 -0
- package/core/built/admin/assets/{chunk.143.9057a1659075c0ee7336.js → chunk.143.caa7dbd727b76021c31b.js} +5 -5
- package/core/built/admin/assets/{chunk.178.1d2c848ebe2c7baa38dd.js → chunk.178.9803e6194593a0ed6595.js} +4 -4
- package/core/built/admin/assets/{ghost-904f203ff1f5f6bff4e55a03f39a4fbf.js → ghost-872d240189f9b5ff85f4f7cb2ac3ab4c.js} +2 -2
- package/core/built/admin/index.html +2 -2
- package/core/server/api/endpoints/utils/serializers/output/email-posts.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/pages.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/posts.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/previews.js +1 -1
- package/core/server/services/email-analytics/events/StartEmailAnalyticsJobEvent.js +22 -0
- package/core/server/services/email-analytics/index.js +2 -22
- package/core/server/services/email-analytics/jobs/fetch-latest/index.js +6 -12
- package/core/server/services/email-analytics/wrapper.js +90 -0
- package/core/server/services/email-service/wrapper.js +2 -13
- package/package.json +108 -108
- package/components/tryghost-audience-feedback-5.33.7.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.33.7.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.33.7.tgz +0 -0
- package/components/tryghost-domain-events-5.33.7.tgz +0 -0
- package/components/tryghost-dynamic-routing-events-5.33.7.tgz +0 -0
- package/components/tryghost-email-analytics-provider-mailgun-5.33.7.tgz +0 -0
- package/components/tryghost-email-analytics-service-5.33.7.tgz +0 -0
- package/components/tryghost-email-content-generator-5.33.7.tgz +0 -0
- package/components/tryghost-email-events-5.33.7.tgz +0 -0
- package/components/tryghost-email-service-5.33.7.tgz +0 -0
- package/components/tryghost-email-suppression-list-5.33.7.tgz +0 -0
- package/components/tryghost-extract-api-key-5.33.7.tgz +0 -0
- package/components/tryghost-html-to-plaintext-5.33.7.tgz +0 -0
- package/components/tryghost-i18n-5.33.7.tgz +0 -0
- package/components/tryghost-importer-revue-5.33.7.tgz +0 -0
- package/components/tryghost-link-redirects-5.33.7.tgz +0 -0
- package/components/tryghost-link-replacer-5.33.7.tgz +0 -0
- package/components/tryghost-link-tracking-5.33.7.tgz +0 -0
- package/components/tryghost-mailgun-client-5.33.7.tgz +0 -0
- package/components/tryghost-member-events-5.33.7.tgz +0 -0
- package/components/tryghost-members-api-5.33.7.tgz +0 -0
- package/components/tryghost-members-csv-5.33.7.tgz +0 -0
- package/components/tryghost-members-offers-5.33.7.tgz +0 -0
- package/components/tryghost-members-payments-5.33.7.tgz +0 -0
- package/components/tryghost-members-ssr-5.33.7.tgz +0 -0
- package/components/tryghost-members-stripe-service-5.33.7.tgz +0 -0
- package/components/tryghost-minifier-5.33.7.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.33.7.tgz +0 -0
- package/components/tryghost-mw-session-from-token-5.33.7.tgz +0 -0
- package/components/tryghost-mw-update-user-last-seen-5.33.7.tgz +0 -0
- package/components/tryghost-mw-vhost-5.33.7.tgz +0 -0
- package/components/tryghost-oembed-service-5.33.7.tgz +0 -0
- package/components/tryghost-security-5.33.7.tgz +0 -0
- package/components/tryghost-session-service-5.33.7.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.33.7.tgz +0 -0
- package/components/tryghost-stats-service-5.33.7.tgz +0 -0
- package/components/tryghost-tiers-5.33.7.tgz +0 -0
- package/components/tryghost-update-check-service-5.33.7.tgz +0 -0
- package/components/tryghost-verification-trigger-5.33.7.tgz +0 -0
- package/components/tryghost-version-notifications-data-service-5.33.7.tgz +0 -0
- package/components/tryghost-webmentions-5.33.7.tgz +0 -0
- package/core/server/services/email-analytics/jobs/fetch-latest/run.js +0 -57
package/components/{tryghost-adapter-manager-5.33.7.tgz → tryghost-adapter-manager-5.33.8.tgz}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/components/{tryghost-data-generator-5.33.7.tgz → tryghost-data-generator-5.33.8.tgz}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/components/{tryghost-member-attribution-5.33.7.tgz → tryghost-member-attribution-5.33.8.tgz}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/components/{tryghost-members-importer-5.33.7.tgz → tryghost-members-importer-5.33.8.tgz}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/components/{tryghost-mw-cache-control-5.33.7.tgz → tryghost-mw-cache-control-5.33.8.tgz}
RENAMED
|
Binary file
|
package/components/{tryghost-mw-error-handler-5.33.7.tgz → tryghost-mw-error-handler-5.33.8.tgz}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/core/boot.js
CHANGED
|
@@ -292,6 +292,7 @@ async function initServices({config}) {
|
|
|
292
292
|
const audienceFeedback = require('./server/services/audience-feedback');
|
|
293
293
|
const emailSuppressionList = require('./server/services/email-suppression-list');
|
|
294
294
|
const emailService = require('./server/services/email-service');
|
|
295
|
+
const emailAnalytics = require('./server/services/email-analytics');
|
|
295
296
|
const mentionsService = require('./server/services/mentions');
|
|
296
297
|
|
|
297
298
|
const urlUtils = require('./shared/url-utils');
|
|
@@ -316,6 +317,7 @@ async function initServices({config}) {
|
|
|
316
317
|
slack.listen(),
|
|
317
318
|
audienceFeedback.init(),
|
|
318
319
|
emailService.init(),
|
|
320
|
+
emailAnalytics.init(),
|
|
319
321
|
mega.listen(),
|
|
320
322
|
webhooks.listen(),
|
|
321
323
|
appService.init(),
|
|
@@ -10,8 +10,8 @@ return s.unparse(t,{columns:r})}},96616:(e,r,t)=>{var n={"./af":21516,"./af.js":
|
|
|
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
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},7456:e=>{"use strict"
|
|
13
|
-
e.exports=require("@ember/test-waiters")},11975:()=>{},
|
|
14
|
-
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(40545)})),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",[],(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-modifier",[],(function(){return t(92509)})),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(36058)})),n("react-dom",[],(function(){return t(18971)})),n("react-dom/client",[],(function(){return t(79793)})),n("tooltip.js",[],(function(){return t(15028)})),n("validator",[],(function(){return t(2228)})),void n("_eai_dyn_@sentry/tracing",[],(function(){return t.e(79).then(t.bind(t,98079))})))},
|
|
13
|
+
e.exports=require("@ember/test-waiters")},11975:()=>{},77255:(e,r,t)=>{var n,s
|
|
14
|
+
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(40545)})),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",[],(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-modifier",[],(function(){return t(92509)})),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(36058)})),n("react-dom",[],(function(){return t(18971)})),n("react-dom/client",[],(function(){return t(79793)})),n("tooltip.js",[],(function(){return t(15028)})),n("validator",[],(function(){return t(2228)})),void n("_eai_dyn_@sentry/tracing",[],(function(){return t.e(79).then(t.bind(t,98079))})))},88562:function(e,r){window._eai_r=require,window._eai_d=define}},s={}
|
|
15
15
|
function o(e){var r=s[e]
|
|
16
16
|
if(void 0!==r)return r.exports
|
|
17
17
|
var t=s[e]={id:e,loaded:!1,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 c=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(c)},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,[963],(()=>o(o.s=
|
|
46
|
-
var i=o.O(void 0,[963],(()=>o(o.s=
|
|
45
|
+
t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),o.O(void 0,[963],(()=>o(o.s=88562)))
|
|
46
|
+
var i=o.O(void 0,[963],(()=>o(o.s=77255)))
|
|
47
47
|
i=o.O(i),__ember_auto_import__=i})()
|
|
48
48
|
|
|
49
|
-
//# sourceMappingURL=chunk.143.
|
|
49
|
+
//# sourceMappingURL=chunk.143.caa7dbd727b76021c31b.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var __ember_auto_import__;(()=>{var r={
|
|
1
|
+
var __ember_auto_import__;(()=>{var r={88562:function(r,e){window._eai_r=require,window._eai_d=define},4481: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(
|
|
8
|
-
var _=t(
|
|
7
|
+
return r[_].call(i.exports,i,i.exports,t),i.exports}t(88562)
|
|
8
|
+
var _=t(4481)
|
|
9
9
|
__ember_auto_import__=_})()
|
|
10
10
|
|
|
11
|
-
//# sourceMappingURL=chunk.178.
|
|
11
|
+
//# sourceMappingURL=chunk.178.9803e6194593a0ed6595.map
|
|
@@ -5862,7 +5862,7 @@ return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r
|
|
|
5862
5862
|
return Object.keys(i).forEach((function(e){a[e]=i[e]})),a.enumerable=!!a.enumerable,a.configurable=!!a.configurable,("value"in a||a.initializer)&&(a.writable=!0),a=r.slice().reverse().reduce((function(r,i){return i(e,t,r)||r}),a),n&&void 0!==a.initializer&&(a.value=a.initializer?a.initializer.call(n):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
|
|
5863
5863
|
let C=(i=Ember._tracked,n=Ember._tracked,a=Ember._tracked,s=Ember._tracked,o=Ember._action,l=Ember._action,u=Ember._action,d=Ember._tracked,c=Ember._tracked,p=Ember._action,m=Ember._tracked,h=Ember._tracked,b=Ember._action,g=Ember._action,f=(0,r.task)({drop:!0}),v=(0,r.task)({drop:!0}),y=class{get isLoading(){return this.setupTask.isRunning}get willEmail(){return"publish"!==this.publishType&&this.recipientFilter&&this.post.isDraft&&!this.post.email||this.post.isDraft&&this.post.email&&"failed"===this.post.email.status}get willPublish(){return"send"!==this.publishType}get willOnlyEmail(){return"send"===this.publishType}get minScheduledAt(){return t.default.utc().add(5,"seconds").milliseconds(0)}get defaultScheduledAt(){return t.default.utc().add(10,"minutes").milliseconds(0)}toggleScheduled(e){void 0===e&&(e=!this.isScheduled),this.isScheduled=e,!e||this.scheduledAtUTC&&!this.scheduledAtUTC.isBefore(this.defaultScheduledAt)||(this.scheduledAtUTC=this.defaultScheduledAt)}setScheduledAt(e){(e=t.default.utc(e).milliseconds(0)).isBefore(this.minScheduledAt)?this.scheduledAtUTC=this.minScheduledAt:this.scheduledAtUTC=e}resetPastScheduledAt(){this.scheduledAtUTC.isBefore(this.minScheduledAt)&&(this.isScheduled=!1,this.scheduledAt=null)}get publishTypeOptions(){return[{value:"publish+send",label:"Publish and email",display:"Publish and email",disabled:this.emailDisabled},{value:"publish",label:"Publish only",display:"Publish"},{value:"send",label:"Email only",display:"Email",disabled:this.emailDisabled}]}get selectedPublishTypeOption(){return this.publishTypeOptions.find((e=>e.value===this.publishType))}get emailDisabledInSettings(){return"disabled"===this.settings.editorDefaultEmailRecipients||"none"===this.settings.membersSignupAccess}get emailUnavailable(){return this.post.isPage||this.post.email||this.emailDisabledInSettings}get emailDisabled(){const e=0===this.totalMemberCount
|
|
5864
5864
|
return!this.mailgunIsConfigured||e||this.emailDisabledError}get mailgunIsConfigured(){return this.settings.mailgunIsConfigured||this.config.mailgunIsConfigured}setPublishType(e){this.publishType=e}get newsletters(){return this.allNewsletters.filter((e=>"active"===e.status)).sort(((e,t)=>{let{sortOrder:r}=e,{sortOrder:i}=t
|
|
5865
|
-
return r-i}))}get defaultNewsletter(){return this.newsletters[0]}get onlyDefaultNewsletter(){return 1===this.newsletters.length}get recipientFilter(){return this.selectedRecipientFilter||this.post.emailSegment||this.defaultRecipientFilter}get defaultRecipientFilter(){const e=this.settings.editorDefaultEmailRecipients,t=this.settings.editorDefaultEmailRecipientsFilter
|
|
5865
|
+
return r-i}))}get defaultNewsletter(){return this.newsletters[0]}get onlyDefaultNewsletter(){return 1===this.newsletters.length}get recipientFilter(){return this.selectedRecipientFilter||this.post.newsletter&&this.post.emailSegment||this.defaultRecipientFilter}get defaultRecipientFilter(){const e=this.settings.editorDefaultEmailRecipients,t=this.settings.editorDefaultEmailRecipientsFilter
|
|
5866
5866
|
return"disabled"===e?null:"visibility"===e||"filter"===e&&null===t?"public"===this.post.visibility||"members"===this.post.visibility?"status:free,status:-free":"paid"===this.post.visibility?"status:-free":"tiers"===this.post.visibility?this.post.visibilitySegment:this.post.visibility:t}get fullRecipientFilter(){let e=this.newsletter.recipientFilter
|
|
5867
5867
|
return this.recipientFilter&&(e+=`+(${this.recipientFilter})`),e}setNewsletter(e){this.newsletter=e}setRecipientFilter(e){this.selectedRecipientFilter=e}constructor(){let{config:e,limit:t,post:r,settings:i,store:n,user:a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}
|
|
5868
5868
|
S(this,"config",null),S(this,"limit",null),S(this,"settings",null),S(this,"store",null),S(this,"post",null),S(this,"user",null),z(this,"publishDisabledError",w,this),z(this,"totalMemberCount",k,this),z(this,"isScheduled",E,this),z(this,"scheduledAtUTC",P,this),z(this,"publishType",O,this),z(this,"emailDisabledError",j,this),S(this,"allNewsletters",[]),z(this,"newsletter",_,this),z(this,"selectedRecipientFilter",T,this),this.config=e,this.limit=t,this.post=r,this.settings=i,this.store=n,this.user=a,this.allNewsletters=this.store.peekAll("newsletter"),this.setupTask.perform()}*setupTask(){yield this.fetchRequiredDataTask.perform(),this.newsletter=this.defaultNewsletter,(this.emailUnavailable||this.emailDisabled)&&(this.publishType="publish"),"filter"===this.settings.editorDefaultEmailRecipients&&null===this.settings.editorDefaultEmailRecipientsFilter&&(this.publishType="publish"),this.post.isSent&&(this.publishType="send")}*fetchRequiredDataTask(){const e=[]
|
|
@@ -5989,4 +5989,4 @@ var t=Ember.Component.extend({})
|
|
|
5989
5989
|
e.default=t})),define("ghost-admin/config/environment",[],(function(){try{var e="ghost-admin/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),r={default:JSON.parse(decodeURIComponent(t))}
|
|
5990
5990
|
return Object.defineProperty(r,"__esModule",{value:!0}),r}catch(i){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("ghost-admin/app").default.create({version:"5.33",name:"ghost-admin"})
|
|
5991
5991
|
|
|
5992
|
-
//# sourceMappingURL=ghost-
|
|
5992
|
+
//# sourceMappingURL=ghost-872d240189f9b5ff85f4f7cb2ac3ab4c.map
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
|
|
59
59
|
<script src="assets/vendor-0441964c34d58f2aacd5a04bbe240243.js"></script>
|
|
60
60
|
<script src="assets/chunk.963.e47ead5abeca4cf69fed.js"></script>
|
|
61
|
-
<script src="assets/chunk.143.
|
|
62
|
-
<script src="assets/ghost-
|
|
61
|
+
<script src="assets/chunk.143.caa7dbd727b76021c31b.js"></script>
|
|
62
|
+
<script src="assets/ghost-872d240189f9b5ff85f4f7cb2ac3ab4c.js"></script>
|
|
63
63
|
</body>
|
|
64
64
|
</html>
|
|
@@ -5,7 +5,7 @@ const membersService = require('../../../../../services/members');
|
|
|
5
5
|
module.exports = {
|
|
6
6
|
async read(model, apiConfig, frame) {
|
|
7
7
|
const tiersModels = await membersService.api.productRepository.list({
|
|
8
|
-
|
|
8
|
+
limit: 'all'
|
|
9
9
|
});
|
|
10
10
|
const tiers = tiersModels.data && tiersModels.data.map(tierModel => tierModel.toJSON());
|
|
11
11
|
|
|
@@ -13,7 +13,7 @@ module.exports = {
|
|
|
13
13
|
let pages = [];
|
|
14
14
|
|
|
15
15
|
const tiersModels = await membersService.api.productRepository.list({
|
|
16
|
-
|
|
16
|
+
limit: 'all'
|
|
17
17
|
});
|
|
18
18
|
const tiers = tiersModels.data ? tiersModels.data.map(tierModel => tierModel.toJSON()) : [];
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@ module.exports = {
|
|
|
13
13
|
let posts = [];
|
|
14
14
|
|
|
15
15
|
const tiersModels = await membersService.api.productRepository.list({
|
|
16
|
-
|
|
16
|
+
limit: 'all'
|
|
17
17
|
});
|
|
18
18
|
const tiers = tiersModels.data ? tiersModels.data.map(tierModel => tierModel.toJSON()) : [];
|
|
19
19
|
if (models.meta) {
|
|
@@ -4,7 +4,7 @@ const membersService = require('../../../../../services/members');
|
|
|
4
4
|
module.exports = {
|
|
5
5
|
async all(model, apiConfig, frame) {
|
|
6
6
|
const tiersModels = await membersService.api.productRepository.list({
|
|
7
|
-
|
|
7
|
+
limit: 'all'
|
|
8
8
|
});
|
|
9
9
|
const tiers = tiersModels.data ? tiersModels.data.map(tierModel => tierModel.toJSON()) : [];
|
|
10
10
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is an event that is used to circumvent the job manager that currently isn't able to run scheduled jobs on the main thread (not offloaded).
|
|
3
|
+
* We simply emit this event in the job manager and listen for it on the main thread.
|
|
4
|
+
*/
|
|
5
|
+
module.exports = class StartEmailAnalyticsJobEvent {
|
|
6
|
+
/**
|
|
7
|
+
* @param {any} data
|
|
8
|
+
* @param {Date} timestamp
|
|
9
|
+
*/
|
|
10
|
+
constructor(data, timestamp) {
|
|
11
|
+
this.data = data;
|
|
12
|
+
this.timestamp = timestamp;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {any} [data]
|
|
17
|
+
* @param {Date} [timestamp]
|
|
18
|
+
*/
|
|
19
|
+
static create(data, timestamp) {
|
|
20
|
+
return new StartEmailAnalyticsJobEvent(data, timestamp ?? new Date);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
const
|
|
2
|
-
const db = require('../../data/db');
|
|
3
|
-
const settings = require('../../../shared/settings-cache');
|
|
4
|
-
const {EmailAnalyticsService} = require('@tryghost/email-analytics-service');
|
|
5
|
-
const {EmailEventProcessor} = require('@tryghost/email-service');
|
|
6
|
-
const MailgunProvider = require('@tryghost/email-analytics-provider-mailgun');
|
|
7
|
-
const queries = require('./lib/queries');
|
|
8
|
-
const DomainEvents = require('@tryghost/domain-events');
|
|
1
|
+
const EmailAnalyticsServiceWrapper = require('./wrapper');
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
domainEvents: DomainEvents,
|
|
12
|
-
db
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
module.exports = new EmailAnalyticsService({
|
|
16
|
-
config,
|
|
17
|
-
settings,
|
|
18
|
-
eventProcessor,
|
|
19
|
-
providers: [
|
|
20
|
-
new MailgunProvider({config, settings})
|
|
21
|
-
],
|
|
22
|
-
queries
|
|
23
|
-
});
|
|
3
|
+
module.exports = new EmailAnalyticsServiceWrapper();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const {parentPort} = require('worker_threads');
|
|
2
|
+
const StartEmailAnalyticsJobEvent = require('../../events/StartEmailAnalyticsJobEvent');
|
|
2
3
|
|
|
3
4
|
// recurring job to fetch analytics since the most recently seen event timestamp
|
|
4
5
|
|
|
@@ -24,22 +25,15 @@ if (parentPort) {
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
(async () => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
event: {
|
|
33
|
-
type: event.constructor.name,
|
|
34
|
-
data: event
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
}
|
|
28
|
+
// We send an evnet message, so that it is emitted on the main thread by the job manager
|
|
29
|
+
// This will start the email analytics job on the main thread (the wrapper service is listening for this event)
|
|
30
|
+
parentPort.postMessage({
|
|
31
|
+
event: {
|
|
32
|
+
type: StartEmailAnalyticsJobEvent.name
|
|
38
33
|
}
|
|
39
34
|
});
|
|
40
35
|
|
|
41
36
|
if (parentPort) {
|
|
42
|
-
parentPort.postMessage(`Fetched ${eventStats.totalEvents} events and aggregated stats for ${eventStats.emailIds.length} emails in ${aggregateEndDate - fetchStartDate}ms`);
|
|
43
37
|
parentPort.postMessage('done');
|
|
44
38
|
} else {
|
|
45
39
|
// give the logging pipes time finish writing before exit
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const logging = require('@tryghost/logging');
|
|
2
|
+
const debug = require('@tryghost/debug')('jobs:email-analytics:fetch-latest');
|
|
3
|
+
|
|
4
|
+
class EmailAnalyticsServiceWrapper {
|
|
5
|
+
init() {
|
|
6
|
+
if (this.service) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const {EmailAnalyticsService} = require('@tryghost/email-analytics-service');
|
|
11
|
+
const {EmailEventStorage, EmailEventProcessor} = require('@tryghost/email-service');
|
|
12
|
+
const MailgunProvider = require('@tryghost/email-analytics-provider-mailgun');
|
|
13
|
+
const {EmailRecipientFailure, EmailSpamComplaintEvent} = require('../../models');
|
|
14
|
+
const StartEmailAnalyticsJobEvent = require('./events/StartEmailAnalyticsJobEvent');
|
|
15
|
+
|
|
16
|
+
const domainEvents = require('@tryghost/domain-events');
|
|
17
|
+
const config = require('../../../shared/config');
|
|
18
|
+
const settings = require('../../../shared/settings-cache');
|
|
19
|
+
const db = require('../../data/db');
|
|
20
|
+
const queries = require('./lib/queries');
|
|
21
|
+
const membersService = require('../members');
|
|
22
|
+
const membersRepository = membersService.api.members;
|
|
23
|
+
|
|
24
|
+
this.eventStorage = new EmailEventStorage({
|
|
25
|
+
db,
|
|
26
|
+
membersRepository,
|
|
27
|
+
models: {
|
|
28
|
+
EmailRecipientFailure,
|
|
29
|
+
EmailSpamComplaintEvent
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Since this is running in a worker thread, we cant dispatch directly
|
|
34
|
+
// So we post the events as a message to the job manager
|
|
35
|
+
const eventProcessor = new EmailEventProcessor({
|
|
36
|
+
domainEvents,
|
|
37
|
+
db,
|
|
38
|
+
eventStorage: this.eventStorage
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
this.service = new EmailAnalyticsService({
|
|
42
|
+
config,
|
|
43
|
+
settings,
|
|
44
|
+
eventProcessor,
|
|
45
|
+
providers: [
|
|
46
|
+
new MailgunProvider({config, settings})
|
|
47
|
+
],
|
|
48
|
+
queries
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// We currently cannot trigger a non-offloaded job from the job manager
|
|
52
|
+
// So the email analytics jobs simply emits an event.
|
|
53
|
+
domainEvents.subscribe(StartEmailAnalyticsJobEvent, async () => {
|
|
54
|
+
await this.startFetch();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async startFetch() {
|
|
59
|
+
if (this.fetching) {
|
|
60
|
+
logging.info('Email analytics fetch already running, skipping');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.fetching = true;
|
|
64
|
+
|
|
65
|
+
logging.info('Email analytics fetch started');
|
|
66
|
+
try {
|
|
67
|
+
const fetchStartDate = new Date();
|
|
68
|
+
debug('Starting email analytics fetch of latest events');
|
|
69
|
+
const eventStats = await this.service.fetchLatest();
|
|
70
|
+
const fetchEndDate = new Date();
|
|
71
|
+
debug(`Finished fetching ${eventStats.totalEvents} analytics events in ${fetchEndDate.getTime() - fetchStartDate.getTime()}ms`);
|
|
72
|
+
|
|
73
|
+
const aggregateStartDate = new Date();
|
|
74
|
+
debug(`Starting email analytics aggregation for ${eventStats.emailIds.length} emails`);
|
|
75
|
+
await this.service.aggregateStats(eventStats);
|
|
76
|
+
const aggregateEndDate = new Date();
|
|
77
|
+
debug(`Finished aggregating email analytics in ${aggregateEndDate.getTime() - aggregateStartDate.getTime()}ms`);
|
|
78
|
+
|
|
79
|
+
logging.info(`Fetched ${eventStats.totalEvents} events and aggregated stats for ${eventStats.emailIds.length} emails in ${aggregateEndDate.getTime() - fetchStartDate.getTime()}ms`);
|
|
80
|
+
|
|
81
|
+
this.fetching = false;
|
|
82
|
+
return eventStats;
|
|
83
|
+
} catch (e) {
|
|
84
|
+
logging.error(e, 'Error while fetching email analytics');
|
|
85
|
+
}
|
|
86
|
+
this.fetching = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
module.exports = EmailAnalyticsServiceWrapper;
|
|
@@ -13,8 +13,8 @@ class EmailServiceWrapper {
|
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const {EmailService, EmailController, EmailRenderer, SendingService, BatchSendingService, EmailSegmenter,
|
|
17
|
-
const {Post, Newsletter, Email, EmailBatch, EmailRecipient, Member
|
|
16
|
+
const {EmailService, EmailController, EmailRenderer, SendingService, BatchSendingService, EmailSegmenter, MailgunEmailProvider} = require('@tryghost/email-service');
|
|
17
|
+
const {Post, Newsletter, Email, EmailBatch, EmailRecipient, Member} = require('../../models');
|
|
18
18
|
const MailgunClient = require('@tryghost/mailgun-client');
|
|
19
19
|
const configService = require('../../../shared/config');
|
|
20
20
|
const settingsCache = require('../../../shared/settings-cache');
|
|
@@ -25,7 +25,6 @@ class EmailServiceWrapper {
|
|
|
25
25
|
const sentry = require('../../../shared/sentry');
|
|
26
26
|
const membersRepository = membersService.api.members;
|
|
27
27
|
const limitService = require('../limits');
|
|
28
|
-
const domainEvents = require('@tryghost/domain-events');
|
|
29
28
|
|
|
30
29
|
const mobiledocLib = require('../../lib/mobiledoc');
|
|
31
30
|
const lexicalLib = require('../../lib/lexical');
|
|
@@ -116,16 +115,6 @@ class EmailServiceWrapper {
|
|
|
116
115
|
Email
|
|
117
116
|
}
|
|
118
117
|
});
|
|
119
|
-
|
|
120
|
-
this.eventStorage = new EmailEventStorage({
|
|
121
|
-
db,
|
|
122
|
-
membersRepository,
|
|
123
|
-
models: {
|
|
124
|
-
EmailRecipientFailure,
|
|
125
|
-
EmailSpamComplaintEvent
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
this.eventStorage.listen(domainEvents);
|
|
129
118
|
}
|
|
130
119
|
}
|
|
131
120
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "5.33.
|
|
3
|
+
"version": "5.33.8",
|
|
4
4
|
"description": "The professional publishing platform",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"homepage": "https://ghost.org",
|
|
@@ -58,36 +58,36 @@
|
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@sentry/node": "7.11.1",
|
|
60
60
|
"@tryghost/adapter-base-cache": "0.1.3",
|
|
61
|
-
"@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.33.
|
|
61
|
+
"@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.33.8.tgz",
|
|
62
62
|
"@tryghost/admin-api-schema": "4.2.1",
|
|
63
|
-
"@tryghost/api-framework": "file:components/tryghost-api-framework-5.33.
|
|
64
|
-
"@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.33.
|
|
65
|
-
"@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.33.
|
|
63
|
+
"@tryghost/api-framework": "file:components/tryghost-api-framework-5.33.8.tgz",
|
|
64
|
+
"@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.33.8.tgz",
|
|
65
|
+
"@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.33.8.tgz",
|
|
66
66
|
"@tryghost/bookshelf-plugins": "0.6.3",
|
|
67
|
-
"@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.33.
|
|
67
|
+
"@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.33.8.tgz",
|
|
68
68
|
"@tryghost/color-utils": "0.1.22",
|
|
69
69
|
"@tryghost/config-url-helpers": "1.0.4",
|
|
70
|
-
"@tryghost/constants": "file:components/tryghost-constants-5.33.
|
|
71
|
-
"@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.33.
|
|
72
|
-
"@tryghost/data-generator": "file:components/tryghost-data-generator-5.33.
|
|
70
|
+
"@tryghost/constants": "file:components/tryghost-constants-5.33.8.tgz",
|
|
71
|
+
"@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.33.8.tgz",
|
|
72
|
+
"@tryghost/data-generator": "file:components/tryghost-data-generator-5.33.8.tgz",
|
|
73
73
|
"@tryghost/database-info": "0.3.14",
|
|
74
74
|
"@tryghost/debug": "0.1.21",
|
|
75
|
-
"@tryghost/domain-events": "file:components/tryghost-domain-events-5.33.
|
|
76
|
-
"@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.33.
|
|
77
|
-
"@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.33.
|
|
78
|
-
"@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.33.
|
|
79
|
-
"@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.33.
|
|
75
|
+
"@tryghost/domain-events": "file:components/tryghost-domain-events-5.33.8.tgz",
|
|
76
|
+
"@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.33.8.tgz",
|
|
77
|
+
"@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.33.8.tgz",
|
|
78
|
+
"@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.33.8.tgz",
|
|
79
|
+
"@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.33.8.tgz",
|
|
80
80
|
"@tryghost/email-mock-receiver": "0.1.0",
|
|
81
|
-
"@tryghost/email-service": "file:components/tryghost-email-service-5.33.
|
|
82
|
-
"@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.33.
|
|
81
|
+
"@tryghost/email-service": "file:components/tryghost-email-service-5.33.8.tgz",
|
|
82
|
+
"@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.33.8.tgz",
|
|
83
83
|
"@tryghost/errors": "1.2.20",
|
|
84
|
-
"@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.33.
|
|
84
|
+
"@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.33.8.tgz",
|
|
85
85
|
"@tryghost/helpers": "1.1.75",
|
|
86
|
-
"@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.33.
|
|
86
|
+
"@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.33.8.tgz",
|
|
87
87
|
"@tryghost/http-cache-utils": "0.1.6",
|
|
88
88
|
"@tryghost/image-transform": "1.2.3",
|
|
89
|
-
"@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.33.
|
|
90
|
-
"@tryghost/job-manager": "file:components/tryghost-job-manager-5.33.
|
|
89
|
+
"@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.33.8.tgz",
|
|
90
|
+
"@tryghost/job-manager": "file:components/tryghost-job-manager-5.33.8.tgz",
|
|
91
91
|
"@tryghost/kg-card-factory": "4.0.0",
|
|
92
92
|
"@tryghost/kg-default-atoms": "4.0.0",
|
|
93
93
|
"@tryghost/kg-default-cards": "6.0.0",
|
|
@@ -95,50 +95,50 @@
|
|
|
95
95
|
"@tryghost/kg-lexical-html-renderer": "0.0.11",
|
|
96
96
|
"@tryghost/kg-mobiledoc-html-renderer": "6.0.0",
|
|
97
97
|
"@tryghost/limit-service": "1.2.4",
|
|
98
|
-
"@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.33.
|
|
99
|
-
"@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.33.
|
|
100
|
-
"@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.33.
|
|
98
|
+
"@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.33.8.tgz",
|
|
99
|
+
"@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.33.8.tgz",
|
|
100
|
+
"@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.33.8.tgz",
|
|
101
101
|
"@tryghost/logging": "2.4.0",
|
|
102
|
-
"@tryghost/magic-link": "file:components/tryghost-magic-link-5.33.
|
|
103
|
-
"@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.33.
|
|
104
|
-
"@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.33.
|
|
105
|
-
"@tryghost/member-events": "file:components/tryghost-member-events-5.33.
|
|
106
|
-
"@tryghost/members-api": "file:components/tryghost-members-api-5.33.
|
|
107
|
-
"@tryghost/members-csv": "file:components/tryghost-members-csv-5.33.
|
|
108
|
-
"@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.33.
|
|
109
|
-
"@tryghost/members-importer": "file:components/tryghost-members-importer-5.33.
|
|
110
|
-
"@tryghost/members-offers": "file:components/tryghost-members-offers-5.33.
|
|
111
|
-
"@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.33.
|
|
112
|
-
"@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.33.
|
|
102
|
+
"@tryghost/magic-link": "file:components/tryghost-magic-link-5.33.8.tgz",
|
|
103
|
+
"@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.33.8.tgz",
|
|
104
|
+
"@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.33.8.tgz",
|
|
105
|
+
"@tryghost/member-events": "file:components/tryghost-member-events-5.33.8.tgz",
|
|
106
|
+
"@tryghost/members-api": "file:components/tryghost-members-api-5.33.8.tgz",
|
|
107
|
+
"@tryghost/members-csv": "file:components/tryghost-members-csv-5.33.8.tgz",
|
|
108
|
+
"@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.33.8.tgz",
|
|
109
|
+
"@tryghost/members-importer": "file:components/tryghost-members-importer-5.33.8.tgz",
|
|
110
|
+
"@tryghost/members-offers": "file:components/tryghost-members-offers-5.33.8.tgz",
|
|
111
|
+
"@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.33.8.tgz",
|
|
112
|
+
"@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.33.8.tgz",
|
|
113
113
|
"@tryghost/metrics": "1.0.20",
|
|
114
|
-
"@tryghost/minifier": "file:components/tryghost-minifier-5.33.
|
|
115
|
-
"@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.33.
|
|
116
|
-
"@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.33.
|
|
117
|
-
"@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.33.
|
|
118
|
-
"@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.33.
|
|
119
|
-
"@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.33.
|
|
114
|
+
"@tryghost/minifier": "file:components/tryghost-minifier-5.33.8.tgz",
|
|
115
|
+
"@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.33.8.tgz",
|
|
116
|
+
"@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.33.8.tgz",
|
|
117
|
+
"@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.33.8.tgz",
|
|
118
|
+
"@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.33.8.tgz",
|
|
119
|
+
"@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.33.8.tgz",
|
|
120
120
|
"@tryghost/nodemailer": "0.3.31",
|
|
121
121
|
"@tryghost/nql": "0.11.0",
|
|
122
|
-
"@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.33.
|
|
123
|
-
"@tryghost/package-json": "file:components/tryghost-package-json-5.33.
|
|
122
|
+
"@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.33.8.tgz",
|
|
123
|
+
"@tryghost/package-json": "file:components/tryghost-package-json-5.33.8.tgz",
|
|
124
124
|
"@tryghost/pretty-cli": "1.2.33",
|
|
125
125
|
"@tryghost/promise": "0.2.1",
|
|
126
126
|
"@tryghost/request": "0.1.34",
|
|
127
|
-
"@tryghost/security": "file:components/tryghost-security-5.33.
|
|
128
|
-
"@tryghost/session-service": "file:components/tryghost-session-service-5.33.
|
|
129
|
-
"@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.33.
|
|
127
|
+
"@tryghost/security": "file:components/tryghost-security-5.33.8.tgz",
|
|
128
|
+
"@tryghost/session-service": "file:components/tryghost-session-service-5.33.8.tgz",
|
|
129
|
+
"@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.33.8.tgz",
|
|
130
130
|
"@tryghost/social-urls": "0.1.34",
|
|
131
|
-
"@tryghost/staff-service": "file:components/tryghost-staff-service-5.33.
|
|
132
|
-
"@tryghost/stats-service": "file:components/tryghost-stats-service-5.33.
|
|
131
|
+
"@tryghost/staff-service": "file:components/tryghost-staff-service-5.33.8.tgz",
|
|
132
|
+
"@tryghost/stats-service": "file:components/tryghost-stats-service-5.33.8.tgz",
|
|
133
133
|
"@tryghost/string": "0.2.2",
|
|
134
|
-
"@tryghost/tiers": "file:components/tryghost-tiers-5.33.
|
|
134
|
+
"@tryghost/tiers": "file:components/tryghost-tiers-5.33.8.tgz",
|
|
135
135
|
"@tryghost/tpl": "0.1.21",
|
|
136
|
-
"@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.33.
|
|
136
|
+
"@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.33.8.tgz",
|
|
137
137
|
"@tryghost/url-utils": "4.3.0",
|
|
138
138
|
"@tryghost/validator": "0.1.31",
|
|
139
|
-
"@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.33.
|
|
139
|
+
"@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.33.8.tgz",
|
|
140
140
|
"@tryghost/version": "0.1.19",
|
|
141
|
-
"@tryghost/webmentions": "file:components/tryghost-webmentions-5.33.
|
|
141
|
+
"@tryghost/webmentions": "file:components/tryghost-webmentions-5.33.8.tgz",
|
|
142
142
|
"@tryghost/zip": "1.1.31",
|
|
143
143
|
"amperize": "0.6.1",
|
|
144
144
|
"analytics-node": "6.2.0",
|
|
@@ -233,62 +233,62 @@
|
|
|
233
233
|
"@tryghost/logging": "2.4.0",
|
|
234
234
|
"moment": "2.24.0",
|
|
235
235
|
"moment-timezone": "0.5.23",
|
|
236
|
-
"@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.33.
|
|
237
|
-
"@tryghost/api-framework": "file:components/tryghost-api-framework-5.33.
|
|
238
|
-
"@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.33.
|
|
239
|
-
"@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.33.
|
|
240
|
-
"@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.33.
|
|
241
|
-
"@tryghost/constants": "file:components/tryghost-constants-5.33.
|
|
242
|
-
"@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.33.
|
|
243
|
-
"@tryghost/data-generator": "file:components/tryghost-data-generator-5.33.
|
|
244
|
-
"@tryghost/domain-events": "file:components/tryghost-domain-events-5.33.
|
|
245
|
-
"@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.33.
|
|
246
|
-
"@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.33.
|
|
247
|
-
"@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.33.
|
|
248
|
-
"@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.33.
|
|
249
|
-
"@tryghost/email-events": "file:components/tryghost-email-events-5.33.
|
|
250
|
-
"@tryghost/email-service": "file:components/tryghost-email-service-5.33.
|
|
251
|
-
"@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.33.
|
|
252
|
-
"@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.33.
|
|
253
|
-
"@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.33.
|
|
254
|
-
"@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.33.
|
|
255
|
-
"@tryghost/i18n": "file:components/tryghost-i18n-5.33.
|
|
256
|
-
"@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.33.
|
|
257
|
-
"@tryghost/job-manager": "file:components/tryghost-job-manager-5.33.
|
|
258
|
-
"@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.33.
|
|
259
|
-
"@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.33.
|
|
260
|
-
"@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.33.
|
|
261
|
-
"@tryghost/magic-link": "file:components/tryghost-magic-link-5.33.
|
|
262
|
-
"@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.33.
|
|
263
|
-
"@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.33.
|
|
264
|
-
"@tryghost/member-events": "file:components/tryghost-member-events-5.33.
|
|
265
|
-
"@tryghost/members-api": "file:components/tryghost-members-api-5.33.
|
|
266
|
-
"@tryghost/members-csv": "file:components/tryghost-members-csv-5.33.
|
|
267
|
-
"@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.33.
|
|
268
|
-
"@tryghost/members-importer": "file:components/tryghost-members-importer-5.33.
|
|
269
|
-
"@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.33.
|
|
270
|
-
"@tryghost/minifier": "file:components/tryghost-minifier-5.33.
|
|
271
|
-
"@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.33.
|
|
272
|
-
"@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.33.
|
|
273
|
-
"@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.33.
|
|
274
|
-
"@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.33.
|
|
275
|
-
"@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.33.
|
|
276
|
-
"@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.33.
|
|
277
|
-
"@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.33.
|
|
278
|
-
"@tryghost/members-offers": "file:components/tryghost-members-offers-5.33.
|
|
279
|
-
"@tryghost/package-json": "file:components/tryghost-package-json-5.33.
|
|
280
|
-
"@tryghost/members-payments": "file:components/tryghost-members-payments-5.33.
|
|
281
|
-
"@tryghost/referrers": "file:components/tryghost-referrers-5.33.
|
|
282
|
-
"@tryghost/security": "file:components/tryghost-security-5.33.
|
|
283
|
-
"@tryghost/session-service": "file:components/tryghost-session-service-5.33.
|
|
284
|
-
"@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.33.
|
|
285
|
-
"@tryghost/staff-service": "file:components/tryghost-staff-service-5.33.
|
|
286
|
-
"@tryghost/stats-service": "file:components/tryghost-stats-service-5.33.
|
|
287
|
-
"@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.33.
|
|
288
|
-
"@tryghost/tiers": "file:components/tryghost-tiers-5.33.
|
|
289
|
-
"@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.33.
|
|
290
|
-
"@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.33.
|
|
291
|
-
"@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.33.
|
|
292
|
-
"@tryghost/webmentions": "file:components/tryghost-webmentions-5.33.
|
|
236
|
+
"@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.33.8.tgz",
|
|
237
|
+
"@tryghost/api-framework": "file:components/tryghost-api-framework-5.33.8.tgz",
|
|
238
|
+
"@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.33.8.tgz",
|
|
239
|
+
"@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.33.8.tgz",
|
|
240
|
+
"@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.33.8.tgz",
|
|
241
|
+
"@tryghost/constants": "file:components/tryghost-constants-5.33.8.tgz",
|
|
242
|
+
"@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.33.8.tgz",
|
|
243
|
+
"@tryghost/data-generator": "file:components/tryghost-data-generator-5.33.8.tgz",
|
|
244
|
+
"@tryghost/domain-events": "file:components/tryghost-domain-events-5.33.8.tgz",
|
|
245
|
+
"@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.33.8.tgz",
|
|
246
|
+
"@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.33.8.tgz",
|
|
247
|
+
"@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.33.8.tgz",
|
|
248
|
+
"@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.33.8.tgz",
|
|
249
|
+
"@tryghost/email-events": "file:components/tryghost-email-events-5.33.8.tgz",
|
|
250
|
+
"@tryghost/email-service": "file:components/tryghost-email-service-5.33.8.tgz",
|
|
251
|
+
"@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.33.8.tgz",
|
|
252
|
+
"@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.33.8.tgz",
|
|
253
|
+
"@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.33.8.tgz",
|
|
254
|
+
"@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.33.8.tgz",
|
|
255
|
+
"@tryghost/i18n": "file:components/tryghost-i18n-5.33.8.tgz",
|
|
256
|
+
"@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.33.8.tgz",
|
|
257
|
+
"@tryghost/job-manager": "file:components/tryghost-job-manager-5.33.8.tgz",
|
|
258
|
+
"@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.33.8.tgz",
|
|
259
|
+
"@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.33.8.tgz",
|
|
260
|
+
"@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.33.8.tgz",
|
|
261
|
+
"@tryghost/magic-link": "file:components/tryghost-magic-link-5.33.8.tgz",
|
|
262
|
+
"@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.33.8.tgz",
|
|
263
|
+
"@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.33.8.tgz",
|
|
264
|
+
"@tryghost/member-events": "file:components/tryghost-member-events-5.33.8.tgz",
|
|
265
|
+
"@tryghost/members-api": "file:components/tryghost-members-api-5.33.8.tgz",
|
|
266
|
+
"@tryghost/members-csv": "file:components/tryghost-members-csv-5.33.8.tgz",
|
|
267
|
+
"@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.33.8.tgz",
|
|
268
|
+
"@tryghost/members-importer": "file:components/tryghost-members-importer-5.33.8.tgz",
|
|
269
|
+
"@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.33.8.tgz",
|
|
270
|
+
"@tryghost/minifier": "file:components/tryghost-minifier-5.33.8.tgz",
|
|
271
|
+
"@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.33.8.tgz",
|
|
272
|
+
"@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.33.8.tgz",
|
|
273
|
+
"@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.33.8.tgz",
|
|
274
|
+
"@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.33.8.tgz",
|
|
275
|
+
"@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.33.8.tgz",
|
|
276
|
+
"@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.33.8.tgz",
|
|
277
|
+
"@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.33.8.tgz",
|
|
278
|
+
"@tryghost/members-offers": "file:components/tryghost-members-offers-5.33.8.tgz",
|
|
279
|
+
"@tryghost/package-json": "file:components/tryghost-package-json-5.33.8.tgz",
|
|
280
|
+
"@tryghost/members-payments": "file:components/tryghost-members-payments-5.33.8.tgz",
|
|
281
|
+
"@tryghost/referrers": "file:components/tryghost-referrers-5.33.8.tgz",
|
|
282
|
+
"@tryghost/security": "file:components/tryghost-security-5.33.8.tgz",
|
|
283
|
+
"@tryghost/session-service": "file:components/tryghost-session-service-5.33.8.tgz",
|
|
284
|
+
"@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.33.8.tgz",
|
|
285
|
+
"@tryghost/staff-service": "file:components/tryghost-staff-service-5.33.8.tgz",
|
|
286
|
+
"@tryghost/stats-service": "file:components/tryghost-stats-service-5.33.8.tgz",
|
|
287
|
+
"@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.33.8.tgz",
|
|
288
|
+
"@tryghost/tiers": "file:components/tryghost-tiers-5.33.8.tgz",
|
|
289
|
+
"@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.33.8.tgz",
|
|
290
|
+
"@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.33.8.tgz",
|
|
291
|
+
"@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.33.8.tgz",
|
|
292
|
+
"@tryghost/webmentions": "file:components/tryghost-webmentions-5.33.8.tgz"
|
|
293
293
|
}
|
|
294
294
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('jobs:email-analytics:fetch-latest');
|
|
2
|
-
|
|
3
|
-
async function run({domainEvents}) {
|
|
4
|
-
const config = require('../../../../../shared/config');
|
|
5
|
-
const db = require('../../../../data/db');
|
|
6
|
-
|
|
7
|
-
const settingsRows = await db.knex('settings')
|
|
8
|
-
.whereIn('key', ['mailgun_api_key', 'mailgun_domain', 'mailgun_base_url']);
|
|
9
|
-
|
|
10
|
-
const settingsCache = {};
|
|
11
|
-
|
|
12
|
-
settingsRows.forEach((row) => {
|
|
13
|
-
settingsCache[row.key] = row.value;
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
const settings = {
|
|
17
|
-
get(key) {
|
|
18
|
-
return settingsCache[key];
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const {EmailAnalyticsService} = require('@tryghost/email-analytics-service');
|
|
23
|
-
const MailgunProvider = require('@tryghost/email-analytics-provider-mailgun');
|
|
24
|
-
const queries = require('../../lib/queries');
|
|
25
|
-
const {EmailEventProcessor} = require('@tryghost/email-service');
|
|
26
|
-
|
|
27
|
-
// Since this is running in a worker thread, we cant dispatch directly
|
|
28
|
-
// So we post the events as a message to the job manager
|
|
29
|
-
const eventProcessor = new EmailEventProcessor({
|
|
30
|
-
domainEvents,
|
|
31
|
-
db
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const emailAnalyticsService = new EmailAnalyticsService({
|
|
35
|
-
config,
|
|
36
|
-
settings,
|
|
37
|
-
eventProcessor,
|
|
38
|
-
providers: [
|
|
39
|
-
new MailgunProvider({config, settings})
|
|
40
|
-
],
|
|
41
|
-
queries
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
const fetchStartDate = new Date();
|
|
45
|
-
debug('Starting email analytics fetch of latest events');
|
|
46
|
-
const eventStats = await emailAnalyticsService.fetchLatest();
|
|
47
|
-
const fetchEndDate = new Date();
|
|
48
|
-
debug(`Finished fetching ${eventStats.totalEvents} analytics events in ${fetchEndDate - fetchStartDate}ms`);
|
|
49
|
-
|
|
50
|
-
const aggregateStartDate = new Date();
|
|
51
|
-
debug(`Starting email analytics aggregation for ${eventStats.emailIds.length} emails`);
|
|
52
|
-
await emailAnalyticsService.aggregateStats(eventStats);
|
|
53
|
-
const aggregateEndDate = new Date();
|
|
54
|
-
debug(`Finished aggregating email analytics in ${aggregateEndDate - aggregateStartDate}ms`);
|
|
55
|
-
return {eventStats, fetchStartDate, fetchEndDate, aggregateStartDate, aggregateEndDate};
|
|
56
|
-
}
|
|
57
|
-
module.exports.run = run;
|