@nifrajs/graphql 3.2.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/http.d.ts CHANGED
@@ -16,7 +16,7 @@
16
16
  * operated concern, not a public-package one).
17
17
  */
18
18
  import { type ProtoPoisoning } from "@nifrajs/core/edge-kit";
19
- import { type GraphQLSchema } from "graphql";
19
+ import { GraphQLError, type GraphQLSchema } from "graphql";
20
20
  import { type GraphqlContextBuilder, type NifraContextLike } from "./context.js";
21
21
  export interface GraphqlHttpOptions<Context = unknown, Env = unknown> {
22
22
  /** The executable schema (types + resolvers), e.g. from `graphql`'s `buildSchema` or a schema builder. */
@@ -27,6 +27,20 @@ export interface GraphqlHttpOptions<Context = unknown, Env = unknown> {
27
27
  readonly nifra?: NifraContextLike<Env>;
28
28
  /** Maximum request body size in bytes. Default 1 MB. Rejected bodies answer 413. */
29
29
  readonly maxBodyBytes?: number;
30
+ /** Maximum UTF-8 query size. Default 64 KiB, applied to POST and GET. */
31
+ readonly maxQueryBytes?: number;
32
+ /** Maximum UTF-8 serialized variables size. Default 256 KiB. */
33
+ readonly maxVariablesBytes?: number;
34
+ /** Maximum expanded field depth. Default 20. */
35
+ readonly maxDepth?: number;
36
+ /** Maximum aliases in one document. Default 100. */
37
+ readonly maxAliases?: number;
38
+ /** Maximum simple field complexity in one document. Default 1,000. */
39
+ readonly maxComplexity?: number;
40
+ /** Maximum operation definitions in one document. Default 10. */
41
+ readonly maxOperations?: number;
42
+ /** Maximum asynchronous resolver execution time. Default 10 seconds. */
43
+ readonly executionTimeoutMs?: number;
30
44
  /** Prototype-pollution policy for the parsed JSON body. Default `"reject"`. */
31
45
  readonly protoPoisoning?: ProtoPoisoning;
32
46
  /** Optional root value passed to the executor. */
@@ -43,6 +57,8 @@ export interface GraphqlHttpOptions<Context = unknown, Env = unknown> {
43
57
  readonly authorize?: (request: Request) => boolean | Promise<boolean>;
44
58
  /** Emit the legacy always-200 `application/json` response shape instead of `application/graphql-response+json`. */
45
59
  readonly legacyJsonResponse?: boolean;
60
+ /** Format request/execution errors. The default masks resolver messages and preserves request errors. */
61
+ readonly formatError?: (error: GraphQLError, phase: "request" | "execution") => unknown;
46
62
  }
47
63
  /**
48
64
  * Handle one GraphQL HTTP request. Never throws - a malformed request becomes a GraphQL error envelope.
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAEL,KAAK,cAAc,EAOpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAKL,KAAK,aAAa,EAMnB,MAAM,SAAS,CAAA;AAChB,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAYrB,MAAM,WAAW,kBAAkB,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO;IAClE,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACtD,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACtC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;IACxC,kDAAkD;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,mHAAmH;IACnH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CACtC;AAqKD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO,EACnE,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,GACxC,OAAO,CAAC,QAAQ,CAAC,CA+DnB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAEL,KAAK,cAAc,EAOpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAIL,YAAY,EACZ,KAAK,aAAa,EAMnB,MAAM,SAAS,CAAA;AAChB,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAoBrB,MAAM,WAAW,kBAAkB,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO;IAClE,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACtD,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACtC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;IACxC,kDAAkD;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,mHAAmH;IACnH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IACrC,yGAAyG;IACzG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,KAAK,OAAO,CAAA;CACxF;AA2PD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO,EACnE,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,GACxC,OAAO,CAAC,QAAQ,CAAC,CAmFnB"}
package/dist/http.js CHANGED
@@ -18,6 +18,7 @@
18
18
  import { EMPTY_RESPONSE_CONTROLS, plainError, queryObjectOf, readBodyFramed, searchOf, toResponse, } from "@nifrajs/core/edge-kit";
19
19
  import { execute, GraphQLError, getOperationAST, parse, Source, specifiedRules, validate, } from "graphql";
20
20
  import { buildContext, } from "./context.js";
21
+ import { documentLimitError, documentMetrics, graphqlLimits, requestLimitError, safeFormattedError, } from "./limits.js";
21
22
  const DEFAULT_MAX_BODY_BYTES = 1_000_000;
22
23
  const GRAPHQL_RESPONSE_JSON = "application/graphql-response+json; charset=utf-8";
23
24
  const JSON_UTF8 = "application/json; charset=utf-8";
@@ -31,6 +32,11 @@ function assertByteLimit(value) {
31
32
  throw new RangeError("GraphQL maxBodyBytes must be a non-negative safe integer");
32
33
  }
33
34
  }
35
+ function assertExecutionTimeout(value) {
36
+ if (!Number.isSafeInteger(value) || value < 0) {
37
+ throw new RangeError("GraphQL executionTimeoutMs must be a non-negative safe integer");
38
+ }
39
+ }
34
40
  function corsFor(request, allowedOrigins) {
35
41
  if (allowedOrigins === undefined)
36
42
  return { ...CORS_BASE, "access-control-allow-origin": "*" };
@@ -57,9 +63,9 @@ function graphqlResponse(payload, status, legacy, cors) {
57
63
  });
58
64
  }
59
65
  /** A request-level (parse/validate/auth/method) failure: `{ errors: [...] }`, no `data` key. */
60
- function requestError(message, status, legacy, cors, errors) {
66
+ function requestError(message, status, legacy, cors, errors, formatter) {
61
67
  const payload = errors ?? [new GraphQLError(message)];
62
- return graphqlResponse({ errors: payload.map((e) => e.toJSON()) }, status, legacy, cors);
68
+ return graphqlResponse({ errors: payload.map((e) => safeFormattedError(e, "request", formatter)) }, status, legacy, cors);
63
69
  }
64
70
  /** Coerce a `?variables=<json>` string (GET) into an object, or throw a GraphQLError on bad JSON. */
65
71
  function parseVariables(raw) {
@@ -104,23 +110,31 @@ function paramsFromQuery(query) {
104
110
  return { query: q, operationName, variables: parseVariables(query.variables) };
105
111
  }
106
112
  /** Parse, validate, and execute one already-extracted GraphQL request. */
107
- async function run(params, request, opts, isGet, legacy, cors) {
113
+ async function run(params, request, opts, isGet, legacy, cors, limits, executionTimeoutMs) {
114
+ const requestLimit = requestLimitError(params.query, params.variables, limits);
115
+ if (requestLimit !== undefined) {
116
+ return requestError(requestLimit, 413, legacy, cors, [new GraphQLError(requestLimit)], opts.formatError);
117
+ }
108
118
  let document;
109
119
  try {
110
120
  document = parse(new Source(params.query, "GraphQL request"));
111
121
  }
112
122
  catch (err) {
113
123
  const gqlErr = err instanceof GraphQLError ? err : new GraphQLError(String(err));
114
- return requestError("", 400, legacy, cors, [gqlErr]);
124
+ return requestError("", 400, legacy, cors, [gqlErr], opts.formatError);
115
125
  }
116
126
  const validationErrors = validate(opts.schema, document, specifiedRules);
117
127
  if (validationErrors.length > 0) {
118
- return requestError("", 400, legacy, cors, validationErrors);
128
+ return requestError("", 400, legacy, cors, validationErrors, opts.formatError);
129
+ }
130
+ const documentLimit = documentLimitError(documentMetrics(document), limits);
131
+ if (documentLimit !== undefined) {
132
+ return requestError(documentLimit, 400, legacy, cors, [new GraphQLError(documentLimit)], opts.formatError);
119
133
  }
120
134
  // GET is idempotent and cacheable, so per the GraphQL-over-HTTP spec it may run queries only.
121
135
  const operationAst = getOperationAST(document, params.operationName ?? undefined);
122
136
  if (isGet && operationAst != null && operationAst.operation !== "query") {
123
- return requestError("Only query operations may run over GET.", 405, legacy, { ...cors, allow: "POST" }, [new GraphQLError("Only query operations are allowed over GET.")]);
137
+ return requestError("Only query operations may run over GET.", 405, legacy, { ...cors, allow: "POST" }, [new GraphQLError("Only query operations are allowed over GET.")], opts.formatError);
124
138
  }
125
139
  const contextInput = opts.nifra !== undefined ? { request, nifra: opts.nifra } : { request };
126
140
  let contextValue;
@@ -129,25 +143,56 @@ async function run(params, request, opts, isGet, legacy, cors) {
129
143
  }
130
144
  catch (err) {
131
145
  const gqlErr = err instanceof GraphQLError ? err : new GraphQLError("Failed to build request context.");
132
- return graphqlResponse({ errors: [gqlErr.toJSON()] }, 500, legacy, cors);
146
+ return graphqlResponse({ errors: [safeFormattedError(gqlErr, "execution", opts.formatError)] }, 500, legacy, cors);
133
147
  }
134
148
  let result;
135
149
  try {
136
- result = (await execute({
150
+ const execution = execute({
137
151
  schema: opts.schema,
138
152
  document,
139
153
  rootValue: opts.rootValue,
140
154
  contextValue,
141
155
  variableValues: params.variables ?? undefined,
142
156
  operationName: params.operationName ?? undefined,
143
- }));
157
+ });
158
+ result = (await withExecutionTimeout(execution, executionTimeoutMs));
144
159
  }
145
160
  catch (err) {
146
- const gqlErr = err instanceof GraphQLError ? err : new GraphQLError("Execution failed.");
147
- return graphqlResponse({ errors: [gqlErr.toJSON()] }, 400, legacy, cors);
161
+ const gqlErr = err instanceof GraphQLError
162
+ ? err
163
+ : err instanceof ExecutionTimeoutError
164
+ ? new GraphQLError("Execution timed out.")
165
+ : new GraphQLError("Execution failed.");
166
+ return graphqlResponse({ errors: [safeFormattedError(gqlErr, "execution", opts.formatError)] }, err instanceof ExecutionTimeoutError ? 504 : 500, legacy, cors);
148
167
  }
149
168
  // Field/execution errors are a normal 200 result with both `data` and `errors`.
150
- return graphqlResponse(result, 200, legacy, cors);
169
+ return graphqlResponse(result.errors === undefined
170
+ ? result
171
+ : {
172
+ ...result,
173
+ errors: result.errors.map((error) => safeFormattedError(error, "execution", opts.formatError)),
174
+ }, 200, legacy, cors);
175
+ }
176
+ class ExecutionTimeoutError extends Error {
177
+ constructor() {
178
+ super("GraphQL execution timed out");
179
+ this.name = "ExecutionTimeoutError";
180
+ }
181
+ }
182
+ async function withExecutionTimeout(work, timeoutMs) {
183
+ if (!(work instanceof Promise) || timeoutMs === 0)
184
+ return work;
185
+ let timer;
186
+ const timeout = new Promise((_, reject) => {
187
+ timer = setTimeout(() => reject(new ExecutionTimeoutError()), timeoutMs);
188
+ });
189
+ try {
190
+ return await Promise.race([work, timeout]);
191
+ }
192
+ finally {
193
+ if (timer !== undefined)
194
+ clearTimeout(timer);
195
+ }
151
196
  }
152
197
  /**
153
198
  * Handle one GraphQL HTTP request. Never throws - a malformed request becomes a GraphQL error envelope.
@@ -157,6 +202,9 @@ async function run(params, request, opts, isGet, legacy, cors) {
157
202
  export async function respondGraphql(request, options) {
158
203
  const maxBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
159
204
  assertByteLimit(maxBytes);
205
+ const limits = graphqlLimits(options);
206
+ const executionTimeoutMs = options.executionTimeoutMs ?? 10_000;
207
+ assertExecutionTimeout(executionTimeoutMs);
160
208
  const legacy = options.legacyJsonResponse === true;
161
209
  const cors = corsFor(request, options.allowedOrigins);
162
210
  if (cors === null)
@@ -166,7 +214,7 @@ export async function respondGraphql(request, options) {
166
214
  if (options.authorize !== undefined) {
167
215
  const ok = await options.authorize(request);
168
216
  if (!ok) {
169
- return requestError("Unauthorized.", 401, legacy, cors, [new GraphQLError("Unauthorized.")]);
217
+ return requestError("Unauthorized.", 401, legacy, cors, [new GraphQLError("Unauthorized.")], options.formatError);
170
218
  }
171
219
  }
172
220
  if (request.method === "GET") {
@@ -176,14 +224,12 @@ export async function respondGraphql(request, options) {
176
224
  }
177
225
  catch (err) {
178
226
  const gqlErr = err instanceof GraphQLError ? err : new GraphQLError(String(err));
179
- return requestError("", 400, legacy, cors, [gqlErr]);
227
+ return requestError("", 400, legacy, cors, [gqlErr], options.formatError);
180
228
  }
181
- return run(params, request, options, true, legacy, cors);
229
+ return run(params, request, options, true, legacy, cors, limits, executionTimeoutMs);
182
230
  }
183
231
  if (request.method !== "POST") {
184
- return requestError("Method not allowed.", 405, legacy, { ...cors, allow: "GET, POST" }, [
185
- new GraphQLError("Only GET and POST are supported."),
186
- ]);
232
+ return requestError("Method not allowed.", 405, legacy, { ...cors, allow: "GET, POST" }, [new GraphQLError("Only GET and POST are supported.")], options.formatError);
187
233
  }
188
234
  // Read the JSON body through core's single bounded + proto-guarded framing lane.
189
235
  return readBodyFramed(request, maxBytes, options.protoPoisoning ?? "reject", async (parsed) => {
@@ -193,9 +239,9 @@ export async function respondGraphql(request, options) {
193
239
  }
194
240
  catch (err) {
195
241
  const gqlErr = err instanceof GraphQLError ? err : new GraphQLError(String(err));
196
- return requestError("", 400, legacy, cors, [gqlErr]);
242
+ return requestError("", 400, legacy, cors, [gqlErr], options.formatError);
197
243
  }
198
- return run(params, request, options, false, legacy, cors);
244
+ return run(params, request, options, false, legacy, cors, limits, executionTimeoutMs);
199
245
  }, (response) => {
200
246
  // readBodyFramed's own rejections (413 too-large, 415, proto-guard) - render + attach CORS.
201
247
  const res = render(response);
@@ -206,9 +252,7 @@ export async function respondGraphql(request, options) {
206
252
  // A body that failed to read (bad JSON / proto-guard) is a request error, not a crash.
207
253
  if (err instanceof Response)
208
254
  return err;
209
- return requestError("Invalid request body.", 400, legacy, cors, [
210
- new GraphQLError("Request body could not be read as JSON."),
211
- ]);
255
+ return requestError("Invalid request body.", 400, legacy, cors, [new GraphQLError("Request body could not be read as JSON.")], options.formatError);
212
256
  }).catch(() => plainErrorResponse(cors));
213
257
  }
214
258
  /** Last-resort framing fallback so the handler contract ("never throws") holds even on an edge-kit change. */
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type DocumentNode, type GraphQLError } from "graphql";
2
+ export declare const DEFAULT_GRAPHQL_LIMITS: Readonly<{
3
+ maxQueryBytes: number;
4
+ maxVariablesBytes: number;
5
+ maxDepth: 20;
6
+ maxAliases: 100;
7
+ maxComplexity: 1000;
8
+ maxOperations: 10;
9
+ }>;
10
+ export interface GraphqlLimitsOptions {
11
+ readonly maxQueryBytes?: number;
12
+ readonly maxVariablesBytes?: number;
13
+ readonly maxDepth?: number;
14
+ readonly maxAliases?: number;
15
+ readonly maxComplexity?: number;
16
+ readonly maxOperations?: number;
17
+ }
18
+ export interface GraphqlLimits {
19
+ readonly maxQueryBytes: number;
20
+ readonly maxVariablesBytes: number;
21
+ readonly maxDepth: number;
22
+ readonly maxAliases: number;
23
+ readonly maxComplexity: number;
24
+ readonly maxOperations: number;
25
+ }
26
+ export declare function graphqlLimits(options?: GraphqlLimitsOptions): GraphqlLimits;
27
+ export declare function utf8Bytes(value: string): number;
28
+ export declare function variablesBytes(value: Record<string, unknown> | null): number;
29
+ export interface GraphqlDocumentMetrics {
30
+ readonly operations: number;
31
+ readonly depth: number;
32
+ readonly aliases: number;
33
+ readonly complexity: number;
34
+ }
35
+ export declare function documentMetrics(document: DocumentNode): GraphqlDocumentMetrics;
36
+ export declare function requestLimitError(query: string, variables: Record<string, unknown> | null, limits: GraphqlLimits): string | undefined;
37
+ export declare function documentLimitError(metrics: GraphqlDocumentMetrics, limits: GraphqlLimits): string | undefined;
38
+ export declare function maskExecutionError(error: GraphQLError): Record<string, unknown>;
39
+ export declare function safeFormattedError(error: GraphQLError, phase: "request" | "execution", formatter?: (error: GraphQLError, phase: "request" | "execution") => unknown): unknown;
40
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAA4B,MAAM,SAAS,CAAA;AAExF,eAAO,MAAM,sBAAsB;;;;;;;EAOjC,CAAA;AAEF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAUD,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CA6B/E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,CAE5E;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAsDD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,sBAAsB,CAoB9E;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACzC,MAAM,EAAE,aAAa,GACpB,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,aAAa,GACpB,MAAM,GAAG,SAAS,CAcpB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM/E;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,GAAG,WAAW,EAC9B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,KAAK,OAAO,GAC3E,OAAO,CAST"}
package/dist/limits.js ADDED
@@ -0,0 +1,136 @@
1
+ import { Kind } from "graphql";
2
+ export const DEFAULT_GRAPHQL_LIMITS = Object.freeze({
3
+ maxQueryBytes: 64 * 1024,
4
+ maxVariablesBytes: 256 * 1024,
5
+ maxDepth: 20,
6
+ maxAliases: 100,
7
+ maxComplexity: 1_000,
8
+ maxOperations: 10,
9
+ });
10
+ function limit(value, fallback, name, minimum) {
11
+ const result = value ?? fallback;
12
+ if (!Number.isSafeInteger(result) || result < minimum) {
13
+ throw new RangeError(`GraphQL ${name} must be a safe integer >= ${minimum}`);
14
+ }
15
+ return result;
16
+ }
17
+ export function graphqlLimits(options = {}) {
18
+ return {
19
+ maxQueryBytes: limit(options.maxQueryBytes, DEFAULT_GRAPHQL_LIMITS.maxQueryBytes, "maxQueryBytes", 1),
20
+ maxVariablesBytes: limit(options.maxVariablesBytes, DEFAULT_GRAPHQL_LIMITS.maxVariablesBytes, "maxVariablesBytes", 0),
21
+ maxDepth: limit(options.maxDepth, DEFAULT_GRAPHQL_LIMITS.maxDepth, "maxDepth", 1),
22
+ maxAliases: limit(options.maxAliases, DEFAULT_GRAPHQL_LIMITS.maxAliases, "maxAliases", 0),
23
+ maxComplexity: limit(options.maxComplexity, DEFAULT_GRAPHQL_LIMITS.maxComplexity, "maxComplexity", 1),
24
+ maxOperations: limit(options.maxOperations, DEFAULT_GRAPHQL_LIMITS.maxOperations, "maxOperations", 1),
25
+ };
26
+ }
27
+ export function utf8Bytes(value) {
28
+ return new TextEncoder().encode(value).byteLength;
29
+ }
30
+ export function variablesBytes(value) {
31
+ return value === null ? 0 : utf8Bytes(JSON.stringify(value));
32
+ }
33
+ function selectionsMetrics(selections, fragments, depth, activeFragments) {
34
+ let maxDepth = depth;
35
+ let aliases = 0;
36
+ let complexity = 0;
37
+ for (const selection of selections) {
38
+ if (selection.kind === Kind.FIELD) {
39
+ complexity += 1;
40
+ if (selection.alias !== undefined)
41
+ aliases += 1;
42
+ if (selection.selectionSet !== undefined) {
43
+ const nested = selectionsMetrics(selection.selectionSet.selections, fragments, depth + 1, activeFragments);
44
+ maxDepth = Math.max(maxDepth, nested.depth);
45
+ aliases += nested.aliases;
46
+ complexity += nested.complexity;
47
+ }
48
+ else {
49
+ maxDepth = Math.max(maxDepth, depth + 1);
50
+ }
51
+ continue;
52
+ }
53
+ if (selection.kind === Kind.INLINE_FRAGMENT) {
54
+ const nested = selectionsMetrics(selection.selectionSet.selections, fragments, depth, activeFragments);
55
+ maxDepth = Math.max(maxDepth, nested.depth);
56
+ aliases += nested.aliases;
57
+ complexity += nested.complexity;
58
+ continue;
59
+ }
60
+ const nestedSelections = fragments.get(selection.name.value);
61
+ if (nestedSelections === undefined || activeFragments.has(selection.name.value))
62
+ continue;
63
+ const nextActive = new Set(activeFragments);
64
+ nextActive.add(selection.name.value);
65
+ const nested = selectionsMetrics(nestedSelections, fragments, depth, nextActive);
66
+ maxDepth = Math.max(maxDepth, nested.depth);
67
+ aliases += nested.aliases;
68
+ complexity += nested.complexity;
69
+ }
70
+ return { depth: maxDepth, aliases, complexity };
71
+ }
72
+ export function documentMetrics(document) {
73
+ const fragments = new Map();
74
+ for (const definition of document.definitions) {
75
+ if (definition.kind === Kind.FRAGMENT_DEFINITION) {
76
+ fragments.set(definition.name.value, definition.selectionSet.selections);
77
+ }
78
+ }
79
+ let operations = 0;
80
+ let depth = 0;
81
+ let aliases = 0;
82
+ let complexity = 0;
83
+ for (const definition of document.definitions) {
84
+ if (definition.kind !== Kind.OPERATION_DEFINITION)
85
+ continue;
86
+ operations += 1;
87
+ const metrics = selectionsMetrics(definition.selectionSet.selections, fragments, 0, new Set());
88
+ depth = Math.max(depth, metrics.depth);
89
+ aliases += metrics.aliases;
90
+ complexity += metrics.complexity;
91
+ }
92
+ return { operations, depth, aliases, complexity };
93
+ }
94
+ export function requestLimitError(query, variables, limits) {
95
+ if (utf8Bytes(query) > limits.maxQueryBytes) {
96
+ return `GraphQL query exceeds the ${limits.maxQueryBytes}-byte limit.`;
97
+ }
98
+ if (variablesBytes(variables) > limits.maxVariablesBytes) {
99
+ return `GraphQL variables exceed the ${limits.maxVariablesBytes}-byte limit.`;
100
+ }
101
+ return undefined;
102
+ }
103
+ export function documentLimitError(metrics, limits) {
104
+ if (metrics.operations > limits.maxOperations) {
105
+ return `GraphQL document exceeds the ${limits.maxOperations}-operation limit.`;
106
+ }
107
+ if (metrics.depth > limits.maxDepth) {
108
+ return `GraphQL document exceeds the depth limit of ${limits.maxDepth}.`;
109
+ }
110
+ if (metrics.aliases > limits.maxAliases) {
111
+ return `GraphQL document exceeds the ${limits.maxAliases}-alias limit.`;
112
+ }
113
+ if (metrics.complexity > limits.maxComplexity) {
114
+ return `GraphQL document exceeds the complexity limit of ${limits.maxComplexity}.`;
115
+ }
116
+ return undefined;
117
+ }
118
+ export function maskExecutionError(error) {
119
+ return {
120
+ message: "Internal server error.",
121
+ ...(error.locations === undefined ? {} : { locations: error.locations }),
122
+ ...(error.path === undefined ? {} : { path: error.path }),
123
+ };
124
+ }
125
+ export function safeFormattedError(error, phase, formatter) {
126
+ if (formatter !== undefined) {
127
+ try {
128
+ return formatter(error, phase);
129
+ }
130
+ catch {
131
+ return phase === "execution" ? maskExecutionError(error) : error.toJSON();
132
+ }
133
+ }
134
+ return phase === "execution" ? maskExecutionError(error) : error.toJSON();
135
+ }
136
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"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"}
package/dist/ws.d.ts CHANGED
@@ -23,6 +23,7 @@ interface GraphqlWsConnection {
23
23
  dispatch?: (message: string) => void | Promise<void>;
24
24
  /** Tear the graphql-ws connection down (graphql-ws's `opened()` return value). */
25
25
  closed?: (code: number, reason: string) => void | Promise<void>;
26
+ readonly subscriptions: Set<string>;
26
27
  }
27
28
  export interface GraphqlWsOptions<Context extends Record<string, unknown> = Record<string, unknown>> {
28
29
  /** The executable schema. */
@@ -36,6 +37,17 @@ export interface GraphqlWsOptions<Context extends Record<string, unknown> = Reco
36
37
  readonly onConnect?: (payload: ConnectionInitMessage["payload"], request: Request) => boolean | Promise<boolean>;
37
38
  /** Additional raw `graphql-ws` server options merged last (advanced escape hatch). */
38
39
  readonly serverOptions?: Partial<ServerOptions>;
40
+ /** Same query/complexity limits as the HTTP transport. */
41
+ readonly maxQueryBytes?: number;
42
+ readonly maxVariablesBytes?: number;
43
+ readonly maxDepth?: number;
44
+ readonly maxAliases?: number;
45
+ readonly maxComplexity?: number;
46
+ readonly maxOperations?: number;
47
+ /** Maximum concurrent subscription operation ids per connection. Default 20. */
48
+ readonly maxSubscriptions?: number;
49
+ /** Maximum time for initial execute/subscribe setup. Default 10 seconds. */
50
+ readonly executionTimeoutMs?: number;
39
51
  }
40
52
  /**
41
53
  * Build a nifra {@link WebSocketHandler} that terminates the `graphql-transport-ws` protocol. Register
package/dist/ws.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAoC,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAAW,KAAK,aAAa,EAAa,MAAM,SAAS,CAAA;AAChE,OAAO,EACL,KAAK,qBAAqB,EAI1B,KAAK,aAAa,EACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEvE,2EAA2E;AAC3E,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,kFAAkF;IAClF,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChE;AAED,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjE,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACjD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CACnB,OAAO,EAAE,qBAAqB,CAAC,SAAS,CAAC,EACzC,OAAO,EAAE,OAAO,KACb,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CAChD;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChG,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACjC,gBAAgB,CAAC,mBAAmB,CAAC,CA4DvC"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAoC,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC1F,OAAO,EAIL,KAAK,aAAa,EAKnB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,KAAK,qBAAqB,EAI1B,KAAK,aAAa,EACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAA;AASvE,2EAA2E;AAC3E,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,kFAAkF;IAClF,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjE,6BAA6B;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAA;IACjD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CACnB,OAAO,EAAE,qBAAqB,CAAC,SAAS,CAAC,EACzC,OAAO,EAAE,OAAO,KACb,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC/C,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,4EAA4E;IAC5E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CACrC;AA0GD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChG,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,GACjC,gBAAgB,CAAC,mBAAmB,CAAC,CAyGvC"}