mirror of
https://github.com/strapi/strapi.git
synced 2025-12-12 07:27:46 +00:00
Handle graphql subscriptions
This commit is contained in:
parent
c0c6c2aeab
commit
c1e3c41cbd
@ -30,7 +30,8 @@
|
||||
"koa-compose": "^4.1.0",
|
||||
"lodash": "4.17.21",
|
||||
"nexus": "1.1.0",
|
||||
"pluralize": "^8.0.0"
|
||||
"pluralize": "^8.0.0",
|
||||
"subscriptions-transport-ws": "0.9.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cross-env": "^7.0.3",
|
||||
|
||||
26
packages/plugins/graphql/server/bootstrap.js
vendored
26
packages/plugins/graphql/server/bootstrap.js
vendored
@ -1,6 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
const { isEmpty, mergeWith, isArray } = require('lodash/fp');
|
||||
const { execute, subscribe } = require('graphql');
|
||||
const { SubscriptionServer } = require('subscriptions-transport-ws');
|
||||
const { ApolloServer } = require('apollo-server-koa');
|
||||
const {
|
||||
ApolloServerPluginLandingPageDisabled,
|
||||
@ -30,6 +32,8 @@ module.exports = async ({ strapi }) => {
|
||||
|
||||
const { config } = strapi.plugin('graphql');
|
||||
|
||||
const path = config('endpoint', '/graphql');
|
||||
|
||||
const defaultServerConfig = {
|
||||
// Schema
|
||||
schema,
|
||||
@ -57,12 +61,27 @@ module.exports = async ({ strapi }) => {
|
||||
|
||||
const serverConfig = merge(defaultServerConfig, config('apolloServer', {}));
|
||||
|
||||
// Handle subscriptions
|
||||
if (config('subscriptions', true)) {
|
||||
const subscriptionServer = SubscriptionServer.create(
|
||||
{ schema, execute, subscribe },
|
||||
{ server: strapi.server.httpServer, path }
|
||||
);
|
||||
|
||||
serverConfig.plugins.push({
|
||||
async serverWillStart() {
|
||||
return {
|
||||
async drainServer() {
|
||||
subscriptionServer.close();
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Create a new Apollo server
|
||||
const server = new ApolloServer(serverConfig);
|
||||
|
||||
// Link the Apollo server & the Strapi app
|
||||
const path = config('endpoint', '/graphql');
|
||||
|
||||
// Register the upload middleware
|
||||
useUploadMiddleware(strapi, path);
|
||||
|
||||
@ -73,6 +92,7 @@ module.exports = async ({ strapi }) => {
|
||||
strapi.log.error('Failed to start the Apollo server', e.message);
|
||||
}
|
||||
|
||||
// Link the Apollo server & the Strapi app
|
||||
strapi.server.routes([
|
||||
{
|
||||
method: 'ALL',
|
||||
|
||||
38
yarn.lock
38
yarn.lock
@ -4928,6 +4928,11 @@ babel-preset-jest@^26.6.2:
|
||||
babel-plugin-jest-hoist "^26.6.2"
|
||||
babel-preset-current-node-syntax "^1.0.0"
|
||||
|
||||
backo2@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
|
||||
integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
|
||||
|
||||
bail@^1.0.0:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
|
||||
@ -8115,6 +8120,11 @@ eventemitter2@^5.0.1:
|
||||
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
|
||||
integrity sha1-YZegldX7a1folC9v1+qtY6CclFI=
|
||||
|
||||
eventemitter3@^3.1.0:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
|
||||
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
|
||||
|
||||
eventemitter3@^4.0.0, eventemitter3@^4.0.4:
|
||||
version "4.0.7"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
||||
@ -10847,7 +10857,7 @@ istanbul@~0.4.2:
|
||||
which "^1.1.1"
|
||||
wordwrap "^1.0.0"
|
||||
|
||||
iterall@^1.3.0:
|
||||
iterall@^1.2.1, iterall@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
|
||||
integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
|
||||
@ -17916,6 +17926,17 @@ stylis@^4.0.3:
|
||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.10.tgz#446512d1097197ab3f02fb3c258358c3f7a14240"
|
||||
integrity sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==
|
||||
|
||||
subscriptions-transport-ws@0.9.19:
|
||||
version "0.9.19"
|
||||
resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz#10ca32f7e291d5ee8eb728b9c02e43c52606cdcf"
|
||||
integrity sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==
|
||||
dependencies:
|
||||
backo2 "^1.0.2"
|
||||
eventemitter3 "^3.1.0"
|
||||
iterall "^1.2.1"
|
||||
symbol-observable "^1.0.4"
|
||||
ws "^5.2.0 || ^6.0.0 || ^7.0.0"
|
||||
|
||||
sugarss@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
|
||||
@ -18038,6 +18059,11 @@ swap-case@^1.1.0:
|
||||
lower-case "^1.1.1"
|
||||
upper-case "^1.1.1"
|
||||
|
||||
symbol-observable@^1.0.4:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
|
||||
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
|
||||
|
||||
symbol-tree@^3.2.4:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
|
||||
@ -19460,6 +19486,11 @@ write-pkg@^4.0.0:
|
||||
type-fest "^0.4.1"
|
||||
write-json-file "^3.2.0"
|
||||
|
||||
"ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.4.6:
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
|
||||
integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
|
||||
|
||||
ws@^6.2.1:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
|
||||
@ -19472,11 +19503,6 @@ ws@^7.3.1:
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74"
|
||||
integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==
|
||||
|
||||
ws@^7.4.6:
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
|
||||
integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
|
||||
|
||||
xdg-basedir@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user