ghost 4.39.0 → 4.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Gruntfile.js +1 -1
- package/core/built/assets/{ghost-dark-498ff8339a89bb68c3f78f59bee4146e.css → ghost-dark-6fbe502f2bb2cde92e15b2f1a9da57a0.css} +1 -1
- package/core/built/assets/{ghost.min-77b93478f83b0def6ddc5a4f23ce963e.css → ghost.min-09301e5bd933cf6d24368e98a4d898a9.css} +1 -1
- package/core/built/assets/{ghost.min-e6559d901897066aa6a6d4145e3728ed.js → ghost.min-ee1d1d48a30dbd67513f647f360b39e3.js} +220 -225
- package/core/built/assets/img/themes/Headline-c5070cf549e797a6a72b87237caa1617.jpg +0 -0
- package/core/built/assets/{vendor.min-c39476bced9adb98ee2b292d01c7a8f4.js → vendor.min-9094db77ba3190cb10876f8e42e1d90d.js} +153 -143
- package/core/frontend/public/ghost.min.css +1 -1
- package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +3 -1
- package/core/server/api/canary/identities.js +0 -1
- package/core/server/api/canary/members.js +2 -6
- package/core/server/api/canary/utils/serializers/input/tiers.js +17 -0
- package/core/server/api/canary/utils/serializers/output/actions.js +2 -2
- package/core/server/api/canary/utils/serializers/output/authentication.js +3 -3
- package/core/server/api/canary/utils/serializers/output/authors.js +3 -3
- package/core/server/api/canary/utils/serializers/output/email-posts.js +2 -2
- package/core/server/api/canary/utils/serializers/output/emails.js +3 -3
- package/core/server/api/canary/utils/serializers/output/images.js +2 -2
- package/core/server/api/canary/utils/serializers/output/integrations.js +5 -6
- package/core/server/api/canary/utils/serializers/output/labels.js +3 -3
- package/core/server/api/canary/utils/serializers/output/mappers/actions.js +7 -0
- package/core/server/api/canary/utils/serializers/output/mappers/emails.js +17 -0
- package/core/server/api/canary/utils/serializers/output/mappers/images.js +5 -0
- package/core/server/api/canary/utils/serializers/output/mappers/index.js +12 -0
- package/core/server/api/canary/utils/serializers/output/mappers/integrations.js +13 -0
- package/core/server/api/canary/utils/serializers/output/mappers/labels.js +4 -0
- package/core/server/api/canary/utils/serializers/output/mappers/pages.js +11 -0
- package/core/server/api/canary/utils/serializers/output/mappers/posts.js +101 -0
- package/core/server/api/canary/utils/serializers/output/mappers/settings.js +37 -0
- package/core/server/api/canary/utils/serializers/output/mappers/tags.js +11 -0
- package/core/server/api/canary/utils/serializers/output/mappers/users.js +12 -0
- package/core/server/api/canary/utils/serializers/output/members.js +2 -7
- package/core/server/api/canary/utils/serializers/output/pages.js +3 -3
- package/core/server/api/canary/utils/serializers/output/posts.js +3 -3
- package/core/server/api/canary/utils/serializers/output/preview.js +2 -2
- package/core/server/api/canary/utils/serializers/output/settings.js +2 -2
- package/core/server/api/canary/utils/serializers/output/tags.js +3 -3
- package/core/server/api/canary/utils/serializers/output/users.js +3 -3
- package/core/server/data/exporter/table-lists.js +1 -0
- package/core/server/data/migrations/versions/4.40/2022-03-07-14-37-add-members-cancel-events-table.js +8 -0
- package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-offers-admin-integration-permission-roles.js +23 -0
- package/core/server/data/migrations/versions/4.40/2022-03-15-06-40-add-tiers-admin-integration-permission-roles.js +20 -0
- package/core/server/data/schema/fixtures/fixtures.json +3 -1
- package/core/server/data/schema/schema.js +6 -0
- package/core/server/models/member-cancel-event.js +28 -0
- package/core/server/services/mega/template.js +1 -0
- package/core/server/services/members/api.js +1 -0
- package/core/server/services/oembed.js +2 -1
- package/core/server/services/themes/validate.js +3 -3
- package/core/server/web/admin/views/default-prod.html +4 -4
- package/core/server/web/admin/views/default.html +4 -4
- package/core/server/web/api/app.js +3 -3
- package/core/server/web/api/canary/admin/middleware.js +2 -0
- package/core/shared/config/defaults.json +2 -2
- package/core/shared/config/overrides.json +5 -1
- package/core/shared/labs.js +3 -3
- package/package.json +23 -23
- package/yarn.lock +298 -595
- package/core/server/api/canary/utils/serializers/output/utils/mapper.js +0 -213
- package/core/server/frontend/ghost.min.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const mappers = require('./mappers');
|
|
2
2
|
const membersService = require('../../../../../services/members');
|
|
3
3
|
|
|
4
4
|
module.exports = {
|
|
@@ -8,7 +8,7 @@ module.exports = {
|
|
|
8
8
|
});
|
|
9
9
|
const tiers = tiersModels.data ? tiersModels.data.map(tierModel => tierModel.toJSON()) : [];
|
|
10
10
|
|
|
11
|
-
const data = await
|
|
11
|
+
const data = await mappers.posts(model, frame, {tiers});
|
|
12
12
|
frame.response = {
|
|
13
13
|
preview: [data]
|
|
14
14
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
2
|
const utils = require('../../index');
|
|
3
|
-
const
|
|
3
|
+
const mappers = require('./mappers');
|
|
4
4
|
const _private = {};
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -34,7 +34,7 @@ module.exports = {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
frame.response = {
|
|
37
|
-
settings:
|
|
37
|
+
settings: mappers.settings(filteredSettings, frame),
|
|
38
38
|
meta: {}
|
|
39
39
|
};
|
|
40
40
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:tags');
|
|
2
|
-
const
|
|
2
|
+
const mappers = require('./mappers');
|
|
3
3
|
|
|
4
4
|
module.exports = {
|
|
5
5
|
all(models, apiConfig, frame) {
|
|
@@ -11,7 +11,7 @@ module.exports = {
|
|
|
11
11
|
|
|
12
12
|
if (models.meta) {
|
|
13
13
|
frame.response = {
|
|
14
|
-
tags: models.data.map(model =>
|
|
14
|
+
tags: models.data.map(model => mappers.tags(model, frame)),
|
|
15
15
|
meta: models.meta
|
|
16
16
|
};
|
|
17
17
|
|
|
@@ -19,7 +19,7 @@ module.exports = {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
frame.response = {
|
|
22
|
-
tags: [
|
|
22
|
+
tags: [mappers.tags(models, frame)]
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:users');
|
|
2
2
|
const tpl = require('@tryghost/tpl');
|
|
3
|
-
const
|
|
3
|
+
const mappers = require('./mappers');
|
|
4
4
|
|
|
5
5
|
const messages = {
|
|
6
6
|
pwdChangedSuccessfully: 'Password changed successfully.'
|
|
@@ -11,7 +11,7 @@ module.exports = {
|
|
|
11
11
|
debug('browse');
|
|
12
12
|
|
|
13
13
|
frame.response = {
|
|
14
|
-
users: models.data.map(model =>
|
|
14
|
+
users: models.data.map(model => mappers.users(model, frame)),
|
|
15
15
|
meta: models.meta
|
|
16
16
|
};
|
|
17
17
|
},
|
|
@@ -20,7 +20,7 @@ module.exports = {
|
|
|
20
20
|
debug('read');
|
|
21
21
|
|
|
22
22
|
frame.response = {
|
|
23
|
-
users: [
|
|
23
|
+
users: [mappers.users(model, frame)]
|
|
24
24
|
};
|
|
25
25
|
},
|
|
26
26
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const {addTable} = require('../../utils');
|
|
2
|
+
|
|
3
|
+
module.exports = addTable('members_cancel_events', {
|
|
4
|
+
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
5
|
+
member_id: {type: 'string', maxlength: 24, nullable: false, references: 'members.id', cascadeDelete: true},
|
|
6
|
+
from_plan: {type: 'string', maxlength: 255, nullable: false},
|
|
7
|
+
created_at: {type: 'dateTime', nullable: false}
|
|
8
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const {
|
|
2
|
+
combineTransactionalMigrations,
|
|
3
|
+
addPermissionToRole
|
|
4
|
+
} = require('../../utils');
|
|
5
|
+
|
|
6
|
+
module.exports = combineTransactionalMigrations(
|
|
7
|
+
addPermissionToRole({
|
|
8
|
+
permission: 'Browse offers',
|
|
9
|
+
role: 'Admin Integration'
|
|
10
|
+
}),
|
|
11
|
+
addPermissionToRole({
|
|
12
|
+
permission: 'Read offers',
|
|
13
|
+
role: 'Admin Integration'
|
|
14
|
+
}),
|
|
15
|
+
addPermissionToRole({
|
|
16
|
+
permission: 'Edit offers',
|
|
17
|
+
role: 'Admin Integration'
|
|
18
|
+
}),
|
|
19
|
+
addPermissionToRole({
|
|
20
|
+
permission: 'Add offers',
|
|
21
|
+
role: 'Admin Integration'
|
|
22
|
+
})
|
|
23
|
+
);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const {combineTransactionalMigrations, addPermissionToRole} = require('../../utils');
|
|
2
|
+
|
|
3
|
+
module.exports = combineTransactionalMigrations(
|
|
4
|
+
addPermissionToRole({
|
|
5
|
+
permission: 'Browse Products',
|
|
6
|
+
role: 'Admin Integration'
|
|
7
|
+
}),
|
|
8
|
+
addPermissionToRole({
|
|
9
|
+
permission: 'Read Products',
|
|
10
|
+
role: 'Admin Integration'
|
|
11
|
+
}),
|
|
12
|
+
addPermissionToRole({
|
|
13
|
+
permission: 'Edit Products',
|
|
14
|
+
role: 'Admin Integration'
|
|
15
|
+
}),
|
|
16
|
+
addPermissionToRole({
|
|
17
|
+
permission: 'Add Products',
|
|
18
|
+
role: 'Admin Integration'
|
|
19
|
+
})
|
|
20
|
+
);
|
|
@@ -668,7 +668,9 @@
|
|
|
668
668
|
"label": "all",
|
|
669
669
|
"email_preview": "all",
|
|
670
670
|
"email": "all",
|
|
671
|
-
"snippet": "all"
|
|
671
|
+
"snippet": "all",
|
|
672
|
+
"product": ["browse", "read", "add", "edit"],
|
|
673
|
+
"offer": ["browse", "read", "add", "edit"]
|
|
672
674
|
},
|
|
673
675
|
"Editor": {
|
|
674
676
|
"notification": "all",
|
|
@@ -438,6 +438,12 @@ module.exports = {
|
|
|
438
438
|
product_id: {type: 'string', maxlength: 24, nullable: false, references: 'products.id', cascadeDelete: true},
|
|
439
439
|
sort_order: {type: 'integer', nullable: false, unsigned: true, defaultTo: 0}
|
|
440
440
|
},
|
|
441
|
+
members_cancel_events: {
|
|
442
|
+
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
443
|
+
member_id: {type: 'string', maxlength: 24, nullable: false, references: 'members.id', cascadeDelete: true},
|
|
444
|
+
from_plan: {type: 'string', maxlength: 255, nullable: false},
|
|
445
|
+
created_at: {type: 'dateTime', nullable: false}
|
|
446
|
+
},
|
|
441
447
|
members_payment_events: {
|
|
442
448
|
id: {type: 'string', maxlength: 24, nullable: false, primary: true},
|
|
443
449
|
member_id: {type: 'string', maxlength: 24, nullable: false, references: 'members.id', cascadeDelete: true},
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const errors = require('@tryghost/errors');
|
|
2
|
+
const ghostBookshelf = require('./base');
|
|
3
|
+
|
|
4
|
+
const MemberCancelEvent = ghostBookshelf.Model.extend({
|
|
5
|
+
tableName: 'members_cancel_events',
|
|
6
|
+
|
|
7
|
+
member() {
|
|
8
|
+
return this.belongsTo('Member', 'member_id', 'id');
|
|
9
|
+
}
|
|
10
|
+
}, {
|
|
11
|
+
async edit() {
|
|
12
|
+
throw new errors.IncorrectUsageError({message: 'Cannot edit MemberCancelEvent'});
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
async destroy() {
|
|
16
|
+
throw new errors.IncorrectUsageError({message: 'Cannot destroy MemberCancelEvent'});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const MemberCancelEvents = ghostBookshelf.Collection.extend({
|
|
21
|
+
model: MemberCancelEvent
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
module.exports = {
|
|
25
|
+
MemberCancelEvent: ghostBookshelf.model('MemberCancelEvent', MemberCancelEvent),
|
|
26
|
+
MemberCancelEvents: ghostBookshelf.collection('MemberCancelEvents', MemberCancelEvents)
|
|
27
|
+
};
|
|
28
|
+
|
|
@@ -177,6 +177,7 @@ function createApiInstance(config) {
|
|
|
177
177
|
StripeCustomer: models.MemberStripeCustomer,
|
|
178
178
|
StripeCustomerSubscription: models.StripeCustomerSubscription,
|
|
179
179
|
Member: models.Member,
|
|
180
|
+
MemberCancelEvent: models.MemberCancelEvent,
|
|
180
181
|
MemberSubscribeEvent: models.MemberSubscribeEvent,
|
|
181
182
|
MemberPaidSubscriptionEvent: models.MemberPaidSubscriptionEvent,
|
|
182
183
|
MemberLoginEvent: models.MemberLoginEvent,
|
|
@@ -9,7 +9,8 @@ const {CookieJar} = require('tough-cookie');
|
|
|
9
9
|
|
|
10
10
|
const messages = {
|
|
11
11
|
noUrlProvided: 'No url provided.',
|
|
12
|
-
insufficientMetadata: 'URL contains insufficient metadata.'
|
|
12
|
+
insufficientMetadata: 'URL contains insufficient metadata.',
|
|
13
|
+
unknownProvider: 'No provider found for supplied URL.'
|
|
13
14
|
};
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -28,20 +28,20 @@ const check = async function check(theme, isZip) {
|
|
|
28
28
|
debug('zip mode');
|
|
29
29
|
checkedTheme = await gscan.checkZip(theme, {
|
|
30
30
|
keepExtractedDir: true,
|
|
31
|
-
checkVersion: '
|
|
31
|
+
checkVersion: 'v4',
|
|
32
32
|
labs: labs.getAll()
|
|
33
33
|
});
|
|
34
34
|
} else {
|
|
35
35
|
debug('non-zip mode');
|
|
36
36
|
checkedTheme = await gscan.check(theme.path, {
|
|
37
|
-
checkVersion: '
|
|
37
|
+
checkVersion: 'v4',
|
|
38
38
|
labs: labs.getAll()
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
checkedTheme = gscan.format(checkedTheme, {
|
|
43
43
|
onlyFatalErrors: config.get('env') === 'production',
|
|
44
|
-
checkVersion: '
|
|
44
|
+
checkVersion: 'v4'
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
debug('End: Check');
|
|
@@ -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.41%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-09301e5bd933cf6d24368e98a4d898a9.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-9094db77ba3190cb10876f8e42e1d90d.js"></script>
|
|
60
|
+
<script src="assets/ghost.min-ee1d1d48a30dbd67513f647f360b39e3.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.41%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-09301e5bd933cf6d24368e98a4d898a9.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-9094db77ba3190cb10876f8e42e1d90d.js"></script>
|
|
60
|
+
<script src="assets/ghost.min-ee1d1d48a30dbd67513f647f360b39e3.js"></script>
|
|
61
61
|
|
|
62
62
|
</body>
|
|
63
63
|
</html>
|
|
@@ -22,12 +22,12 @@ module.exports = function setupApiApp() {
|
|
|
22
22
|
apiApp.lazyUse(urlUtils.getVersionPath({version: 'v4', type: 'content'}), require('./canary/content/app'));
|
|
23
23
|
apiApp.lazyUse(urlUtils.getVersionPath({version: 'v4', type: 'admin'}), require('./canary/admin/app'));
|
|
24
24
|
|
|
25
|
+
apiApp.lazyUse(urlUtils.getVersionPath({version: 'v5', type: 'content'}), require('./canary/content/app'));
|
|
26
|
+
apiApp.lazyUse(urlUtils.getVersionPath({version: 'v5', type: 'admin'}), require('./canary/admin/app'));
|
|
27
|
+
|
|
25
28
|
apiApp.lazyUse(urlUtils.getVersionPath({version: 'canary', type: 'content'}), require('./canary/content/app'));
|
|
26
29
|
apiApp.lazyUse(urlUtils.getVersionPath({version: 'canary', type: 'admin'}), require('./canary/admin/app'));
|
|
27
30
|
|
|
28
|
-
apiApp.lazyUse('/content/', require('./canary/content/app'));
|
|
29
|
-
apiApp.lazyUse('/admin/', require('./canary/admin/app'));
|
|
30
|
-
|
|
31
31
|
// Error handling for requests to non-existent API versions
|
|
32
32
|
apiApp.use(errorHandler.resourceNotFound);
|
|
33
33
|
apiApp.use(errorHandler.handleJSONResponse(sentry));
|
|
@@ -29,6 +29,8 @@ const notImplemented = function (req, res, next) {
|
|
|
29
29
|
users: ['GET'],
|
|
30
30
|
themes: ['POST', 'PUT'],
|
|
31
31
|
members: ['GET', 'PUT', 'DELETE', 'POST'],
|
|
32
|
+
tiers: ['GET', 'PUT', 'POST'],
|
|
33
|
+
offers: ['GET', 'PUT', 'POST'],
|
|
32
34
|
config: ['GET'],
|
|
33
35
|
schedules: ['PUT'],
|
|
34
36
|
files: ['POST'],
|
|
@@ -128,8 +128,8 @@
|
|
|
128
128
|
"emailAnalytics": true
|
|
129
129
|
},
|
|
130
130
|
"portal": {
|
|
131
|
-
"url": "https://unpkg.com/@tryghost/portal@~1.
|
|
132
|
-
"version": "1.
|
|
131
|
+
"url": "https://unpkg.com/@tryghost/portal@~1.17.0/umd/portal.min.js",
|
|
132
|
+
"version": "1.17"
|
|
133
133
|
},
|
|
134
134
|
"tenor": {
|
|
135
135
|
"publicReadOnlyApiKey": null,
|
|
@@ -79,12 +79,16 @@
|
|
|
79
79
|
},
|
|
80
80
|
"api": {
|
|
81
81
|
"versions": {
|
|
82
|
-
"all": ["v2", "v3", "v4", "canary"],
|
|
82
|
+
"all": ["v2", "v3", "v4", "v5", "canary"],
|
|
83
83
|
"default": "v4",
|
|
84
84
|
"canary": {
|
|
85
85
|
"admin": "canary/admin",
|
|
86
86
|
"content": "canary/content"
|
|
87
87
|
},
|
|
88
|
+
"v5": {
|
|
89
|
+
"admin": "admin",
|
|
90
|
+
"content": "content"
|
|
91
|
+
},
|
|
88
92
|
"v4": {
|
|
89
93
|
"admin": "v4/admin",
|
|
90
94
|
"content": "v4/content"
|
package/core/shared/labs.js
CHANGED
|
@@ -20,7 +20,8 @@ const GA_FEATURES = [
|
|
|
20
20
|
'tierName',
|
|
21
21
|
'selectablePortalLinks',
|
|
22
22
|
'membersTableStatus',
|
|
23
|
-
'improvedOnboarding'
|
|
23
|
+
'improvedOnboarding',
|
|
24
|
+
'membersActivityFeed'
|
|
24
25
|
];
|
|
25
26
|
|
|
26
27
|
// NOTE: this allowlist is meant to be used to filter out any unexpected
|
|
@@ -34,8 +35,7 @@ const ALPHA_FEATURES = [
|
|
|
34
35
|
'membersActivity',
|
|
35
36
|
'urlCache',
|
|
36
37
|
'beforeAfterCard',
|
|
37
|
-
'tweetGridCard'
|
|
38
|
-
'membersActivityFeed'
|
|
38
|
+
'tweetGridCard'
|
|
39
39
|
];
|
|
40
40
|
|
|
41
41
|
module.exports.GA_KEYS = [...GA_FEATURES];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.41.0",
|
|
4
4
|
"description": "The professional publishing platform",
|
|
5
5
|
"author": "Ghost Foundation",
|
|
6
6
|
"homepage": "https://ghost.org",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@sentry/node": "6.18.2",
|
|
59
59
|
"@tryghost/adapter-manager": "0.2.28",
|
|
60
|
-
"@tryghost/admin-api-schema": "2.
|
|
60
|
+
"@tryghost/admin-api-schema": "2.12.0",
|
|
61
61
|
"@tryghost/bookshelf-plugins": "0.3.11",
|
|
62
62
|
"@tryghost/bootstrap-socket": "0.2.17",
|
|
63
63
|
"@tryghost/color-utils": "0.1.10",
|
|
@@ -81,14 +81,14 @@
|
|
|
81
81
|
"@tryghost/kg-mobiledoc-html-renderer": "5.3.4",
|
|
82
82
|
"@tryghost/limit-service": "1.0.10",
|
|
83
83
|
"@tryghost/logging": "2.0.4",
|
|
84
|
-
"@tryghost/magic-link": "1.0.
|
|
84
|
+
"@tryghost/magic-link": "1.0.21",
|
|
85
85
|
"@tryghost/member-events": "0.4.0",
|
|
86
|
-
"@tryghost/members-api": "5.
|
|
86
|
+
"@tryghost/members-api": "5.4.0",
|
|
87
87
|
"@tryghost/members-events-service": "0.3.1",
|
|
88
88
|
"@tryghost/members-importer": "0.5.3",
|
|
89
|
-
"@tryghost/members-offers": "0.10.
|
|
89
|
+
"@tryghost/members-offers": "0.10.9",
|
|
90
90
|
"@tryghost/members-ssr": "1.0.22",
|
|
91
|
-
"@tryghost/members-stripe-service": "0.9.
|
|
91
|
+
"@tryghost/members-stripe-service": "0.9.1",
|
|
92
92
|
"@tryghost/metrics": "1.0.6",
|
|
93
93
|
"@tryghost/minifier": "0.1.11",
|
|
94
94
|
"@tryghost/mw-error-handler": "0.1.4",
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
"bookshelf": "1.2.0",
|
|
120
120
|
"bookshelf-relations": "2.4.0",
|
|
121
121
|
"brute-knex": "4.0.1",
|
|
122
|
-
"bson-objectid": "2.0.
|
|
122
|
+
"bson-objectid": "2.0.3",
|
|
123
123
|
"bthreads": "0.5.1",
|
|
124
124
|
"cheerio": "0.22.0",
|
|
125
125
|
"compression": "1.7.4",
|
|
@@ -149,19 +149,19 @@
|
|
|
149
149
|
"juice": "8.0.0",
|
|
150
150
|
"keypair": "1.0.4",
|
|
151
151
|
"knex": "0.21.21",
|
|
152
|
-
"knex-migrator": "4.2.
|
|
152
|
+
"knex-migrator": "4.2.3",
|
|
153
153
|
"lodash": "4.17.21",
|
|
154
154
|
"luxon": "2.3.1",
|
|
155
155
|
"mailgun-js": "0.22.0",
|
|
156
|
-
"metascraper": "5.
|
|
157
|
-
"metascraper-author": "5.
|
|
158
|
-
"metascraper-description": "5.
|
|
159
|
-
"metascraper-image": "5.
|
|
160
|
-
"metascraper-logo": "5.
|
|
161
|
-
"metascraper-logo-favicon": "5.
|
|
162
|
-
"metascraper-publisher": "5.
|
|
163
|
-
"metascraper-title": "5.
|
|
164
|
-
"metascraper-url": "5.
|
|
156
|
+
"metascraper": "5.26.0",
|
|
157
|
+
"metascraper-author": "5.26.0",
|
|
158
|
+
"metascraper-description": "5.26.0",
|
|
159
|
+
"metascraper-image": "5.26.0",
|
|
160
|
+
"metascraper-logo": "5.26.0",
|
|
161
|
+
"metascraper-logo-favicon": "5.26.0",
|
|
162
|
+
"metascraper-publisher": "5.26.0",
|
|
163
|
+
"metascraper-title": "5.26.0",
|
|
164
|
+
"metascraper-url": "5.26.0",
|
|
165
165
|
"moment": "2.24.0",
|
|
166
166
|
"moment-timezone": "0.5.23",
|
|
167
167
|
"multer": "1.4.4",
|
|
@@ -187,12 +187,12 @@
|
|
|
187
187
|
},
|
|
188
188
|
"devDependencies": {
|
|
189
189
|
"@lodder/grunt-postcss": "3.1.1",
|
|
190
|
-
"@playwright/test": "1.
|
|
190
|
+
"@playwright/test": "1.20.0",
|
|
191
191
|
"@tryghost/express-test": "0.6.1",
|
|
192
192
|
"c8": "7.11.0",
|
|
193
193
|
"coffeescript": "2.6.1",
|
|
194
|
-
"cssnano": "5.1.
|
|
195
|
-
"eslint": "8.
|
|
194
|
+
"cssnano": "5.1.4",
|
|
195
|
+
"eslint": "8.11.0",
|
|
196
196
|
"eslint-plugin-ghost": "2.13.0",
|
|
197
197
|
"grunt": "1.4.1",
|
|
198
198
|
"grunt-bg-shell": "2.3.3",
|
|
@@ -206,12 +206,12 @@
|
|
|
206
206
|
"grunt-subgrunt": "1.3.0",
|
|
207
207
|
"grunt-update-submodules": "0.4.1",
|
|
208
208
|
"jwks-rsa": "2.0.5",
|
|
209
|
-
"mocha": "9.2.
|
|
209
|
+
"mocha": "9.2.2",
|
|
210
210
|
"mocha-slow-test-reporter": "0.1.2",
|
|
211
211
|
"mock-knex": "0.4.10",
|
|
212
212
|
"nock": "13.2.4",
|
|
213
|
-
"papaparse": "5.3.
|
|
214
|
-
"postcss": "8.4.
|
|
213
|
+
"papaparse": "5.3.2",
|
|
214
|
+
"postcss": "8.4.12",
|
|
215
215
|
"rewire": "6.0.0",
|
|
216
216
|
"should": "13.2.3",
|
|
217
217
|
"sinon": "13.0.1",
|