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.
- package/components/tryghost-adapter-cache-memory-ttl-5.44.0.tgz +0 -0
- package/components/{tryghost-adapter-cache-redis-5.43.0.tgz → tryghost-adapter-cache-redis-5.44.0.tgz} +0 -0
- package/components/{tryghost-adapter-manager-5.43.0.tgz → tryghost-adapter-manager-5.44.0.tgz} +0 -0
- package/components/{tryghost-api-framework-5.43.0.tgz → tryghost-api-framework-5.44.0.tgz} +0 -0
- package/components/{tryghost-api-version-compatibility-service-5.43.0.tgz → tryghost-api-version-compatibility-service-5.44.0.tgz} +0 -0
- package/components/tryghost-audience-feedback-5.44.0.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.44.0.tgz +0 -0
- package/components/tryghost-constants-5.44.0.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.44.0.tgz +0 -0
- package/components/{tryghost-data-generator-5.43.0.tgz → tryghost-data-generator-5.44.0.tgz} +0 -0
- package/components/tryghost-domain-events-5.44.0.tgz +0 -0
- package/components/{tryghost-dynamic-routing-events-5.43.0.tgz → tryghost-dynamic-routing-events-5.44.0.tgz} +0 -0
- package/components/{tryghost-email-analytics-provider-mailgun-5.43.0.tgz → tryghost-email-analytics-provider-mailgun-5.44.0.tgz} +0 -0
- package/components/{tryghost-email-analytics-service-5.43.0.tgz → tryghost-email-analytics-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-email-content-generator-5.43.0.tgz → tryghost-email-content-generator-5.44.0.tgz} +0 -0
- package/components/tryghost-email-events-5.44.0.tgz +0 -0
- package/components/{tryghost-email-service-5.43.0.tgz → tryghost-email-service-5.44.0.tgz} +0 -0
- package/components/tryghost-email-suppression-list-5.44.0.tgz +0 -0
- package/components/{tryghost-event-aware-cache-wrapper-5.43.0.tgz → tryghost-event-aware-cache-wrapper-5.44.0.tgz} +0 -0
- package/components/tryghost-express-dynamic-redirects-5.44.0.tgz +0 -0
- package/components/{tryghost-external-media-inliner-5.43.0.tgz → tryghost-external-media-inliner-5.44.0.tgz} +0 -0
- package/components/tryghost-extract-api-key-5.44.0.tgz +0 -0
- package/components/tryghost-html-to-plaintext-5.44.0.tgz +0 -0
- package/components/tryghost-i18n-5.44.0.tgz +0 -0
- package/components/{tryghost-importer-handler-content-files-5.43.0.tgz → tryghost-importer-handler-content-files-5.44.0.tgz} +0 -0
- package/components/{tryghost-importer-revue-5.43.0.tgz → tryghost-importer-revue-5.44.0.tgz} +0 -0
- package/components/{tryghost-job-manager-5.43.0.tgz → tryghost-job-manager-5.44.0.tgz} +0 -0
- package/components/{tryghost-link-redirects-5.43.0.tgz → tryghost-link-redirects-5.44.0.tgz} +0 -0
- package/components/{tryghost-link-replacer-5.43.0.tgz → tryghost-link-replacer-5.44.0.tgz} +0 -0
- package/components/{tryghost-link-tracking-5.43.0.tgz → tryghost-link-tracking-5.44.0.tgz} +0 -0
- package/components/tryghost-magic-link-5.44.0.tgz +0 -0
- package/components/tryghost-mailgun-client-5.44.0.tgz +0 -0
- package/components/{tryghost-member-attribution-5.43.0.tgz → tryghost-member-attribution-5.44.0.tgz} +0 -0
- package/components/tryghost-member-events-5.44.0.tgz +0 -0
- package/components/{tryghost-members-api-5.43.0.tgz → tryghost-members-api-5.44.0.tgz} +0 -0
- package/components/tryghost-members-csv-5.44.0.tgz +0 -0
- package/components/{tryghost-members-events-service-5.43.0.tgz → tryghost-members-events-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-members-importer-5.43.0.tgz → tryghost-members-importer-5.44.0.tgz} +0 -0
- package/components/{tryghost-members-offers-5.43.0.tgz → tryghost-members-offers-5.44.0.tgz} +0 -0
- package/components/{tryghost-members-payments-5.43.0.tgz → tryghost-members-payments-5.44.0.tgz} +0 -0
- package/components/tryghost-members-ssr-5.44.0.tgz +0 -0
- package/components/{tryghost-members-stripe-service-5.43.0.tgz → tryghost-members-stripe-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-mentions-email-report-5.43.0.tgz → tryghost-mentions-email-report-5.44.0.tgz} +0 -0
- package/components/{tryghost-milestones-5.43.0.tgz → tryghost-milestones-5.44.0.tgz} +0 -0
- package/components/{tryghost-minifier-5.43.0.tgz → tryghost-minifier-5.44.0.tgz} +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.44.0.tgz +0 -0
- package/components/{tryghost-mw-cache-control-5.43.0.tgz → tryghost-mw-cache-control-5.44.0.tgz} +0 -0
- package/components/{tryghost-mw-error-handler-5.43.0.tgz → tryghost-mw-error-handler-5.44.0.tgz} +0 -0
- package/components/{tryghost-mw-session-from-token-5.43.0.tgz → tryghost-mw-session-from-token-5.44.0.tgz} +0 -0
- package/components/{tryghost-mw-update-user-last-seen-5.43.0.tgz → tryghost-mw-update-user-last-seen-5.44.0.tgz} +0 -0
- package/components/tryghost-mw-version-match-5.44.0.tgz +0 -0
- package/components/tryghost-mw-vhost-5.44.0.tgz +0 -0
- package/components/tryghost-oembed-service-5.44.0.tgz +0 -0
- package/components/{tryghost-package-json-5.43.0.tgz → tryghost-package-json-5.44.0.tgz} +0 -0
- package/components/tryghost-posts-service-5.44.0.tgz +0 -0
- package/components/tryghost-referrers-5.44.0.tgz +0 -0
- package/components/{tryghost-security-5.43.0.tgz → tryghost-security-5.44.0.tgz} +0 -0
- package/components/{tryghost-session-service-5.43.0.tgz → tryghost-session-service-5.44.0.tgz} +0 -0
- package/components/tryghost-settings-path-manager-5.44.0.tgz +0 -0
- package/components/{tryghost-slack-notifications-5.43.0.tgz → tryghost-slack-notifications-5.44.0.tgz} +0 -0
- package/components/{tryghost-staff-service-5.43.0.tgz → tryghost-staff-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-stats-service-5.43.0.tgz → tryghost-stats-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-tiers-5.43.0.tgz → tryghost-tiers-5.44.0.tgz} +0 -0
- package/components/{tryghost-update-check-service-5.43.0.tgz → tryghost-update-check-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-verification-trigger-5.43.0.tgz → tryghost-verification-trigger-5.44.0.tgz} +0 -0
- package/components/{tryghost-version-notifications-data-service-5.43.0.tgz → tryghost-version-notifications-data-service-5.44.0.tgz} +0 -0
- package/components/{tryghost-webmentions-5.43.0.tgz → tryghost-webmentions-5.44.0.tgz} +0 -0
- package/core/boot.js +4 -0
- package/core/built/admin/assets/{chunk.234.b9c875c2897cfa768789.js → chunk.142.4b3c5e7ebee5433ac17e.js} +3179 -2665
- package/core/built/admin/assets/{chunk.234.b9c875c2897cfa768789.js.LICENSE.txt → chunk.142.4b3c5e7ebee5433ac17e.js.LICENSE.txt} +6 -0
- package/core/built/admin/assets/chunk.143.866856df015466a9d44c.js +35 -0
- package/core/built/admin/assets/{chunk.178.34b3da4d314e03aecc4f.js → chunk.178.8cd491189357ddcb427c.js} +4 -4
- package/core/built/admin/assets/{ghost-0fff0a0f3ed3022b69003f7766050cb4.js → ghost-1ce41f5b414ff115ff8167924199e7ba.js} +307 -240
- package/core/built/admin/assets/ghost-65a4349f579bcb6dcc5a0f0d7774f19a.css +1 -0
- package/core/built/admin/assets/ghost-dark-18bd18413fbf8e8b2f0ac21b32deb6ce.css +1 -0
- package/core/built/admin/assets/{vendor-da13470386c6ee05178d49830c64d7ab.js → vendor-f7817f9d354338ee94d5561277ea8056.js} +30 -26
- package/core/built/admin/index.html +6 -6
- package/core/server/api/endpoints/pages.js +50 -0
- package/core/server/api/endpoints/posts.js +7 -4
- package/core/server/api/endpoints/settings.js +1 -1
- package/core/server/api/endpoints/utils/serializers/input/pages.js +8 -0
- package/core/server/api/endpoints/utils/serializers/output/pages.js +20 -0
- package/core/server/data/migrations/versions/5.44/2023-04-14-04-17-add-snippets-lexical-column.js +8 -0
- package/core/server/data/schema/schema.js +1 -0
- package/core/server/services/lexical-multiplayer/index.js +1 -0
- package/core/server/services/lexical-multiplayer/service.js +141 -0
- package/core/server/services/lexical-multiplayer/y-websocket.js +244 -0
- package/core/server/services/settings/settings-bread-service.js +15 -0
- package/core/server/web/api/endpoints/admin/routes.js +2 -0
- package/core/shared/labs.js +1 -0
- package/package.json +136 -132
- package/yarn.lock +59 -33
- package/components/tryghost-adapter-cache-memory-ttl-5.43.0.tgz +0 -0
- package/components/tryghost-audience-feedback-5.43.0.tgz +0 -0
- package/components/tryghost-bootstrap-socket-5.43.0.tgz +0 -0
- package/components/tryghost-constants-5.43.0.tgz +0 -0
- package/components/tryghost-custom-theme-settings-service-5.43.0.tgz +0 -0
- package/components/tryghost-domain-events-5.43.0.tgz +0 -0
- package/components/tryghost-email-events-5.43.0.tgz +0 -0
- package/components/tryghost-email-suppression-list-5.43.0.tgz +0 -0
- package/components/tryghost-express-dynamic-redirects-5.43.0.tgz +0 -0
- package/components/tryghost-extract-api-key-5.43.0.tgz +0 -0
- package/components/tryghost-html-to-plaintext-5.43.0.tgz +0 -0
- package/components/tryghost-i18n-5.43.0.tgz +0 -0
- package/components/tryghost-magic-link-5.43.0.tgz +0 -0
- package/components/tryghost-mailgun-client-5.43.0.tgz +0 -0
- package/components/tryghost-member-events-5.43.0.tgz +0 -0
- package/components/tryghost-members-csv-5.43.0.tgz +0 -0
- package/components/tryghost-members-ssr-5.43.0.tgz +0 -0
- package/components/tryghost-mw-api-version-mismatch-5.43.0.tgz +0 -0
- package/components/tryghost-mw-version-match-5.43.0.tgz +0 -0
- package/components/tryghost-mw-vhost-5.43.0.tgz +0 -0
- package/components/tryghost-oembed-service-5.43.0.tgz +0 -0
- package/components/tryghost-posts-service-5.43.0.tgz +0 -0
- package/components/tryghost-referrers-5.43.0.tgz +0 -0
- package/components/tryghost-settings-path-manager-5.43.0.tgz +0 -0
- package/core/built/admin/assets/chunk.143.726fc7d5add7caf3e2e7.js +0 -35
- package/core/built/admin/assets/ghost-b84e41170d69676f9f8a688c76906a6d.css +0 -1
- 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));
|
package/core/shared/labs.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ghost",
|
|
3
|
-
"version": "5.
|
|
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.
|
|
64
|
-
"@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.
|
|
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.
|
|
67
|
-
"@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.
|
|
68
|
-
"@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.
|
|
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.
|
|
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.
|
|
74
|
-
"@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.
|
|
75
|
-
"@tryghost/data-generator": "file:components/tryghost-data-generator-5.
|
|
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.
|
|
79
|
-
"@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.
|
|
80
|
-
"@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.
|
|
81
|
-
"@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.
|
|
82
|
-
"@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.
|
|
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.
|
|
85
|
-
"@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.
|
|
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.
|
|
88
|
-
"@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.
|
|
89
|
-
"@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.
|
|
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.
|
|
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.
|
|
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.
|
|
96
|
-
"@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.
|
|
97
|
-
"@tryghost/job-manager": "file:components/tryghost-job-manager-5.
|
|
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.
|
|
102
|
-
"@tryghost/kg-lexical-html-renderer": "0.1.
|
|
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.
|
|
106
|
-
"@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.
|
|
107
|
-
"@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.
|
|
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.
|
|
110
|
-
"@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.
|
|
111
|
-
"@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.
|
|
112
|
-
"@tryghost/member-events": "file:components/tryghost-member-events-5.
|
|
113
|
-
"@tryghost/members-api": "file:components/tryghost-members-api-5.
|
|
114
|
-
"@tryghost/members-csv": "file:components/tryghost-members-csv-5.
|
|
115
|
-
"@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.
|
|
116
|
-
"@tryghost/members-importer": "file:components/tryghost-members-importer-5.
|
|
117
|
-
"@tryghost/members-offers": "file:components/tryghost-members-offers-5.
|
|
118
|
-
"@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.
|
|
119
|
-
"@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.
|
|
120
|
-
"@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.
|
|
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.
|
|
123
|
-
"@tryghost/minifier": "file:components/tryghost-minifier-5.
|
|
124
|
-
"@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.
|
|
125
|
-
"@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.
|
|
126
|
-
"@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.
|
|
127
|
-
"@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.
|
|
128
|
-
"@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.
|
|
129
|
-
"@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.
|
|
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.
|
|
133
|
-
"@tryghost/package-json": "file:components/tryghost-package-json-5.
|
|
134
|
-
"@tryghost/posts-service": "file:components/tryghost-posts-service-5.
|
|
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.
|
|
139
|
-
"@tryghost/session-service": "file:components/tryghost-session-service-5.
|
|
140
|
-
"@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.
|
|
141
|
-
"@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.
|
|
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.
|
|
144
|
-
"@tryghost/stats-service": "file:components/tryghost-stats-service-5.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
"
|
|
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.
|
|
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.
|
|
251
|
-
"@tryghost/adapter-cache-redis": "file:components/tryghost-adapter-cache-redis-5.
|
|
252
|
-
"@tryghost/adapter-manager": "file:components/tryghost-adapter-manager-5.
|
|
253
|
-
"@tryghost/api-framework": "file:components/tryghost-api-framework-5.
|
|
254
|
-
"@tryghost/api-version-compatibility-service": "file:components/tryghost-api-version-compatibility-service-5.
|
|
255
|
-
"@tryghost/audience-feedback": "file:components/tryghost-audience-feedback-5.
|
|
256
|
-
"@tryghost/bootstrap-socket": "file:components/tryghost-bootstrap-socket-5.
|
|
257
|
-
"@tryghost/constants": "file:components/tryghost-constants-5.
|
|
258
|
-
"@tryghost/custom-theme-settings-service": "file:components/tryghost-custom-theme-settings-service-5.
|
|
259
|
-
"@tryghost/data-generator": "file:components/tryghost-data-generator-5.
|
|
260
|
-
"@tryghost/domain-events": "file:components/tryghost-domain-events-5.
|
|
261
|
-
"@tryghost/dynamic-routing-events": "file:components/tryghost-dynamic-routing-events-5.
|
|
262
|
-
"@tryghost/email-analytics-provider-mailgun": "file:components/tryghost-email-analytics-provider-mailgun-5.
|
|
263
|
-
"@tryghost/email-analytics-service": "file:components/tryghost-email-analytics-service-5.
|
|
264
|
-
"@tryghost/email-content-generator": "file:components/tryghost-email-content-generator-5.
|
|
265
|
-
"@tryghost/email-events": "file:components/tryghost-email-events-5.
|
|
266
|
-
"@tryghost/email-service": "file:components/tryghost-email-service-5.
|
|
267
|
-
"@tryghost/email-suppression-list": "file:components/tryghost-email-suppression-list-5.
|
|
268
|
-
"@tryghost/event-aware-cache-wrapper": "file:components/tryghost-event-aware-cache-wrapper-5.
|
|
269
|
-
"@tryghost/express-dynamic-redirects": "file:components/tryghost-express-dynamic-redirects-5.
|
|
270
|
-
"@tryghost/external-media-inliner": "file:components/tryghost-external-media-inliner-5.
|
|
271
|
-
"@tryghost/extract-api-key": "file:components/tryghost-extract-api-key-5.
|
|
272
|
-
"@tryghost/html-to-plaintext": "file:components/tryghost-html-to-plaintext-5.
|
|
273
|
-
"@tryghost/i18n": "file:components/tryghost-i18n-5.
|
|
274
|
-
"@tryghost/importer-handler-content-files": "file:components/tryghost-importer-handler-content-files-5.
|
|
275
|
-
"@tryghost/importer-revue": "file:components/tryghost-importer-revue-5.
|
|
276
|
-
"@tryghost/job-manager": "file:components/tryghost-job-manager-5.
|
|
277
|
-
"@tryghost/link-redirects": "file:components/tryghost-link-redirects-5.
|
|
278
|
-
"@tryghost/link-replacer": "file:components/tryghost-link-replacer-5.
|
|
279
|
-
"@tryghost/link-tracking": "file:components/tryghost-link-tracking-5.
|
|
280
|
-
"@tryghost/magic-link": "file:components/tryghost-magic-link-5.
|
|
281
|
-
"@tryghost/mailgun-client": "file:components/tryghost-mailgun-client-5.
|
|
282
|
-
"@tryghost/member-attribution": "file:components/tryghost-member-attribution-5.
|
|
283
|
-
"@tryghost/member-events": "file:components/tryghost-member-events-5.
|
|
284
|
-
"@tryghost/members-api": "file:components/tryghost-members-api-5.
|
|
285
|
-
"@tryghost/members-csv": "file:components/tryghost-members-csv-5.
|
|
286
|
-
"@tryghost/members-events-service": "file:components/tryghost-members-events-service-5.
|
|
287
|
-
"@tryghost/members-importer": "file:components/tryghost-members-importer-5.
|
|
288
|
-
"@tryghost/members-ssr": "file:components/tryghost-members-ssr-5.
|
|
289
|
-
"@tryghost/mentions-email-report": "file:components/tryghost-mentions-email-report-5.
|
|
290
|
-
"@tryghost/milestones": "file:components/tryghost-milestones-5.
|
|
291
|
-
"@tryghost/minifier": "file:components/tryghost-minifier-5.
|
|
292
|
-
"@tryghost/mw-api-version-mismatch": "file:components/tryghost-mw-api-version-mismatch-5.
|
|
293
|
-
"@tryghost/mw-cache-control": "file:components/tryghost-mw-cache-control-5.
|
|
294
|
-
"@tryghost/mw-error-handler": "file:components/tryghost-mw-error-handler-5.
|
|
295
|
-
"@tryghost/mw-session-from-token": "file:components/tryghost-mw-session-from-token-5.
|
|
296
|
-
"@tryghost/mw-update-user-last-seen": "file:components/tryghost-mw-update-user-last-seen-5.
|
|
297
|
-
"@tryghost/mw-version-match": "file:components/tryghost-mw-version-match-5.
|
|
298
|
-
"@tryghost/mw-vhost": "file:components/tryghost-mw-vhost-5.
|
|
299
|
-
"@tryghost/oembed-service": "file:components/tryghost-oembed-service-5.
|
|
300
|
-
"@tryghost/members-offers": "file:components/tryghost-members-offers-5.
|
|
301
|
-
"@tryghost/package-json": "file:components/tryghost-package-json-5.
|
|
302
|
-
"@tryghost/members-payments": "file:components/tryghost-members-payments-5.
|
|
303
|
-
"@tryghost/posts-service": "file:components/tryghost-posts-service-5.
|
|
304
|
-
"@tryghost/referrers": "file:components/tryghost-referrers-5.
|
|
305
|
-
"@tryghost/security": "file:components/tryghost-security-5.
|
|
306
|
-
"@tryghost/session-service": "file:components/tryghost-session-service-5.
|
|
307
|
-
"@tryghost/settings-path-manager": "file:components/tryghost-settings-path-manager-5.
|
|
308
|
-
"@tryghost/slack-notifications": "file:components/tryghost-slack-notifications-5.
|
|
309
|
-
"@tryghost/staff-service": "file:components/tryghost-staff-service-5.
|
|
310
|
-
"@tryghost/stats-service": "file:components/tryghost-stats-service-5.
|
|
311
|
-
"@tryghost/members-stripe-service": "file:components/tryghost-members-stripe-service-5.
|
|
312
|
-
"@tryghost/tiers": "file:components/tryghost-tiers-5.
|
|
313
|
-
"@tryghost/update-check-service": "file:components/tryghost-update-check-service-5.
|
|
314
|
-
"@tryghost/verification-trigger": "file:components/tryghost-verification-trigger-5.
|
|
315
|
-
"@tryghost/version-notifications-data-service": "file:components/tryghost-version-notifications-data-service-5.
|
|
316
|
-
"@tryghost/webmentions": "file:components/tryghost-webmentions-5.
|
|
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
|
}
|