grafserv 0.0.0 → 0.0.1-0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/README.md +248 -1
  3. package/dist/accept.d.ts +8 -0
  4. package/dist/accept.d.ts.map +1 -0
  5. package/dist/accept.js +419 -0
  6. package/dist/accept.js.map +1 -0
  7. package/dist/core/base.d.ts +35 -0
  8. package/dist/core/base.d.ts.map +1 -0
  9. package/dist/core/base.js +381 -0
  10. package/dist/core/base.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +6 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/interfaces.d.ts +177 -0
  16. package/dist/interfaces.d.ts.map +1 -0
  17. package/dist/interfaces.js +6 -0
  18. package/dist/interfaces.js.map +1 -0
  19. package/dist/mapIterator.d.ts +2 -0
  20. package/dist/mapIterator.d.ts.map +1 -0
  21. package/dist/mapIterator.js +65 -0
  22. package/dist/mapIterator.js.map +1 -0
  23. package/dist/middleware/graphiql.d.ts +4 -0
  24. package/dist/middleware/graphiql.d.ts.map +1 -0
  25. package/dist/middleware/graphiql.js +31 -0
  26. package/dist/middleware/graphiql.js.map +1 -0
  27. package/dist/middleware/graphql.d.ts +9 -0
  28. package/dist/middleware/graphql.d.ts.map +1 -0
  29. package/dist/middleware/graphql.js +415 -0
  30. package/dist/middleware/graphql.js.map +1 -0
  31. package/dist/options.d.ts +14 -0
  32. package/dist/options.d.ts.map +1 -0
  33. package/dist/options.js +23 -0
  34. package/dist/options.js.map +1 -0
  35. package/dist/servers/express/v4/index.d.ts +20 -0
  36. package/dist/servers/express/v4/index.d.ts.map +1 -0
  37. package/dist/servers/express/v4/index.js +43 -0
  38. package/dist/servers/express/v4/index.js.map +1 -0
  39. package/dist/servers/fastify/v4/index.d.ts +21 -0
  40. package/dist/servers/fastify/v4/index.d.ts.map +1 -0
  41. package/dist/servers/fastify/v4/index.js +179 -0
  42. package/dist/servers/fastify/v4/index.js.map +1 -0
  43. package/dist/servers/koa/v2/index.d.ts +21 -0
  44. package/dist/servers/koa/v2/index.d.ts.map +1 -0
  45. package/dist/servers/koa/v2/index.js +110 -0
  46. package/dist/servers/koa/v2/index.js.map +1 -0
  47. package/dist/servers/node/index.d.ts +22 -0
  48. package/dist/servers/node/index.d.ts.map +1 -0
  49. package/dist/servers/node/index.js +173 -0
  50. package/dist/servers/node/index.js.map +1 -0
  51. package/dist/utils.d.ts +16 -0
  52. package/dist/utils.d.ts.map +1 -0
  53. package/dist/utils.js +121 -0
  54. package/dist/utils.js.map +1 -0
  55. package/package.json +76 -5
  56. package/index.js +0 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapIterator = void 0;
