ghost 5.43.0 → 5.44.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 (119) hide show
  1. package/components/tryghost-adapter-cache-memory-ttl-5.44.0.tgz +0 -0
  2. package/components/{tryghost-adapter-cache-redis-5.43.0.tgz → tryghost-adapter-cache-redis-5.44.0.tgz} +0 -0
  3. package/components/{tryghost-adapter-manager-5.43.0.tgz → tryghost-adapter-manager-5.44.0.tgz} +0 -0
  4. package/components/{tryghost-api-framework-5.43.0.tgz → tryghost-api-framework-5.44.0.tgz} +0 -0
  5. package/components/{tryghost-api-version-compatibility-service-5.43.0.tgz → tryghost-api-version-compatibility-service-5.44.0.tgz} +0 -0
  6. package/components/tryghost-audience-feedback-5.44.0.tgz +0 -0
  7. package/components/tryghost-bootstrap-socket-5.44.0.tgz +0 -0
  8. package/components/tryghost-constants-5.44.0.tgz +0 -0
  9. package/components/tryghost-custom-theme-settings-service-5.44.0.tgz +0 -0
  10. package/components/{tryghost-data-generator-5.43.0.tgz → tryghost-data-generator-5.44.0.tgz} +0 -0
  11. package/components/tryghost-domain-events-5.44.0.tgz +0 -0
  12. package/components/{tryghost-dynamic-routing-events-5.43.0.tgz → tryghost-dynamic-routing-events-5.44.0.tgz} +0 -0
  13. package/components/{tryghost-email-analytics-provider-mailgun-5.43.0.tgz → tryghost-email-analytics-provider-mailgun-5.44.0.tgz} +0 -0
  14. package/components/{tryghost-email-analytics-service-5.43.0.tgz → tryghost-email-analytics-service-5.44.0.tgz} +0 -0
  15. package/components/{tryghost-email-content-generator-5.43.0.tgz → tryghost-email-content-generator-5.44.0.tgz} +0 -0
  16. package/components/tryghost-email-events-5.44.0.tgz +0 -0
  17. package/components/{tryghost-email-service-5.43.0.tgz → tryghost-email-service-5.44.0.tgz} +0 -0
  18. package/components/tryghost-email-suppression-list-5.44.0.tgz +0 -0
  19. package/components/{tryghost-event-aware-cache-wrapper-5.43.0.tgz → tryghost-event-aware-cache-wrapper-5.44.0.tgz} +0 -0
  20. package/components/tryghost-express-dynamic-redirects-5.44.0.tgz +0 -0
  21. package/components/{tryghost-external-media-inliner-5.43.0.tgz → tryghost-external-media-inliner-5.44.0.tgz} +0 -0
  22. package/components/tryghost-extract-api-key-5.44.0.tgz +0 -0
  23. package/components/tryghost-html-to-plaintext-5.44.0.tgz +0 -0
  24. package/components/tryghost-i18n-5.44.0.tgz +0 -0
  25. package/components/{tryghost-importer-handler-content-files-5.43.0.tgz → tryghost-importer-handler-content-files-5.44.0.tgz} +0 -0
  26. package/components/{tryghost-importer-revue-5.43.0.tgz → tryghost-importer-revue-5.44.0.tgz} +0 -0
  27. package/components/{tryghost-job-manager-5.43.0.tgz → tryghost-job-manager-5.44.0.tgz} +0 -0
  28. package/components/{tryghost-link-redirects-5.43.0.tgz → tryghost-link-redirects-5.44.0.tgz} +0 -0
  29. package/components/{tryghost-link-replacer-5.43.0.tgz → tryghost-link-replacer-5.44.0.tgz} +0 -0
  30. package/components/{tryghost-link-tracking-5.43.0.tgz → tryghost-link-tracking-5.44.0.tgz} +0 -0
  31. package/components/tryghost-magic-link-5.44.0.tgz +0 -0
  32. package/components/tryghost-mailgun-client-5.44.0.tgz +0 -0
  33. package/components/{tryghost-member-attribution-5.43.0.tgz → tryghost-member-attribution-5.44.0.tgz} +0 -0
  34. package/components/tryghost-member-events-5.44.0.tgz +0 -0
  35. package/components/{tryghost-members-api-5.43.0.tgz → tryghost-members-api-5.44.0.tgz} +0 -0
  36. package/components/tryghost-members-csv-5.44.0.tgz +0 -0
  37. package/components/{tryghost-members-events-service-5.43.0.tgz → tryghost-members-events-service-5.44.0.tgz} +0 -0
  38. package/components/{tryghost-members-importer-5.43.0.tgz → tryghost-members-importer-5.44.0.tgz} +0 -0
  39. package/components/{tryghost-members-offers-5.43.0.tgz → tryghost-members-offers-5.44.0.tgz} +0 -0
  40. package/components/{tryghost-members-payments-5.43.0.tgz → tryghost-members-payments-5.44.0.tgz} +0 -0
  41. package/components/tryghost-members-ssr-5.44.0.tgz +0 -0
  42. package/components/{tryghost-members-stripe-service-5.43.0.tgz → tryghost-members-stripe-service-5.44.0.tgz} +0 -0
  43. package/components/{tryghost-mentions-email-report-5.43.0.tgz → tryghost-mentions-email-report-5.44.0.tgz} +0 -0
  44. package/components/{tryghost-milestones-5.43.0.tgz → tryghost-milestones-5.44.0.tgz} +0 -0
  45. package/components/{tryghost-minifier-5.43.0.tgz → tryghost-minifier-5.44.0.tgz} +0 -0
  46. package/components/tryghost-mw-api-version-mismatch-5.44.0.tgz +0 -0
  47. package/components/{tryghost-mw-cache-control-5.43.0.tgz → tryghost-mw-cache-control-5.44.0.tgz} +0 -0
  48. package/components/{tryghost-mw-error-handler-5.43.0.tgz → tryghost-mw-error-handler-5.44.0.tgz} +0 -0
  49. package/components/{tryghost-mw-session-from-token-5.43.0.tgz → tryghost-mw-session-from-token-5.44.0.tgz} +0 -0
  50. package/components/{tryghost-mw-update-user-last-seen-5.43.0.tgz → tryghost-mw-update-user-last-seen-5.44.0.tgz} +0 -0
  51. package/components/tryghost-mw-version-match-5.44.0.tgz +0 -0
  52. package/components/tryghost-mw-vhost-5.44.0.tgz +0 -0
  53. package/components/tryghost-oembed-service-5.44.0.tgz +0 -0
  54. package/components/{tryghost-package-json-5.43.0.tgz → tryghost-package-json-5.44.0.tgz} +0 -0
  55. package/components/tryghost-posts-service-5.44.0.tgz +0 -0
  56. package/components/tryghost-referrers-5.44.0.tgz +0 -0
  57. package/components/{tryghost-security-5.43.0.tgz → tryghost-security-5.44.0.tgz} +0 -0
  58. package/components/{tryghost-session-service-5.43.0.tgz → tryghost-session-service-5.44.0.tgz} +0 -0
  59. package/components/tryghost-settings-path-manager-5.44.0.tgz +0 -0
  60. package/components/{tryghost-slack-notifications-5.43.0.tgz → tryghost-slack-notifications-5.44.0.tgz} +0 -0
  61. package/components/{tryghost-staff-service-5.43.0.tgz → tryghost-staff-service-5.44.0.tgz} +0 -0
  62. package/components/{tryghost-stats-service-5.43.0.tgz → tryghost-stats-service-5.44.0.tgz} +0 -0
  63. package/components/{tryghost-tiers-5.43.0.tgz → tryghost-tiers-5.44.0.tgz} +0 -0
  64. package/components/{tryghost-update-check-service-5.43.0.tgz → tryghost-update-check-service-5.44.0.tgz} +0 -0
  65. package/components/{tryghost-verification-trigger-5.43.0.tgz → tryghost-verification-trigger-5.44.0.tgz} +0 -0
  66. package/components/{tryghost-version-notifications-data-service-5.43.0.tgz → tryghost-version-notifications-data-service-5.44.0.tgz} +0 -0
  67. package/components/{tryghost-webmentions-5.43.0.tgz → tryghost-webmentions-5.44.0.tgz} +0 -0
  68. package/core/boot.js +4 -0
  69. package/core/built/admin/assets/{chunk.234.b9c875c2897cfa768789.js → chunk.142.4b3c5e7ebee5433ac17e.js} +3179 -2665
  70. package/core/built/admin/assets/{chunk.234.b9c875c2897cfa768789.js.LICENSE.txt → chunk.142.4b3c5e7ebee5433ac17e.js.LICENSE.txt} +6 -0
  71. package/core/built/admin/assets/chunk.143.866856df015466a9d44c.js +35 -0
  72. package/core/built/admin/assets/{chunk.178.34b3da4d314e03aecc4f.js → chunk.178.8cd491189357ddcb427c.js} +4 -4
  73. package/core/built/admin/assets/{ghost-0fff0a0f3ed3022b69003f7766050cb4.js → ghost-1ce41f5b414ff115ff8167924199e7ba.js} +307 -240
  74. package/core/built/admin/assets/ghost-65a4349f579bcb6dcc5a0f0d7774f19a.css +1 -0
  75. package/core/built/admin/assets/ghost-dark-18bd18413fbf8e8b2f0ac21b32deb6ce.css +1 -0
  76. package/core/built/admin/assets/{vendor-da13470386c6ee05178d49830c64d7ab.js → vendor-f7817f9d354338ee94d5561277ea8056.js} +30 -26
  77. package/core/built/admin/index.html +6 -6
  78. package/core/server/api/endpoints/pages.js +50 -0
  79. package/core/server/api/endpoints/posts.js +7 -4
  80. package/core/server/api/endpoints/settings.js +1 -1
  81. package/core/server/api/endpoints/utils/serializers/input/pages.js +8 -0
  82. package/core/server/api/endpoints/utils/serializers/output/pages.js +20 -0
  83. package/core/server/data/migrations/versions/5.44/2023-04-14-04-17-add-snippets-lexical-column.js +8 -0
  84. package/core/server/data/schema/schema.js +1 -0
  85. package/core/server/services/lexical-multiplayer/index.js +1 -0
  86. package/core/server/services/lexical-multiplayer/service.js +141 -0
  87. package/core/server/services/lexical-multiplayer/y-websocket.js +244 -0
  88. package/core/server/services/settings/settings-bread-service.js +15 -0
  89. package/core/server/web/api/endpoints/admin/routes.js +2 -0
  90. package/core/shared/labs.js +1 -0
  91. package/package.json +136 -132
  92. package/yarn.lock +59 -33
  93. package/components/tryghost-adapter-cache-memory-ttl-5.43.0.tgz +0 -0
  94. package/components/tryghost-audience-feedback-5.43.0.tgz +0 -0
  95. package/components/tryghost-bootstrap-socket-5.43.0.tgz +0 -0
  96. package/components/tryghost-constants-5.43.0.tgz +0 -0
  97. package/components/tryghost-custom-theme-settings-service-5.43.0.tgz +0 -0
  98. package/components/tryghost-domain-events-5.43.0.tgz +0 -0
  99. package/components/tryghost-email-events-5.43.0.tgz +0 -0
  100. package/components/tryghost-email-suppression-list-5.43.0.tgz +0 -0
  101. package/components/tryghost-express-dynamic-redirects-5.43.0.tgz +0 -0
  102. package/components/tryghost-extract-api-key-5.43.0.tgz +0 -0
  103. package/components/tryghost-html-to-plaintext-5.43.0.tgz +0 -0
  104. package/components/tryghost-i18n-5.43.0.tgz +0 -0
  105. package/components/tryghost-magic-link-5.43.0.tgz +0 -0
  106. package/components/tryghost-mailgun-client-5.43.0.tgz +0 -0
  107. package/components/tryghost-member-events-5.43.0.tgz +0 -0
  108. package/components/tryghost-members-csv-5.43.0.tgz +0 -0
  109. package/components/tryghost-members-ssr-5.43.0.tgz +0 -0
  110. package/components/tryghost-mw-api-version-mismatch-5.43.0.tgz +0 -0
  111. package/components/tryghost-mw-version-match-5.43.0.tgz +0 -0
  112. package/components/tryghost-mw-vhost-5.43.0.tgz +0 -0
  113. package/components/tryghost-oembed-service-5.43.0.tgz +0 -0
  114. package/components/tryghost-posts-service-5.43.0.tgz +0 -0
  115. package/components/tryghost-referrers-5.43.0.tgz +0 -0
  116. package/components/tryghost-settings-path-manager-5.43.0.tgz +0 -0
  117. package/core/built/admin/assets/chunk.143.726fc7d5add7caf3e2e7.js +0 -35
  118. package/core/built/admin/assets/ghost-b84e41170d69676f9f8a688c76906a6d.css +0 -1
  119. package/core/built/admin/assets/ghost-dark-bd0c63ccb9c91035a7daa6bdf2b8553c.css +0 -1
