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.
Files changed (82) hide show
  1. package/core/boot.js +24 -6
  2. package/core/built/assets/ghost-dark-97613c037232aba4490489431ce170ca.css +1 -0
  3. package/core/built/assets/{ghost.min-8e2e6c7a01fde044c566c1650a36bfc2.js → ghost.min-20096eef632760c3a2906e243adbd24b.js} +1035 -841
  4. package/core/built/assets/ghost.min-c08ce1872f0e09edb63eb13c43606d18.css +1 -0
  5. package/core/built/assets/{vendor.min-9094db77ba3190cb10876f8e42e1d90d.js → vendor.min-21f79c68a284acb1b70039f3f63e5507.js} +68 -68
  6. package/core/built/assets/{vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css → vendor.min-ba66b98f7c24fa40e061c7ffc94f4e23.css} +214 -0
  7. package/core/frontend/helpers/price.js +1 -0
  8. package/core/frontend/web/middleware/error-handler.js +5 -3
  9. package/core/server/api/canary/email-preview.js +2 -1
  10. package/core/server/api/canary/{email.js → emails.js} +0 -0
  11. package/core/server/api/canary/index.js +11 -3
  12. package/core/server/api/canary/{memberSigninUrls.js → member-signin-urls.js} +0 -1
  13. package/core/server/api/canary/{membersStripeConnect.js → members-stripe-connect.js} +0 -0
  14. package/core/server/api/canary/members.js +0 -45
  15. package/core/server/api/canary/newsletters.js +45 -0
  16. package/core/server/api/canary/stats.js +14 -0
  17. package/core/server/api/canary/utils/serializers/output/authentication.js +4 -0
  18. package/core/server/api/canary/utils/serializers/output/default.js +35 -0
  19. package/core/server/api/canary/utils/serializers/output/email-previews.js +7 -0
  20. package/core/server/api/canary/utils/serializers/output/index.js +18 -42
  21. package/core/server/api/canary/utils/serializers/output/mappers/authors.js +1 -0
  22. package/core/server/api/canary/utils/serializers/output/mappers/index.js +2 -1
  23. package/core/server/api/canary/utils/serializers/output/mappers/integrations.js +1 -1
  24. package/core/server/api/canary/utils/serializers/output/mappers/snippets.js +36 -0
  25. package/core/server/api/canary/utils/serializers/output/members-stripe-connect.js +6 -0
  26. package/core/server/api/canary/utils/serializers/output/members.js +2 -2
  27. package/core/server/api/canary/utils/serializers/output/oembed.js +2 -2
  28. package/core/server/api/canary/utils/serializers/output/offers.js +8 -0
  29. package/core/server/api/canary/utils/serializers/output/redirects.js +2 -2
  30. package/core/server/api/canary/utils/serializers/output/schedules.js +2 -2
  31. package/core/server/api/canary/utils/serializers/output/session.js +9 -0
  32. package/core/server/api/canary/utils/serializers/output/settings.js +64 -37
  33. package/core/server/api/canary/utils/serializers/output/slack.js +9 -0
  34. package/core/server/api/canary/utils/serializers/output/themes.js +3 -24
  35. package/core/server/api/canary/utils/serializers/output/users.js +0 -23
  36. package/core/server/api/shared/serializers/handle.js +25 -11
  37. package/core/server/data/exporter/table-lists.js +1 -0
  38. package/core/server/data/migrations/utils.js +1 -1
  39. package/core/server/data/migrations/versions/4.42/2022-03-21-17-17-add.js +20 -0
  40. package/core/server/data/migrations/versions/4.42/2022-03-30-15-44-add-newsletter-permissions.js +28 -0
  41. package/core/server/data/schema/commands.js +13 -13
  42. package/core/server/data/schema/schema.js +18 -0
  43. package/core/server/models/newsletter.js +9 -0
  44. package/core/server/services/mega/template.js +25 -13
  45. package/core/server/services/members/service.js +2 -1
  46. package/core/server/services/offers/service.js +11 -8
  47. package/core/server/services/stats/index.js +1 -0
  48. package/core/server/services/stats/lib/members-stats-service.js +165 -0
  49. package/core/server/services/stats/service.js +6 -0
  50. package/core/server/services/themes/validate.js +4 -3
  51. package/core/server/services/webhooks/webhooks-service.js +3 -1
  52. package/core/server/web/admin/app.js +8 -0
  53. package/core/server/web/admin/views/default-prod.html +5 -5
  54. package/core/server/web/admin/views/default.html +5 -5
  55. package/core/server/web/api/canary/admin/routes.js +8 -2
  56. package/core/shared/config/defaults.json +2 -2
  57. package/core/shared/config/env/config.development.json +26 -0
  58. package/core/shared/config/env/config.production.json +21 -0
  59. package/core/shared/config/env/config.testing-mysql.json +59 -0
  60. package/core/shared/config/env/config.testing.json +58 -0
  61. package/core/shared/labs.js +3 -1
  62. package/core/shared/settings-cache/cache.js +1 -1
  63. package/package.json +66 -66
  64. package/yarn.lock +1609 -1781
  65. package/.c8rc.json +0 -34
  66. package/.eslintrc.js +0 -118
  67. package/core/built/assets/ghost-dark-6fbe502f2bb2cde92e15b2f1a9da57a0.css +0 -1
  68. package/core/built/assets/ghost.min-09301e5bd933cf6d24368e98a4d898a9.css +0 -1
  69. package/core/server/api/canary/utils/serializers/output/actions.js +0 -13
  70. package/core/server/api/canary/utils/serializers/output/authors.js +0 -21
  71. package/core/server/api/canary/utils/serializers/output/email-preview.js +0 -7
  72. package/core/server/api/canary/utils/serializers/output/emails.js +0 -22
  73. package/core/server/api/canary/utils/serializers/output/identities.js +0 -7
  74. package/core/server/api/canary/utils/serializers/output/integrations.js +0 -34
  75. package/core/server/api/canary/utils/serializers/output/invites.js +0 -24
  76. package/core/server/api/canary/utils/serializers/output/labels.js +0 -25
  77. package/core/server/api/canary/utils/serializers/output/mappers/labels.js +0 -4
  78. package/core/server/api/canary/utils/serializers/output/member-signin_urls.js +0 -7
  79. package/core/server/api/canary/utils/serializers/output/snippets.js +0 -97
  80. package/core/server/api/canary/utils/serializers/output/tags.js +0 -25
  81. package/core/server/api/canary/utils/serializers/output/webhooks.js +0 -15
  82. 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,7 +0,0 @@
1
- module.exports = {
2
- read(emailPreview, apiConfig, frame) {
3
- frame.response = {
4
- email_previews: [emailPreview]
5
- };
6
- }
7
- };
@@ -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,7 +0,0 @@
1
- module.exports = {
2
- read(data, apiConfig, frame) {
3
- frame.response = {
4
- identities: [data]
5
- };
6
- }
7
- };
@@ -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,4 +0,0 @@
1
- module.exports = (model, frame) => {
2
- const jsonModel = model.toJSON ? model.toJSON(frame.options) : model;
3
- return jsonModel;
4
- };
@@ -1,7 +0,0 @@
1
- module.exports = {
2
- read(data, apiConfig, frame) {
3
- frame.response = {
4
- member_signin_urls: [data]
5
- };
6
- }
7
- };
@@ -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
@@ -1,13 +0,0 @@
1
- {
2
- "include": ["core/**/*.js", "test/**/*.js"],
3
- "compilerOptions": {
4
- "checkJs": true,
5
- "module": "commonjs",
6
- "target": "es2018",
7
- "moduleResolution": "node"
8
- },
9
- "exclude": [
10
- "core/built",
11
- "core/client"
12
- ]
13
- }