4
+ function mapIterator(iterable, cb, end, initial) {
5
+ const iterator = iterable[Symbol.asyncIterator]();
6
+ /**
7
+ * -1 - starting
8
+ * 0 - normal
9
+ * 1 - ending
10
+ * 2 - ended
11
+ */
12
+ let status = -1;
13
+ const mappedIterator = {
14
+ next() {
15
+ if (status === -1) {
16
+ status = 0;
17
+ if (typeof initial === "function") {
18
+ return Promise.resolve({ value: initial(), done: false });
19
+ }
20
+ }
21
+ if (status === 1) {
22
+ status = 2;
23
+ }
24
+ // NO 'else' here!
25
+ if (status === 2) {
26
+ return Promise.resolve({ value: undefined, done: true });
27
+ }
28
+ const next = iterator.next();
29
+ return next.then((v) => {
30
+ if (v.done) {
31
+ if (v.value !== undefined) {
32
+ throw new Error("Invalid assumption; tell Benjie he did bad.");
33
+ }
34
+ if (end) {
35
+ status = 1;
36
+ return { value: end(), done: false };
37
+ }
38
+ else {
39
+ status = 2;
40
+ return { value: undefined, done: true };
41
+ }
42
+ }
43
+ else {
44
+ return { value: cb(v.value), done: false };
45
+ }
46
+ });
47
+ },
48
+ return(value) {
49
+ status = 2;
50
+ iterator.return?.(value);
51
+ return Promise.resolve({ value: undefined, done: true });
52
+ },
53
+ throw(error) {
54
+ status = 2;
55
+ iterator.throw?.(error);
56
+ return Promise.reject(error);
57
+ },
58
+ [Symbol.asyncIterator]() {
59
+ return this;
60
+ },
61
+ };
62
+ return mappedIterator;
63
+ }
64
+ exports.mapIterator = mapIterator;
65
+ //# sourceMappingURL=mapIterator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapIterator.js","sourceRoot":"","sources":["../src/mapIterator.ts"],"names":[],"mappings":";;;AAAA,SAAgB,WAAW,CACzB,QAA0B,EAC1B,EAAqB,EACrB,GAAa,EACb,OAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAClD;;;;;OAKG;IACH,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,MAAM,cAAc,GAAsB;QACxC,IAAI;YACF,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;gBACjB,MAAM,GAAG,CAAC,CAAC;gBACX,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;oBACjC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC3D;aACF;YACD,IAAI,MAAM,KAAK,CAAC,EAAE;gBAChB,MAAM,GAAG,CAAC,CAAC;aACZ;YACD,kBAAkB;YAClB,IAAI,MAAM,KAAK,CAAC,EAAE;gBAChB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1D;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,IAAI,CAAC,CAAC,IAAI,EAAE;oBACV,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;wBACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;qBAChE;oBACD,IAAI,GAAG,EAAE;wBACP,MAAM,GAAG,CAAC,CAAC;wBACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;qBACtC;yBAAM;wBACL,MAAM,GAAG,CAAC,CAAC;wBACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;qBACzC;iBACF;qBAAM;oBACL,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;iBAC5C;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,KAAK;YACV,MAAM,GAAG,CAAC,CAAC;YACX,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,GAAG,CAAC,CAAC;YACX,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AA/DD,kCA+DC"}
@@ -0,0 +1,4 @@
1
+ import type { HandlerResult, NormalizedRequestDigest } from "../interfaces.js";
2
+ import type { OptionsFromConfig } from "../options.js";
3
+ export declare function makeGraphiQLHandler(_resolvedPreset: GraphileConfig.ResolvedPreset, dynamicOptions: OptionsFromConfig): (request: NormalizedRequestDigest) => 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,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOvD,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,cAAc,CAAC,cAAc,EAC9C,cAAc,EAAE,iBAAiB,aAEV,uBAAuB,KAAG,QAAQ,aAAa,CAAC,CAsBxE"}
@@ -0,0 +1,31 @@
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(_resolvedPreset, dynamicOptions) {
8
+ return async (request) => {
9
+ if (!ruruHTML) {
10
+ ruruHTML = (await ruruServer).ruruHTML;
11
+ }
12
+ const config = {
13
+ endpoint: dynamicOptions.graphqlPath,
14
+ // TODO: websocket endpoint
15
+ debugTools: dynamicOptions.explain === true
16
+ ? ["explain", "plan"]
17
+ : dynamicOptions.explain === false
18
+ ? []
19
+ : dynamicOptions.explain,
20
+ };
21
+ return {
22
+ statusCode: 200,
23
+ request,
24
+ dynamicOptions,
25
+ type: "html",
26
+ payload: Buffer.from(ruruHTML(config), "utf8"),
27
+ };
28
+ };
29
+ }
30
+ exports.makeGraphiQLHandler = makeGraphiQLHandler;
31
+ //# 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;AAEzC,IAAI,QAAQ,GAAiC,SAAS,CAAC;AAEvD,0CAA0C;AAC1C,SAAgB,mBAAmB,CACjC,eAA8C,EAC9C,cAAiC;IAEjC,OAAO,KAAK,EAAE,OAAgC,EAA0B,EAAE;QACxE,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,QAAQ,CAAC;SACxC;QACD,MAAM,MAAM,GAAoC;YAC9C,QAAQ,EAAE,cAAc,CAAC,WAAW;YACpC,2BAA2B;YAC3B,UAAU,EACR,cAAc,CAAC,OAAO,KAAK,IAAI;gBAC7B,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC;gBACrB,CAAC,CAAC,cAAc,CAAC,OAAO,KAAK,KAAK;oBAClC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAE,cAAc,CAAC,OAAiB;SACxC,CAAC;QACF,OAAO;YACL,UAAU,EAAE,GAAG;YACf,OAAO;YACP,cAAc;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;SAC/C,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AA1BD,kDA0BC"}
@@ -0,0 +1,9 @@
1
+ import type { PromiseOrDirect } from "grafast";
2
+ import type { GraphQLSchema } from "graphql";
3
+ import type { HandlerResult, NormalizedRequestDigest } from "../interfaces.js";
4
+ import type { OptionsFromConfig } from "../options.js";
5
+ export declare const APPLICATION_JSON = "application/json;charset=utf-8";
6
+ export declare const APPLICATION_GRAPHQL_RESPONSE_JSON = "application/graphql-response+json;charset=utf-8";
7
+ export declare const TEXT_HTML = "text/html;charset=utf-8";
8
+ export declare const makeGraphQLHandler: (resolvedPreset: GraphileConfig.ResolvedPreset, dynamicOptions: OptionsFromConfig, schemaOrPromise: PromiseOrDirect<GraphQLSchema> | null) => (request: NormalizedRequestDigest, graphiqlHandler?: ((request: NormalizedRequestDigest) => Promise<HandlerResult | null>) | undefined) => Promise<HandlerResult | null>;
9
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/middleware/graphql.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ/C,OAAO,KAAK,EAA+B,aAAa,EAAE,MAAM,SAAS,CAAC;AAW1E,OAAO,KAAK,EAEV,aAAa,EAEb,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAwPvD,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AACjE,eAAO,MAAM,iCAAiC,oDACK,CAAC;AACpD,eAAO,MAAM,SAAS,4BAA4B,CAAC;AAiBnD,eAAO,MAAM,kBAAkB,mBACb,eAAe,cAAc,kBAC7B,iBAAiB,mBAChB,gBAAgB,aAAa,CAAC,GAAG,IAAI,eAkD3C,uBAAuB,+BAErB,uBAAuB,KAC7B,QAAQ,aAAa,GAAG,IAAI,CAAC,kBACjC,QAAQ,aAAa,GAAG,IAAI,CA2LhC,CAAC"}
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeGraphQLHandler = exports.TEXT_HTML = exports.APPLICATION_GRAPHQL_RESPONSE_JSON = exports.APPLICATION_JSON = 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
+ const node_querystring_1 = require("node:querystring");
9
+ const accept_js_1 = require("../accept.js");
10
+ const interfaces_js_1 = require("../interfaces.js");
11
+ const utils_js_1 = require("../utils.js");
12
+ let lastString;
13
+ let lastHash;
14
+ const calculateQueryHash = (queryString) => {
15
+ if (queryString !== lastString) {
16
+ lastString = queryString;
17
+ lastHash = (0, crypto_1.createHash)("sha1").update(queryString).digest("base64");
18
+ }
19
+ return lastHash;
20
+ };
21
+ function makeParseAndValidateFunction(schema) {
22
+ const parseAndValidationCache = new lru_1.LRU({
23
+ maxLength: 500,
24
+ });
25
+ let lastParseAndValidateQuery;
26
+ let lastParseAndValidateResult;
27
+ function parseAndValidate(query) {
28
+ if (lastParseAndValidateQuery === query) {
29
+ return lastParseAndValidateResult;
30
+ }
31
+ const hash = query.length > 500 ? calculateQueryHash(query) : query;
32
+ const cached = parseAndValidationCache.get(hash);
33
+ if (cached) {
34
+ lastParseAndValidateQuery = query;
35
+ lastParseAndValidateResult = cached;
36
+ return cached;
37
+ }
38
+ const source = new graphql_1.Source(query, "GraphQL HTTP Request");
39
+ let document;
40
+ try {
41
+ document = (0, graphql_1.parse)(source);
42
+ }
43
+ catch (e) {
44
+ const result = {
45
+ errors: [
46
+ new graphql_1.GraphQLError(e.message, null, undefined, undefined, undefined, e, undefined),
47
+ ],
48
+ };
49
+ parseAndValidationCache.set(hash, result);
50
+ lastParseAndValidateQuery = query;
51
+ lastParseAndValidateResult = result;
52
+ return result;
53
+ }
54
+ const errors = (0, graphql_1.validate)(schema, document);
55
+ const result = errors.length
56
+ ? { errors }
57
+ : { document };
58
+ parseAndValidationCache.set(hash, result);
59
+ lastParseAndValidateQuery = query;
60
+ lastParseAndValidateResult = result;
61
+ return result;
62
+ }
63
+ return parseAndValidate;
64
+ }
65
+ function processAndValidateQueryParams(params) {
66
+ const query = params.query;
67
+ if (typeof query !== "string") {
68
+ throw (0, utils_js_1.httpError)(400, "query must be a string");
69
+ }
70
+ const operationName = params.operationName ?? undefined;
71
+ if (operationName != null && typeof operationName !== "string") {
72
+ throw (0, utils_js_1.httpError)(400, "operationName, if given, must be a string");
73
+ }
74
+ const variablesString = params.variables ?? undefined;
75
+ const variableValues = typeof variablesString === "string"
76
+ ? JSON.parse(variablesString)
77
+ : undefined;
78
+ if (variableValues != null &&
79
+ (typeof variableValues !== "object" || Array.isArray(variableValues))) {
80
+ throw (0, utils_js_1.httpError)(400, "Invalid variables; expected JSON-encoded object");
81
+ }
82
+ const extensionsString = params.extensions ?? undefined;
83
+ const extensions = typeof extensionsString === "string"
84
+ ? JSON.parse(extensionsString)
85
+ : undefined;
86
+ if (extensions != null &&
87
+ (typeof extensions !== "object" || Array.isArray(extensions))) {
88
+ throw (0, utils_js_1.httpError)(400, "Invalid extensions; expected JSON-encoded object");
89
+ }
90
+ return {
91
+ query,
92
+ operationName,
93
+ variableValues,
94
+ extensions,
95
+ };
96
+ }
97
+ function processAndValidateJSON(params) {
98
+ if (!params) {
99
+ throw (0, utils_js_1.httpError)(400, "No body");
100
+ }
101
+ if (typeof params !== "object" || Array.isArray(params)) {
102
+ throw (0, utils_js_1.httpError)(400, "Invalid body; expected object");
103
+ }
104
+ const query = params.query;
105
+ if (typeof query !== "string") {
106
+ throw (0, utils_js_1.httpError)(400, "query must be a string");
107
+ }
108
+ const operationName = params.operationName ?? undefined;
109
+ if (operationName != null && typeof operationName !== "string") {
110
+ throw (0, utils_js_1.httpError)(400, "operationName, if given, must be a string");
111
+ }
112
+ const variableValues = params.variables ?? undefined;
113
+ if (variableValues != null &&
114
+ (typeof variableValues !== "object" || Array.isArray(variableValues))) {
115
+ throw (0, utils_js_1.httpError)(400, "Invalid variables; expected JSON-encoded object");
116
+ }
117
+ const extensions = params.extensions ?? undefined;
118
+ if (extensions != null &&
119
+ (typeof extensions !== "object" || Array.isArray(extensions))) {
120
+ throw (0, utils_js_1.httpError)(400, "Invalid extensions; expected JSON-encoded object");
121
+ }
122
+ return {
123
+ query,
124
+ operationName,
125
+ variableValues,
126
+ extensions,
127
+ };
128
+ }
129
+ function processAndValidateBody(request, body) {
130
+ const contentType = request[interfaces_js_1.$$normalizedHeaders]["content-type"];
131
+ if (!contentType) {
132
+ throw (0, utils_js_1.httpError)(400, "Could not determine the Content-Type of the request");
133
+ }
134
+ const semi = contentType.indexOf(";");
135
+ const ct = semi >= 0 ? contentType.slice(0, semi).trim() : contentType.trim();
136
+ // TODO: we should probably at least look at the parameters... e.g. throw if encoding !== utf-8
137
+ switch (ct) {
138
+ case "application/json": {
139
+ switch (body.type) {
140
+ case "buffer": {
141
+ return processAndValidateJSON(JSON.parse(body.buffer.toString("utf8")));
142
+ }
143
+ case "text": {
144
+ return processAndValidateJSON(JSON.parse(body.text));
145
+ }
146
+ case "json": {
147
+ return processAndValidateJSON(body.json);
148
+ }
149
+ default: {
150
+ const never = body;
151
+ throw (0, utils_js_1.httpError)(400, `Do not understand type ${never.type}`);
152
+ }
153
+ }
154
+ }
155
+ case "application/x-www-form-urlencoded": {
156
+ switch (body.type) {
157
+ case "buffer": {
158
+ return processAndValidateQueryParams((0, node_querystring_1.parse)(body.buffer.toString("utf8")));
159
+ }
160
+ case "text": {
161
+ return processAndValidateQueryParams((0, node_querystring_1.parse)(body.text));
162
+ }
163
+ case "json": {
164
+ if (body.json == null ||
165
+ typeof body.json !== "object" ||
166
+ Array.isArray(body.json)) {
167
+ throw (0, utils_js_1.httpError)(400, `Invalid body`);
168
+ }
169
+ return processAndValidateQueryParams(body.json);
170
+ }
171
+ default: {
172
+ const never = body;
173
+ throw (0, utils_js_1.httpError)(400, `Do not understand type ${never.type}`);
174
+ }
175
+ }
176
+ }
177
+ case "application/graphql": {
178
+ // TODO: I have a vague feeling that people that do this pass variables via the query string?
179
+ switch (body.type) {
180
+ case "text": {
181
+ return {
182
+ query: body.text,
183
+ operationName: undefined,
184
+ variableValues: undefined,
185
+ extensions: undefined,
186
+ };
187
+ }
188
+ case "buffer": {
189
+ return {
190
+ query: body.buffer.toString("utf8"),
191
+ operationName: undefined,
192
+ variableValues: undefined,
193
+ extensions: undefined,
194
+ };
195
+ }
196
+ case "json": {
197
+ return processAndValidateJSON(body.json);
198
+ }
199
+ default: {
200
+ const never = body;
201
+ throw (0, utils_js_1.httpError)(400, `Do not understand type ${never.type}`);
202
+ }
203
+ }
204
+ }
205
+ default: {
206
+ throw (0, utils_js_1.httpError)(400, `Do not understand content type`);
207
+ }
208
+ }
209
+ }
210
+ exports.APPLICATION_JSON = "application/json;charset=utf-8";
211
+ exports.APPLICATION_GRAPHQL_RESPONSE_JSON = "application/graphql-response+json;charset=utf-8";
212
+ exports.TEXT_HTML = "text/html;charset=utf-8";
213
+ /** https://graphql.github.io/graphql-over-http/draft/#sec-Legacy-Watershed */
214
+ const isAfterWatershed = Date.now() >= +new Date(2025, 0, 1);
215
+ const GRAPHQL_TYPES = isAfterWatershed
216
+ ? [exports.APPLICATION_GRAPHQL_RESPONSE_JSON, exports.APPLICATION_JSON]
217
+ : [exports.APPLICATION_JSON, exports.APPLICATION_GRAPHQL_RESPONSE_JSON];
218
+ const graphqlAcceptMatcher = (0, accept_js_1.makeAcceptMatcher)([...GRAPHQL_TYPES]);
219
+ const graphqlOrHTMLAcceptMatcher = (0, accept_js_1.makeAcceptMatcher)([
220
+ ...GRAPHQL_TYPES,
221
+ // Must be lowest priority, otherwise GraphiQL may override GraphQL in some
222
+ // situations
223
+ exports.TEXT_HTML,
224
+ ]);
225
+ const makeGraphQLHandler = (resolvedPreset, dynamicOptions, schemaOrPromise) => {
226
+ if (schemaOrPromise == null) {
227
+ const err = Promise.reject(new graphql_1.GraphQLError("The schema is currently unavailable", null, null, null, null, null, {
228
+ statusCode: 503,
229
+ }));
230
+ return () => err;
231
+ }
232
+ let latestSchema;
233
+ let latestParseAndValidate;
234
+ let wait;
235
+ if ((0, grafast_1.isPromiseLike)(schemaOrPromise)) {
236
+ wait = schemaOrPromise.then((_schema) => {
237
+ if (_schema == null) {
238
+ throw new graphql_1.GraphQLError("The schema is current unavailable.", null, null, null, null, null, {
239
+ statusCode: 503,
240
+ });
241
+ }
242
+ latestSchema = _schema;
243
+ latestParseAndValidate = makeParseAndValidateFunction(latestSchema);
244
+ wait = null;
245
+ });
246
+ }
247
+ else {
248
+ latestSchema = schemaOrPromise;
249
+ latestParseAndValidate = makeParseAndValidateFunction(latestSchema);
250
+ }
251
+ const outputDataAsString = dynamicOptions.outputDataAsString;
252
+ return async (request, graphiqlHandler) => {
253
+ const accept = request[interfaces_js_1.$$normalizedHeaders].accept;
254
+ // Do they want HTML, or do they want GraphQL?
255
+ const chosenContentType = request.method === "GET" &&
256
+ dynamicOptions.graphiqlOnGraphQLGET &&
257
+ graphiqlHandler
258
+ ? graphqlOrHTMLAcceptMatcher(accept)
259
+ : graphqlAcceptMatcher(accept);
260
+ if (chosenContentType === exports.TEXT_HTML) {
261
+ // They want HTML -> Ruru
262
+ return graphiqlHandler(request);
263
+ }
264
+ else if (chosenContentType === exports.APPLICATION_JSON ||
265
+ chosenContentType === exports.APPLICATION_GRAPHQL_RESPONSE_JSON) {
266
+ // They want GraphQL
267
+ if (request.method === "POST" ||
268
+ (dynamicOptions.graphqlOverGET && request.method === "GET")) {
269
+ /* continue */
270
+ }
271
+ else {
272
+ return {
273
+ type: "graphql",
274
+ request,
275
+ dynamicOptions,
276
+ statusCode: 405,
277
+ contentType: "application/json",
278
+ payload: {
279
+ errors: [new graphql_1.GraphQLError("Method not supported, please use POST")],
280
+ },
281
+ };
282
+ }
283
+ }
284
+ else {
285
+ // > Respond with a 406 Not Acceptable status code and stop processing the request.
286
+ // https://graphql.github.io/graphql-over-http/draft/#sel-DANHELDAACNA4rR
287
+ return {
288
+ type: "graphql",
289
+ request,
290
+ dynamicOptions,
291
+ statusCode: 406,
292
+ contentType: "application/json",
293
+ payload: {
294
+ errors: [
295
+ new graphql_1.GraphQLError("Could not find a supported media type; consider adding 'application/json' or 'application/graphql-response+json' to your Accept header."),
296
+ ],
297
+ },
298
+ };
299
+ }
300
+ // If we get here, we're handling a GraphQL request
301
+ const isLegacy = chosenContentType === exports.APPLICATION_JSON;
302
+ if (wait) {
303
+ await wait;
304
+ }
305
+ // Get a reference to the latest versions to use for this entire operation
306
+ const schema = latestSchema;
307
+ const parseAndValidate = latestParseAndValidate;
308
+ let body;
309
+ try {
310
+ body =
311
+ request.method === "POST"
312
+ ? processAndValidateBody(request, await request.getBody())
313
+ : processAndValidateQueryParams(await request.getQueryParams());
314
+ }
315
+ catch (e) {
316
+ if (typeof e.statusCode === "number" &&
317
+ e.statusCode >= 400 &&
318
+ e.statusCode < 600) {
319
+ throw e;
320
+ }
321
+ else {
322
+ // TODO: should maybe handle more specific issues here. See examples:
323
+ // https://graphql.github.io/graphql-over-http/draft/#sec-Examples
324
+ throw (0, utils_js_1.httpError)(400, `Parsing failed, please check that the data you're sending to the server is correct`);
325
+ }
326
+ }
327
+ const { query, operationName, variableValues } = body;
328
+ const { errors, document } = parseAndValidate(query);
329
+ if (errors) {
330
+ return {
331
+ type: "graphql",
332
+ request,
333
+ dynamicOptions,
334
+ statusCode: isLegacy ? 200 : 400,
335
+ contentType: chosenContentType,
336
+ payload: { errors },
337
+ };
338
+ }
339
+ if (request.method !== "POST") {
340
+ // Forbid mutation
341
+ const operation = (0, graphql_1.getOperationAST)(document, operationName);
342
+ if (!operation || operation.operation !== "query") {
343
+ const error = new graphql_1.GraphQLError("Only queries may take place over non-POST requests.", operation);
344
+ return {
345
+ type: "graphql",
346
+ request,
347
+ dynamicOptions,
348
+ // Note: the GraphQL-over-HTTP spec currently mandates 405, even for legacy clients:
349
+ // https://graphql.github.io/graphql-over-http/draft/#sel-FALJRPCE2BCGoBitR
350
+ statusCode: 405,
351
+ contentType: chosenContentType,
352
+ payload: {
353
+ errors: [error],
354
+ },
355
+ };
356
+ }
357
+ }
358
+ const args = {
359
+ schema,
360
+ document,
361
+ rootValue: null,
362
+ contextValue: Object.create(null),
363
+ variableValues,
364
+ operationName,
365
+ };
366
+ await (0, grafast_1.hookArgs)(args, {
367
+ ...request.requestContext,
368
+ http: request,
369
+ }, resolvedPreset);
370
+ try {
371
+ const result = await (0, grafast_1.execute)(args, resolvedPreset);
372
+ if ((0, grafast_1.isAsyncIterable)(result)) {
373
+ return {
374
+ type: "graphqlIncremental",
375
+ request,
376
+ dynamicOptions,
377
+ statusCode: 200,
378
+ iterator: result,
379
+ outputDataAsString,
380
+ };
381
+ }
382
+ return {
383
+ type: "graphql",
384
+ request,
385
+ dynamicOptions,
386
+ statusCode: isLegacy || !result.errors
387
+ ? 200
388
+ : result.data === undefined
389
+ ? 400
390
+ : 200,
391
+ contentType: chosenContentType,
392
+ payload: result,
393
+ outputDataAsString,
394
+ };
395
+ }
396
+ catch (e) {
397
+ console.error(e);
398
+ return {
399
+ type: "graphql",
400
+ request,
401
+ dynamicOptions,
402
+ // e.g. We should always return 400 on no Content-Type header:
403
+ // https://graphql.github.io/graphql-over-http/draft/#sel-DALLDJAADLCA8tb
404
+ statusCode: e.statusCode ?? (isLegacy ? 200 : 500),
405
+ contentType: chosenContentType,
406
+ payload: {
407
+ errors: [new graphql_1.GraphQLError(e.message)],
408
+ extensions: args.rootValue?.[grafast_1.$$extensions],
409
+ },
410
+ };
411
+ }
412
+ };
413
+ };
414
+ exports.makeGraphQLHandler = makeGraphQLHandler;
415
+ //# 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,14 @@
1
+ export declare function optionsFromConfig(config: GraphileConfig.ResolvedPreset): {
2
+ outputDataAsString: boolean;
3
+ graphqlPath: string;
4
+ graphqlOverGET: boolean;
5
+ graphiql: boolean;
6
+ graphiqlOnGraphQLGET: boolean;
7
+ graphiqlPath: string;
8
+ watch: boolean;
9
+ eventStreamRoute: string;
10
+ maxRequestLength: number;
11
+ explain: boolean | string[] | undefined;
12
+ };
13
+ export declare type OptionsFromConfig = ReturnType<typeof optionsFromConfig>;
14
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,cAAc;;;;;;;;;;;EA0BtE;AACD,oBAAY,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optionsFromConfig = void 0;
4
+ function optionsFromConfig(config) {
5
+ const { graphqlPath = "/graphql", graphqlOverGET = false, graphiql = true, graphiqlOnGraphQLGET = true, graphiqlPath = "/", watch = false,
6
+ // TODO: Why 'Path' for graphqlPath and graphiqlPath, but 'Route' for this?!
7
+ eventStreamRoute = "/graphql/stream", maxRequestLength = 100_000, outputDataAsString = false, } = config.server ?? {};
8
+ const { explain } = config.grafast ?? {};
9
+ return {
10
+ outputDataAsString,
11
+ graphqlPath,
12
+ graphqlOverGET,
13
+ graphiql,
14
+ graphiqlOnGraphQLGET,
15
+ graphiqlPath,
16
+ watch,
17
+ eventStreamRoute,
18
+ maxRequestLength,
19
+ explain,
20
+ };
21
+ }
22
+ exports.optionsFromConfig = optionsFromConfig;
23
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";;;AAAA,SAAgB,iBAAiB,CAAC,MAAqC;IACrE,MAAM,EACJ,WAAW,GAAG,UAAU,EACxB,cAAc,GAAG,KAAK,EACtB,QAAQ,GAAG,IAAI,EACf,oBAAoB,GAAG,IAAI,EAC3B,YAAY,GAAG,GAAG,EAClB,KAAK,GAAG,KAAK;IACb,4EAA4E;IAC5E,gBAAgB,GAAG,iBAAiB,EACpC,gBAAgB,GAAG,OAAO,EAC1B,kBAAkB,GAAG,KAAK,GAC3B,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACzC,OAAO;QACL,kBAAkB;QAClB,WAAW;QACX,cAAc;QACd,QAAQ;QACR,oBAAoB;QACpB,YAAY;QACZ,KAAK;QACL,gBAAgB;QAChB,gBAAgB;QAChB,OAAO;KACR,CAAC;AACJ,CAAC;AA1BD,8CA0BC"}
@@ -0,0 +1,20 @@
1
+ import type { Express, Request, Response } from "express";
2
+ import type { GrafservConfig, RequestDigest } from "../../../interfaces.js";
3
+ import type { OptionsFromConfig } from "../../../options.js";
4
+ import { NodeGrafserv } from "../../node/index.js";
5
+ declare global {
6
+ namespace GraphileConfig {
7
+ interface GraphQLRequestContext {
8
+ expressv4: {
9
+ req: Request;
10
+ res: Response;
11
+ };
12
+ }
13
+ }
14
+ }
15
+ export declare class ExpressGrafserv extends NodeGrafserv {
16
+ protected getDigest(dynamicOptions: OptionsFromConfig, req: Request, res: Response): RequestDigest;
17
+ addTo(app: Express): void;
18
+ }
19
+ export declare function grafserv(config: GrafservConfig): ExpressGrafserv;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/express/v4/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,qBAAqB;YAC7B,SAAS,EAAE;gBACT,GAAG,EAAE,OAAO,CAAC;gBACb,GAAG,EAAE,QAAQ,CAAC;aACf,CAAC;SACH;KACF;CACF;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,SAAS,CAAC,SAAS,CACjB,cAAc,EAAE,iBAAiB,EACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,GACZ,aAAa;IA2BhB,KAAK,CAAC,GAAG,EAAE,OAAO;CAGnB;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,mBAE9C"}