@@ -0,0 +1,244 @@
1
+ // based on https://github.com/yjs/y-websocket/blob/master/bin/utils.js
2
+
3
+ const Y = require('yjs');
4
+ const syncProtocol = require('y-protocols/dist/sync.cjs');
5
+ const awarenessProtocol = require('y-protocols/dist/awareness.cjs');
6
+
7
+ const encoding = require('lib0/dist/encoding.cjs');
8
+ const decoding = require('lib0/dist/decoding.cjs');
9
+ const map = require('lib0/dist/map.cjs');
10
+
11
+ const wsReadyStateConnecting = 0;
12
+ const wsReadyStateOpen = 1;
13
+ const wsReadyStateClosing = 2 // eslint-disable-line
14
+ const wsReadyStateClosed = 3 // eslint-disable-line
15
+
16
+ /**
17
+ * @type {Map<string,WSSharedDoc>}
18
+ */
19
+ const docs = new Map();
20
+ module.exports.docs = docs;
21
+
22
+ const messageSync = 0;
23
+ const messageAwareness = 1;
24
+
25
+ /**
26
+ * @param {Uint8Array} update
27
+ * @param {any} origin
28
+ * @param {WSSharedDoc} doc
29
+ */
30
+ const updateHandler = (update, origin, doc) => {
31
+ const encoder = encoding.createEncoder();
32
+ encoding.writeVarUint(encoder, messageSync);
33
+ syncProtocol.writeUpdate(encoder, update);
34
+ const message = encoding.toUint8Array(encoder);
35
+ doc.conns.forEach((_, conn) => send(doc, conn, message));
36
+ };
37
+
38
+ class WSSharedDoc extends Y.Doc {
39
+ /**
40
+ * @param {string} name
41
+ */
42
+ constructor(name) {
43
+ super({gc: true});
44
+ this.name = name;
45
+ /**
46
+ * Maps from conn to set of controlled user ids. Delete all user ids from awareness when this conn is closed
47
+ * @type {Map<Object, Set<number>>}
48
+ */
49
+ this.conns = new Map();
50
+ /**
51
+ * @type {awarenessProtocol.Awareness}
52
+ */
53
+ this.awareness = new awarenessProtocol.Awareness(this);
54
+ this.awareness.setLocalState(null);
55
+ /**
56
+ * @param {{ added: Array<number>, updated: Array<number>, removed: Array<number> }} changes
57
+ * @param {Object | null} conn Origin is the connection that made the change
58
+ */
59
+ const awarenessChangeHandler = ({added, updated, removed}, conn) => {
60
+ const changedClients = added.concat(updated, removed);
61
+ if (conn !== null) {
62
+ const connControlledIDs = /** @type {Set<number>} */ (this.conns.get(conn));
63
+ if (connControlledIDs !== undefined) {
64
+ added.forEach((clientID) => {
65
+ connControlledIDs.add(clientID);
66
+ });
67
+ removed.forEach((clientID) => {
68
+ connControlledIDs.delete(clientID);
69
+ });
70
+ }
71
+ }
72
+ // broadcast awareness update
73
+ const encoder = encoding.createEncoder();
74
+ encoding.writeVarUint(encoder, messageAwareness);
75
+ encoding.writeVarUint8Array(encoder, awarenessProtocol.encodeAwarenessUpdate(this.awareness, changedClients));
76
+ const buff = encoding.toUint8Array(encoder);
77
+ this.conns.forEach((_, c) => {
78
+ send(this, c, buff);
79
+ });
80
+ };
81
+ this.awareness.on('update', awarenessChangeHandler);
82
+ this.on('update', updateHandler);
83
+ // if (isCallbackSet) {
84
+ // this.on('update', debounce(
85
+ // callbackHandler,
86
+ // CALLBACK_DEBOUNCE_WAIT,
87
+ // { maxWait: CALLBACK_DEBOUNCE_MAXWAIT }
88
+ // ))
89
+ // }
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Gets a Y.Doc by name, whether in memory or on disk
95
+ *
96
+ * @param {string} docname - the name of the Y.Doc to find or create
97
+ * @param {boolean} gc - whether to allow gc on the doc (applies only when created)
98
+ * @return {WSSharedDoc}
99
+ */
100
+ const getYDoc = (docname, gc = true) => map.setIfUndefined(docs, docname, () => {
101
+ const doc = new WSSharedDoc(docname);
102
+ doc.gc = gc;
103
+ // if (persistence !== null) {
104
+ // persistence.bindState(docname, doc);
105
+ // }
106
+ docs.set(docname, doc);
107
+ return doc;
108
+ });
109
+
110
+ module.exports.getYDoc = getYDoc;
111
+
112
+ /**
113
+ * @param {any} conn
114
+ * @param {WSSharedDoc} doc
115
+ * @param {Uint8Array} message
116
+ */
117
+ const messageListener = (conn, doc, message) => {
118
+ try {
119
+ const encoder = encoding.createEncoder();
120
+ const decoder = decoding.createDecoder(message);
121
+ const messageType = decoding.readVarUint(decoder);
122
+ switch (messageType) {
123
+ case messageSync:
124
+ encoding.writeVarUint(encoder, messageSync);
125
+ syncProtocol.readSyncMessage(decoder, encoder, doc, conn);
126
+
127
+ // If the `encoder` only contains the type of reply message and no
128
+ // message, there is no need to send the message. When `encoder` only
129
+ // contains the type of reply, its length is 1.
130
+ if (encoding.length(encoder) > 1) {
131
+ send(doc, conn, encoding.toUint8Array(encoder));
132
+ }
133
+ break;
134
+ case messageAwareness: {
135
+ awarenessProtocol.applyAwarenessUpdate(doc.awareness, decoding.readVarUint8Array(decoder), conn);
136
+ break;
137
+ }
138
+ }
139
+ } catch (err) {
140
+ doc.emit('error', [err]);
141
+ }
142
+ };
143
+
144
+ /**
145
+ * @param {WSSharedDoc} doc
146
+ * @param {any} conn
147
+ */
148
+ const closeConn = (doc, conn) => {
149
+ if (doc.conns.has(conn)) {
150
+ /**
151
+ * @type {Set<number>}
152
+ */
153
+ const controlledIds = doc.conns.get(conn);
154
+ doc.conns.delete(conn);
155
+ awarenessProtocol.removeAwarenessStates(doc.awareness, Array.from(controlledIds), null);
156
+ if (doc.conns.size === 0/* && persistence !== null*/) {
157
+ // if persisted, we store state and destroy ydocument
158
+ // persistence.writeState(doc.name, doc).then(() => {
159
+ // doc.destroy();
160
+ // });
161
+ docs.delete(doc.name);
162
+ }
163
+ }
164
+ conn.close();
165
+ };
166
+
167
+ /**
168
+ * @param {WSSharedDoc} doc
169
+ * @param {any} conn
170
+ * @param {Uint8Array} m
171
+ */
172
+ const send = (doc, conn, m) => {
173
+ if (conn.readyState !== wsReadyStateConnecting && conn.readyState !== wsReadyStateOpen) {
174
+ closeConn(doc, conn);
175
+ }
176
+ try {
177
+ conn.send(m, (err) => {
178
+ if (err !== null && err !== undefined) {
179
+ closeConn(doc, conn);
180
+ }
181
+ });
182
+ } catch (e) {
183
+ closeConn(doc, conn);
184
+ }
185
+ };
186
+
187
+ const pingTimeout = 30000;
188
+
189
+ /**
190
+ * @param {any} conn
191
+ * @param {any} req
192
+ * @param {any} opts
193
+ */
194
+ module.exports.setupWSConnection = (conn, req, {docName = req.url.slice(1).split('?')[0], gc = true} = {}) => {
195
+ conn.binaryType = 'arraybuffer';
196
+ // get doc, initialize if it does not exist yet
197
+ const doc = getYDoc(docName, gc);
198
+ doc.conns.set(conn, new Set());
199
+ // listen and reply to events
200
+ conn.on('message', /** @param {ArrayBuffer} message */ message => messageListener(conn, doc, new Uint8Array(message)));
201
+
202
+ // Check if connection is still alive
203
+ let pongReceived = true;
204
+ const pingInterval = setInterval(() => {
205
+ if (!pongReceived) {
206
+ if (doc.conns.has(conn)) {
207
+ closeConn(doc, conn);
208
+ }
209
+ clearInterval(pingInterval);
210
+ } else if (doc.conns.has(conn)) {
211
+ pongReceived = false;
212
+ try {
213
+ conn.ping();
214
+ } catch (e) {
215
+ closeConn(doc, conn);
216
+ clearInterval(pingInterval);
217
+ }
218
+ }
219
+ }, pingTimeout);
220
+ conn.on('close', () => {
221
+ closeConn(doc, conn);
222
+ clearInterval(pingInterval);
223
+ });
224
+ conn.on('pong', () => {
225
+ pongReceived = true;
226
+ });
227
+ // put the following in a variables in a block so the interval handlers don't keep in in
228
+ // scope
229
+ {
230
+ // send sync step 1
231
+ const syncEncoder = encoding.createEncoder();
232
+ encoding.writeVarUint(syncEncoder, messageSync);
233
+ syncProtocol.writeSyncStep1(syncEncoder, doc);
234
+ send(doc, conn, encoding.toUint8Array(syncEncoder));
235
+
236
+ const awarenessStates = doc.awareness.getStates();
237
+ if (awarenessStates.size > 0) {
238
+ const awarenessEncoder = encoding.createEncoder();
239
+ encoding.writeVarUint(awarenessEncoder, messageAwareness);
240
+ encoding.writeVarUint8Array(awarenessEncoder, awarenessProtocol.encodeAwarenessUpdate(doc.awareness, Array.from(awarenessStates.keys())));
241
+ send(doc, conn, encoding.toUint8Array(awarenessEncoder));
242
+ }
243
+ }
244
+ };
@@ -214,6 +214,21 @@ class SettingsBREADService {
214
214
  const {filteredSettings: refilteredSettings, emailsToVerify} = await this.prepSettingsForEmailVerification(filteredSettings, getSetting);
215
215
 
216
216
  const modelArray = await this.SettingsModel.edit(refilteredSettings, options).then((result) => {
217
+ // TODO: temporary fix for starting/stopping lexicalMultiplayer service when labs flag is changed
218
+ // this should be removed along with the flag, or set up in a more generic way
219
+ const labsSetting = result.find(setting => setting.get('key') === 'labs');
220
+ if (labsSetting) {
221
+ const lexicalMultiplayer = require('../lexical-multiplayer');
222
+ const previous = JSON.parse(labsSetting.previousAttributes().value);
223
+ const current = JSON.parse(labsSetting.get('value'));
224
+
225
+ if (!previous.lexicalMultiplayer && current.lexicalMultiplayer) {
226
+ lexicalMultiplayer.enable();
227
+ } else if (previous.lexicalMultiplayer && !current.lexicalMultiplayer) {
228
+ lexicalMultiplayer.disable();
229
+ }
230
+ }
231
+
217
232
  return this._formatBrowse(_.keyBy(_.invokeMap(result, 'toJSON'), 'key'), options.context);
218
233
  });
219
234
 
@@ -42,6 +42,8 @@ module.exports = function apiRoutes() {
42
42
 
43
43
  // ## Pages
44
44
  router.get('/pages', mw.authAdminApi, http(api.pages.browse));
45
+ router.del('/pages', mw.authAdminApi, http(api.pages.bulkDestroy));
46
+ router.put('/pages/bulk', mw.authAdminApi, http(api.pages.bulkEdit));
45
47
  router.post('/pages', mw.authAdminApi, http(api.pages.add));
46
48
  router.get('/pages/:id', mw.authAdminApi, http(api.pages.read));
47
49
  router.get('/pages/slug/:slug', mw.authAdminApi, http(api.pages.read));
@@ -36,6 +36,7 @@ const ALPHA_FEATURES = [
36
36
  'urlCache',
37
37
  'migrateApp',
38
38
  'lexicalEditor',
39
+ 'lexicalMultiplayer',
39
40
  'websockets',
40
41
  'stripeAutomaticTax',
41
42
  'makingItRain'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghost",
3
- "version": "5.43.0",
3
+ "version": "5.44.0",
4
4
  "description": "The professional publishing platform",
5
5
  "author": "Ghost Foundation",
6
6
  "homepage": "https://ghost.org",
@@ -60,97 +60,97 @@
60
60
  "dependencies": {
61
61
  "@sentry/node": "7.11.1",
62
62
  "@tryghost/adapter-base-cache": "0.1.5",
63
- "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.43.0.tgz",
64
- "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.43.0.tgz",
63
+ "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.44.0.tgz",
64
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.44.0.tgz",
65
65
  "@tryghost/admin-api-schema": "4.2.3",
66
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.43.0.tgz",
67
- "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.43.0.tgz",
68
- "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.43.0.tgz",
66
+ "@tryghost/api-framework": "file:components/tryghost-api-framework-5.44.0.tgz",
67
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.44.0.tgz",
68
+ "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.44.0.tgz",
69
69
  "@tryghost/bookshelf-plugins": "0.6.7",
70
- "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.43.0.tgz",
70
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.44.0.tgz",
71
71
  "@tryghost/color-utils": "0.1.24",
72
72
  "@tryghost/config-url-helpers": "1.0.6",
73
- "@tryghost/constants": "file:components/tryghost-constants-5.43.0.tgz",
74
- "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.43.0.tgz",
75
- "@tryghost/data-generator": "file:components/tryghost-data-generator-5.43.0.tgz",
73
+ "@tryghost/constants": "file:components/tryghost-constants-5.44.0.tgz",
74
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.44.0.tgz",
75
+ "@tryghost/data-generator": "file:components/tryghost-data-generator-5.44.0.tgz",
76
76
  "@tryghost/database-info": "0.3.17",
77
77
  "@tryghost/debug": "0.1.24",
78
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.43.0.tgz",
79
- "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.43.0.tgz",
80
- "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.43.0.tgz",
81
- "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.43.0.tgz",
82
- "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.43.0.tgz",
78
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-5.44.0.tgz",
79
+ "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.44.0.tgz",
80
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.44.0.tgz",
81
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.44.0.tgz",
82
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.44.0.tgz",
83
83
  "@tryghost/email-mock-receiver": "0.3.1",
84
- "@tryghost/email-service": "file:components/tryghost-email-service-5.43.0.tgz",
85
- "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.43.0.tgz",
84
+ "@tryghost/email-service": "file:components/tryghost-email-service-5.44.0.tgz",
85
+ "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.44.0.tgz",
86
86
  "@tryghost/errors": "1.2.24",
87
- "@tryghost/event-aware-cache-wrapper": "file:components/tryghost-event-aware-cache-wrapper-5.43.0.tgz",
88
- "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.43.0.tgz",
89
- "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.43.0.tgz",
87
+ "@tryghost/event-aware-cache-wrapper": "file:components/tryghost-event-aware-cache-wrapper-5.44.0.tgz",
88
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.44.0.tgz",
89
+ "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.44.0.tgz",
90
90
  "@tryghost/helpers": "1.1.77",
91
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.43.0.tgz",
91
+ "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.44.0.tgz",
92
92
  "@tryghost/http-cache-utils": "0.1.9",
93
- "@tryghost/i18n": "file:components/tryghost-i18n-5.43.0.tgz",
93
+ "@tryghost/i18n": "file:components/tryghost-i18n-5.44.0.tgz",
94
94
  "@tryghost/image-transform": "1.2.5",
95
- "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.43.0.tgz",
96
- "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.43.0.tgz",
97
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.43.0.tgz",
95
+ "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.44.0.tgz",
96
+ "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.44.0.tgz",
97
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-5.44.0.tgz",
98
98
  "@tryghost/kg-card-factory": "4.0.6",
99
99
  "@tryghost/kg-default-atoms": "4.0.1",
100
100
  "@tryghost/kg-default-cards": "9.0.0",
101
- "@tryghost/kg-default-nodes": "0.0.28",
102
- "@tryghost/kg-lexical-html-renderer": "0.1.24",
101
+ "@tryghost/kg-default-nodes": "0.0.30",
102
+ "@tryghost/kg-lexical-html-renderer": "0.1.26",
103
103
  "@tryghost/kg-mobiledoc-html-renderer": "6.0.6",
104
104
  "@tryghost/limit-service": "1.2.6",
105
- "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.43.0.tgz",
106
- "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.43.0.tgz",
107
- "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.43.0.tgz",
105
+ "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.44.0.tgz",
106
+ "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.44.0.tgz",
107
+ "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.44.0.tgz",
108
108
  "@tryghost/logging": "2.4.4",
109
- "@tryghost/magic-link": "file:components/tryghost-magic-link-5.43.0.tgz",
110
- "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.43.0.tgz",
111
- "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.43.0.tgz",
112
- "@tryghost/member-events": "file:components/tryghost-member-events-5.43.0.tgz",
113
- "@tryghost/members-api": "file:components/tryghost-members-api-5.43.0.tgz",
114
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.43.0.tgz",
115
- "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.43.0.tgz",
116
- "@tryghost/members-importer": "file:components/tryghost-members-importer-5.43.0.tgz",
117
- "@tryghost/members-offers": "file:components/tryghost-members-offers-5.43.0.tgz",
118
- "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.43.0.tgz",
119
- "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.43.0.tgz",
120
- "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.43.0.tgz",
109
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-5.44.0.tgz",
110
+ "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.44.0.tgz",
111
+ "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.44.0.tgz",
112
+ "@tryghost/member-events": "file:components/tryghost-member-events-5.44.0.tgz",
113
+ "@tryghost/members-api": "file:components/tryghost-members-api-5.44.0.tgz",
114
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-5.44.0.tgz",
115
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.44.0.tgz",
116
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-5.44.0.tgz",
117
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-5.44.0.tgz",
118
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.44.0.tgz",
119
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.44.0.tgz",
120
+ "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.44.0.tgz",
121
121
  "@tryghost/metrics": "1.0.24",
122
- "@tryghost/milestones": "file:components/tryghost-milestones-5.43.0.tgz",
123
- "@tryghost/minifier": "file:components/tryghost-minifier-5.43.0.tgz",
124
- "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.43.0.tgz",
125
- "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.43.0.tgz",
126
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.43.0.tgz",
127
- "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.43.0.tgz",
128
- "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.43.0.tgz",
129
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.43.0.tgz",
122
+ "@tryghost/milestones": "file:components/tryghost-milestones-5.44.0.tgz",
123
+ "@tryghost/minifier": "file:components/tryghost-minifier-5.44.0.tgz",
124
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.44.0.tgz",
125
+ "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.44.0.tgz",
126
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.44.0.tgz",
127
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.44.0.tgz",
128
+ "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.44.0.tgz",
129
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.44.0.tgz",
130
130
  "@tryghost/nodemailer": "0.3.35",
131
131
  "@tryghost/nql": "0.11.0",
132
- "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.43.0.tgz",
133
- "@tryghost/package-json": "file:components/tryghost-package-json-5.43.0.tgz",
134
- "@tryghost/posts-service": "file:components/tryghost-posts-service-5.43.0.tgz",
132
+ "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.44.0.tgz",
133
+ "@tryghost/package-json": "file:components/tryghost-package-json-5.44.0.tgz",
134
+ "@tryghost/posts-service": "file:components/tryghost-posts-service-5.44.0.tgz",
135
135
  "@tryghost/pretty-cli": "1.2.36",
136
136
  "@tryghost/promise": "0.3.4",
137
137
  "@tryghost/request": "0.1.39",
138
- "@tryghost/security": "file:components/tryghost-security-5.43.0.tgz",
139
- "@tryghost/session-service": "file:components/tryghost-session-service-5.43.0.tgz",
140
- "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.43.0.tgz",
141
- "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.43.0.tgz",
138
+ "@tryghost/security": "file:components/tryghost-security-5.44.0.tgz",
139
+ "@tryghost/session-service": "file:components/tryghost-session-service-5.44.0.tgz",
140
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.44.0.tgz",
141
+ "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.44.0.tgz",
142
142
  "@tryghost/social-urls": "0.1.36",
143
- "@tryghost/staff-service": "file:components/tryghost-staff-service-5.43.0.tgz",
144
- "@tryghost/stats-service": "file:components/tryghost-stats-service-5.43.0.tgz",
143
+ "@tryghost/staff-service": "file:components/tryghost-staff-service-5.44.0.tgz",
144
+ "@tryghost/stats-service": "file:components/tryghost-stats-service-5.44.0.tgz",
145
145
  "@tryghost/string": "0.2.4",
146
- "@tryghost/tiers": "file:components/tryghost-tiers-5.43.0.tgz",
146
+ "@tryghost/tiers": "file:components/tryghost-tiers-5.44.0.tgz",
147
147
  "@tryghost/tpl": "0.1.24",
148
- "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.43.0.tgz",
148
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.44.0.tgz",
149
149
  "@tryghost/url-utils": "4.4.0",
150
150
  "@tryghost/validator": "0.2.4",
151
- "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.43.0.tgz",
151
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.44.0.tgz",
152
152
  "@tryghost/version": "0.1.22",
153
- "@tryghost/webmentions": "file:components/tryghost-webmentions-5.43.0.tgz",
153
+ "@tryghost/webmentions": "file:components/tryghost-webmentions-5.44.0.tgz",
154
154
  "@tryghost/zip": "1.1.34",
155
155
  "amperize": "0.6.1",
156
156
  "analytics-node": "6.2.0",
@@ -191,6 +191,7 @@
191
191
  "keypair": "1.0.4",
192
192
  "knex": "2.4.2",
193
193
  "knex-migrator": "5.1.3",
194
+ "lib0": "0.2.73",
194
195
  "lodash": "4.17.21",
195
196
  "luxon": "3.2.1",
196
197
  "moment": "2.24.0",
@@ -208,10 +209,13 @@
208
209
  "socket.io": "4.6.1",
209
210
  "stoppable": "1.1.0",
210
211
  "uuid": "9.0.0",
211
- "xml": "1.0.1"
212
+ "ws": "8.13.0",
213
+ "xml": "1.0.1",
214
+ "y-protocols": "1.0.5",
215
+ "yjs": "13.5.50"
212
216
  },
213
217
  "optionalDependencies": {
214
- "@tryghost/html-to-mobiledoc": "2.0.11",
218
+ "@tryghost/html-to-mobiledoc": "2.0.13",
215
219
  "sqlite3": "5.1.6"
216
220
  },
217
221
  "devDependencies": {
@@ -247,72 +251,72 @@
247
251
  "@tryghost/logging": "2.4.4",
248
252
  "moment": "2.24.0",
249
253
  "moment-timezone": "0.5.23",
250
- "@tryghost/adapter-cache-memory-ttl": "file:components/tryghost-adapter-cache-memory-ttl-5.43.0.tgz",
251
- "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.43.0.tgz",
252
- "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.43.0.tgz",
253
- "@tryghost/api-framework": "file:components/tryghost-api-framework-5.43.0.tgz",
254
- "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.43.0.tgz",
255
- "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.43.0.tgz",
256
- "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.43.0.tgz",
257
- "@tryghost/constants": "file:components/tryghost-constants-5.43.0.tgz",
258
- "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.43.0.tgz",
259
- "@tryghost/data-generator": "file:components/tryghost-data-generator-5.43.0.tgz",
260
- "@tryghost/domain-events": "file:components/tryghost-domain-events-5.43.0.tgz",
261
- "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.43.0.tgz",
262
- "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.43.0.tgz",
263
- "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.43.0.tgz",
264
- "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.43.0.tgz",
265
- "@tryghost/email-events": "file:components/tryghost-email-events-5.43.0.tgz",
266
- "@tryghost/email-service": "file:components/tryghost-email-service-5.43.0.tgz",
267
- "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.43.0.tgz",
268
- "@tryghost/event-aware-cache-wrapper": "file:components/tryghost-event-aware-cache-wrapper-5.43.0.tgz",
269
- "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.43.0.tgz",
270
- "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.43.0.tgz",
271
- "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.43.0.tgz",
272
- "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.43.0.tgz",
273
- "@tryghost/i18n": "file:components/tryghost-i18n-5.43.0.tgz",
274
- "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.43.0.tgz",
275
- "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.43.0.tgz",
276
- "@tryghost/job-manager": "file:components/tryghost-job-manager-5.43.0.tgz",
277
- "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.43.0.tgz",
278
- "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.43.0.tgz",
279
- "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.43.0.tgz",
280
- "@tryghost/magic-link": "file:components/tryghost-magic-link-5.43.0.tgz",
281
- "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.43.0.tgz",
282
- "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.43.0.tgz",
283
- "@tryghost/member-events": "file:components/tryghost-member-events-5.43.0.tgz",
284
- "@tryghost/members-api": "file:components/tryghost-members-api-5.43.0.tgz",
285
- "@tryghost/members-csv": "file:components/tryghost-members-csv-5.43.0.tgz",
286
- "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.43.0.tgz",
287
- "@tryghost/members-importer": "file:components/tryghost-members-importer-5.43.0.tgz",
288
- "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.43.0.tgz",
289
- "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.43.0.tgz",
290
- "@tryghost/milestones": "file:components/tryghost-milestones-5.43.0.tgz",
291
- "@tryghost/minifier": "file:components/tryghost-minifier-5.43.0.tgz",
292
- "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.43.0.tgz",
293
- "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.43.0.tgz",
294
- "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.43.0.tgz",
295
- "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.43.0.tgz",
296
- "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.43.0.tgz",
297
- "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.43.0.tgz",
298
- "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.43.0.tgz",
299
- "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.43.0.tgz",
300
- "@tryghost/members-offers": "file:components/tryghost-members-offers-5.43.0.tgz",
301
- "@tryghost/package-json": "file:components/tryghost-package-json-5.43.0.tgz",
302
- "@tryghost/members-payments": "file:components/tryghost-members-payments-5.43.0.tgz",
303
- "@tryghost/posts-service": "file:components/tryghost-posts-service-5.43.0.tgz",
304
- "@tryghost/referrers": "file:components/tryghost-referrers-5.43.0.tgz",
305
- "@tryghost/security": "file:components/tryghost-security-5.43.0.tgz",
306
- "@tryghost/session-service": "file:components/tryghost-session-service-5.43.0.tgz",
307
- "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.43.0.tgz",
308
- "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.43.0.tgz",
309
- "@tryghost/staff-service": "file:components/tryghost-staff-service-5.43.0.tgz",
310
- "@tryghost/stats-service": "file:components/tryghost-stats-service-5.43.0.tgz",
311
- "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.43.0.tgz",
312
- "@tryghost/tiers": "file:components/tryghost-tiers-5.43.0.tgz",
313
- "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.43.0.tgz",
314
- "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.43.0.tgz",
315
- "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.43.0.tgz",
316
- "@tryghost/webmentions": "file:components/tryghost-webmentions-5.43.0.tgz"
254
+ "@tryghost/adapter-cache-memory-ttl": "file:components/tryghost-adapter-cache-memory-ttl-5.44.0.tgz",
255
+ "@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.44.0.tgz",
256
+ "@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.44.0.tgz",
257
+ "@tryghost/api-framework": "file:components/tryghost-api-framework-5.44.0.tgz",
258
+ "@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.44.0.tgz",
259
+ "@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.44.0.tgz",
260
+ "@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.44.0.tgz",
261
+ "@tryghost/constants": "file:components/tryghost-constants-5.44.0.tgz",
262
+ "@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.44.0.tgz",
263
+ "@tryghost/data-generator": "file:components/tryghost-data-generator-5.44.0.tgz",
264
+ "@tryghost/domain-events": "file:components/tryghost-domain-events-5.44.0.tgz",
265
+ "@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.44.0.tgz",
266
+ "@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.44.0.tgz",
267
+ "@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.44.0.tgz",
268
+ "@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.44.0.tgz",
269
+ "@tryghost/email-events": "file:components/tryghost-email-events-5.44.0.tgz",
270
+ "@tryghost/email-service": "file:components/tryghost-email-service-5.44.0.tgz",
271
+ "@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.44.0.tgz",
272
+ "@tryghost/event-aware-cache-wrapper": "file:components/tryghost-event-aware-cache-wrapper-5.44.0.tgz",
273
+ "@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.44.0.tgz",
274
+ "@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.44.0.tgz",
275
+ "@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.44.0.tgz",
276
+ "@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.44.0.tgz",
277
+ "@tryghost/i18n": "file:components/tryghost-i18n-5.44.0.tgz",
278
+ "@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.44.0.tgz",
279
+ "@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.44.0.tgz",
280
+ "@tryghost/job-manager": "file:components/tryghost-job-manager-5.44.0.tgz",
281
+ "@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.44.0.tgz",
282
+ "@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.44.0.tgz",
283
+ "@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.44.0.tgz",
284
+ "@tryghost/magic-link": "file:components/tryghost-magic-link-5.44.0.tgz",
285
+ "@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.44.0.tgz",
286
+ "@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.44.0.tgz",
287
+ "@tryghost/member-events": "file:components/tryghost-member-events-5.44.0.tgz",
288
+ "@tryghost/members-api": "file:components/tryghost-members-api-5.44.0.tgz",
289
+ "@tryghost/members-csv": "file:components/tryghost-members-csv-5.44.0.tgz",
290
+ "@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.44.0.tgz",
291
+ "@tryghost/members-importer": "file:components/tryghost-members-importer-5.44.0.tgz",
292
+ "@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.44.0.tgz",
293
+ "@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.44.0.tgz",
294
+ "@tryghost/milestones": "file:components/tryghost-milestones-5.44.0.tgz",
295
+ "@tryghost/minifier": "file:components/tryghost-minifier-5.44.0.tgz",
296
+ "@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.44.0.tgz",
297
+ "@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.44.0.tgz",
298
+ "@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.44.0.tgz",
299
+ "@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.44.0.tgz",
300
+ "@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.44.0.tgz",
301
+ "@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.44.0.tgz",
302
+ "@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.44.0.tgz",
303
+ "@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.44.0.tgz",
304
+ "@tryghost/members-offers": "file:components/tryghost-members-offers-5.44.0.tgz",
305
+ "@tryghost/package-json": "file:components/tryghost-package-json-5.44.0.tgz",
306
+ "@tryghost/members-payments": "file:components/tryghost-members-payments-5.44.0.tgz",
307
+ "@tryghost/posts-service": "file:components/tryghost-posts-service-5.44.0.tgz",
308
+ "@tryghost/referrers": "file:components/tryghost-referrers-5.44.0.tgz",
309
+ "@tryghost/security": "file:components/tryghost-security-5.44.0.tgz",
310
+ "@tryghost/session-service": "file:components/tryghost-session-service-5.44.0.tgz",
311
+ "@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.44.0.tgz",
312
+ "@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.44.0.tgz",
313
+ "@tryghost/staff-service": "file:components/tryghost-staff-service-5.44.0.tgz",
314
+ "@tryghost/stats-service": "file:components/tryghost-stats-service-5.44.0.tgz",
315
+ "@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.44.0.tgz",
316
+ "@tryghost/tiers": "file:components/tryghost-tiers-5.44.0.tgz",
317
+ "@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.44.0.tgz",
318
+ "@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.44.0.tgz",
319
+ "@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.44.0.tgz",
320
+ "@tryghost/webmentions": "file:components/tryghost-webmentions-5.44.0.tgz"
317
321
  }
318
322
  }