ghost 4.41.3 → 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 (55) hide show
  1. package/core/built/assets/ghost-dark-97613c037232aba4490489431ce170ca.css +1 -0
  2. package/core/built/assets/{ghost.min-1abf114ca26a71e8e1f09054f3592614.js → ghost.min-20096eef632760c3a2906e243adbd24b.js} +400 -323
  3. package/core/built/assets/ghost.min-c08ce1872f0e09edb63eb13c43606d18.css +1 -0
  4. package/core/built/assets/{vendor.min-9094db77ba3190cb10876f8e42e1d90d.js → vendor.min-21f79c68a284acb1b70039f3f63e5507.js} +68 -68
  5. package/core/built/assets/{vendor.min-2c8ad32b7960bb605ebc20097fee5ebd.css → vendor.min-ba66b98f7c24fa40e061c7ffc94f4e23.css} +214 -0
  6. package/core/frontend/helpers/price.js +1 -0
  7. package/core/server/api/canary/email-preview.js +2 -1
  8. package/core/server/api/canary/{email.js → emails.js} +0 -0
  9. package/core/server/api/canary/index.js +9 -1
  10. package/core/server/api/canary/members.js +0 -45
  11. package/core/server/api/canary/newsletters.js +45 -0
  12. package/core/server/api/canary/stats.js +14 -0
  13. package/core/server/api/canary/utils/serializers/output/email-previews.js +7 -0
  14. package/core/server/api/canary/utils/serializers/output/index.js +2 -22
  15. package/core/server/api/canary/utils/serializers/output/mappers/index.js +1 -0
  16. package/core/server/api/canary/utils/serializers/output/mappers/snippets.js +36 -0
  17. package/core/server/api/canary/utils/serializers/output/members.js +0 -2
  18. package/core/server/api/canary/utils/serializers/output/oembed.js +2 -2
  19. package/core/server/api/canary/utils/serializers/output/redirects.js +2 -2
  20. package/core/server/api/canary/utils/serializers/output/schedules.js +2 -2
  21. package/core/server/api/canary/utils/serializers/output/slack.js +2 -2
  22. package/core/server/api/canary/utils/serializers/output/themes.js +2 -2
  23. package/core/server/api/canary/utils/serializers/output/users.js +0 -23
  24. package/core/server/api/shared/serializers/handle.js +25 -26
  25. package/core/server/data/exporter/table-lists.js +1 -0
  26. package/core/server/data/migrations/utils.js +1 -1
  27. package/core/server/data/migrations/versions/4.42/2022-03-21-17-17-add.js +20 -0
  28. package/core/server/data/migrations/versions/4.42/2022-03-30-15-44-add-newsletter-permissions.js +28 -0
  29. package/core/server/data/schema/commands.js +13 -13
  30. package/core/server/data/schema/schema.js +18 -0
  31. package/core/server/models/newsletter.js +9 -0
  32. package/core/server/services/mega/template.js +25 -13
  33. package/core/server/services/members/service.js +2 -1
  34. package/core/server/services/stats/index.js +1 -0
  35. package/core/server/services/stats/lib/members-stats-service.js +165 -0
  36. package/core/server/services/stats/service.js +6 -0
  37. package/core/server/services/webhooks/webhooks-service.js +3 -1
  38. package/core/server/web/admin/views/default-prod.html +5 -5
  39. package/core/server/web/admin/views/default.html +5 -5
  40. package/core/server/web/api/canary/admin/routes.js +8 -2
  41. package/core/shared/config/defaults.json +2 -2
  42. package/core/shared/config/env/config.development.json +26 -0
  43. package/core/shared/config/env/config.production.json +21 -0
  44. package/core/shared/config/env/config.testing-mysql.json +59 -0
  45. package/core/shared/config/env/config.testing.json +58 -0
  46. package/package.json +38 -38
  47. package/yarn.lock +510 -654
  48. package/core/built/assets/ghost-dark-146c4c688b47d45c4aa018ee0f79cebc.css +0 -1
  49. package/core/built/assets/ghost.min-a73b150c7eecc4641d377cc73fb5eecd.css +0 -1
  50. package/core/server/api/canary/utils/serializers/output/email-preview.js +0 -10
  51. package/core/server/api/canary/utils/serializers/output/emails.js +0 -22
  52. package/core/server/api/canary/utils/serializers/output/identities.js +0 -7
  53. package/core/server/api/canary/utils/serializers/output/member-signin-urls.js +0 -7
  54. package/core/server/api/canary/utils/serializers/output/snippets.js +0 -107
  55. package/core/server/api/canary/utils/serializers/output/webhooks.js +0 -15
