ghost 4.33.2 → 4.34.3
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/core/built/assets/ghost-dark-2de4c728f3d2deae25e45092ea0e811f.css +1 -0
- package/core/built/assets/{ghost.min-501554f903f29164473a5dc620caaddb.js → ghost.min-4886fb099a526cb6ca5b733bbfbb5d3a.js} +670 -590
- package/core/built/assets/ghost.min-b1d3e45166f2023dd56b35f720636979.css +1 -0
- package/core/built/assets/icons/event-canceled-subscription.svg +6 -0
- package/core/built/assets/icons/event-email-delivery-failed.svg +6 -0
- package/core/built/assets/icons/event-filter-email-delivered.svg +5 -0
- package/core/built/assets/icons/event-filter-email-failed.svg +6 -0
- package/core/built/assets/icons/event-filter-email-opened.svg +4 -0
- package/core/built/assets/icons/event-filter-login.svg +5 -0
- package/core/built/assets/icons/event-filter-newsletter.svg +4 -0
- package/core/built/assets/icons/event-filter-payment.svg +5 -0
- package/core/built/assets/icons/event-filter-signup.svg +4 -0
- package/core/built/assets/icons/event-filter-subscription.svg +7 -0
- package/core/built/assets/icons/event-logged-in.svg +5 -0
- package/core/built/assets/icons/event-made-a-payment.svg +7 -0
- package/core/built/assets/icons/event-opened-email.svg +6 -0
- package/core/built/assets/icons/event-received-email.svg +5 -0
- package/core/built/assets/icons/event-signed-up.svg +6 -0
- package/core/built/assets/icons/event-started-subscription.svg +6 -0
- package/core/built/assets/icons/event-subscribed-to-email.svg +8 -0
- package/core/built/assets/icons/event-unsubscribed-from-email.svg +5 -0
- package/core/built/assets/icons/members-post.svg +5 -0
- package/core/built/assets/icons/no-email.svg +5 -0
- package/core/built/assets/icons/selected.svg +3 -0
- package/core/built/assets/{vendor.min-d43620e98444a46441495445f4c155f8.js → vendor.min-079fa61c64e24f0984f2cd7d2ebbf3c3.js} +3044 -2992
- package/core/frontend/services/routing/helpers/fetch-data.js +0 -2
- package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +3 -2
- package/core/server/api/canary/members.js +2 -1
- package/core/server/api/canary/products-public.js +1 -1
- package/core/server/api/canary/products.js +2 -2
- package/core/server/data/migrations/versions/4.34/2022-01-25-13-53-add-welcome-page-url-column-to-products.js +7 -0
- package/core/server/data/schema/schema.js +1 -0
- package/core/server/services/members/service.js +43 -61
- package/core/server/services/members/settings.js +7 -1
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/shared/labs.js +2 -1
- package/package.json +21 -21
- package/yarn.lock +449 -365
- package/core/built/assets/ghost-dark-661a50922267648a0362c3d367a22013.css +0 -1
- package/core/built/assets/ghost.min-1f0218f33e08f8d69b2159977d0c9318.css +0 -1
|
@@ -113,8 +113,6 @@ function fetchData(pathOptions, routerOptions, locals) {
|
|
|
113
113
|
|
|
114
114
|
if (config.type === 'browse') {
|
|
115
115
|
response.data[name].meta = results[name].meta;
|
|
116
|
-
// @TODO remove in v3
|
|
117
|
-
response.data[name][config.resource] = results[name][config.resource];
|
|
118
116
|
}
|
|
119
117
|
});
|
|
120
118
|
}
|
|
@@ -48,8 +48,9 @@ function calculateLegacyPriceData(products) {
|
|
|
48
48
|
async function getProductAndPricesData() {
|
|
49
49
|
try {
|
|
50
50
|
const page = await api.canary.productsPublic.browse({
|
|
51
|
-
include: ['monthly_price', 'yearly_price'],
|
|
52
|
-
limit: 'all'
|
|
51
|
+
include: ['monthly_price', 'yearly_price', 'benefits'],
|
|
52
|
+
limit: 'all',
|
|
53
|
+
filter: 'active:true'
|
|
53
54
|
});
|
|
54
55
|
|
|
55
56
|
return page.products;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// as it is a getter and may change during runtime.
|
|
3
3
|
const membersService = require('../../services/members');
|
|
4
4
|
|
|
5
|
-
const allowedIncludes = ['stripe_prices', 'monthly_price', 'yearly_price'];
|
|
5
|
+
const allowedIncludes = ['stripe_prices', 'monthly_price', 'yearly_price', 'benefits'];
|
|
6
6
|
|
|
7
7
|
module.exports = {
|
|
8
8
|
docName: 'products',
|
|
@@ -78,7 +78,7 @@ module.exports = {
|
|
|
78
78
|
name: {required: true}
|
|
79
79
|
}
|
|
80
80
|
},
|
|
81
|
-
permissions:
|
|
81
|
+
permissions: true,
|
|
82
82
|
async query(frame) {
|
|
83
83
|
const model = await membersService.api.productRepository.create(
|
|
84
84
|
frame.data,
|
|
@@ -101,7 +101,7 @@ module.exports = {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
|
-
permissions:
|
|
104
|
+
permissions: true,
|
|
105
105
|
async query(frame) {
|
|
106
106
|
const model = await membersService.api.productRepository.update(
|
|
107
107
|
frame.data,
|
|
@@ -379,6 +379,7 @@ module.exports = {
|
|
|
379
379
|
name: {type: 'string', maxlength: 191, nullable: false},
|
|
380
380
|
slug: {type: 'string', maxlength: 191, nullable: false, unique: true},
|
|
381
381
|
active: {type: 'boolean', nullable: false, defaultTo: true},
|
|
382
|
+
welcome_page_url: {type: 'string', maxlength: 2000, nullable: true},
|
|
382
383
|
monthly_price_id: {type: 'string', maxlength: 24, nullable: true},
|
|
383
384
|
yearly_price_id: {type: 'string', maxlength: 24, nullable: true},
|
|
384
385
|
description: {type: 'string', maxlength: 191, nullable: true},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const _ = require('lodash');
|
|
1
2
|
const errors = require('@tryghost/errors');
|
|
2
3
|
const tpl = require('@tryghost/tpl');
|
|
3
4
|
const MembersSSR = require('@tryghost/members-ssr');
|
|
@@ -12,9 +13,9 @@ const labsService = require('../../../shared/labs');
|
|
|
12
13
|
const settingsCache = require('../../../shared/settings-cache');
|
|
13
14
|
const config = require('../../../shared/config');
|
|
14
15
|
const models = require('../../models');
|
|
15
|
-
const _ = require('lodash');
|
|
16
16
|
const {GhostMailer} = require('../mail');
|
|
17
17
|
const jobsService = require('../jobs');
|
|
18
|
+
const VerificationTrigger = require('@tryghost/verification-trigger');
|
|
18
19
|
|
|
19
20
|
const messages = {
|
|
20
21
|
noLiveKeysInDevelopment: 'Cannot use live stripe keys in development. Please restart in production mode.',
|
|
@@ -32,23 +33,15 @@ const membersConfig = new MembersConfigProvider({
|
|
|
32
33
|
urlUtils
|
|
33
34
|
});
|
|
34
35
|
|
|
36
|
+
const membersStats = new MembersStats({
|
|
37
|
+
db: db,
|
|
38
|
+
settingsCache: settingsCache,
|
|
39
|
+
isSQLite: config.get('database:client') === 'sqlite3'
|
|
40
|
+
});
|
|
41
|
+
|
|
35
42
|
let membersApi;
|
|
36
43
|
let membersSettings;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @description Calculates threshold based on following formula
|
|
40
|
-
* Threshold = max{[current number of members], [volume threshold]}
|
|
41
|
-
*
|
|
42
|
-
* @returns {Promise<number>}
|
|
43
|
-
*/
|
|
44
|
-
const fetchImportThreshold = async () => {
|
|
45
|
-
const membersTotal = await module.exports.stats.getTotalMembers();
|
|
46
|
-
const configThreshold = _.get(config.get('hostSettings'), 'emailVerification.importThreshold');
|
|
47
|
-
const volumeThreshold = (configThreshold === undefined) ? Infinity : configThreshold;
|
|
48
|
-
const threshold = Math.max(membersTotal, volumeThreshold);
|
|
49
|
-
|
|
50
|
-
return threshold;
|
|
51
|
-
};
|
|
44
|
+
let verificationTrigger;
|
|
52
45
|
|
|
53
46
|
const membersImporter = new MembersCSVImporter({
|
|
54
47
|
storagePath: config.getContentPath('data'),
|
|
@@ -58,53 +51,20 @@ const membersImporter = new MembersCSVImporter({
|
|
|
58
51
|
isSet: labsService.isSet.bind(labsService),
|
|
59
52
|
addJob: jobsService.addJob.bind(jobsService),
|
|
60
53
|
knex: db.knex,
|
|
61
|
-
urlFor: urlUtils.urlFor.bind(urlUtils)
|
|
62
|
-
fetchThreshold: fetchImportThreshold
|
|
54
|
+
urlFor: urlUtils.urlFor.bind(urlUtils)
|
|
63
55
|
});
|
|
64
56
|
|
|
65
|
-
const startEmailVerification = async (importedNumber) => {
|
|
66
|
-
const isVerifiedEmail = config.get('hostSettings:emailVerification:verified') === true;
|
|
67
|
-
|
|
68
|
-
if ((!isVerifiedEmail)) {
|
|
69
|
-
// Only trigger flag change and escalation email the first time
|
|
70
|
-
if (settingsCache.get('email_verification_required') !== true) {
|
|
71
|
-
await models.Settings.edit([{
|
|
72
|
-
key: 'email_verification_required',
|
|
73
|
-
value: true
|
|
74
|
-
}], {context: {internal: true}});
|
|
75
|
-
|
|
76
|
-
const escalationAddress = config.get('hostSettings:emailVerification:escalationAddress');
|
|
77
|
-
const fromAddress = config.get('user_email');
|
|
78
|
-
|
|
79
|
-
if (escalationAddress) {
|
|
80
|
-
ghostMailer.send({
|
|
81
|
-
subject: 'Email needs verification',
|
|
82
|
-
html: tpl(messages.emailVerificationEmailMessage, {
|
|
83
|
-
importedNumber,
|
|
84
|
-
siteUrl: urlUtils.getSiteUrl()
|
|
85
|
-
}),
|
|
86
|
-
forceTextContent: true,
|
|
87
|
-
from: fromAddress,
|
|
88
|
-
to: escalationAddress
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
throw new errors.ValidationError({
|
|
94
|
-
message: tpl(messages.emailVerificationNeeded)
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
57
|
const processImport = async (options) => {
|
|
100
58
|
const result = await membersImporter.process(options);
|
|
101
|
-
const freezeTriggered = result.meta.freeze;
|
|
102
59
|
const importSize = result.meta.originalImportSize;
|
|
103
|
-
delete result.meta.freeze;
|
|
104
60
|
delete result.meta.originalImportSize;
|
|
105
61
|
|
|
106
|
-
|
|
107
|
-
|
|
62
|
+
const importThreshold = await verificationTrigger.getImportThreshold();
|
|
63
|
+
if (importSize > importThreshold) {
|
|
64
|
+
await verificationTrigger.startVerificationProcess({
|
|
65
|
+
amountImported: importSize,
|
|
66
|
+
throwOnTrigger: true
|
|
67
|
+
});
|
|
108
68
|
}
|
|
109
69
|
|
|
110
70
|
return result;
|
|
@@ -139,6 +99,32 @@ module.exports = {
|
|
|
139
99
|
});
|
|
140
100
|
}
|
|
141
101
|
|
|
102
|
+
verificationTrigger = new VerificationTrigger({
|
|
103
|
+
configThreshold: _.get(config.get('hostSettings'), 'emailVerification.importThreshold'),
|
|
104
|
+
isVerified: () => config.get('hostSettings:emailVerification:verified') === true,
|
|
105
|
+
isVerificationRequired: () => settingsCache.get('email_verification_required') === true,
|
|
106
|
+
sendVerificationEmail: ({subject, message, amountImported}) => {
|
|
107
|
+
const escalationAddress = config.get('hostSettings:emailVerification:escalationAddress');
|
|
108
|
+
const fromAddress = config.get('user_email');
|
|
109
|
+
|
|
110
|
+
if (escalationAddress) {
|
|
111
|
+
ghostMailer.send({
|
|
112
|
+
subject,
|
|
113
|
+
html: tpl(message, {
|
|
114
|
+
importedNumber: amountImported,
|
|
115
|
+
siteUrl: urlUtils.getSiteUrl()
|
|
116
|
+
}),
|
|
117
|
+
forceTextContent: true,
|
|
118
|
+
from: fromAddress,
|
|
119
|
+
to: escalationAddress
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
membersStats,
|
|
124
|
+
Settings: models.Settings,
|
|
125
|
+
eventRepository: membersApi.events
|
|
126
|
+
});
|
|
127
|
+
|
|
142
128
|
(async () => {
|
|
143
129
|
try {
|
|
144
130
|
const collection = await models.SingleUseToken.fetchAll();
|
|
@@ -181,11 +167,7 @@ module.exports = {
|
|
|
181
167
|
|
|
182
168
|
processImport: processImport,
|
|
183
169
|
|
|
184
|
-
stats:
|
|
185
|
-
db: db,
|
|
186
|
-
settingsCache: settingsCache,
|
|
187
|
-
isSQLite: config.get('database:client') === 'sqlite3'
|
|
188
|
-
})
|
|
170
|
+
stats: membersStats
|
|
189
171
|
|
|
190
172
|
};
|
|
191
173
|
module.exports.middleware = require('./middleware');
|
|
@@ -103,7 +103,13 @@ function createSettingsInstance(config) {
|
|
|
103
103
|
|
|
104
104
|
const getAdminRedirectLink = ({type}) => {
|
|
105
105
|
const adminUrl = urlUtils.urlFor('admin', true);
|
|
106
|
-
|
|
106
|
+
if (type === 'fromAddressUpdate') {
|
|
107
|
+
return urlUtils.urlJoin(adminUrl, `#/settings/members-email/?${type}=success`);
|
|
108
|
+
} else if (type === 'supportAddressUpdate') {
|
|
109
|
+
return urlUtils.urlJoin(adminUrl, `#/settings/members/?${type}=success`);
|
|
110
|
+
} else {
|
|
111
|
+
return urlUtils.urlJoin(adminUrl, `#/site/`);
|
|
112
|
+
}
|
|
107
113
|
};
|
|
108
114
|
|
|
109
115
|
return {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<title>Ghost Admin</title>
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%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%224.
|
|
11
|
+
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%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%224.34%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%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%7D" />
|
|
12
12
|
|
|
13
13
|
<meta name="HandheldFriendly" content="True" />
|
|
14
14
|
<meta name="MobileOptimized" content="320" />
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
<link rel="stylesheet" href="assets/vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css">
|
|
41
|
-
<link rel="stylesheet" href="assets/ghost.min-
|
|
41
|
+
<link rel="stylesheet" href="assets/ghost.min-b1d3e45166f2023dd56b35f720636979.css" title="light">
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
<div id="ember-basic-dropdown-wormhole"></div>
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
<script src="assets/vendor.min-
|
|
60
|
-
<script src="assets/ghost.min-
|
|
59
|
+
<script src="assets/vendor.min-079fa61c64e24f0984f2cd7d2ebbf3c3.js"></script>
|
|
60
|
+
<script src="assets/ghost.min-4886fb099a526cb6ca5b733bbfbb5d3a.js"></script>
|
|
61
61
|
|
|
62
62
|
</body>
|
|
63
63
|
</html>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<title>Ghost Admin</title>
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%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%224.
|
|
11
|
+
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22rootURL%22%3A%22%2F%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%224.34%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22moment%22%3A%7B%22includeTimezone%22%3A%22all%22%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%7D" />
|
|
12
12
|
|
|
13
13
|
<meta name="HandheldFriendly" content="True" />
|
|
14
14
|
<meta name="MobileOptimized" content="320" />
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
<link rel="stylesheet" href="assets/vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css">
|
|
41
|
-
<link rel="stylesheet" href="assets/ghost.min-
|
|
41
|
+
<link rel="stylesheet" href="assets/ghost.min-b1d3e45166f2023dd56b35f720636979.css" title="light">
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
<div id="ember-basic-dropdown-wormhole"></div>
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
<script src="assets/vendor.min-
|
|
60
|
-
<script src="assets/ghost.min-
|
|
59
|
+
<script src="assets/vendor.min-079fa61c64e24f0984f2cd7d2ebbf3c3.js"></script>
|
|
60
|
+
<script src="assets/ghost.min-4886fb099a526cb6ca5b733bbfbb5d3a.js"></script>
|
|
61
61
|
|
|
62
62
|
</body>
|
|
63
63
|
</html>
|
package/core/shared/labs.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.34.3",
|
|
4
4
|
"description": "The professional publishing platform",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"homepage": "https://ghost.org",
|
|
@@ -54,17 +54,17 @@
|
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@nexes/nql": "0.6.0",
|
|
57
|
-
"@sentry/node": "6.
|
|
57
|
+
"@sentry/node": "6.17.2",
|
|
58
58
|
"@tryghost/adapter-manager": "0.2.27",
|
|
59
59
|
"@tryghost/admin-api-schema": "2.7.0",
|
|
60
|
-
"@tryghost/bookshelf-plugins": "0.3.
|
|
60
|
+
"@tryghost/bookshelf-plugins": "0.3.7",
|
|
61
61
|
"@tryghost/bootstrap-socket": "0.2.16",
|
|
62
62
|
"@tryghost/color-utils": "0.1.6",
|
|
63
63
|
"@tryghost/config-url-helpers": "0.1.4",
|
|
64
64
|
"@tryghost/constants": "1.0.1",
|
|
65
65
|
"@tryghost/custom-theme-settings-service": "0.3.1",
|
|
66
66
|
"@tryghost/database-info": "0.1.0",
|
|
67
|
-
"@tryghost/debug": "0.1.
|
|
67
|
+
"@tryghost/debug": "0.1.11",
|
|
68
68
|
"@tryghost/email-analytics-provider-mailgun": "1.0.7",
|
|
69
69
|
"@tryghost/email-analytics-service": "1.0.5",
|
|
70
70
|
"@tryghost/errors": "1.2.1",
|
|
@@ -78,33 +78,33 @@
|
|
|
78
78
|
"@tryghost/kg-markdown-html-renderer": "5.1.1",
|
|
79
79
|
"@tryghost/kg-mobiledoc-html-renderer": "5.3.2",
|
|
80
80
|
"@tryghost/limit-service": "1.0.9",
|
|
81
|
-
"@tryghost/logging": "2.0.
|
|
81
|
+
"@tryghost/logging": "2.0.2",
|
|
82
82
|
"@tryghost/magic-link": "1.0.17",
|
|
83
|
-
"@tryghost/members-api": "4.4
|
|
84
|
-
"@tryghost/members-
|
|
85
|
-
"@tryghost/members-
|
|
86
|
-
"@tryghost/members-
|
|
87
|
-
"@tryghost/members-ssr": "1.0.18",
|
|
83
|
+
"@tryghost/members-api": "4.8.4",
|
|
84
|
+
"@tryghost/members-importer": "0.5.0",
|
|
85
|
+
"@tryghost/members-offers": "0.10.6",
|
|
86
|
+
"@tryghost/members-ssr": "1.0.19",
|
|
88
87
|
"@tryghost/members-stripe-service": "0.6.5",
|
|
89
|
-
"@tryghost/metrics": "1.0.
|
|
88
|
+
"@tryghost/metrics": "1.0.3",
|
|
90
89
|
"@tryghost/minifier": "0.1.10",
|
|
91
90
|
"@tryghost/mw-error-handler": "0.1.2",
|
|
92
91
|
"@tryghost/mw-session-from-token": "0.1.27",
|
|
93
|
-
"@tryghost/nodemailer": "0.3.
|
|
92
|
+
"@tryghost/nodemailer": "0.3.10",
|
|
94
93
|
"@tryghost/package-json": "1.0.15",
|
|
95
94
|
"@tryghost/promise": "0.1.14",
|
|
96
|
-
"@tryghost/request": "0.1.
|
|
97
|
-
"@tryghost/root-utils": "0.3.
|
|
95
|
+
"@tryghost/request": "0.1.12",
|
|
96
|
+
"@tryghost/root-utils": "0.3.9",
|
|
98
97
|
"@tryghost/security": "0.2.14",
|
|
99
98
|
"@tryghost/session-service": "0.1.37",
|
|
100
99
|
"@tryghost/settings-path-manager": "0.1.3",
|
|
101
100
|
"@tryghost/social-urls": "0.1.28",
|
|
102
101
|
"@tryghost/string": "0.1.22",
|
|
103
|
-
"@tryghost/tpl": "0.1.
|
|
102
|
+
"@tryghost/tpl": "0.1.10",
|
|
104
103
|
"@tryghost/update-check-service": "0.3.0",
|
|
105
104
|
"@tryghost/url-utils": "2.0.5",
|
|
106
|
-
"@tryghost/validator": "0.1.
|
|
107
|
-
"@tryghost/
|
|
105
|
+
"@tryghost/validator": "0.1.11",
|
|
106
|
+
"@tryghost/verification-trigger": "0.1.1",
|
|
107
|
+
"@tryghost/version": "0.1.9",
|
|
108
108
|
"@tryghost/vhost-middleware": "1.0.20",
|
|
109
109
|
"@tryghost/zip": "1.1.19",
|
|
110
110
|
"amperize": "0.6.1",
|
|
@@ -184,9 +184,9 @@
|
|
|
184
184
|
"@ethanresnick/chai-jest-snapshot": "3.0.0",
|
|
185
185
|
"@lodder/grunt-postcss": "3.1.1",
|
|
186
186
|
"c8": "7.11.0",
|
|
187
|
-
"chai": "4.3.
|
|
187
|
+
"chai": "4.3.6",
|
|
188
188
|
"coffeescript": "2.6.1",
|
|
189
|
-
"cssnano": "5.0.
|
|
189
|
+
"cssnano": "5.0.16",
|
|
190
190
|
"eslint": "7.32.0",
|
|
191
191
|
"eslint-plugin-ghost": "2.12.0",
|
|
192
192
|
"expect": "27.4.6",
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"grunt-subgrunt": "1.3.0",
|
|
203
203
|
"grunt-update-submodules": "0.4.1",
|
|
204
204
|
"jwks-rsa": "2.0.5",
|
|
205
|
-
"mocha": "9.
|
|
205
|
+
"mocha": "9.2.0",
|
|
206
206
|
"mocha-slow-test-reporter": "0.1.2",
|
|
207
207
|
"mock-knex": "0.4.10",
|
|
208
208
|
"nock": "13.2.2",
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
"tmp": "0.2.1"
|
|
216
216
|
},
|
|
217
217
|
"resolutions": {
|
|
218
|
-
"@tryghost/logging": "2.0.
|
|
218
|
+
"@tryghost/logging": "2.0.2",
|
|
219
219
|
"moment": "2.24.0",
|
|
220
220
|
"moment-timezone": "0.5.23"
|
|
221
221
|
}
|