postgraphile 4.12.11 → 5.0.0-0.3
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/CHANGELOG.md +46 -0
- package/LICENSE.md +15 -20
- package/README.md +20 -171
- package/dist/cli-run.d.ts +3 -0
- package/dist/cli-run.d.ts.map +1 -0
- package/dist/cli-run.js +7 -0
- package/dist/cli-run.js.map +1 -0
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +180 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/PgV4BehaviorPlugin.d.ts +11 -0
- package/dist/plugins/PgV4BehaviorPlugin.d.ts.map +1 -0
- package/dist/plugins/PgV4BehaviorPlugin.js +73 -0
- package/dist/plugins/PgV4BehaviorPlugin.js.map +1 -0
- package/dist/plugins/PgV4InflectionPlugin.d.ts +11 -0
- package/dist/plugins/PgV4InflectionPlugin.d.ts.map +1 -0
- package/dist/plugins/PgV4InflectionPlugin.js +91 -0
- package/dist/plugins/PgV4InflectionPlugin.js.map +1 -0
- package/dist/plugins/PgV4NoIgnoreIndexes.d.ts +2 -0
- package/dist/plugins/PgV4NoIgnoreIndexes.d.ts.map +1 -0
- package/dist/plugins/PgV4NoIgnoreIndexes.js +72 -0
- package/dist/plugins/PgV4NoIgnoreIndexes.js.map +1 -0
- package/dist/plugins/PgV4SmartTagsPlugin.d.ts +11 -0
- package/dist/plugins/PgV4SmartTagsPlugin.d.ts.map +1 -0
- package/dist/plugins/PgV4SmartTagsPlugin.js +190 -0
- package/dist/plugins/PgV4SmartTagsPlugin.js.map +1 -0
- package/dist/presets/amber.d.ts +5 -0
- package/dist/presets/amber.d.ts.map +1 -0
- package/dist/presets/amber.js +38 -0
- package/dist/presets/amber.js.map +1 -0
- package/dist/presets/v4.d.ts +34 -0
- package/dist/presets/v4.d.ts.map +1 -0
- package/dist/presets/v4.js +142 -0
- package/dist/presets/v4.js.map +1 -0
- package/dist/schema.d.ts +34 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +82 -0
- package/dist/schema.js.map +1 -0
- package/package.json +77 -154
- package/build/assets/favicon.ico.d.ts +0 -3
- package/build/assets/favicon.ico.js +0 -6
- package/build/assets/graphiql.html.d.ts +0 -2
- package/build/assets/graphiql.html.js +0 -6
- package/build/index.d.ts +0 -8
- package/build/index.js +0 -34
- package/build/interfaces.d.ts +0 -162
- package/build/interfaces.js +0 -3
- package/build/plugins.d.ts +0 -3
- package/build/plugins.js +0 -53
- package/build/postgraphile/cli.d.ts +0 -3
- package/build/postgraphile/cli.js +0 -541
- package/build/postgraphile/extendedFormatError.d.ts +0 -9
- package/build/postgraphile/extendedFormatError.js +0 -51
- package/build/postgraphile/http/createPostGraphileHttpRequestHandler.d.ts +0 -11
- package/build/postgraphile/http/createPostGraphileHttpRequestHandler.js +0 -974
- package/build/postgraphile/http/frameworks.d.ts +0 -110
- package/build/postgraphile/http/frameworks.js +0 -258
- package/build/postgraphile/http/liveSubscribe.d.ts +0 -22
- package/build/postgraphile/http/liveSubscribe.js +0 -89
- package/build/postgraphile/http/mapAsyncIterator.d.ts +0 -15
- package/build/postgraphile/http/mapAsyncIterator.js +0 -71
- package/build/postgraphile/http/setupServerSentEvents.d.ts +0 -9
- package/build/postgraphile/http/setupServerSentEvents.js +0 -51
- package/build/postgraphile/http/subscriptions.d.ts +0 -7
- package/build/postgraphile/http/subscriptions.js +0 -410
- package/build/postgraphile/index.d.ts +0 -5
- package/build/postgraphile/index.js +0 -14
- package/build/postgraphile/pluginHook.d.ts +0 -104
- package/build/postgraphile/pluginHook.js +0 -100
- package/build/postgraphile/postgraphile.d.ts +0 -20
- package/build/postgraphile/postgraphile.js +0 -332
- package/build/postgraphile/postgraphilerc.d.ts +0 -2
- package/build/postgraphile/postgraphilerc.js +0 -16
- package/build/postgraphile/schema/exportPostGraphileSchema.d.ts +0 -6
- package/build/postgraphile/schema/exportPostGraphileSchema.js +0 -45
- package/build/postgraphile/shutdownActions.d.ts +0 -41
- package/build/postgraphile/shutdownActions.js +0 -87
- package/build/postgraphile/withPostGraphileContext.d.ts +0 -55
- package/build/postgraphile/withPostGraphileContext.js +0 -457
- package/build/postgres/inventory/pgClientFromContext.d.ts +0 -8
- package/build/postgres/inventory/pgClientFromContext.js +0 -21
- package/build-turbo/assets/favicon.ico.d.ts +0 -3
- package/build-turbo/assets/favicon.ico.js +0 -6
- package/build-turbo/assets/graphiql.html.d.ts +0 -2
- package/build-turbo/assets/graphiql.html.js +0 -6
- package/build-turbo/index.d.ts +0 -8
- package/build-turbo/index.js +0 -34
- package/build-turbo/interfaces.d.ts +0 -162
- package/build-turbo/interfaces.js +0 -3
- package/build-turbo/plugins.d.ts +0 -3
- package/build-turbo/plugins.js +0 -53
- package/build-turbo/postgraphile/cli.d.ts +0 -3
- package/build-turbo/postgraphile/cli.js +0 -572
- package/build-turbo/postgraphile/extendedFormatError.d.ts +0 -9
- package/build-turbo/postgraphile/extendedFormatError.js +0 -61
- package/build-turbo/postgraphile/http/createPostGraphileHttpRequestHandler.d.ts +0 -11
- package/build-turbo/postgraphile/http/createPostGraphileHttpRequestHandler.js +0 -982
- package/build-turbo/postgraphile/http/frameworks.d.ts +0 -110
- package/build-turbo/postgraphile/http/frameworks.js +0 -258
- package/build-turbo/postgraphile/http/liveSubscribe.d.ts +0 -22
- package/build-turbo/postgraphile/http/liveSubscribe.js +0 -89
- package/build-turbo/postgraphile/http/mapAsyncIterator.d.ts +0 -15
- package/build-turbo/postgraphile/http/mapAsyncIterator.js +0 -71
- package/build-turbo/postgraphile/http/setupServerSentEvents.d.ts +0 -9
- package/build-turbo/postgraphile/http/setupServerSentEvents.js +0 -51
- package/build-turbo/postgraphile/http/subscriptions.d.ts +0 -7
- package/build-turbo/postgraphile/http/subscriptions.js +0 -409
- package/build-turbo/postgraphile/index.d.ts +0 -5
- package/build-turbo/postgraphile/index.js +0 -14
- package/build-turbo/postgraphile/pluginHook.d.ts +0 -104
- package/build-turbo/postgraphile/pluginHook.js +0 -100
- package/build-turbo/postgraphile/postgraphile.d.ts +0 -20
- package/build-turbo/postgraphile/postgraphile.js +0 -337
- package/build-turbo/postgraphile/postgraphilerc.d.ts +0 -2
- package/build-turbo/postgraphile/postgraphilerc.js +0 -16
- package/build-turbo/postgraphile/schema/exportPostGraphileSchema.d.ts +0 -6
- package/build-turbo/postgraphile/schema/exportPostGraphileSchema.js +0 -45
- package/build-turbo/postgraphile/shutdownActions.d.ts +0 -41
- package/build-turbo/postgraphile/shutdownActions.js +0 -87
- package/build-turbo/postgraphile/withPostGraphileContext.d.ts +0 -55
- package/build-turbo/postgraphile/withPostGraphileContext.js +0 -466
- package/build-turbo/postgres/inventory/pgClientFromContext.d.ts +0 -8
- package/build-turbo/postgres/inventory/pgClientFromContext.js +0 -21
- package/cli.js +0 -6
- package/index.js +0 -5
- package/isTurbo.js +0 -11
- package/plugins.d.ts +0 -1
- package/plugins.js +0 -5
- package/sponsors.json +0 -150
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.enhanceHttpServerWithWebSockets = void 0;
|
|
4
|
-
const http_1 = require("http");
|
|
5
|
-
const graphql_1 = require("graphql");
|
|
6
|
-
const WebSocket = require("ws");
|
|
7
|
-
const subscriptions_transport_ws_1 = require("subscriptions-transport-ws");
|
|
8
|
-
const graphql_ws_1 = require("graphql-ws");
|
|
9
|
-
const ws_1 = require("graphql-ws/lib/use/ws");
|
|
10
|
-
const parseUrl = require("parseurl");
|
|
11
|
-
const pluginHook_1 = require("../pluginHook");
|
|
12
|
-
const createPostGraphileHttpRequestHandler_1 = require("./createPostGraphileHttpRequestHandler");
|
|
13
|
-
const liveSubscribe_1 = require("./liveSubscribe");
|
|
14
|
-
function lowerCaseKeys(obj) {
|
|
15
|
-
return Object.keys(obj).reduce((memo, key) => {
|
|
16
|
-
memo[key.toLowerCase()] = obj[key];
|
|
17
|
-
return memo;
|
|
18
|
-
}, {});
|
|
19
|
-
}
|
|
20
|
-
function deferred() {
|
|
21
|
-
let resolve;
|
|
22
|
-
let reject;
|
|
23
|
-
const promise = new Promise((_resolve, _reject) => {
|
|
24
|
-
resolve = _resolve;
|
|
25
|
-
reject = _reject;
|
|
26
|
-
});
|
|
27
|
-
// tslint:disable-next-line prefer-object-spread
|
|
28
|
-
return Object.assign(promise, {
|
|
29
|
-
// @ts-ignore This isn't used before being defined.
|
|
30
|
-
resolve,
|
|
31
|
-
// @ts-ignore This isn't used before being defined.
|
|
32
|
-
reject,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
async function enhanceHttpServerWithWebSockets(websocketServer, postgraphileMiddleware, subscriptionServerOptions) {
|
|
36
|
-
if (websocketServer['__postgraphileSubscriptionsEnabled']) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
websocketServer['__postgraphileSubscriptionsEnabled'] = true;
|
|
40
|
-
const { options, getGraphQLSchema, withPostGraphileContextFromReqRes, handleErrors, } = postgraphileMiddleware;
|
|
41
|
-
const pluginHook = pluginHook_1.pluginHookFromOptions(options);
|
|
42
|
-
const liveSubscribe = liveSubscribe_1.makeLiveSubscribe({ pluginHook, options });
|
|
43
|
-
const graphqlRoute = (subscriptionServerOptions && subscriptionServerOptions.graphqlRoute) ||
|
|
44
|
-
(options.externalUrlBase || '') + (options.graphqlRoute || '/graphql');
|
|
45
|
-
const { subscriptions, live, websockets = subscriptions || live ? ['v0', 'v1'] : [] } = options;
|
|
46
|
-
// enhance with WebSockets shouldnt be called if there are no websocket versions
|
|
47
|
-
if (!websockets?.length) {
|
|
48
|
-
throw new Error(`Invalid value for \`websockets\` option: '${JSON.stringify(websockets)}'`);
|
|
49
|
-
}
|
|
50
|
-
const schema = await getGraphQLSchema();
|
|
51
|
-
const keepalivePromisesByContextKey = {};
|
|
52
|
-
// IMPORTANT: if you change this, be sure to change `releaseAllContextsForSocket` too
|
|
53
|
-
const contextKey = (ws, opId) => ws['postgraphileId'] + '|' + opId;
|
|
54
|
-
const releaseAllContextsForSocket = (ws) => {
|
|
55
|
-
const prefix = ws['postgraphileId'] + '|';
|
|
56
|
-
for (const [key, promise] of Object.entries(keepalivePromisesByContextKey)) {
|
|
57
|
-
if (key.startsWith(prefix)) {
|
|
58
|
-
promise.resolve();
|
|
59
|
-
delete keepalivePromisesByContextKey[key];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
const releaseContextForSocketAndOpId = (ws, opId) => {
|
|
64
|
-
const promise = keepalivePromisesByContextKey[contextKey(ws, opId)];
|
|
65
|
-
if (promise) {
|
|
66
|
-
promise.resolve();
|
|
67
|
-
delete keepalivePromisesByContextKey[contextKey(ws, opId)];
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
const addContextForSocketAndOpId = (context, ws, opId) => {
|
|
71
|
-
releaseContextForSocketAndOpId(ws, opId);
|
|
72
|
-
const promise = deferred();
|
|
73
|
-
promise['context'] = context;
|
|
74
|
-
keepalivePromisesByContextKey[contextKey(ws, opId)] = promise;
|
|
75
|
-
return promise;
|
|
76
|
-
};
|
|
77
|
-
const applyMiddleware = async (middlewares = [], req, res) => {
|
|
78
|
-
for (const middleware of middlewares) {
|
|
79
|
-
// TODO: add Koa support
|
|
80
|
-
await new Promise((resolve, reject) => {
|
|
81
|
-
middleware(req, res, err => (err ? reject(err) : resolve()));
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const reqResFromSocket = async (socket) => {
|
|
86
|
-
const req = socket['__postgraphileReq'];
|
|
87
|
-
if (!req) {
|
|
88
|
-
throw new Error('req could not be extracted');
|
|
89
|
-
}
|
|
90
|
-
let dummyRes = socket['__postgraphileRes'];
|
|
91
|
-
if (req.res) {
|
|
92
|
-
throw new Error("Please get in touch with Benjie; we weren't expecting req.res to be present but we want to reserve it for future usage.");
|
|
93
|
-
}
|
|
94
|
-
if (!dummyRes) {
|
|
95
|
-
dummyRes = new http_1.ServerResponse(req);
|
|
96
|
-
dummyRes.writeHead = (statusCode, _statusMessage, headers) => {
|
|
97
|
-
if (statusCode && statusCode > 200) {
|
|
98
|
-
// tslint:disable-next-line no-console
|
|
99
|
-
console.error(`Something used 'writeHead' to write a '${statusCode}' error for websockets - check the middleware you're passing!`);
|
|
100
|
-
socket.close();
|
|
101
|
-
}
|
|
102
|
-
else if (headers) {
|
|
103
|
-
// tslint:disable-next-line no-console
|
|
104
|
-
console.error("Passing headers to 'writeHead' is not supported with websockets currently - check the middleware you're passing");
|
|
105
|
-
socket.close();
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
await applyMiddleware(options.websocketMiddlewares, req, dummyRes);
|
|
109
|
-
// reqResFromSocket is only called once per socket, so there's no race condition here
|
|
110
|
-
// eslint-disable-next-line require-atomic-updates
|
|
111
|
-
socket['__postgraphileRes'] = dummyRes;
|
|
112
|
-
}
|
|
113
|
-
return { req, res: dummyRes };
|
|
114
|
-
};
|
|
115
|
-
const getContext = (socket, opId, isSubscription) => {
|
|
116
|
-
const singleStatement = isSubscription;
|
|
117
|
-
return new Promise((resolve, reject) => {
|
|
118
|
-
reqResFromSocket(socket)
|
|
119
|
-
.then(({ req, res }) => withPostGraphileContextFromReqRes(req, res, { singleStatement }, context => {
|
|
120
|
-
const promise = addContextForSocketAndOpId(context, socket, opId);
|
|
121
|
-
resolve(promise['context']);
|
|
122
|
-
return promise;
|
|
123
|
-
}))
|
|
124
|
-
.then(null, reject);
|
|
125
|
-
});
|
|
126
|
-
};
|
|
127
|
-
const staticValidationRules = pluginHook('postgraphile:validationRules:static', graphql_1.specifiedRules, {
|
|
128
|
-
options,
|
|
129
|
-
});
|
|
130
|
-
let socketId = 0;
|
|
131
|
-
let v0Wss = null;
|
|
132
|
-
if (websockets.includes('v0')) {
|
|
133
|
-
v0Wss = new WebSocket.Server({ noServer: true });
|
|
134
|
-
subscriptions_transport_ws_1.SubscriptionServer.create({
|
|
135
|
-
schema,
|
|
136
|
-
validationRules: staticValidationRules,
|
|
137
|
-
execute: options.websocketOperations === 'all'
|
|
138
|
-
? graphql_1.execute
|
|
139
|
-
: () => {
|
|
140
|
-
throw new Error('Only subscriptions are allowed over websocket transport');
|
|
141
|
-
},
|
|
142
|
-
subscribe: options.live ? liveSubscribe : graphql_1.subscribe,
|
|
143
|
-
onConnect(connectionParams, _socket, connectionContext) {
|
|
144
|
-
const { socket, request } = connectionContext;
|
|
145
|
-
socket['postgraphileId'] = ++socketId;
|
|
146
|
-
if (!request) {
|
|
147
|
-
throw new Error('No request!');
|
|
148
|
-
}
|
|
149
|
-
const normalizedConnectionParams = lowerCaseKeys(connectionParams);
|
|
150
|
-
request['connectionParams'] = connectionParams;
|
|
151
|
-
request['normalizedConnectionParams'] = normalizedConnectionParams;
|
|
152
|
-
socket['__postgraphileReq'] = request;
|
|
153
|
-
if (!request.headers.authorization && normalizedConnectionParams['authorization']) {
|
|
154
|
-
/*
|
|
155
|
-
* Enable JWT support through connectionParams.
|
|
156
|
-
*
|
|
157
|
-
* For other headers you'll need to do this yourself for security
|
|
158
|
-
* reasons (e.g. we don't want to allow overriding of Origin /
|
|
159
|
-
* Referer / etc)
|
|
160
|
-
*/
|
|
161
|
-
request.headers.authorization = String(normalizedConnectionParams['authorization']);
|
|
162
|
-
}
|
|
163
|
-
socket['postgraphileHeaders'] = {
|
|
164
|
-
...normalizedConnectionParams,
|
|
165
|
-
// The original headers must win (for security)
|
|
166
|
-
...request.headers,
|
|
167
|
-
};
|
|
168
|
-
},
|
|
169
|
-
// tslint:disable-next-line no-any
|
|
170
|
-
async onOperation(message, params, socket) {
|
|
171
|
-
const opId = message.id;
|
|
172
|
-
// Override schema (for --watch)
|
|
173
|
-
params.schema = await getGraphQLSchema();
|
|
174
|
-
const { req, res } = await reqResFromSocket(socket);
|
|
175
|
-
const meta = {};
|
|
176
|
-
const formatResponse = (response) => {
|
|
177
|
-
if (response.errors) {
|
|
178
|
-
response.errors = handleErrors(response.errors, req, res);
|
|
179
|
-
}
|
|
180
|
-
if (!createPostGraphileHttpRequestHandler_1.isEmpty(meta)) {
|
|
181
|
-
response['meta'] = meta;
|
|
182
|
-
}
|
|
183
|
-
return response;
|
|
184
|
-
};
|
|
185
|
-
// onOperation is only called once per params object, so there's no race condition here
|
|
186
|
-
// eslint-disable-next-line require-atomic-updates
|
|
187
|
-
params.formatResponse = formatResponse;
|
|
188
|
-
const hookedParams = pluginHook
|
|
189
|
-
? pluginHook('postgraphile:ws:onOperation', params, {
|
|
190
|
-
message,
|
|
191
|
-
params,
|
|
192
|
-
socket,
|
|
193
|
-
options,
|
|
194
|
-
})
|
|
195
|
-
: params;
|
|
196
|
-
const finalParams = {
|
|
197
|
-
...hookedParams,
|
|
198
|
-
query: typeof hookedParams.query !== 'string'
|
|
199
|
-
? hookedParams.query
|
|
200
|
-
: graphql_1.parse(hookedParams.query),
|
|
201
|
-
};
|
|
202
|
-
if (!finalParams.query) {
|
|
203
|
-
return Promise.reject(new Error('Must provide document'));
|
|
204
|
-
}
|
|
205
|
-
const operation = graphql_1.getOperationAST(finalParams.query, finalParams.operationName);
|
|
206
|
-
if (!operation) {
|
|
207
|
-
return Promise.reject(new Error('Unable to identify operation'));
|
|
208
|
-
}
|
|
209
|
-
const isSubscription = operation.operation === 'subscription';
|
|
210
|
-
// We used to call `getContext` here, now we just persist this side effect instead.
|
|
211
|
-
await reqResFromSocket(socket);
|
|
212
|
-
// You are strongly encouraged to use
|
|
213
|
-
// `postgraphile:validationRules:static` if possible - you should
|
|
214
|
-
// only use this one if you need access to variables.
|
|
215
|
-
const moreValidationRules = pluginHook('postgraphile:validationRules', [], {
|
|
216
|
-
options,
|
|
217
|
-
req,
|
|
218
|
-
res,
|
|
219
|
-
variables: params.variables,
|
|
220
|
-
operationName: params.operationName,
|
|
221
|
-
meta,
|
|
222
|
-
});
|
|
223
|
-
if (moreValidationRules.length) {
|
|
224
|
-
const validationErrors = graphql_1.validate(params.schema, finalParams.query, moreValidationRules);
|
|
225
|
-
if (validationErrors.length) {
|
|
226
|
-
const error = new Error('Query validation failed: \n' + validationErrors.map(e => e.message).join('\n'));
|
|
227
|
-
error['errors'] = validationErrors;
|
|
228
|
-
return Promise.reject(error);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
const context = await getContext(socket, opId, isSubscription);
|
|
232
|
-
Object.assign(params.context, context);
|
|
233
|
-
return finalParams;
|
|
234
|
-
},
|
|
235
|
-
onOperationComplete(socket, opId) {
|
|
236
|
-
releaseContextForSocketAndOpId(socket, opId);
|
|
237
|
-
},
|
|
238
|
-
onDisconnect(socket) {
|
|
239
|
-
releaseAllContextsForSocket(socket);
|
|
240
|
-
},
|
|
241
|
-
/*
|
|
242
|
-
* Heroku times out after 55s:
|
|
243
|
-
* https://devcenter.heroku.com/articles/error-codes#h15-idle-connection
|
|
244
|
-
*
|
|
245
|
-
* The subscriptions-transport-ws client times out by default 30s after last keepalive:
|
|
246
|
-
* https://github.com/apollographql/subscriptions-transport-ws/blob/52758bfba6190169a28078ecbafd2e457a2ff7a8/src/defaults.ts#L1
|
|
247
|
-
*
|
|
248
|
-
* GraphQL Playground times out after 20s:
|
|
249
|
-
* https://github.com/prisma/graphql-playground/blob/fa91e1b6d0488e6b5563d8b472682fe728ee0431/packages/graphql-playground-react/src/state/sessions/fetchingSagas.ts#L81
|
|
250
|
-
*
|
|
251
|
-
* Pick a number under these ceilings.
|
|
252
|
-
*/
|
|
253
|
-
keepAlive: 15000,
|
|
254
|
-
...subscriptionServerOptions,
|
|
255
|
-
}, v0Wss);
|
|
256
|
-
}
|
|
257
|
-
let v1Wss = null;
|
|
258
|
-
if (websockets.includes('v1')) {
|
|
259
|
-
v1Wss = new WebSocket.Server({ noServer: true });
|
|
260
|
-
ws_1.useServer({
|
|
261
|
-
schema,
|
|
262
|
-
execute: options.websocketOperations === 'all'
|
|
263
|
-
? graphql_1.execute
|
|
264
|
-
: () => {
|
|
265
|
-
throw new Error('Only subscriptions are allowed over WebSocket transport');
|
|
266
|
-
},
|
|
267
|
-
subscribe: options.live ? liveSubscribe : graphql_1.subscribe,
|
|
268
|
-
onConnect(ctx) {
|
|
269
|
-
const { socket, request } = ctx.extra;
|
|
270
|
-
socket['postgraphileId'] = ++socketId;
|
|
271
|
-
socket['__postgraphileReq'] = request;
|
|
272
|
-
const normalizedConnectionParams = lowerCaseKeys(ctx.connectionParams || {});
|
|
273
|
-
request['connectionParams'] = ctx.connectionParams || {};
|
|
274
|
-
request['normalizedConnectionParams'] = normalizedConnectionParams;
|
|
275
|
-
if (!request.headers.authorization && normalizedConnectionParams['authorization']) {
|
|
276
|
-
/*
|
|
277
|
-
* Enable JWT support through connectionParams.
|
|
278
|
-
*
|
|
279
|
-
* For other headers you'll need to do this yourself for security
|
|
280
|
-
* reasons (e.g. we don't want to allow overriding of Origin /
|
|
281
|
-
* Referer / etc)
|
|
282
|
-
*/
|
|
283
|
-
request.headers.authorization = String(normalizedConnectionParams['authorization']);
|
|
284
|
-
}
|
|
285
|
-
socket['postgraphileHeaders'] = {
|
|
286
|
-
...normalizedConnectionParams,
|
|
287
|
-
// The original headers must win (for security)
|
|
288
|
-
...request.headers,
|
|
289
|
-
};
|
|
290
|
-
},
|
|
291
|
-
async onSubscribe(ctx, msg) {
|
|
292
|
-
// Override schema (for --watch)
|
|
293
|
-
const schema = await getGraphQLSchema();
|
|
294
|
-
const { payload } = msg;
|
|
295
|
-
const args = {
|
|
296
|
-
schema,
|
|
297
|
-
contextValue: {},
|
|
298
|
-
operationName: payload.operationName,
|
|
299
|
-
document: payload.query ? graphql_1.parse(payload.query) : null,
|
|
300
|
-
variableValues: payload.variables,
|
|
301
|
-
};
|
|
302
|
-
// for supplying custom execution arguments. if not already
|
|
303
|
-
// complete, the pluginHook should fill in the gaps
|
|
304
|
-
const hookedArgs = (pluginHook
|
|
305
|
-
? pluginHook('postgraphile:ws:onSubscribe', args, {
|
|
306
|
-
context: ctx,
|
|
307
|
-
message: msg,
|
|
308
|
-
options,
|
|
309
|
-
})
|
|
310
|
-
: args);
|
|
311
|
-
if (!args.document) {
|
|
312
|
-
return [
|
|
313
|
-
// same error that graphql.validate would throw if the document is missing
|
|
314
|
-
new graphql_1.GraphQLError('Must provide document'),
|
|
315
|
-
];
|
|
316
|
-
}
|
|
317
|
-
const operation = graphql_1.getOperationAST(args.document, hookedArgs.operationName);
|
|
318
|
-
if (!operation) {
|
|
319
|
-
return [new graphql_1.GraphQLError('Unable to identify operation')];
|
|
320
|
-
}
|
|
321
|
-
const isSubscription = operation.operation === 'subscription';
|
|
322
|
-
// We used to call `getContext` here, now we just persist this side effect instead.
|
|
323
|
-
await reqResFromSocket(ctx.extra.socket);
|
|
324
|
-
// when supplying custom execution args from the
|
|
325
|
-
// onSubscribe, you're trusted to do the validation
|
|
326
|
-
const validationErrors = graphql_1.validate(hookedArgs.schema, hookedArgs.document, staticValidationRules);
|
|
327
|
-
if (validationErrors.length) {
|
|
328
|
-
return validationErrors;
|
|
329
|
-
}
|
|
330
|
-
// You are strongly encouraged to use
|
|
331
|
-
// `postgraphile:validationRules:static` if possible - you should
|
|
332
|
-
// only use this one if you need access to variables.
|
|
333
|
-
const { req, res } = await reqResFromSocket(ctx.extra.socket);
|
|
334
|
-
const moreValidationRules = pluginHook('postgraphile:validationRules', [], {
|
|
335
|
-
options,
|
|
336
|
-
req,
|
|
337
|
-
res,
|
|
338
|
-
variables: hookedArgs.variableValues,
|
|
339
|
-
operationName: hookedArgs.operationName,
|
|
340
|
-
});
|
|
341
|
-
if (moreValidationRules.length) {
|
|
342
|
-
const moreValidationErrors = graphql_1.validate(hookedArgs.schema, hookedArgs.document, moreValidationRules);
|
|
343
|
-
if (moreValidationErrors.length) {
|
|
344
|
-
return moreValidationErrors;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
const context = await getContext(ctx.extra.socket, msg.id, isSubscription);
|
|
348
|
-
Object.assign(hookedArgs.contextValue, context);
|
|
349
|
-
return hookedArgs;
|
|
350
|
-
},
|
|
351
|
-
async onError(ctx, msg, errors) {
|
|
352
|
-
// errors returned from onSubscribe
|
|
353
|
-
releaseContextForSocketAndOpId(ctx.extra.socket, msg.id);
|
|
354
|
-
const { req, res } = await reqResFromSocket(ctx.extra.socket);
|
|
355
|
-
return handleErrors(errors, req, res);
|
|
356
|
-
},
|
|
357
|
-
async onNext(ctx, _msg, _args, result) {
|
|
358
|
-
if (result.errors) {
|
|
359
|
-
// operation execution errors
|
|
360
|
-
const { req, res } = await reqResFromSocket(ctx.extra.socket);
|
|
361
|
-
result.errors = handleErrors(result.errors, req, res);
|
|
362
|
-
return result;
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
onComplete(ctx, msg) {
|
|
366
|
-
releaseContextForSocketAndOpId(ctx.extra.socket, msg.id);
|
|
367
|
-
},
|
|
368
|
-
onClose(ctx) {
|
|
369
|
-
releaseAllContextsForSocket(ctx.extra.socket);
|
|
370
|
-
},
|
|
371
|
-
}, v1Wss,
|
|
372
|
-
/*
|
|
373
|
-
* Heroku times out after 55s:
|
|
374
|
-
* https://devcenter.heroku.com/articles/error-codes#h15-idle-connection
|
|
375
|
-
*
|
|
376
|
-
* GraphQL Playground times out after 20s:
|
|
377
|
-
* https://github.com/prisma/graphql-playground/blob/fa91e1b6d0488e6b5563d8b472682fe728ee0431/packages/graphql-playground-react/src/state/sessions/fetchingSagas.ts#L81
|
|
378
|
-
*
|
|
379
|
-
* Pick a number under these ceilings.
|
|
380
|
-
*/
|
|
381
|
-
subscriptionServerOptions?.keepAlive);
|
|
382
|
-
}
|
|
383
|
-
// listen for upgrades and delegate requests according to the WS subprotocol
|
|
384
|
-
websocketServer.on('upgrade', (req, socket, head) => {
|
|
385
|
-
const { pathname = '' } = parseUrl(req) || {};
|
|
386
|
-
const isGraphqlRoute = pathname === graphqlRoute;
|
|
387
|
-
if (isGraphqlRoute) {
|
|
388
|
-
const protocol = req.headers['sec-websocket-protocol'];
|
|
389
|
-
const protocols = Array.isArray(protocol)
|
|
390
|
-
? protocol
|
|
391
|
-
: protocol?.split(',').map(p => p.trim());
|
|
392
|
-
const wss = v0Wss &&
|
|
393
|
-
protocols?.includes('graphql-ws') &&
|
|
394
|
-
!protocols.includes(graphql_ws_1.GRAPHQL_TRANSPORT_WS_PROTOCOL)
|
|
395
|
-
? v0Wss
|
|
396
|
-
: // v1 will welcome its own subprotocol `graphql-transport-ws`
|
|
397
|
-
// and gracefully reject invalid ones. if the client supports
|
|
398
|
-
// both v0 and v1, v1 will prevail
|
|
399
|
-
v1Wss;
|
|
400
|
-
if (wss) {
|
|
401
|
-
wss.handleUpgrade(req, socket, head, ws => {
|
|
402
|
-
wss.emit('connection', ws, req);
|
|
403
|
-
});
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
exports.enhanceHttpServerWithWebSockets = enhanceHttpServerWithWebSockets;
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wb3N0Z3JhcGhpbGUvaHR0cC9zdWJzY3JpcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFvRjtBQUVwRixxQ0FXaUI7QUFDakIsZ0NBQWdDO0FBQ2hDLDJFQUFvRztBQUNwRywyQ0FBMkQ7QUFDM0QsOENBQWtEO0FBQ2xELHFDQUFzQztBQUN0Qyw4Q0FBc0Q7QUFDdEQsaUdBQWlFO0FBQ2pFLG1EQUFvRDtBQU9wRCxTQUFTLGFBQWEsQ0FBQyxHQUF3QjtJQUM3QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsU0FBUyxRQUFRO0lBQ2YsSUFBSSxPQUF5RCxDQUFDO0lBQzlELElBQUksTUFBOEIsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQVEsRUFBRTtRQUN6RCxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ25CLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDSCxnREFBZ0Q7SUFDaEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUM1QixtREFBbUQ7UUFDbkQsT0FBTztRQUNQLG1EQUFtRDtRQUNuRCxNQUFNO0tBQ1AsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVNLEtBQUssVUFBVSwrQkFBK0IsQ0FJbkQsZUFBdUIsRUFDdkIsc0JBQTBDLEVBQzFDLHlCQUdDO0lB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
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { default as postgraphile } from './postgraphile';
|
|
2
|
-
export { default as withPostGraphileContext, debugPgClient } from './withPostGraphileContext';
|
|
3
|
-
export { createPostGraphileSchema, watchPostGraphileSchema } from 'postgraphile-core';
|
|
4
|
-
export { PostGraphilePlugin } from './pluginHook';
|
|
5
|
-
export { enhanceHttpServerWithWebSockets } from './http/subscriptions';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.enhanceHttpServerWithWebSockets = exports.watchPostGraphileSchema = exports.createPostGraphileSchema = exports.debugPgClient = exports.withPostGraphileContext = exports.postgraphile = void 0;
|
|
4
|
-
var postgraphile_1 = require("./postgraphile");
|
|
5
|
-
Object.defineProperty(exports, "postgraphile", { enumerable: true, get: function () { return postgraphile_1.default; } });
|
|
6
|
-
var withPostGraphileContext_1 = require("./withPostGraphileContext");
|
|
7
|
-
Object.defineProperty(exports, "withPostGraphileContext", { enumerable: true, get: function () { return withPostGraphileContext_1.default; } });
|
|
8
|
-
Object.defineProperty(exports, "debugPgClient", { enumerable: true, get: function () { return withPostGraphileContext_1.debugPgClient; } });
|
|
9
|
-
var postgraphile_core_1 = require("postgraphile-core");
|
|
10
|
-
Object.defineProperty(exports, "createPostGraphileSchema", { enumerable: true, get: function () { return postgraphile_core_1.createPostGraphileSchema; } });
|
|
11
|
-
Object.defineProperty(exports, "watchPostGraphileSchema", { enumerable: true, get: function () { return postgraphile_core_1.watchPostGraphileSchema; } });
|
|
12
|
-
var subscriptions_1 = require("./http/subscriptions");
|
|
13
|
-
Object.defineProperty(exports, "enhanceHttpServerWithWebSockets", { enumerable: true, get: function () { return subscriptions_1.enhanceHttpServerWithWebSockets; } });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9zdGdyYXBoaWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUF5RDtBQUFoRCw0R0FBQSxPQUFPLE9BQWdCO0FBQ2hDLHFFQUE4RjtBQUFyRixrSUFBQSxPQUFPLE9BQTJCO0FBQUUsd0hBQUEsYUFBYSxPQUFBO0FBQzFELHVEQUFzRjtBQUE3RSw2SEFBQSx3QkFBd0IsT0FBQTtBQUFFLDRIQUFBLHVCQUF1QixPQUFBO0FBRTFELHNEQUF1RTtBQUE5RCxnSUFBQSwrQkFBK0IsT0FBQSJ9
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { AddFlagFn } from './cli';
|
|
3
|
-
import { Server, IncomingMessage } from 'http';
|
|
4
|
-
import { CreateRequestHandlerOptions, HttpRequestHandler, PostGraphileOptions } from '../interfaces';
|
|
5
|
-
import { WithPostGraphileContextFn } from './withPostGraphileContext';
|
|
6
|
-
import * as graphql from 'graphql';
|
|
7
|
-
import * as graphqlWs from 'graphql-ws';
|
|
8
|
-
import { Extra as GraphQLWSContextExtra } from 'graphql-ws/lib/use/ws';
|
|
9
|
-
import { ExecutionParams } from 'subscriptions-transport-ws';
|
|
10
|
-
import { PostGraphileResponse } from './http/frameworks';
|
|
11
|
-
declare type PromiseOrValue<T> = T | Promise<T>;
|
|
12
|
-
export declare type HookFn<TArg, TContext = any> = (arg: TArg, context: TContext) => TArg;
|
|
13
|
-
export declare type PluginHookFn = <TArgument, TContext = Record<string, any>>(hookName: string, argument: TArgument, context?: TContext) => TArgument;
|
|
14
|
-
export interface PostGraphileHTTPResult {
|
|
15
|
-
statusCode?: number;
|
|
16
|
-
result?: Record<string, any>;
|
|
17
|
-
errors?: Array<Record<string, any>>;
|
|
18
|
-
meta?: Record<string, any>;
|
|
19
|
-
}
|
|
20
|
-
export interface PostGraphileHTTPEnd {
|
|
21
|
-
statusCode?: number;
|
|
22
|
-
result: Record<string, any> | Array<Record<string, any>>;
|
|
23
|
-
}
|
|
24
|
-
export interface PostGraphilePlugin {
|
|
25
|
-
init?: HookFn<null, {
|
|
26
|
-
version: string;
|
|
27
|
-
graphql: typeof import('graphql');
|
|
28
|
-
}>;
|
|
29
|
-
pluginHook?: HookFn<PluginHookFn>;
|
|
30
|
-
'cli:flags:add:standard'?: HookFn<AddFlagFn>;
|
|
31
|
-
'cli:flags:add:schema'?: HookFn<AddFlagFn>;
|
|
32
|
-
'cli:flags:add:errorHandling'?: HookFn<AddFlagFn>;
|
|
33
|
-
'cli:flags:add:plugins'?: HookFn<AddFlagFn>;
|
|
34
|
-
'cli:flags:add:noServer'?: HookFn<AddFlagFn>;
|
|
35
|
-
'cli:flags:add:webserver'?: HookFn<AddFlagFn>;
|
|
36
|
-
'cli:flags:add:jwt'?: HookFn<AddFlagFn>;
|
|
37
|
-
'cli:flags:add'?: HookFn<AddFlagFn>;
|
|
38
|
-
'cli:flags:add:deprecated'?: HookFn<AddFlagFn>;
|
|
39
|
-
'cli:flags:add:workarounds'?: HookFn<AddFlagFn>;
|
|
40
|
-
'cli:library:options'?: HookFn<PostGraphileOptions, {
|
|
41
|
-
config: any;
|
|
42
|
-
cliOptions: any;
|
|
43
|
-
}>;
|
|
44
|
-
'cli:server:middleware'?: HookFn<HttpRequestHandler>;
|
|
45
|
-
'cli:server:created'?: HookFn<Server>;
|
|
46
|
-
'cli:greeting'?: HookFn<Array<string | null | void>>;
|
|
47
|
-
'postgraphile:options'?: HookFn<PostGraphileOptions>;
|
|
48
|
-
'postgraphile:validationRules:static'?: HookFn<typeof graphql.specifiedRules>;
|
|
49
|
-
'postgraphile:graphiql:html'?: HookFn<string>;
|
|
50
|
-
'postgraphile:middleware'?: HookFn<HttpRequestHandler>;
|
|
51
|
-
'postgraphile:http:handler'?: HookFn<IncomingMessage>;
|
|
52
|
-
'postgraphile:http:eventStreamRouteHandler'?: HookFn<IncomingMessage, {
|
|
53
|
-
options: CreateRequestHandlerOptions;
|
|
54
|
-
response: PostGraphileResponse;
|
|
55
|
-
}>;
|
|
56
|
-
'postgraphile:http:faviconRouteHandler'?: HookFn<IncomingMessage, {
|
|
57
|
-
options: CreateRequestHandlerOptions;
|
|
58
|
-
response: PostGraphileResponse;
|
|
59
|
-
}>;
|
|
60
|
-
'postgraphile:http:graphiqlRouteHandler'?: HookFn<IncomingMessage, {
|
|
61
|
-
options: CreateRequestHandlerOptions;
|
|
62
|
-
response: PostGraphileResponse;
|
|
63
|
-
}>;
|
|
64
|
-
'postgraphile:http:graphqlRouteHandler'?: HookFn<IncomingMessage, {
|
|
65
|
-
options: CreateRequestHandlerOptions;
|
|
66
|
-
response: PostGraphileResponse;
|
|
67
|
-
}>;
|
|
68
|
-
'postgraphile:http:result'?: HookFn<PostGraphileHTTPResult>;
|
|
69
|
-
'postgraphile:http:end'?: HookFn<PostGraphileHTTPEnd>;
|
|
70
|
-
'postgraphile:httpParamsList'?: HookFn<Array<Record<string, any>>>;
|
|
71
|
-
'postgraphile:validationRules'?: HookFn<typeof graphql.specifiedRules>;
|
|
72
|
-
'postgraphile:ws:onOperation'?: HookFn<ExecutionParams>;
|
|
73
|
-
'postgraphile:ws:onSubscribe'?: HookFn<graphql.ExecutionArgs & {
|
|
74
|
-
document: graphql.DocumentNode | null;
|
|
75
|
-
}, {
|
|
76
|
-
context: graphqlWs.Context<any, GraphQLWSContextExtra>;
|
|
77
|
-
message: graphqlWs.SubscribeMessage;
|
|
78
|
-
options: CreateRequestHandlerOptions;
|
|
79
|
-
}>;
|
|
80
|
-
'postgraphile:liveSubscribe:executionResult'?: HookFn<PromiseOrValue<graphql.ExecutionResult<{
|
|
81
|
-
[key: string]: any;
|
|
82
|
-
}, {
|
|
83
|
-
[key: string]: any;
|
|
84
|
-
}>>, {
|
|
85
|
-
schema: graphql.GraphQLSchema;
|
|
86
|
-
document: graphql.DocumentNode;
|
|
87
|
-
rootValue: any;
|
|
88
|
-
contextValue: any;
|
|
89
|
-
variableValues: {
|
|
90
|
-
[key: string]: any;
|
|
91
|
-
} | undefined;
|
|
92
|
-
operationName: string | undefined;
|
|
93
|
-
fieldResolver: graphql.GraphQLFieldResolver<any, any, {
|
|
94
|
-
[argName: string]: any;
|
|
95
|
-
}> | undefined;
|
|
96
|
-
subscribeFieldResolver: graphql.GraphQLFieldResolver<any, any, {
|
|
97
|
-
[argName: string]: any;
|
|
98
|
-
}> | undefined;
|
|
99
|
-
}>;
|
|
100
|
-
withPostGraphileContext?: HookFn<WithPostGraphileContextFn>;
|
|
101
|
-
}
|
|
102
|
-
export declare function makePluginHook(plugins: Array<PostGraphilePlugin>): PluginHookFn;
|
|
103
|
-
export declare function pluginHookFromOptions(options: PostGraphileOptions): PluginHookFn;
|
|
104
|
-
export {};
|