@@ -1,10 +0,0 @@
1
- module.exports = {
2
- read(emailPreview, apiConfig, frame) {
3
- frame.response = {
4
- email_previews: [emailPreview]
5
- };
6
- },
7
- sendTestEmail(data, apiConfig, frame) {
8
- frame.response = data;
9
- }
10
- };
@@ -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,7 +0,0 @@
1
- module.exports = {
2
- read(data, apiConfig, frame) {
3
- frame.response = {
4
- member_signin_urls: [data]
5
- };
6
- }
7
- };
@@ -1,107 +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
- destroy: createSerializer('destroy', passthrough)
10
- };
11
-
12
- /**
13
- * @template PageMeta
14
- *
15
- * @param {{data: import('bookshelf').Model[], meta: PageMeta}} page
16
- * @param {APIConfig} _apiConfig
17
- * @param {Frame} frame
18
- *
19
- * @returns {{snippets: SerializedSnippet[], meta: PageMeta}}
20
- */
21
- function paginatedSnippets(page, _apiConfig, frame) {
22
- return {
23
- snippets: page.data.map(model => serializeSnippet(model, frame.options)),
24
- meta: page.meta
25
- };
26
- }
27
-
28
- /**
29
- * @param {import('bookshelf').Model} model
30
- * @param {APIConfig} _apiConfig
31
- * @param {Frame} frame
32
- *
33
- * @returns {{snippets: SerializedSnippet[]}}
34
- */
35
- function singleSnippet(model, _apiConfig, frame) {
36
- return {
37
- snippets: [serializeSnippet(model, frame.options)]
38
- };
39
- }
40
-
41
- /**
42
- * @template Data
43
- * @param {Data} data
44
- * @returns Data
45
- */
46
- function passthrough(data) {
47
- return data;
48
- }
49
-
50
- /**
51
- * @template Data
52
- * @template Response
53
- * @param {string} debugString
54
- * @param {(data: Data, apiConfig: APIConfig, frame: Frame) => Response} serialize - A function to serialize the data into an object suitable for API response
55
- *
56
- * @returns {(data: Data, apiConfig: APIConfig, frame: Frame) => void}
57
- */
58
- function createSerializer(debugString, serialize) {
59
- return function serializer(data, apiConfig, frame) {
60
- debug(debugString);
61
- const response = serialize(data, apiConfig, frame);
62
- frame.response = response;
63
- };
64
- }
65
-
66
- /**
67
- * @param {import('bookshelf').Model} snippet
68
- * @param {object} options
69
- *
70
- * @returns {SerializedSnippet}
71
- */
72
- function serializeSnippet(snippet, options) {
73
- const json = snippet.toJSON(options);
74
-
75
- return {
76
- id: json.id,
77
- name: json.name,
78
- // @ts-ignore
79
- mobiledoc: json.mobiledoc,
80
- created_at: json.created_at,
81
- updated_at: json.updated_at,
82
- created_by: json.created_by,
83
- updated_by: json.updated_by
84
- };
85
- }
86
-
87
- /**
88
- * @typedef {Object} SerializedSnippet
89
- * @prop {string} id
90
- * @prop {string=} name
91
- * @prop {string=} mobiledoc
92
- * @prop {string} created_at
93
- * @prop {string} updated_at
94
- * @prop {string} created_by
95
- * @prop {string} updated_by
96
- */
97
-
98
- /**
99
- * @typedef {Object} APIConfig
100
- * @prop {string} docName
101
- * @prop {string} method
102
- */
103
-
104
- /**
105
- * @typedef {Object<string, any>} Frame
106
- * @prop {Object} options
107
- */
@@ -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
- };