grafserv 0.0.0 → 0.0.1-0.1

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 ADDED
@@ -0,0 +1,23 @@
1
+ # grafserv
2
+
3
+ ## 0.0.1-0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`55f15cf35`](undefined)]:
8
+ - grafast@0.0.1-0.1
9
+
10
+ ## 0.0.1-0.0
11
+
12
+ ### Patch Changes
13
+
14
+ - [#125](https://github.com/benjie/postgraphile-private/pull/125)
15
+ [`91f2256b3`](https://github.com/benjie/postgraphile-private/commit/91f2256b3fd699bec19fc86f1ca79df057e58639)
16
+ Thanks [@benjie](https://github.com/benjie)! - Initial changesets release
17
+
18
+ - Updated dependencies
19
+ [[`91f2256b3`](https://github.com/benjie/postgraphile-private/commit/91f2256b3fd699bec19fc86f1ca79df057e58639)]:
20
+ - ruru@2.0.0-0.0
21
+ - @graphile/lru@5.0.0-0.1
22
+ - grafast@0.0.1-0.0
23
+ - graphile-config@0.0.1-0.0
package/README.md CHANGED
@@ -1 +1,42 @@
1
- Coming 2023 :D
1
+ # grafserv
2
+
3
+ <span class="badge-patreon"><a href="https://patreon.com/benjie" title="Support Graphile development on Patreon"><img src="https://img.shields.io/badge/sponsor-via%20Patreon-orange.svg" alt="Patreon sponsor button" /></a></span>
4
+ [![Discord chat room](https://img.shields.io/discord/489127045289476126.svg)](http://discord.gg/graphile)
5
+ [![Package on npm](https://img.shields.io/npm/v/grafserv.svg?style=flat)](https://www.npmjs.com/package/grafserv)
6
+ ![MIT license](https://img.shields.io/npm/l/grafserv.svg)
7
+ [![Follow](https://img.shields.io/badge/twitter-@GraphileHQ-blue.svg)](https://twitter.com/GraphileHQ)
8
+
9
+ _**A highly performant GraphQL server for Node.js, powered by
10
+ [Gra*fast*](https://grafast.org).**_
11
+
12
+ **Documentation**: https://grafast.org/grafserv/
13
+
14
+ <!-- SPONSORS_BEGIN -->
15
+
16
+ ## Crowd-funded open-source software
17
+
18
+ To help us develop this software sustainably under the MIT license, we ask all
19
+ individuals and businesses that use it to help support its ongoing maintenance
20
+ and development via sponsorship.
21
+
22
+ ### [Click here to find out more about sponsors and sponsorship.](https://www.graphile.org/sponsor/)
23
+
24
+ And please give some love to our featured sponsors 🤩:
25
+
26
+ <table><tr>
27
+ <td align="center"><a href="https://surge.io/"><img src="https://graphile.org/images/sponsors/surge.png" width="90" height="90" alt="Surge" /><br />Surge</a> *</td>
28
+ <td align="center"><a href="https://www.netflix.com/"><img src="https://graphile.org/images/sponsors/Netflix.png" width="90" height="90" alt="Netflix" /><br />Netflix</a> *</td>
29
+ <td align="center"><a href="https://qwick.com/"><img src="https://graphile.org/images/sponsors/qwick.png" width="90" height="90" alt="Qwick" /><br />Qwick</a> *</td>
30
+ <td align="center"><a href="https://www.the-guild.dev/"><img src="https://graphile.org/images/sponsors/theguild.png" width="90" height="90" alt="The Guild" /><br />The Guild</a> *</td>
31
+ </tr><tr>
32
+ <td align="center"><a href="http://chads.website"><img src="https://graphile.org/images/sponsors/chadf.png" width="90" height="90" alt="Chad Furman" /><br />Chad Furman</a> *</td>
33
+ <td align="center"><a href="https://www.fanatics.com/"><img src="https://graphile.org/images/sponsors/fanatics.png" width="90" height="90" alt="Fanatics" /><br />Fanatics</a> *</td>
34
+ <td align="center"><a href="https://dovetailapp.com/"><img src="https://graphile.org/images/sponsors/dovetail.png" width="90" height="90" alt="Dovetail" /><br />Dovetail</a> *</td>
35
+ <td align="center"><a href="https://www.enzuzo.com/"><img src="https://graphile.org/images/sponsors/enzuzo.png" width="90" height="90" alt="Enzuzo" /><br />Enzuzo</a> *</td>
36
+ </tr><tr>
37
+ <td align="center"><a href="https://stellate.co/"><img src="https://graphile.org/images/sponsors/Stellate.png" width="90" height="90" alt="Stellate" /><br />Stellate</a> *</td>
38
+ </tr></table>
39
+
40
+ <em>\* Sponsors the entire Graphile suite</em>
41
+
42
+ <!-- SPONSORS_END -->
@@ -0,0 +1,3 @@
1
+ export { ServerParams } from "./interfaces.js";
2
+ export { Grafserv, grafserv } from "./middleware/index.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.grafserv = void 0;
4
+ var index_js_1 = require("./middleware/index.js");
5
+ Object.defineProperty(exports, "grafserv", { enumerable: true, get: function () { return index_js_1.grafserv; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,kDAA2D;AAAxC,oGAAA,QAAQ,OAAA"}
@@ -0,0 +1,49 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import "graphile-config";
4
+ import type { GraphQLSchema } from "graphql";
5
+ import type { IncomingMessage } from "node:http";
6
+ import type { Socket } from "node:net";
7
+ export declare type ContextCallback = (graphqlRequestContext: GraphileConfig.GraphQLRequestContext) => object;
8
+ export interface ServerParams {
9
+ schema: GraphQLSchema;
10
+ resolvedPreset: GraphileConfig.ResolvedPreset;
11
+ }
12
+ export interface ServerOptions {
13
+ /** Port number to listen on */
14
+ port?: number;
15
+ /** Host to listen on */
16
+ host?: string;
17
+ /** The path at which GraphQL will be available; usually /graphql */
18
+ graphqlPath?: string;
19
+ /** The path at which the GraphQL event stream would be made available; usually /graphql/stream */
20
+ eventStreamRoute?: string;
21
+ graphiql?: boolean;
22
+ /** If true, then we will render GraphiQL on GET requests to the /graphql endpoint */
23
+ graphiqlOnGraphQLGET?: boolean;
24
+ /** The path at which GraphiQL will be available; usually / */
25
+ graphiqlPath?: string;
26
+ /** Set true to enable watch mode */
27
+ watch?: boolean;
28
+ /** The length, in bytes, for the largest request body that the server will accept */
29
+ maxRequestLength?: number;
30
+ }
31
+ declare global {
32
+ namespace GraphileConfig {
33
+ /**
34
+ * Details about the incoming GraphQL request - e.g. if it was sent over an
35
+ * HTTP request, the request itself so headers can be interrogated.
36
+ *
37
+ * It's anticipated this will be expanded via declaration merging, e.g. if
38
+ * your server is Koa then a `koaCtx` might be added.
39
+ */
40
+ interface GraphQLRequestContext {
41
+ httpRequest?: IncomingMessage;
42
+ socket?: Socket;
43
+ }
44
+ interface Preset {
45
+ server?: ServerOptions;
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;AAAA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,oBAAY,eAAe,GAAG,CAC5B,qBAAqB,EAAE,cAAc,CAAC,qBAAqB,KACxD,MAAM,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;CAC/C;AAED,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB;;;;;;WAMG;QACH,UAAU,qBAAqB;YAE7B,WAAW,CAAC,EAAE,eAAe,CAAC;YAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB;QACD,UAAU,MAAM;YACd,MAAM,CAAC,EAAE,aAAa,CAAC;SACxB;KACF;CACF"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("graphile-config");
4
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;AAAA,2BAAyB"}
@@ -0,0 +1,4 @@
1
+ import type { ServerParams } from "../interfaces.js";
2
+ import type { HandlerResult } from "./interfaces.js";
3
+ export declare function makeGraphiQLHandler(_params: ServerParams): () => Promise<HandlerResult>;
4
+ //# sourceMappingURL=graphiql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphiql.d.ts","sourceRoot":"","sources":["../../src/middleware/graphiql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMrD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,SACtC,QAAQ,aAAa,CAAC,CAWxC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeGraphiQLHandler = void 0;
4
+ const ruruServer = import("ruru/server");
5
+ let ruruHTML = undefined;
6
+ // TODO: use a specific version of mermaid
7
+ function makeGraphiQLHandler(_params) {
8
+ return async () => {
9
+ if (!ruruHTML) {
10
+ ruruHTML = (await ruruServer).ruruHTML;
11
+ }
12
+ const config = {};
13
+ return {
14
+ statusCode: 200,
15
+ type: "html",
16
+ payload: ruruHTML(config),
17
+ };
18
+ };
19
+ }
20
+ exports.makeGraphiQLHandler = makeGraphiQLHandler;
21
+ //# sourceMappingURL=graphiql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphiql.js","sourceRoot":"","sources":["../../src/middleware/graphiql.ts"],"names":[],"mappings":";;;AAGA,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACzC,IAAI,QAAQ,GAAuD,SAAS,CAAC;AAE7E,0CAA0C;AAC1C,SAAgB,mBAAmB,CAAC,OAAqB;IACvD,OAAO,KAAK,IAA4B,EAAE;QACxC,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,QAAQ,CAAC;SACxC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,OAAO;YACL,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;SAC1B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAZD,kDAYC"}
@@ -0,0 +1,4 @@
1
+ import type { ServerParams } from "../interfaces.js";
2
+ import type { HandlerResult } from "./interfaces.js";
3
+ export declare const makeGraphQLHandler: (params: ServerParams) => (resolvedPreset: GraphileConfig.ResolvedPreset, ctx: GraphileConfig.GraphQLRequestContext, body: unknown) => Promise<HandlerResult>;
4
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/middleware/graphql.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAqErD,eAAO,MAAM,kBAAkB,WAAY,YAAY,sBAMnC,eAAe,cAAc,OACxC,eAAe,qBAAqB,QACnC,OAAO,KACZ,QAAQ,aAAa,CA4DzB,CAAC"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeGraphQLHandler = void 0;
4
+ const lru_1 = require("@graphile/lru");
5
+ const crypto_1 = require("crypto");
6
+ const grafast_1 = require("grafast");
7
+ const graphql_1 = require("graphql");
8
+ let lastString;
9
+ let lastHash;
10
+ const calculateQueryHash = (queryString) => {
11
+ if (queryString !== lastString) {
12
+ lastString = queryString;
13
+ lastHash = (0, crypto_1.createHash)("sha1").update(queryString).digest("base64");
14
+ }
15
+ return lastHash;
16
+ };
17
+ function makeParseAndValidateFunction(schema) {
18
+ const parseAndValidationCache = new lru_1.LRU({
19
+ maxLength: 500,
20
+ });
21
+ let lastParseAndValidateQuery;
22
+ let lastParseAndValidateResult;
23
+ function parseAndValidate(query) {
24
+ if (lastParseAndValidateQuery === query) {
25
+ return lastParseAndValidateResult;
26
+ }
27
+ const hash = query.length > 500 ? calculateQueryHash(query) : query;
28
+ const cached = parseAndValidationCache.get(hash);
29
+ if (cached) {
30
+ lastParseAndValidateQuery = query;
31
+ lastParseAndValidateResult = cached;
32
+ return cached;
33
+ }
34
+ const source = new graphql_1.Source(query, "GraphQL HTTP Request");
35
+ let document;
36
+ try {
37
+ document = (0, graphql_1.parse)(source);
38
+ }
39
+ catch (e) {
40
+ const result = {
41
+ errors: [
42
+ new graphql_1.GraphQLError(e.message, null, undefined, undefined, undefined, e, undefined),
43
+ ],
44
+ };
45
+ parseAndValidationCache.set(hash, result);
46
+ lastParseAndValidateQuery = query;
47
+ lastParseAndValidateResult = result;
48
+ return result;
49
+ }
50
+ const errors = (0, graphql_1.validate)(schema, document);
51
+ const result = errors.length
52
+ ? { errors }
53
+ : { document };
54
+ parseAndValidationCache.set(hash, result);
55
+ lastParseAndValidateQuery = query;
56
+ lastParseAndValidateResult = result;
57
+ return result;
58
+ }
59
+ return parseAndValidate;
60
+ }
61
+ const makeGraphQLHandler = (params) => {
62
+ const { schema } = params;
63
+ const parseAndValidate = makeParseAndValidateFunction(schema);
64
+ const asString = true;
65
+ return async (resolvedPreset, ctx, body) => {
66
+ // Parse the body
67
+ if (typeof body !== "object" || body == null) {
68
+ throw new Error("Invalid body in request");
69
+ }
70
+ const { query, variables: variableValues, operationName, } = body;
71
+ if (typeof query !== "string") {
72
+ throw new Error("Invalid query");
73
+ }
74
+ if (typeof operationName !== "string" && operationName != null) {
75
+ throw new Error("Invalid operationName");
76
+ }
77
+ if (variableValues != null && typeof variableValues !== "object") {
78
+ throw new Error("Invalid variables");
79
+ }
80
+ const { errors, document } = parseAndValidate(query);
81
+ if (errors) {
82
+ return { type: "graphql", statusCode: 200, payload: { errors } };
83
+ }
84
+ const args = {
85
+ schema,
86
+ document,
87
+ rootValue: null,
88
+ contextValue: Object.create(null),
89
+ variableValues,
90
+ operationName,
91
+ };
92
+ await (0, grafast_1.hookArgs)(args, ctx, resolvedPreset);
93
+ try {
94
+ const result = await (0, grafast_1.execute)(args, resolvedPreset);
95
+ if ((0, grafast_1.isAsyncIterable)(result)) {
96
+ return {
97
+ type: "graphqlIncremental",
98
+ statusCode: 200,
99
+ iterator: result,
100
+ asString,
101
+ };
102
+ }
103
+ return { type: "graphql", statusCode: 200, payload: result, asString };
104
+ }
105
+ catch (e) {
106
+ console.error(e);
107
+ return {
108
+ type: "graphql",
109
+ statusCode: 500,
110
+ payload: {
111
+ errors: [new graphql_1.GraphQLError(e.message)],
112
+ extensions: args.rootValue?.[grafast_1.$$extensions],
113
+ },
114
+ };
115
+ }
116
+ };
117
+ };
118
+ exports.makeGraphQLHandler = makeGraphQLHandler;
119
+ //# sourceMappingURL=graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/middleware/graphql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ import type { PromiseOrDirect } from "grafast";
3
+ import type { RequestListener } from "http";
4
+ import type { ServerParams } from "../interfaces.js";
5
+ export interface Grafserv {
6
+ handler: RequestListener;
7
+ release(): Promise<void>;
8
+ onRelease(cb: () => PromiseOrDirect<void>): void;
9
+ setParams(result: ServerParams): void;
10
+ }
11
+ export declare function grafserv(preset: GraphileConfig.Preset, initialParams?: PromiseOrDirect<ServerParams>): Grafserv;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAY,eAAe,EAAqB,MAAM,SAAS,CAAC;AAS5E,OAAO,KAAK,EAAmB,eAAe,EAAkB,MAAM,MAAM,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmErD,MAAM,WAAW,QAAQ;IAEvB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,SAAS,CAAC,EAAE,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,cAAc,CAAC,MAAM,EAC7B,aAAa,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAC5C,QAAQ,CAibV"}
@@ -0,0 +1,431 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.grafserv = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const eventemitter3_1 = tslib_1.__importDefault(require("eventemitter3"));
6
+ const grafast_1 = require("grafast");
7
+ const graphile_config_1 = require("graphile-config");
8
+ const graphql_1 = require("graphql");
9
+ const graphiql_js_1 = require("./graphiql.js");
10
+ const graphql_js_1 = require("./graphql.js");
11
+ function getBodyFromRequest(req, maxLength) {
12
+ return new Promise((resolve, reject) => {
13
+ req.setEncoding("utf8");
14
+ let data = "";
15
+ const handleData = (chunk) => {
16
+ data += chunk;
17
+ if (data.length > maxLength) {
18
+ req.off("end", done);
19
+ req.off("error", reject);
20
+ req.off("data", handleData);
21
+ // TODO: validate this approach
22
+ reject(new Error("Too much data"));
23
+ }
24
+ };
25
+ const done = () => {
26
+ resolve(data);
27
+ };
28
+ req.on("end", done);
29
+ req.on("error", reject);
30
+ req.on("data", handleData);
31
+ });
32
+ }
33
+ function handleErrors(payload) {
34
+ if ("errors" in payload && payload.errors) {
35
+ payload.errors = payload.errors.map((e) => {
36
+ const obj = e instanceof graphql_1.GraphQLError
37
+ ? e.toJSON()
38
+ : { message: e.message, ...e };
39
+ return Object.assign(obj, {
40
+ message: (0, grafast_1.stripAnsi)(obj.message),
41
+ extensions: { stack: (0, grafast_1.stripAnsi)(e.stack ?? "").split("\n") },
42
+ });
43
+ });
44
+ }
45
+ }
46
+ function optionsFromConfig(config) {
47
+ const { graphqlPath = "/graphql", graphiql = true, graphiqlOnGraphQLGET = true, graphiqlPath = "/", watch = false, eventStreamRoute = "/graphql/stream", maxRequestLength = 100_000, } = config.server ?? {};
48
+ return {
49
+ graphqlPath,
50
+ graphiql,
51
+ graphiqlOnGraphQLGET,
52
+ graphiqlPath,
53
+ watch,
54
+ eventStreamRoute,
55
+ maxRequestLength,
56
+ };
57
+ }
58
+ function grafserv(preset, initialParams) {
59
+ /**
60
+ * Mutable options, change them by calling `setParams`. Don't dereference
61
+ * properties as they should be dynamic.
62
+ */
63
+ const resolvedPreset = (0, graphile_config_1.resolvePresets)([preset]);
64
+ let dynamicOptions = optionsFromConfig(resolvedPreset);
65
+ const sendResult = (res, handlerResult) => {
66
+ switch (handlerResult.type) {
67
+ case "graphql": {
68
+ const { payload, statusCode = 200, asString } = handlerResult;
69
+ handleErrors(payload);
70
+ res.writeHead(statusCode, {
71
+ "Content-Type": "application/json",
72
+ ...(dynamicOptions.watch
73
+ ? {
74
+ "X-GraphQL-Event-Stream": dynamicOptions.eventStreamRoute,
75
+ }
76
+ : null),
77
+ });
78
+ const payloadString = (0, grafast_1.stringifyPayload)(payload, asString);
79
+ res.end(payloadString);
80
+ break;
81
+ }
82
+ case "graphqlIncremental": {
83
+ const { iterator, statusCode = 200, asString } = handlerResult;
84
+ res.writeHead(statusCode, {
85
+ "Content-Type": 'multipart/mixed; boundary="-"',
86
+ "Transfer-Encoding": "chunked",
87
+ ...(dynamicOptions.watch
88
+ ? {
89
+ "X-GraphQL-Event-Stream": dynamicOptions.eventStreamRoute,
90
+ }
91
+ : null),
92
+ });
93
+ (async () => {
94
+ // TODO: use manual looping so the iterable can be aborted without awaiting the promise
95
+ try {
96
+ for await (const payload of iterator) {
97
+ handleErrors(payload);
98
+ const payloadString = (0, grafast_1.stringifyPayload)(payload, asString);
99
+ res.write("\r\n---\r\nContent-Type: application/json\r\n\r\n" +
100
+ payloadString);
101
+ }
102
+ }
103
+ finally {
104
+ res.write("\r\n-----\r\n");
105
+ res.end();
106
+ }
107
+ })().catch((e) => {
108
+ console.error(`Error occurred when streaming result: ${e}`);
109
+ try {
110
+ res.end();
111
+ }
112
+ catch (e2) {
113
+ console.error(`A further error occurred when terminating the request: ${e2}`);
114
+ }
115
+ });
116
+ break;
117
+ }
118
+ case "text":
119
+ case "html": {
120
+ const { payload, statusCode = 200 } = handlerResult;
121
+ res.writeHead(statusCode, {
122
+ "Content-Type": handlerResult.type === "html"
123
+ ? "text/html; charset=utf-8"
124
+ : "text/plain; charset=utf-8",
125
+ });
126
+ res.end(payload);
127
+ break;
128
+ }
129
+ case "event-stream": {
130
+ const { payload: stream, statusCode = 200 } = handlerResult;
131
+ // Making sure these options are set.
132
+ res.req.socket.setTimeout(0);
133
+ res.req.socket.setNoDelay(true);
134
+ res.req.socket.setKeepAlive(true);
135
+ // Set headers for Server-Sent Events.
136
+ // Don't buffer EventStream in nginx
137
+ res.setHeader("X-Accel-Buffering", "no");
138
+ res.setHeader("Content-Type", "text/event-stream");
139
+ res.setHeader("Cache-Control", "no-cache, no-transform");
140
+ if (res.req.httpVersionMajor >= 2) {
141
+ // NOOP
142
+ }
143
+ else {
144
+ res.setHeader("Connection", "keep-alive");
145
+ }
146
+ res.writeHead(statusCode);
147
+ // Creates a stream for the response
148
+ let stopped = false;
149
+ const send = (event) => {
150
+ if (stopped) {
151
+ return;
152
+ }
153
+ let payload = "";
154
+ if (event.event) {
155
+ payload += `event: ${event.event}\n`;
156
+ }
157
+ if (event.id) {
158
+ payload += `id: ${event.id}\n`;
159
+ }
160
+ if (event.retry) {
161
+ payload += `retry: ${event.retry}\n`;
162
+ }
163
+ if (event.data != null) {
164
+ payload += `data: ${event.data.replace(/\n/g, "\ndata: ")}\n`;
165
+ }
166
+ payload += "\n";
167
+ res.write(payload);
168
+ // Technically we should see if `.write()` returned false, and if so we
169
+ // should pause the stream. However, since our stream is coming from
170
+ // watch mode, we find it unlikely that a significant amount of data
171
+ // will be buffered (and we don't recommend watch mode in production),
172
+ // so it doesn't feel like we need this currently. If it turns out you
173
+ // need this, a PR would be welcome.
174
+ if (typeof res.flush === "function") {
175
+ // https://github.com/expressjs/compression#server-sent-events
176
+ res.flush();
177
+ }
178
+ else if (typeof res.flushHeaders === "function") {
179
+ res.flushHeaders();
180
+ }
181
+ };
182
+ // Notify client that connection is open.
183
+ send({ event: "open" });
184
+ // Process stream
185
+ const iterator = stream[Symbol.asyncIterator]();
186
+ const waitNext = () => {
187
+ const n = iterator.next();
188
+ n.then((r) => {
189
+ if (!r.done || r.value) {
190
+ send(r.value);
191
+ }
192
+ if (r.done) {
193
+ res.end();
194
+ cleanup();
195
+ return;
196
+ }
197
+ else {
198
+ if (!stopped) {
199
+ waitNext();
200
+ }
201
+ }
202
+ }, (error) => {
203
+ console.error("Error occurred processing event stream:", error);
204
+ send({
205
+ event: "error",
206
+ data: JSON.stringify({
207
+ errors: [
208
+ { message: "Error occurred processing event stream" },
209
+ ],
210
+ }),
211
+ });
212
+ res.end();
213
+ cleanup();
214
+ });
215
+ };
216
+ waitNext();
217
+ // Clean up when connection closes.
218
+ const cleanup = () => {
219
+ stopped = true;
220
+ try {
221
+ iterator.return?.();
222
+ }
223
+ catch {
224
+ /* nom nom nom */
225
+ }
226
+ res.req.removeListener("close", cleanup);
227
+ res.req.removeListener("finish", cleanup);
228
+ res.req.removeListener("error", cleanup);
229
+ };
230
+ res.req.on("close", cleanup);
231
+ res.req.on("finish", cleanup);
232
+ res.req.on("error", cleanup);
233
+ break;
234
+ }
235
+ default: {
236
+ const never = handlerResult;
237
+ console.error(`Did not understand '${never}' passed to sendResult`);
238
+ res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
239
+ res.end("Unexpected input to sendResult");
240
+ }
241
+ }
242
+ };
243
+ const makeErrorHandler = (req, res, next) => {
244
+ if (typeof next === "function") {
245
+ return next;
246
+ }
247
+ return (e) => {
248
+ console.error(e);
249
+ sendResult(res, {
250
+ statusCode: 500,
251
+ type: "text",
252
+ payload: "Internal server error",
253
+ });
254
+ };
255
+ };
256
+ const eventEmitter = new eventemitter3_1.default();
257
+ function makeStream() {
258
+ const queue = [];
259
+ let finished = false;
260
+ const bump = () => {
261
+ const next = queue.shift();
262
+ if (next) {
263
+ next.resolve({
264
+ done: false,
265
+ value: { event: "change", data: "schema" },
266
+ });
267
+ }
268
+ };
269
+ const flushQueue = (e) => {
270
+ const entries = queue.splice(0, queue.length);
271
+ for (const entry of entries) {
272
+ if (e) {
273
+ entry.reject(e);
274
+ }
275
+ else {
276
+ entry.resolve({ done: true });
277
+ }
278
+ }
279
+ };
280
+ eventEmitter.on("newSchema", bump);
281
+ return {
282
+ [Symbol.asyncIterator]() {
283
+ return this;
284
+ },
285
+ next() {
286
+ if (finished) {
287
+ return Promise.resolve({
288
+ done: true,
289
+ });
290
+ }
291
+ return new Promise((resolve, reject) => {
292
+ queue.push({ resolve, reject });
293
+ });
294
+ },
295
+ return() {
296
+ finished = true;
297
+ if (queue.length) {
298
+ flushQueue();
299
+ }
300
+ return Promise.resolve({
301
+ done: true,
302
+ });
303
+ },
304
+ throw(e) {
305
+ if (queue.length) {
306
+ flushQueue(e);
307
+ }
308
+ return Promise.reject(e);
309
+ },
310
+ };
311
+ }
312
+ function addHandlers(r) {
313
+ eventEmitter.emit("newSchema", r.schema);
314
+ return {
315
+ ...r,
316
+ graphqlHandler: (0, graphql_js_1.makeGraphQLHandler)(r),
317
+ graphiqlHandler: (0, graphiql_js_1.makeGraphiQLHandler)(r),
318
+ };
319
+ }
320
+ let serverParams = initialParams == null
321
+ ? (0, grafast_1.defer)()
322
+ : (0, grafast_1.isPromiseLike)(initialParams)
323
+ ? initialParams.then(addHandlers)
324
+ : addHandlers(initialParams);
325
+ const middleware = (req, res, next) => {
326
+ const handleError = makeErrorHandler(req, res, next);
327
+ // TODO: consider allowing GraphQL queries over 'GET'
328
+ if (req.url === dynamicOptions.graphqlPath && req.method === "POST") {
329
+ (async () => {
330
+ const bodyRaw = await getBodyFromRequest(req, dynamicOptions.maxRequestLength);
331
+ // TODO: this parsing is unsafe (it doesn't even check the
332
+ // content-type!) - replace it with V4's behaviour
333
+ const body = JSON.parse(bodyRaw);
334
+ const sP = (0, grafast_1.isPromiseLike)(serverParams)
335
+ ? await serverParams
336
+ : serverParams;
337
+ const result = await sP.graphqlHandler(resolvedPreset, {
338
+ httpRequest: req,
339
+ }, body);
340
+ sendResult(res, result);
341
+ })().catch((e) => {
342
+ // Special error handling for GraphQL route
343
+ try {
344
+ console.error("An error occurred whilst attempting to handle the GraphQL request:");
345
+ console.dir(e);
346
+ sendResult(res, {
347
+ type: "graphql",
348
+ payload: { errors: [e] },
349
+ statusCode: 500,
350
+ });
351
+ }
352
+ catch (e2) {
353
+ console.error("An error occurred whilst telling the user than an error occurred:", e2);
354
+ }
355
+ });
356
+ return;
357
+ }
358
+ // TODO: handle 'HEAD' requests
359
+ if (dynamicOptions.graphiql &&
360
+ (req.url === dynamicOptions.graphiqlPath ||
361
+ (dynamicOptions.graphiqlOnGraphQLGET &&
362
+ req.url === dynamicOptions.graphqlPath)) &&
363
+ req.method === "GET") {
364
+ (async () => {
365
+ const sP = (0, grafast_1.isPromiseLike)(serverParams)
366
+ ? await serverParams
367
+ : serverParams;
368
+ const result = await sP.graphiqlHandler();
369
+ sendResult(res, result);
370
+ })().catch(handleError);
371
+ return;
372
+ }
373
+ if (dynamicOptions.watch &&
374
+ req.url === dynamicOptions.eventStreamRoute &&
375
+ req.method === "GET") {
376
+ (async () => {
377
+ const stream = makeStream();
378
+ sendResult(res, {
379
+ type: "event-stream",
380
+ payload: stream,
381
+ statusCode: 200,
382
+ });
383
+ })().catch(handleError);
384
+ return;
385
+ }
386
+ // Not handled
387
+ if (next) {
388
+ return next();
389
+ }
390
+ else {
391
+ console.log(`Unhandled ${req.method} to ${req.url}`);
392
+ sendResult(res, {
393
+ type: "text",
394
+ payload: `Could not process ${req.method} request to ${req.url} ─ please POST requests to ${dynamicOptions.graphqlPath}`,
395
+ statusCode: 404,
396
+ });
397
+ return;
398
+ }
399
+ };
400
+ const releaseHandlers = [];
401
+ return {
402
+ handler: middleware,
403
+ async release() {
404
+ for (const handler of releaseHandlers) {
405
+ try {
406
+ await handler();
407
+ }
408
+ catch (e) {
409
+ /* nom nom nom */
410
+ }
411
+ }
412
+ },
413
+ onRelease(cb) {
414
+ releaseHandlers.push(cb);
415
+ },
416
+ setParams(newParams) {
417
+ const newParamsWithHandlers = addHandlers(newParams);
418
+ if (
419
+ // If serverParams was deferred, resolve it
420
+ serverParams !== null &&
421
+ "resolve" in serverParams &&
422
+ typeof serverParams.resolve === "function") {
423
+ serverParams.resolve(newParamsWithHandlers);
424
+ }
425
+ dynamicOptions = optionsFromConfig(newParams.resolvedPreset);
426
+ serverParams = newParamsWithHandlers;
427
+ },
428
+ };
429
+ }
430
+ exports.grafserv = grafserv;
431
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AsyncExecutionResult, ExecutionResult } from "graphql";
2
+ interface IHandlerResult {
3
+ type: string;
4
+ statusCode?: number;
5
+ }
6
+ export interface HTMLHandlerResult extends IHandlerResult {
7
+ type: "html";
8
+ payload: string;
9
+ }
10
+ export interface TextHandlerResult extends IHandlerResult {
11
+ type: "text";
12
+ payload: string;
13
+ }
14
+ export interface GraphQLHandlerResult extends IHandlerResult {
15
+ type: "graphql";
16
+ payload: ExecutionResult;
17
+ asString?: boolean;
18
+ }
19
+ /** @see {@link https://github.com/glasser/graphql-over-http/blob/dac9638459bb17dd3ade889334fc2fadee9d11e5/rfcs/IncrementalDelivery.md} */
20
+ export interface GraphQLIncrementalHandlerResult extends IHandlerResult {
21
+ type: "graphqlIncremental";
22
+ iterator: AsyncGenerator<AsyncExecutionResult, void, undefined>;
23
+ asString?: boolean;
24
+ }
25
+ export interface EventStreamEvent {
26
+ /** The name of the event. Use simple names. Don't put newlines in it! */
27
+ event: string;
28
+ /** The data for this event. We'll automatically split this on newlines for you */
29
+ data?: string;
30
+ id?: string;
31
+ /** integer number of milliseconds indicating how long to wait before reconnecting if connection is lost */
32
+ retry?: number;
33
+ }
34
+ export interface EventStreamHeandlerResult extends IHandlerResult {
35
+ type: "event-stream";
36
+ payload: AsyncIterable<EventStreamEvent>;
37
+ }
38
+ export declare type HandlerResult = HTMLHandlerResult | GraphQLHandlerResult | GraphQLIncrementalHandlerResult | TextHandlerResult | EventStreamHeandlerResult;
39
+ export {};
40
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/middleware/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAErE,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,0IAA0I;AAC1I,MAAM,WAAW,+BAAgC,SAAQ,cAAc;IACrE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2GAA2G;IAC3G,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CAC1C;AACD,oBAAY,aAAa,GACrB,iBAAiB,GACjB,oBAAoB,GACpB,+BAA+B,GAC/B,iBAAiB,GACjB,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/middleware/interfaces.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,14 +1,61 @@
1
1
  {
2
2
  "name": "grafserv",
3
- "version": "0.0.0",
4
- "description": "Coming 2023!",
5
- "main": "index.js",
3
+ "version": "0.0.1-0.1",
4
+ "description": "A highly optimized server for GraphQL, powered by Grafast",
5
+ "type": "commonjs",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
6
14
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
15
+ "prepack": "tsc -b"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/graphile/heart.git"
8
20
  },
21
+ "keywords": [
22
+ "server",
23
+ "grafast",
24
+ "graphql",
25
+ "graphile",
26
+ "fast",
27
+ "graphite"
28
+ ],
9
29
  "author": "Benjie Gillam <code@benjiegillam.com>",
10
30
  "license": "MIT",
31
+ "bugs": {
32
+ "url": "https://github.com/graphile/heart/issues"
33
+ },
34
+ "homepage": "https://github.com/graphile/heart/tree/main/grafast/grafserv",
35
+ "dependencies": {
36
+ "@graphile/lru": "^5.0.0-0.1",
37
+ "debug": "^4.1.1",
38
+ "eventemitter3": "^4.0.7",
39
+ "graphile-config": "^0.0.1-0.0",
40
+ "ruru": "^2.0.0-0.0",
41
+ "tslib": "^2.4.0"
42
+ },
43
+ "engines": {
44
+ "node": ">=16.10"
45
+ },
46
+ "peerDependencies": {
47
+ "grafast": "^0.0.1-0.1"
48
+ },
49
+ "devDependencies": {
50
+ "grafast": "^0.0.1-0.1",
51
+ "jest": "^28.1.0",
52
+ "jest-serializer-graphql-schema": "^5.0.0-0.1",
53
+ "nodemon": "^2.0.15",
54
+ "ts-node": "^10.9.1",
55
+ "typescript": "^4.8.1-rc"
56
+ },
11
57
  "files": [
58
+ "dist",
12
59
  "index.js"
13
60
  ]
14
- }
61
+ }
package/index.js DELETED
@@ -1 +0,0 @@
1
- console.log('Grafast is coming soon!')