ghost 4.41.1 → 4.42.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/core/boot.js +24 -6
- package/core/built/assets/ghost-dark-97613c037232aba4490489431ce170ca.css +1 -0
- package/core/built/assets/{ghost.min-8e2e6c7a01fde044c566c1650a36bfc2.js → ghost.min-20096eef632760c3a2906e243adbd24b.js} +1035 -841
- package/core/built/assets/ghost.min-c08ce1872f0e09edb63eb13c43606d18.css +1 -0
- package/core/built/assets/{vendor.min-9094db77ba3190cb10876f8e42e1d90d.js → vendor.min-21f79c68a284acb1b70039f3f63e5507.js} +68 -68
- package/core/built/assets/{vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css → vendor.min-ba66b98f7c24fa40e061c7ffc94f4e23.css} +214 -0
- package/core/frontend/helpers/price.js +1 -0
- package/core/frontend/web/middleware/error-handler.js +5 -3
- package/core/server/api/canary/email-preview.js +2 -1
- package/core/server/api/canary/{email.js → emails.js} +0 -0
- package/core/server/api/canary/index.js +11 -3
- package/core/server/api/canary/{memberSigninUrls.js → member-signin-urls.js} +0 -1
- package/core/server/api/canary/{membersStripeConnect.js → members-stripe-connect.js} +0 -0
- package/core/server/api/canary/members.js +0 -45
- package/core/server/api/canary/newsletters.js +45 -0
- package/core/server/api/canary/stats.js +14 -0
- package/core/server/api/canary/utils/serializers/output/authentication.js +4 -0
- package/core/server/api/canary/utils/serializers/output/default.js +35 -0
- package/core/server/api/canary/utils/serializers/output/email-previews.js +7 -0
- package/core/server/api/canary/utils/serializers/output/index.js +18 -42
- package/core/server/api/canary/utils/serializers/output/mappers/authors.js +1 -0
- package/core/server/api/canary/utils/serializers/output/mappers/index.js +2 -1
- package/core/server/api/canary/utils/serializers/output/mappers/integrations.js +1 -1
- package/core/server/api/canary/utils/serializers/output/mappers/snippets.js +36 -0
- package/core/server/api/canary/utils/serializers/output/members-stripe-connect.js +6 -0
- package/core/server/api/canary/utils/serializers/output/members.js +2 -2
- package/core/server/api/canary/utils/serializers/output/oembed.js +2 -2
- package/core/server/api/canary/utils/serializers/output/offers.js +8 -0
- package/core/server/api/canary/utils/serializers/output/redirects.js +2 -2
- package/core/server/api/canary/utils/serializers/output/schedules.js +2 -2
- package/core/server/api/canary/utils/serializers/output/session.js +9 -0
- package/core/server/api/canary/utils/serializers/output/settings.js +64 -37
- package/core/server/api/canary/utils/serializers/output/slack.js +9 -0
- package/core/server/api/canary/utils/serializers/output/themes.js +3 -24
- package/core/server/api/canary/utils/serializers/output/users.js +0 -23
- package/core/server/api/shared/serializers/handle.js +25 -11
- package/core/server/data/exporter/table-lists.js +1 -0
- package/core/server/data/migrations/utils.js +1 -1
- package/core/server/data/migrations/versions/4.42/2022-03-21-17-17-add.js +20 -0
- package/core/server/data/migrations/versions/4.42/2022-03-30-15-44-add-newsletter-permissions.js +28 -0
- package/core/server/data/schema/commands.js +13 -13
- package/core/server/data/schema/schema.js +18 -0
- package/core/server/models/newsletter.js +9 -0
- package/core/server/services/mega/template.js +25 -13
- package/core/server/services/members/service.js +2 -1
- package/core/server/services/offers/service.js +11 -8
- package/core/server/services/stats/index.js +1 -0
- package/core/server/services/stats/lib/members-stats-service.js +165 -0
- package/core/server/services/stats/service.js +6 -0
- package/core/server/services/themes/validate.js +4 -3
- package/core/server/services/webhooks/webhooks-service.js +3 -1
- package/core/server/web/admin/app.js +8 -0
- package/core/server/web/admin/views/default-prod.html +5 -5
- package/core/server/web/admin/views/default.html +5 -5
- package/core/server/web/api/canary/admin/routes.js +8 -2
- package/core/shared/config/defaults.json +2 -2
- package/core/shared/config/env/config.development.json +26 -0
- package/core/shared/config/env/config.production.json +21 -0
- package/core/shared/config/env/config.testing-mysql.json +59 -0
- package/core/shared/config/env/config.testing.json +58 -0
- package/core/shared/labs.js +3 -1
- package/core/shared/settings-cache/cache.js +1 -1
- package/package.json +66 -66
- package/yarn.lock +1609 -1781
- package/.c8rc.json +0 -34
- package/.eslintrc.js +0 -118
- package/core/built/assets/ghost-dark-6fbe502f2bb2cde92e15b2f1a9da57a0.css +0 -1
- package/core/built/assets/ghost.min-09301e5bd933cf6d24368e98a4d898a9.css +0 -1
- package/core/server/api/canary/utils/serializers/output/actions.js +0 -13
- package/core/server/api/canary/utils/serializers/output/authors.js +0 -21
- package/core/server/api/canary/utils/serializers/output/email-preview.js +0 -7
- package/core/server/api/canary/utils/serializers/output/emails.js +0 -22
- package/core/server/api/canary/utils/serializers/output/identities.js +0 -7
- package/core/server/api/canary/utils/serializers/output/integrations.js +0 -34
- package/core/server/api/canary/utils/serializers/output/invites.js +0 -24
- package/core/server/api/canary/utils/serializers/output/labels.js +0 -25
- package/core/server/api/canary/utils/serializers/output/mappers/labels.js +0 -4
- package/core/server/api/canary/utils/serializers/output/member-signin_urls.js +0 -7
- package/core/server/api/canary/utils/serializers/output/snippets.js +0 -97
- package/core/server/api/canary/utils/serializers/output/tags.js +0 -25
- package/core/server/api/canary/utils/serializers/output/webhooks.js +0 -15
- package/jsconfig.json +0 -13
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:actions');
|
|
2
|
-
const mappers = require('./mappers');
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
browse(models, apiConfig, frame) {
|
|
6
|
-
debug('browse');
|
|
7
|
-
|
|
8
|
-
frame.response = {
|
|
9
|
-
actions: models.data.map(model => mappers.actions(model, frame)),
|
|
10
|
-
meta: models.meta
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:authors');
|
|
2
|
-
const mappers = require('./mappers');
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
browse(models, apiConfig, frame) {
|
|
6
|
-
debug('browse');
|
|
7
|
-
|
|
8
|
-
frame.response = {
|
|
9
|
-
authors: models.data.map(model => mappers.users(model, frame)),
|
|
10
|
-
meta: models.meta
|
|
11
|
-
};
|
|
12
|
-
},
|
|
13
|
-
|
|
14
|
-
read(model, apiConfig, frame) {
|
|
15
|
-
debug('read');
|
|
16
|
-
|
|
17
|
-
frame.response = {
|
|
18
|
-
authors: [mappers.users(model, frame)]
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const mappers = require('./mappers');
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
read(email, apiConfig, frame) {
|
|
5
|
-
frame.response = {
|
|
6
|
-
emails: [mappers.emails(email, frame)]
|
|
7
|
-
};
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
browse(page, apiConfig, frame) {
|
|
11
|
-
const data = {
|
|
12
|
-
emails: page.data.map(model => mappers.emails(model, frame)),
|
|
13
|
-
meta: page.meta
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
frame.response = data;
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
get retry() {
|
|
20
|
-
return this.read;
|
|
21
|
-
}
|
|
22
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:integrations');
|
|
2
|
-
const mappers = require('./mappers');
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
browse({data, meta}, apiConfig, frame) {
|
|
6
|
-
debug('browse');
|
|
7
|
-
|
|
8
|
-
frame.response = {
|
|
9
|
-
integrations: data.map(model => mappers.integrations(model, frame)),
|
|
10
|
-
meta
|
|
11
|
-
};
|
|
12
|
-
},
|
|
13
|
-
read(model, apiConfig, frame) {
|
|
14
|
-
debug('read');
|
|
15
|
-
|
|
16
|
-
frame.response = {
|
|
17
|
-
integrations: [mappers.integrations(model, frame)]
|
|
18
|
-
};
|
|
19
|
-
},
|
|
20
|
-
add(model, apiConfig, frame) {
|
|
21
|
-
debug('add');
|
|
22
|
-
|
|
23
|
-
frame.response = {
|
|
24
|
-
integrations: [mappers.integrations(model, frame)]
|
|
25
|
-
};
|
|
26
|
-
},
|
|
27
|
-
edit(model, apiConfig, frame) {
|
|
28
|
-
debug('edit');
|
|
29
|
-
|
|
30
|
-
frame.response = {
|
|
31
|
-
integrations: [mappers.integrations(model, frame)]
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:invites');
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
all(models, apiConfig, frame) {
|
|
5
|
-
debug('all');
|
|
6
|
-
|
|
7
|
-
if (!models) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (models.meta) {
|
|
12
|
-
frame.response = {
|
|
13
|
-
invites: models.data.map(model => model.toJSON(frame.options)),
|
|
14
|
-
meta: models.meta
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
frame.response = {
|
|
21
|
-
invites: [models.toJSON(frame.options)]
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:labels');
|
|
2
|
-
const mappers = require('./mappers');
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
all(models, apiConfig, frame) {
|
|
6
|
-
debug('all');
|
|
7
|
-
|
|
8
|
-
if (!models) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
if (models.meta) {
|
|
13
|
-
frame.response = {
|
|
14
|
-
labels: models.data.map(model => mappers.labels(model, frame)),
|
|
15
|
-
meta: models.meta
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
frame.response = {
|
|
22
|
-
labels: [mappers.labels(models, frame)]
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
};
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
//@ts-check
|
|
2
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:snippets');
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
browse: createSerializer('browse', paginatedSnippets),
|
|
6
|
-
read: createSerializer('read', singleSnippet),
|
|
7
|
-
edit: createSerializer('edit', singleSnippet),
|
|
8
|
-
add: createSerializer('add', singleSnippet)
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @template PageMeta
|
|
13
|
-
*
|
|
14
|
-
* @param {{data: import('bookshelf').Model[], meta: PageMeta}} page
|
|
15
|
-
* @param {APIConfig} _apiConfig
|
|
16
|
-
* @param {Frame} frame
|
|
17
|
-
*
|
|
18
|
-
* @returns {{snippets: SerializedSnippet[], meta: PageMeta}}
|
|
19
|
-
*/
|
|
20
|
-
function paginatedSnippets(page, _apiConfig, frame) {
|
|
21
|
-
return {
|
|
22
|
-
snippets: page.data.map(model => serializeSnippet(model, frame.options)),
|
|
23
|
-
meta: page.meta
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @param {import('bookshelf').Model} model
|
|
29
|
-
* @param {APIConfig} _apiConfig
|
|
30
|
-
* @param {Frame} frame
|
|
31
|
-
*
|
|
32
|
-
* @returns {{snippets: SerializedSnippet[]}}
|
|
33
|
-
*/
|
|
34
|
-
function singleSnippet(model, _apiConfig, frame) {
|
|
35
|
-
return {
|
|
36
|
-
snippets: [serializeSnippet(model, frame.options)]
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @template Data
|
|
42
|
-
* @template Response
|
|
43
|
-
* @param {string} debugString
|
|
44
|
-
* @param {(data: Data, apiConfig: APIConfig, frame: Frame) => Response} serialize - A function to serialize the data into an object suitable for API response
|
|
45
|
-
*
|
|
46
|
-
* @returns {(data: Data, apiConfig: APIConfig, frame: Frame) => void}
|
|
47
|
-
*/
|
|
48
|
-
function createSerializer(debugString, serialize) {
|
|
49
|
-
return function serializer(data, apiConfig, frame) {
|
|
50
|
-
debug(debugString);
|
|
51
|
-
const response = serialize(data, apiConfig, frame);
|
|
52
|
-
frame.response = response;
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @param {import('bookshelf').Model} snippet
|
|
58
|
-
* @param {object} options
|
|
59
|
-
*
|
|
60
|
-
* @returns {SerializedSnippet}
|
|
61
|
-
*/
|
|
62
|
-
function serializeSnippet(snippet, options) {
|
|
63
|
-
const json = snippet.toJSON(options);
|
|
64
|
-
|
|
65
|
-
return {
|
|
66
|
-
id: json.id,
|
|
67
|
-
name: json.name,
|
|
68
|
-
// @ts-ignore
|
|
69
|
-
mobiledoc: json.mobiledoc,
|
|
70
|
-
created_at: json.created_at,
|
|
71
|
-
updated_at: json.updated_at,
|
|
72
|
-
created_by: json.created_by,
|
|
73
|
-
updated_by: json.updated_by
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* @typedef {Object} SerializedSnippet
|
|
79
|
-
* @prop {string} id
|
|
80
|
-
* @prop {string=} name
|
|
81
|
-
* @prop {string=} mobiledoc
|
|
82
|
-
* @prop {string} created_at
|
|
83
|
-
* @prop {string} updated_at
|
|
84
|
-
* @prop {string} created_by
|
|
85
|
-
* @prop {string} updated_by
|
|
86
|
-
*/
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* @typedef {Object} APIConfig
|
|
90
|
-
* @prop {string} docName
|
|
91
|
-
* @prop {string} method
|
|
92
|
-
*/
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* @typedef {Object<string, any>} Frame
|
|
96
|
-
* @prop {Object} options
|
|
97
|
-
*/
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:tags');
|
|
2
|
-
const mappers = require('./mappers');
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
all(models, apiConfig, frame) {
|
|
6
|
-
debug('all');
|
|
7
|
-
|
|
8
|
-
if (!models) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
if (models.meta) {
|
|
13
|
-
frame.response = {
|
|
14
|
-
tags: models.data.map(model => mappers.tags(model, frame)),
|
|
15
|
-
meta: models.meta
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
frame.response = {
|
|
22
|
-
tags: [mappers.tags(models, frame)]
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
const debug = require('@tryghost/debug')('api:canary:utils:serializers:output:webhooks');
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
all(models, apiConfig, frame) {
|
|
5
|
-
debug('all');
|
|
6
|
-
// CASE: e.g. destroy returns null
|
|
7
|
-
if (!models) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
frame.response = {
|
|
12
|
-
webhooks: [models.toJSON(frame.options)]
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
};
|
package/jsconfig.json
DELETED