@webiny/handler 5.34.2 → 5.34.3-beta.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/Context.d.ts CHANGED
@@ -9,5 +9,6 @@ export declare class Context extends BaseContext implements BaseContextType {
9
9
  readonly routes: BaseContextType["routes"];
10
10
  handlerClient: BaseContextType["handlerClient"];
11
11
  request: BaseContextType["request"];
12
+ reply: BaseContextType["reply"];
12
13
  constructor(params: ContextParams);
13
14
  }
package/Context.js CHANGED
@@ -12,6 +12,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
12
12
  var _api = require("@webiny/api");
13
13
 
14
14
  class Context extends _api.Context {
15
+ // @ts-ignore
15
16
  // @ts-ignore
16
17
  // @ts-ignore
17
18
  constructor(params) {
@@ -20,6 +21,7 @@ class Context extends _api.Context {
20
21
  (0, _defineProperty2.default)(this, "routes", void 0);
21
22
  (0, _defineProperty2.default)(this, "handlerClient", void 0);
22
23
  (0, _defineProperty2.default)(this, "request", void 0);
24
+ (0, _defineProperty2.default)(this, "reply", void 0);
23
25
  this.server = params.server;
24
26
  this.routes = params.routes;
25
27
  }
package/Context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["Context","BaseContext","constructor","params","server","routes"],"sources":["Context.ts"],"sourcesContent":["import { Context as BaseContext, ContextParams as BaseContextParams } from \"@webiny/api\";\nimport { Context as BaseContextType } from \"~/types\";\n\nexport interface ContextParams extends BaseContextParams {\n server: BaseContextType[\"server\"];\n routes: BaseContextType[\"routes\"];\n}\n\nexport class Context extends BaseContext implements BaseContextType {\n public readonly server: BaseContextType[\"server\"];\n public readonly routes: BaseContextType[\"routes\"];\n // @ts-ignore\n public handlerClient: BaseContextType[\"handlerClient\"];\n // @ts-ignore\n public request: BaseContextType[\"request\"];\n\n public constructor(params: ContextParams) {\n super(params);\n this.server = params.server;\n this.routes = params.routes;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAQO,MAAMA,OAAN,SAAsBC,YAAtB,CAA6D;EAGhE;EAEA;EAGOC,WAAW,CAACC,MAAD,EAAwB;IACtC,MAAMA,MAAN;IADsC;IAAA;IAAA;IAAA;IAEtC,KAAKC,MAAL,GAAcD,MAAM,CAACC,MAArB;IACA,KAAKC,MAAL,GAAcF,MAAM,CAACE,MAArB;EACH;;AAZ+D"}
1
+ {"version":3,"names":["Context","BaseContext","constructor","params","server","routes"],"sources":["Context.ts"],"sourcesContent":["import { Context as BaseContext, ContextParams as BaseContextParams } from \"@webiny/api\";\nimport { Context as BaseContextType } from \"~/types\";\n\nexport interface ContextParams extends BaseContextParams {\n server: BaseContextType[\"server\"];\n routes: BaseContextType[\"routes\"];\n}\n\nexport class Context extends BaseContext implements BaseContextType {\n public readonly server: BaseContextType[\"server\"];\n public readonly routes: BaseContextType[\"routes\"];\n // @ts-ignore\n public handlerClient: BaseContextType[\"handlerClient\"];\n // @ts-ignore\n public request: BaseContextType[\"request\"];\n // @ts-ignore\n public reply: BaseContextType[\"reply\"];\n\n public constructor(params: ContextParams) {\n super(params);\n this.server = params.server;\n this.routes = params.routes;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAQO,MAAMA,OAAN,SAAsBC,YAAtB,CAA6D;EAGhE;EAEA;EAEA;EAGOC,WAAW,CAACC,MAAD,EAAwB;IACtC,MAAMA,MAAN;IADsC;IAAA;IAAA;IAAA;IAAA;IAEtC,KAAKC,MAAL,GAAcD,MAAM,CAACC,MAArB;IACA,KAAKC,MAAL,GAAcF,MAAM,CAACE,MAArB;EACH;;AAd+D"}
package/fastify.js CHANGED
@@ -71,6 +71,26 @@ const getDefaultHeaders = routes => {
71
71
  });
72
72
  };
73
73
 
74
+ const stringifyError = error => {
75
+ var _error$constructor;
76
+
77
+ const {
78
+ name,
79
+ message,
80
+ code,
81
+ stack,
82
+ data
83
+ } = error;
84
+ return JSON.stringify((0, _objectSpread2.default)((0, _objectSpread2.default)({}, error), {}, {
85
+ constructorName: ((_error$constructor = error.constructor) === null || _error$constructor === void 0 ? void 0 : _error$constructor.name) || "UnknownError",
86
+ name: name || "No error name",
87
+ message: message || "No error message",
88
+ code: code || "NO_CODE",
89
+ data,
90
+ stack: process.env.DEBUG === "true" ? stack : "Turn on the debug flag to see the stack."
91
+ }));
92
+ };
93
+
74
94
  const OPTIONS_HEADERS = {
75
95
  "Access-Control-Max-Age": "86400",
76
96
  "Cache-Control": "public, max-age=86400"
@@ -98,7 +118,7 @@ const createHandler = params => {
98
118
 
99
119
  const throwOnDefinedRoute = (type, path, options) => {
100
120
  if (type === "ALL") {
101
- const all = Object.keys(definedRoutes).some(key => {
121
+ const all = Object.keys(definedRoutes).find(key => {
102
122
  const routes = definedRoutes[key];
103
123
  return routes.includes(path);
104
124
  });
@@ -107,6 +127,8 @@ const createHandler = params => {
107
127
  return;
108
128
  }
109
129
 
130
+ console.log(`Error while registering onAll route. One of the routes is already defined.`);
131
+ console.log(JSON.stringify(all));
110
132
  throw new _error.default(`You cannot override a route with onAll() method, please remove unnecessary route from the system.`, "OVERRIDE_ROUTE_ERROR", {
111
133
  type,
112
134
  path
@@ -117,6 +139,7 @@ const createHandler = params => {
117
139
  return;
118
140
  }
119
141
 
142
+ console.log(`Error while trying to override route: [${type}] ${path}`);
120
143
  throw new _error.default(`When you are trying to override existing route, you must send "override" parameter when adding that route.`, "OVERRIDE_ROUTE_ERROR", {
121
144
  type,
122
145
  path
@@ -224,25 +247,34 @@ const createHandler = params => {
224
247
  app.head(path, handler);
225
248
  }
226
249
  };
227
- const context = new _Context.Context({
228
- plugins: [
229
- /**
230
- * We must have handlerClient by default.
231
- * And it must be one of the first context plugins applied.
232
- */
233
- (0, _handlerClient.createHandlerClient)(), ...(params.plugins || [])],
250
+ let context;
234
251
 
235
- /**
236
- * Inserted via webpack on build time.
237
- */
238
- WEBINY_VERSION: process.env.WEBINY_VERSION,
239
- server: app,
240
- routes
241
- });
252
+ try {
253
+ context = new _Context.Context({
254
+ plugins: [
255
+ /**
256
+ * We must have handlerClient by default.
257
+ * And it must be one of the first context plugins applied.
258
+ */
259
+ (0, _handlerClient.createHandlerClient)(), ...(params.plugins || [])],
260
+
261
+ /**
262
+ * Inserted via webpack on build time.
263
+ */
264
+ WEBINY_VERSION: process.env.WEBINY_VERSION,
265
+ server: app,
266
+ routes
267
+ });
268
+ } catch (ex) {
269
+ console.log(`Error while constructing the Context.`);
270
+ console.log(stringifyError(ex));
271
+ throw ex;
272
+ }
242
273
  /**
243
274
  * We are attaching our custom context to webiny variable on the fastify app, so it is accessible everywhere.
244
275
  */
245
276
 
277
+
246
278
  app.decorate("webiny", context);
247
279
  /**
248
280
  * We have few types of triggers:
@@ -257,10 +289,19 @@ const createHandler = params => {
257
289
  * Add routes to the system.
258
290
  */
259
291
 
260
- for (const plugin of routePlugins) {
261
- plugin.cb((0, _objectSpread2.default)((0, _objectSpread2.default)({}, app.webiny.routes), {}, {
262
- context: app.webiny
263
- }));
292
+ let routePluginName;
293
+
294
+ try {
295
+ for (const plugin of routePlugins) {
296
+ routePluginName = plugin.name;
297
+ plugin.cb((0, _objectSpread2.default)((0, _objectSpread2.default)({}, app.webiny.routes), {}, {
298
+ context: app.webiny
299
+ }));
300
+ }
301
+ } catch (ex) {
302
+ console.log(`Error while running the "RoutePlugin" ${routePluginName ? `(${routePluginName})` : ""} plugin in the beginning of the "createHandler" callable.`);
303
+ console.log(stringifyError(ex));
304
+ throw ex;
264
305
  }
265
306
  /**
266
307
  * On every request we add default headers, which can be changed later.
@@ -279,13 +320,21 @@ const createHandler = params => {
279
320
  */
280
321
 
281
322
  const plugins = app.webiny.plugins.byType(_HandlerOnRequestPlugin.HandlerOnRequestPlugin.type);
323
+ let name;
282
324
 
283
- for (const plugin of plugins) {
284
- const result = await plugin.exec(request, reply);
325
+ try {
326
+ for (const plugin of plugins) {
327
+ name = plugin.name;
328
+ const result = await plugin.exec(request, reply);
285
329
 
286
- if (result === false) {
287
- return;
330
+ if (result === false) {
331
+ return;
332
+ }
288
333
  }
334
+ } catch (ex) {
335
+ console.log(`Error while running the "HandlerOnRequestPlugin" ${name ? `(${name})` : ""} plugin in the onRequest hook.`);
336
+ console.log(stringifyError(ex));
337
+ throw ex;
289
338
  }
290
339
  /**
291
340
  * When we receive the OPTIONS request, we end it before it goes any further as there is no need for anything to run after this - at least for our use cases.
@@ -311,12 +360,21 @@ const createHandler = params => {
311
360
 
312
361
  reply.headers((0, _objectSpread2.default)((0, _objectSpread2.default)({}, defaultHeaders), OPTIONS_HEADERS)).code(204).send("").hijack();
313
362
  });
314
- app.addHook("preParsing", async request => {
363
+ app.addHook("preParsing", async (request, reply) => {
315
364
  app.webiny.request = request;
365
+ app.webiny.reply = reply;
316
366
  const plugins = app.webiny.plugins.byType(_api.ContextPlugin.type);
367
+ let name;
317
368
 
318
- for (const plugin of plugins) {
319
- await plugin.apply(app.webiny);
369
+ try {
370
+ for (const plugin of plugins) {
371
+ name = plugin.name;
372
+ await plugin.apply(app.webiny);
373
+ }
374
+ } catch (ex) {
375
+ console.log(`Error while running the "ContextPlugin" ${name ? `(${name})` : ""} plugin in the preParsing hook.`);
376
+ console.log(stringifyError(ex));
377
+ throw ex;
320
378
  }
321
379
  });
322
380
  /**
@@ -325,9 +383,17 @@ const createHandler = params => {
325
383
 
326
384
  app.addHook("preHandler", async () => {
327
385
  const plugins = app.webiny.plugins.byType(_BeforeHandlerPlugin.BeforeHandlerPlugin.type);
386
+ let name;
328
387
 
329
- for (const plugin of plugins) {
330
- await plugin.apply(app.webiny);
388
+ try {
389
+ for (const plugin of plugins) {
390
+ name = plugin.name;
391
+ await plugin.apply(app.webiny);
392
+ }
393
+ } catch (ex) {
394
+ console.log(`Error while running the "BeforeHandlerPlugin" ${name ? `(${name})` : ""} plugin in the preHandler hook.`);
395
+ console.log(stringifyError(ex));
396
+ throw ex;
331
397
  }
332
398
  });
333
399
  /**
@@ -336,9 +402,17 @@ const createHandler = params => {
336
402
 
337
403
  const preSerialization = async (_, __, payload) => {
338
404
  const plugins = app.webiny.plugins.byType(_HandlerResultPlugin.HandlerResultPlugin.type);
405
+ let name;
339
406
 
340
- for (const plugin of plugins) {
341
- await plugin.handle(app.webiny, payload);
407
+ try {
408
+ for (const plugin of plugins) {
409
+ name = plugin.name;
410
+ await plugin.handle(app.webiny, payload);
411
+ }
412
+ } catch (ex) {
413
+ console.log(`Error while running the "HandlerResultPlugin" ${name ? `(${name})` : ""} plugin in the preSerialization hook.`);
414
+ console.log(stringifyError(ex));
415
+ throw ex;
342
416
  }
343
417
 
344
418
  return payload;
@@ -348,11 +422,15 @@ const createHandler = params => {
348
422
  app.setErrorHandler(async (error, request, reply) => {
349
423
  return reply.status(500).headers({
350
424
  "Cache-Control": "no-store"
351
- }).send({
425
+ }).send(
426
+ /**
427
+ * When we are sending the error in the response, we cannot send the whole error object, as it might contain some sensitive data.
428
+ */
429
+ JSON.stringify({
352
430
  message: error.message,
353
431
  code: error.code,
354
432
  data: error.data
355
- });
433
+ }));
356
434
  });
357
435
  app.addHook("onError", async (_, reply, error) => {
358
436
  const plugins = app.webiny.plugins.byType(_HandlerErrorPlugin.HandlerErrorPlugin.type);
@@ -361,18 +439,18 @@ const createHandler = params => {
361
439
  */
362
440
 
363
441
  console.log("@webiny/handler");
364
- console.log(JSON.stringify((0, _objectSpread2.default)((0, _objectSpread2.default)({}, error), {}, {
365
- message: error.message,
366
- code: error.code,
367
- data: error.data
368
- })));
442
+ console.log(stringifyError(error));
369
443
  reply.status(500).headers({
370
444
  "Cache-Control": "no-store"
371
- }).send({
445
+ }).send(
446
+ /**
447
+ * When we are sending the error in the response, we cannot send the whole error object, as it might contain some sensitive data.
448
+ */
449
+ JSON.stringify({
372
450
  message: error.message,
373
451
  code: error.code,
374
452
  data: error.data
375
- });
453
+ }));
376
454
  const handler = (0, _middleware.middleware)(plugins.map(pl => {
377
455
  return (context, error, next) => {
378
456
  return pl.handle(context, error, next);
@@ -386,9 +464,17 @@ const createHandler = params => {
386
464
  */
387
465
 
388
466
  const modifyPlugins = app.webiny.plugins.byType(_ModifyFastifyPlugin.ModifyFastifyPlugin.type);
467
+ let modifyFastifyPluginName;
389
468
 
390
- for (const plugin of modifyPlugins) {
391
- plugin.modify(app);
469
+ try {
470
+ for (const plugin of modifyPlugins) {
471
+ modifyFastifyPluginName = plugin.name;
472
+ plugin.modify(app);
473
+ }
474
+ } catch (ex) {
475
+ console.log(`Error while running the "ModifyFastifyPlugin" ${modifyFastifyPluginName ? `(${modifyFastifyPluginName})` : ""} plugin in the end of the "createHandler" callable.`);
476
+ console.log(stringifyError(ex));
477
+ throw ex;
392
478
  }
393
479
 
394
480
  return app;
package/fastify.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_HEADERS","getWebinyVersionHeaders","getDefaultHeaders","routes","keys","Object","all","every","key","length","filter","type","Array","isArray","sort","join","OPTIONS_HEADERS","createHandler","params","definedRoutes","POST","GET","OPTIONS","DELETE","PATCH","PUT","HEAD","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","TRACE","UNLOCK","throwOnDefinedRoute","path","options","some","includes","WebinyError","override","addDefinedRoute","push","app","fastify","addHook","route","method","m","register","fastifyCookie","parseOptions","fastifyCompress","global","threshold","onUnsupportedEncoding","encoding","_","reply","code","inflateIfDeflated","defined","onPost","handler","post","onGet","get","onOptions","onDelete","delete","onPatch","patch","onPut","put","onAll","onHead","head","context","Context","plugins","createHandlerClient","WEBINY_VERSION","process","env","server","decorate","routePlugins","webiny","byType","RoutePlugin","plugin","cb","request","defaultHeaders","headers","HandlerOnRequestPlugin","result","exec","sent","console","log","JSON","stringify","message","explanation","send","hijack","ContextPlugin","apply","BeforeHandlerPlugin","preSerialization","__","payload","HandlerResultPlugin","handle","setErrorHandler","error","status","data","HandlerErrorPlugin","middleware","map","pl","next","modifyPlugins","ModifyFastifyPlugin","modify"],"sources":["fastify.ts"],"sourcesContent":["import { PluginCollection } from \"@webiny/plugins/types\";\nimport fastify, {\n FastifyServerOptions as ServerOptions,\n preSerializationAsyncHookHandler\n} from \"fastify\";\nimport { getWebinyVersionHeaders } from \"@webiny/utils\";\nimport { ContextRoutes, DefinedContextRoutes, RouteMethodOptions, HTTPMethods } from \"~/types\";\nimport { Context } from \"~/Context\";\nimport WebinyError from \"@webiny/error\";\nimport { RoutePlugin } from \"./plugins/RoutePlugin\";\nimport { createHandlerClient } from \"@webiny/handler-client\";\nimport fastifyCookie from \"@fastify/cookie\";\nimport fastifyCompress from \"@fastify/compress\";\nimport { middleware } from \"~/middleware\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { BeforeHandlerPlugin } from \"./plugins/BeforeHandlerPlugin\";\nimport { HandlerResultPlugin } from \"./plugins/HandlerResultPlugin\";\nimport { HandlerErrorPlugin } from \"./plugins/HandlerErrorPlugin\";\nimport { ModifyFastifyPlugin } from \"~/plugins/ModifyFastifyPlugin\";\nimport { HandlerOnRequestPlugin } from \"~/plugins/HandlerOnRequestPlugin\";\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n \"Access-Control-Allow-Methods\": \"OPTIONS,POST,GET,DELETE,PUT,PATCH\",\n ...getWebinyVersionHeaders()\n};\n\nconst getDefaultHeaders = (routes: DefinedContextRoutes): Record<string, string> => {\n /**\n * If we are accepting all headers, just output that one.\n */\n const keys = Object.keys(routes) as HTTPMethods[];\n const all = keys.every(key => routes[key].length > 0);\n if (all) {\n return {\n ...DEFAULT_HEADERS,\n \"Access-Control-Allow-Methods\": \"*\"\n };\n }\n return {\n ...DEFAULT_HEADERS,\n \"Access-Control-Allow-Methods\": keys\n .filter(type => {\n if (!routes[type] || Array.isArray(routes[type]) === false) {\n return false;\n }\n return routes[type].length > 0;\n })\n .sort()\n .join(\",\")\n };\n};\n\nconst OPTIONS_HEADERS: Record<string, string> = {\n \"Access-Control-Max-Age\": \"86400\",\n \"Cache-Control\": \"public, max-age=86400\"\n};\n\nexport interface CreateHandlerParams {\n plugins: PluginCollection;\n options?: ServerOptions;\n}\n\nexport const createHandler = (params: CreateHandlerParams) => {\n const definedRoutes: DefinedContextRoutes = {\n POST: [],\n GET: [],\n OPTIONS: [],\n DELETE: [],\n PATCH: [],\n PUT: [],\n HEAD: [],\n COPY: [],\n LOCK: [],\n MKCOL: [],\n MOVE: [],\n PROPFIND: [],\n PROPPATCH: [],\n SEARCH: [],\n TRACE: [],\n UNLOCK: []\n };\n\n const throwOnDefinedRoute = (\n type: HTTPMethods | \"ALL\",\n path: string,\n options?: RouteMethodOptions\n ): void => {\n if (type === \"ALL\") {\n const all = Object.keys(definedRoutes).some(key => {\n const routes = definedRoutes[key as HTTPMethods];\n return routes.includes(path);\n });\n if (!all) {\n return;\n }\n throw new WebinyError(\n `You cannot override a route with onAll() method, please remove unnecessary route from the system.`,\n \"OVERRIDE_ROUTE_ERROR\",\n {\n type,\n path\n }\n );\n } else if (definedRoutes[type].includes(path) === false) {\n return;\n } else if (options?.override === true) {\n return;\n }\n throw new WebinyError(\n `When you are trying to override existing route, you must send \"override\" parameter when adding that route.`,\n \"OVERRIDE_ROUTE_ERROR\",\n {\n type,\n path\n }\n );\n };\n\n const addDefinedRoute = (type: HTTPMethods, path: string): void => {\n if (!definedRoutes[type]) {\n return;\n } else if (definedRoutes[type].includes(path)) {\n return;\n }\n definedRoutes[type].push(path);\n };\n /**\n * We must attach the server to our internal context if we want to have it accessible.\n */\n const app = fastify({\n ...(params.options || {})\n });\n /**\n * We need to register routes in our system so we can output headers later on and dissallow overriding routes.\n */\n app.addHook(\"onRoute\", route => {\n const method = route.method;\n if (Array.isArray(method)) {\n for (const m of method) {\n addDefinedRoute(m, route.path);\n }\n return;\n }\n addDefinedRoute(method, route.path);\n });\n /**\n * ############################\n * Register the Fastify plugins.\n */\n /**\n * Package @fastify/cookie\n *\n * https://github.com/fastify/fastify-cookie\n */\n app.register(fastifyCookie, {\n parseOptions: {} // options for parsing cookies\n });\n /**\n * Package @fastify/compress\n *\n * https://github.com/fastify/fastify-compress\n */\n app.register(fastifyCompress, {\n global: true,\n threshold: 1024,\n onUnsupportedEncoding: (encoding, _, reply) => {\n reply.code(406);\n return `We do not support the ${encoding} encoding.`;\n },\n inflateIfDeflated: true\n });\n /**\n * Route helpers - mostly for users.\n */\n const routes: ContextRoutes = {\n defined: definedRoutes,\n onPost: (path, handler, options) => {\n throwOnDefinedRoute(\"POST\", path, options);\n app.post(path, handler);\n },\n onGet: (path, handler, options) => {\n throwOnDefinedRoute(\"GET\", path, options);\n app.get(path, handler);\n },\n onOptions: (path, handler, options) => {\n throwOnDefinedRoute(\"OPTIONS\", path, options);\n app.options(path, handler);\n },\n onDelete: (path, handler, options) => {\n throwOnDefinedRoute(\"DELETE\", path, options);\n app.delete(path, handler);\n },\n onPatch: (path, handler, options) => {\n throwOnDefinedRoute(\"PATCH\", path, options);\n app.patch(path, handler);\n },\n onPut: (path, handler, options) => {\n throwOnDefinedRoute(\"PUT\", path, options);\n app.put(path, handler);\n },\n onAll: (path, handler, options) => {\n throwOnDefinedRoute(\"ALL\", path, options);\n app.all(path, handler);\n },\n onHead: (path, handler, options) => {\n throwOnDefinedRoute(\"HEAD\", path, options);\n app.head(path, handler);\n }\n };\n const context = new Context({\n plugins: [\n /**\n * We must have handlerClient by default.\n * And it must be one of the first context plugins applied.\n */\n createHandlerClient(),\n ...(params.plugins || [])\n ],\n /**\n * Inserted via webpack on build time.\n */\n WEBINY_VERSION: process.env.WEBINY_VERSION as string,\n server: app,\n routes\n });\n /**\n * We are attaching our custom context to webiny variable on the fastify app, so it is accessible everywhere.\n */\n app.decorate(\"webiny\", context);\n\n /**\n * We have few types of triggers:\n * * Events - EventPlugin\n * * Routes - RoutePlugin\n *\n * Routes are registered in fastify but events must be handled in package which implements cloud specific methods.\n */\n const routePlugins = app.webiny.plugins.byType<RoutePlugin>(RoutePlugin.type);\n\n /**\n * Add routes to the system.\n */\n for (const plugin of routePlugins) {\n plugin.cb({\n ...app.webiny.routes,\n context: app.webiny\n });\n }\n\n /**\n * On every request we add default headers, which can be changed later.\n * Also, if it is an options request, we skip everything after this hook and output options headers.\n */\n app.addHook(\"onRequest\", async (request, reply) => {\n /**\n * Our default headers are always set. Users can override them.\n */\n const defaultHeaders = getDefaultHeaders(definedRoutes);\n reply.headers(defaultHeaders);\n /**\n * Users can define their own custom handlers for the onRequest event - so let's run them first.\n */\n const plugins = app.webiny.plugins.byType<HandlerOnRequestPlugin>(\n HandlerOnRequestPlugin.type\n );\n for (const plugin of plugins) {\n const result = await plugin.exec(request, reply);\n if (result === false) {\n return;\n }\n }\n /**\n * When we receive the OPTIONS request, we end it before it goes any further as there is no need for anything to run after this - at least for our use cases.\n *\n * Users can prevent this by creating their own HandlerOnRequestPlugin and returning false as the result of the callable.\n */\n if (request.method !== \"OPTIONS\") {\n return;\n }\n\n if (reply.sent) {\n /**\n * At this point throwing an exception will not do anything with the response. So just log it.\n */\n console.log(\n JSON.stringify({\n message: `Output was already sent. Please check custom plugins of type \"HandlerOnRequestPlugin\".`,\n explanation:\n \"This error can happen if the user plugin ended the reply, but did not return false as response.\"\n })\n );\n return;\n }\n\n reply\n .headers({ ...defaultHeaders, ...OPTIONS_HEADERS })\n .code(204)\n .send(\"\")\n .hijack();\n });\n\n app.addHook(\"preParsing\", async request => {\n app.webiny.request = request;\n const plugins = app.webiny.plugins.byType<ContextPlugin>(ContextPlugin.type);\n for (const plugin of plugins) {\n await plugin.apply(app.webiny);\n }\n });\n /**\n *\n */\n app.addHook(\"preHandler\", async () => {\n const plugins = app.webiny.plugins.byType<BeforeHandlerPlugin>(BeforeHandlerPlugin.type);\n for (const plugin of plugins) {\n await plugin.apply(app.webiny);\n }\n });\n\n /**\n *\n */\n const preSerialization: preSerializationAsyncHookHandler<any> = async (_, __, payload) => {\n const plugins = app.webiny.plugins.byType<HandlerResultPlugin>(HandlerResultPlugin.type);\n for (const plugin of plugins) {\n await plugin.handle(app.webiny, payload);\n }\n return payload;\n };\n\n app.addHook(\"preSerialization\", preSerialization);\n\n app.setErrorHandler<WebinyError>(async (error, request, reply) => {\n return reply\n .status(500)\n .headers({\n \"Cache-Control\": \"no-store\"\n })\n .send({\n message: error.message,\n code: error.code,\n data: error.data\n });\n });\n\n app.addHook(\"onError\", async (_, reply, error: any) => {\n const plugins = app.webiny.plugins.byType<HandlerErrorPlugin>(HandlerErrorPlugin.type);\n /**\n * Log error to cloud, as these can be extremely annoying to debug!\n */\n console.log(\"@webiny/handler\");\n console.log(\n JSON.stringify({\n ...error,\n message: error.message,\n code: error.code,\n data: error.data\n })\n );\n\n reply\n .status(500)\n .headers({\n \"Cache-Control\": \"no-store\"\n })\n .send({\n message: error.message,\n code: error.code,\n data: error.data\n });\n\n const handler = middleware(\n plugins.map(pl => {\n return (context: Context, error: Error, next: Function) => {\n return pl.handle(context, error, next);\n };\n })\n );\n await handler(app.webiny, error);\n\n return reply;\n });\n\n /**\n * With these plugins we give users possibility to do anything they want on our fastify instance.\n */\n const modifyPlugins = app.webiny.plugins.byType<ModifyFastifyPlugin>(ModifyFastifyPlugin.type);\n for (const plugin of modifyPlugins) {\n plugin.modify(app);\n }\n\n return app;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["DEFAULT_HEADERS","getWebinyVersionHeaders","getDefaultHeaders","routes","keys","Object","all","every","key","length","filter","type","Array","isArray","sort","join","stringifyError","error","name","message","code","stack","data","JSON","stringify","constructorName","constructor","process","env","DEBUG","OPTIONS_HEADERS","createHandler","params","definedRoutes","POST","GET","OPTIONS","DELETE","PATCH","PUT","HEAD","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","TRACE","UNLOCK","throwOnDefinedRoute","path","options","find","includes","console","log","WebinyError","override","addDefinedRoute","push","app","fastify","addHook","route","method","m","register","fastifyCookie","parseOptions","fastifyCompress","global","threshold","onUnsupportedEncoding","encoding","_","reply","inflateIfDeflated","defined","onPost","handler","post","onGet","get","onOptions","onDelete","delete","onPatch","patch","onPut","put","onAll","onHead","head","context","Context","plugins","createHandlerClient","WEBINY_VERSION","server","ex","decorate","routePlugins","webiny","byType","RoutePlugin","routePluginName","plugin","cb","request","defaultHeaders","headers","HandlerOnRequestPlugin","result","exec","sent","explanation","send","hijack","ContextPlugin","apply","BeforeHandlerPlugin","preSerialization","__","payload","HandlerResultPlugin","handle","setErrorHandler","status","HandlerErrorPlugin","middleware","map","pl","next","modifyPlugins","ModifyFastifyPlugin","modifyFastifyPluginName","modify"],"sources":["fastify.ts"],"sourcesContent":["import { PluginCollection } from \"@webiny/plugins/types\";\nimport fastify, {\n FastifyServerOptions as ServerOptions,\n preSerializationAsyncHookHandler\n} from \"fastify\";\nimport { getWebinyVersionHeaders } from \"@webiny/utils\";\nimport { ContextRoutes, DefinedContextRoutes, RouteMethodOptions, HTTPMethods } from \"~/types\";\nimport { Context } from \"~/Context\";\nimport WebinyError from \"@webiny/error\";\nimport { RoutePlugin } from \"./plugins/RoutePlugin\";\nimport { createHandlerClient } from \"@webiny/handler-client\";\nimport fastifyCookie from \"@fastify/cookie\";\nimport fastifyCompress from \"@fastify/compress\";\nimport { middleware } from \"~/middleware\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { BeforeHandlerPlugin } from \"./plugins/BeforeHandlerPlugin\";\nimport { HandlerResultPlugin } from \"./plugins/HandlerResultPlugin\";\nimport { HandlerErrorPlugin } from \"./plugins/HandlerErrorPlugin\";\nimport { ModifyFastifyPlugin } from \"~/plugins/ModifyFastifyPlugin\";\nimport { HandlerOnRequestPlugin } from \"~/plugins/HandlerOnRequestPlugin\";\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n \"Cache-Control\": \"no-store\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n \"Access-Control-Allow-Methods\": \"OPTIONS,POST,GET,DELETE,PUT,PATCH\",\n ...getWebinyVersionHeaders()\n};\n\nconst getDefaultHeaders = (routes: DefinedContextRoutes): Record<string, string> => {\n /**\n * If we are accepting all headers, just output that one.\n */\n const keys = Object.keys(routes) as HTTPMethods[];\n const all = keys.every(key => routes[key].length > 0);\n if (all) {\n return {\n ...DEFAULT_HEADERS,\n \"Access-Control-Allow-Methods\": \"*\"\n };\n }\n return {\n ...DEFAULT_HEADERS,\n \"Access-Control-Allow-Methods\": keys\n .filter(type => {\n if (!routes[type] || Array.isArray(routes[type]) === false) {\n return false;\n }\n return routes[type].length > 0;\n })\n .sort()\n .join(\",\")\n };\n};\n\nconst stringifyError = (error: Error) => {\n const { name, message, code, stack, data } = error as any;\n return JSON.stringify({\n ...error,\n constructorName: error.constructor?.name || \"UnknownError\",\n name: name || \"No error name\",\n message: message || \"No error message\",\n code: code || \"NO_CODE\",\n data,\n stack: process.env.DEBUG === \"true\" ? stack : \"Turn on the debug flag to see the stack.\"\n });\n};\n\nconst OPTIONS_HEADERS: Record<string, string> = {\n \"Access-Control-Max-Age\": \"86400\",\n \"Cache-Control\": \"public, max-age=86400\"\n};\n\nexport interface CreateHandlerParams {\n plugins: PluginCollection;\n options?: ServerOptions;\n}\n\nexport const createHandler = (params: CreateHandlerParams) => {\n const definedRoutes: DefinedContextRoutes = {\n POST: [],\n GET: [],\n OPTIONS: [],\n DELETE: [],\n PATCH: [],\n PUT: [],\n HEAD: [],\n COPY: [],\n LOCK: [],\n MKCOL: [],\n MOVE: [],\n PROPFIND: [],\n PROPPATCH: [],\n SEARCH: [],\n TRACE: [],\n UNLOCK: []\n };\n\n const throwOnDefinedRoute = (\n type: HTTPMethods | \"ALL\",\n path: string,\n options?: RouteMethodOptions\n ): void => {\n if (type === \"ALL\") {\n const all = Object.keys(definedRoutes).find(key => {\n const routes = definedRoutes[key as HTTPMethods];\n return routes.includes(path);\n });\n if (!all) {\n return;\n }\n console.log(\n `Error while registering onAll route. One of the routes is already defined.`\n );\n console.log(JSON.stringify(all));\n throw new WebinyError(\n `You cannot override a route with onAll() method, please remove unnecessary route from the system.`,\n \"OVERRIDE_ROUTE_ERROR\",\n {\n type,\n path\n }\n );\n } else if (definedRoutes[type].includes(path) === false) {\n return;\n } else if (options?.override === true) {\n return;\n }\n console.log(`Error while trying to override route: [${type}] ${path}`);\n throw new WebinyError(\n `When you are trying to override existing route, you must send \"override\" parameter when adding that route.`,\n \"OVERRIDE_ROUTE_ERROR\",\n {\n type,\n path\n }\n );\n };\n\n const addDefinedRoute = (type: HTTPMethods, path: string): void => {\n if (!definedRoutes[type]) {\n return;\n } else if (definedRoutes[type].includes(path)) {\n return;\n }\n definedRoutes[type].push(path);\n };\n /**\n * We must attach the server to our internal context if we want to have it accessible.\n */\n const app = fastify({\n ...(params.options || {})\n });\n /**\n * We need to register routes in our system so we can output headers later on and dissallow overriding routes.\n */\n app.addHook(\"onRoute\", route => {\n const method = route.method;\n if (Array.isArray(method)) {\n for (const m of method) {\n addDefinedRoute(m, route.path);\n }\n return;\n }\n addDefinedRoute(method, route.path);\n });\n /**\n * ############################\n * Register the Fastify plugins.\n */\n /**\n * Package @fastify/cookie\n *\n * https://github.com/fastify/fastify-cookie\n */\n app.register(fastifyCookie, {\n parseOptions: {} // options for parsing cookies\n });\n /**\n * Package @fastify/compress\n *\n * https://github.com/fastify/fastify-compress\n */\n app.register(fastifyCompress, {\n global: true,\n threshold: 1024,\n onUnsupportedEncoding: (encoding, _, reply) => {\n reply.code(406);\n return `We do not support the ${encoding} encoding.`;\n },\n inflateIfDeflated: true\n });\n /**\n * Route helpers - mostly for users.\n */\n const routes: ContextRoutes = {\n defined: definedRoutes,\n onPost: (path, handler, options) => {\n throwOnDefinedRoute(\"POST\", path, options);\n app.post(path, handler);\n },\n onGet: (path, handler, options) => {\n throwOnDefinedRoute(\"GET\", path, options);\n app.get(path, handler);\n },\n onOptions: (path, handler, options) => {\n throwOnDefinedRoute(\"OPTIONS\", path, options);\n app.options(path, handler);\n },\n onDelete: (path, handler, options) => {\n throwOnDefinedRoute(\"DELETE\", path, options);\n app.delete(path, handler);\n },\n onPatch: (path, handler, options) => {\n throwOnDefinedRoute(\"PATCH\", path, options);\n app.patch(path, handler);\n },\n onPut: (path, handler, options) => {\n throwOnDefinedRoute(\"PUT\", path, options);\n app.put(path, handler);\n },\n onAll: (path, handler, options) => {\n throwOnDefinedRoute(\"ALL\", path, options);\n app.all(path, handler);\n },\n onHead: (path, handler, options) => {\n throwOnDefinedRoute(\"HEAD\", path, options);\n app.head(path, handler);\n }\n };\n let context: Context;\n try {\n context = new Context({\n plugins: [\n /**\n * We must have handlerClient by default.\n * And it must be one of the first context plugins applied.\n */\n createHandlerClient(),\n ...(params.plugins || [])\n ],\n /**\n * Inserted via webpack on build time.\n */\n WEBINY_VERSION: process.env.WEBINY_VERSION as string,\n server: app,\n routes\n });\n } catch (ex) {\n console.log(`Error while constructing the Context.`);\n console.log(stringifyError(ex));\n throw ex;\n }\n\n /**\n * We are attaching our custom context to webiny variable on the fastify app, so it is accessible everywhere.\n */\n app.decorate(\"webiny\", context);\n\n /**\n * We have few types of triggers:\n * * Events - EventPlugin\n * * Routes - RoutePlugin\n *\n * Routes are registered in fastify but events must be handled in package which implements cloud specific methods.\n */\n const routePlugins = app.webiny.plugins.byType<RoutePlugin>(RoutePlugin.type);\n\n /**\n * Add routes to the system.\n */\n let routePluginName: string | undefined;\n try {\n for (const plugin of routePlugins) {\n routePluginName = plugin.name;\n plugin.cb({\n ...app.webiny.routes,\n context: app.webiny\n });\n }\n } catch (ex) {\n console.log(\n `Error while running the \"RoutePlugin\" ${\n routePluginName ? `(${routePluginName})` : \"\"\n } plugin in the beginning of the \"createHandler\" callable.`\n );\n console.log(stringifyError(ex));\n throw ex;\n }\n\n /**\n * On every request we add default headers, which can be changed later.\n * Also, if it is an options request, we skip everything after this hook and output options headers.\n */\n app.addHook(\"onRequest\", async (request, reply) => {\n /**\n * Our default headers are always set. Users can override them.\n */\n const defaultHeaders = getDefaultHeaders(definedRoutes);\n reply.headers(defaultHeaders);\n /**\n * Users can define their own custom handlers for the onRequest event - so let's run them first.\n */\n const plugins = app.webiny.plugins.byType<HandlerOnRequestPlugin>(\n HandlerOnRequestPlugin.type\n );\n\n let name: string | undefined;\n try {\n for (const plugin of plugins) {\n name = plugin.name;\n const result = await plugin.exec(request, reply);\n if (result === false) {\n return;\n }\n }\n } catch (ex) {\n console.log(\n `Error while running the \"HandlerOnRequestPlugin\" ${\n name ? `(${name})` : \"\"\n } plugin in the onRequest hook.`\n );\n console.log(stringifyError(ex));\n throw ex;\n }\n /**\n * When we receive the OPTIONS request, we end it before it goes any further as there is no need for anything to run after this - at least for our use cases.\n *\n * Users can prevent this by creating their own HandlerOnRequestPlugin and returning false as the result of the callable.\n */\n if (request.method !== \"OPTIONS\") {\n return;\n }\n\n if (reply.sent) {\n /**\n * At this point throwing an exception will not do anything with the response. So just log it.\n */\n console.log(\n JSON.stringify({\n message: `Output was already sent. Please check custom plugins of type \"HandlerOnRequestPlugin\".`,\n explanation:\n \"This error can happen if the user plugin ended the reply, but did not return false as response.\"\n })\n );\n return;\n }\n\n reply\n .headers({ ...defaultHeaders, ...OPTIONS_HEADERS })\n .code(204)\n .send(\"\")\n .hijack();\n });\n\n app.addHook(\"preParsing\", async (request, reply) => {\n app.webiny.request = request;\n app.webiny.reply = reply;\n const plugins = app.webiny.plugins.byType<ContextPlugin>(ContextPlugin.type);\n let name: string | undefined;\n try {\n for (const plugin of plugins) {\n name = plugin.name;\n await plugin.apply(app.webiny);\n }\n } catch (ex) {\n console.log(\n `Error while running the \"ContextPlugin\" ${\n name ? `(${name})` : \"\"\n } plugin in the preParsing hook.`\n );\n console.log(stringifyError(ex));\n throw ex;\n }\n });\n /**\n *\n */\n app.addHook(\"preHandler\", async () => {\n const plugins = app.webiny.plugins.byType<BeforeHandlerPlugin>(BeforeHandlerPlugin.type);\n let name: string | undefined;\n try {\n for (const plugin of plugins) {\n name = plugin.name;\n await plugin.apply(app.webiny);\n }\n } catch (ex) {\n console.log(\n `Error while running the \"BeforeHandlerPlugin\" ${\n name ? `(${name})` : \"\"\n } plugin in the preHandler hook.`\n );\n console.log(stringifyError(ex));\n throw ex;\n }\n });\n\n /**\n *\n */\n const preSerialization: preSerializationAsyncHookHandler<any> = async (_, __, payload) => {\n const plugins = app.webiny.plugins.byType<HandlerResultPlugin>(HandlerResultPlugin.type);\n let name: string | undefined;\n try {\n for (const plugin of plugins) {\n name = plugin.name;\n await plugin.handle(app.webiny, payload);\n }\n } catch (ex) {\n console.log(\n `Error while running the \"HandlerResultPlugin\" ${\n name ? `(${name})` : \"\"\n } plugin in the preSerialization hook.`\n );\n console.log(stringifyError(ex));\n throw ex;\n }\n return payload;\n };\n\n app.addHook(\"preSerialization\", preSerialization);\n\n app.setErrorHandler<WebinyError>(async (error, request, reply) => {\n return reply\n .status(500)\n .headers({\n \"Cache-Control\": \"no-store\"\n })\n .send(\n /**\n * When we are sending the error in the response, we cannot send the whole error object, as it might contain some sensitive data.\n */\n JSON.stringify({\n message: error.message,\n code: error.code,\n data: error.data\n })\n );\n });\n\n app.addHook(\"onError\", async (_, reply, error: any) => {\n const plugins = app.webiny.plugins.byType<HandlerErrorPlugin>(HandlerErrorPlugin.type);\n /**\n * Log error to cloud, as these can be extremely annoying to debug!\n */\n console.log(\"@webiny/handler\");\n console.log(stringifyError(error));\n\n reply\n .status(500)\n .headers({\n \"Cache-Control\": \"no-store\"\n })\n .send(\n /**\n * When we are sending the error in the response, we cannot send the whole error object, as it might contain some sensitive data.\n */\n JSON.stringify({\n message: error.message,\n code: error.code,\n data: error.data\n })\n );\n\n const handler = middleware(\n plugins.map(pl => {\n return (context: Context, error: Error, next: Function) => {\n return pl.handle(context, error, next);\n };\n })\n );\n await handler(app.webiny, error);\n\n return reply;\n });\n\n /**\n * With these plugins we give users possibility to do anything they want on our fastify instance.\n */\n const modifyPlugins = app.webiny.plugins.byType<ModifyFastifyPlugin>(ModifyFastifyPlugin.type);\n\n let modifyFastifyPluginName: string | undefined;\n try {\n for (const plugin of modifyPlugins) {\n modifyFastifyPluginName = plugin.name;\n plugin.modify(app);\n }\n } catch (ex) {\n console.log(\n `Error while running the \"ModifyFastifyPlugin\" ${\n modifyFastifyPluginName ? `(${modifyFastifyPluginName})` : \"\"\n } plugin in the end of the \"createHandler\" callable.`\n );\n console.log(stringifyError(ex));\n throw ex;\n }\n\n return app;\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/handler",
3
- "version": "5.34.2",
3
+ "version": "5.34.3-beta.1",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,11 +15,11 @@
15
15
  "@babel/runtime": "7.19.0",
16
16
  "@fastify/compress": "6.2.0",
17
17
  "@fastify/cookie": "8.3.0",
18
- "@webiny/api": "5.34.2",
19
- "@webiny/error": "5.34.2",
20
- "@webiny/handler-client": "5.34.2",
21
- "@webiny/plugins": "5.34.2",
22
- "@webiny/utils": "5.34.2",
18
+ "@webiny/api": "5.34.3-beta.1",
19
+ "@webiny/error": "5.34.3-beta.1",
20
+ "@webiny/handler-client": "5.34.3-beta.1",
21
+ "@webiny/plugins": "5.34.3-beta.1",
22
+ "@webiny/utils": "5.34.3-beta.1",
23
23
  "fastify": "4.11.0"
24
24
  },
25
25
  "devDependencies": {
@@ -27,8 +27,8 @@
27
27
  "@babel/core": "^7.19.3",
28
28
  "@babel/preset-env": "^7.19.4",
29
29
  "@babel/preset-typescript": "^7.18.6",
30
- "@webiny/cli": "^5.34.2",
31
- "@webiny/project-utils": "^5.34.2",
30
+ "@webiny/cli": "^5.34.3-beta.1",
31
+ "@webiny/project-utils": "^5.34.3-beta.1",
32
32
  "babel-plugin-lodash": "^3.3.4",
33
33
  "merge": "^1.2.1",
34
34
  "rimraf": "^3.0.2",
@@ -43,5 +43,5 @@
43
43
  "build": "yarn webiny run build",
44
44
  "watch": "yarn webiny run watch"
45
45
  },
46
- "gitHead": "518ff6226deeeb8fdb12e1bd58f250d0c34d966a"
46
+ "gitHead": "1a098125f7fea27f610599e64cd3a82df3ff566b"
47
47
  }
package/types.d.ts CHANGED
@@ -33,6 +33,10 @@ export interface Context extends ClientContext {
33
33
  * Current request. Must be set only once!
34
34
  */
35
35
  request: FastifyRequest;
36
+ /**
37
+ * Current reply. Must be set only once!
38
+ */
39
+ reply: FastifyReply;
36
40
  /**
37
41
  * @internal
38
42
  */
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {\n FastifyInstance,\n FastifyRequest,\n FastifyReply,\n HTTPMethods,\n RouteHandlerMethod\n} from \"fastify\";\n\nexport { FastifyInstance, HTTPMethods } from \"fastify\";\nimport { ClientContext } from \"@webiny/handler-client/types\";\n\nexport interface RouteMethodOptions {\n override?: boolean;\n}\n\nexport type RouteMethodPath = `/${string}` | \"*\";\nexport interface RouteMethod {\n (path: RouteMethodPath, handler: RouteHandlerMethod, options?: RouteMethodOptions): void;\n}\n\nexport type Request = FastifyRequest;\nexport type Reply = FastifyReply;\n\nexport type DefinedContextRoutes = Record<HTTPMethods, string[]>;\nexport interface ContextRoutes {\n defined: DefinedContextRoutes;\n onGet: RouteMethod;\n onPost: RouteMethod;\n onPut: RouteMethod;\n onPatch: RouteMethod;\n onDelete: RouteMethod;\n onOptions: RouteMethod;\n onAll: RouteMethod;\n onHead: RouteMethod;\n}\n\nexport interface Context extends ClientContext {\n /**\n * An instance of fastify server.\n * Use at your own risk.\n * @instance\n */\n server: FastifyInstance;\n /**\n * Current request. Must be set only once!\n */\n request: FastifyRequest;\n /**\n * @internal\n */\n routes: ContextRoutes;\n}\n\ndeclare module \"fastify\" {\n interface FastifyInstance {\n webiny: Context;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA"}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {\n FastifyInstance,\n FastifyRequest,\n FastifyReply,\n HTTPMethods,\n RouteHandlerMethod\n} from \"fastify\";\n\nexport { FastifyInstance, HTTPMethods } from \"fastify\";\nimport { ClientContext } from \"@webiny/handler-client/types\";\n\nexport interface RouteMethodOptions {\n override?: boolean;\n}\n\nexport type RouteMethodPath = `/${string}` | \"*\";\nexport interface RouteMethod {\n (path: RouteMethodPath, handler: RouteHandlerMethod, options?: RouteMethodOptions): void;\n}\n\nexport type Request = FastifyRequest;\nexport type Reply = FastifyReply;\n\nexport type DefinedContextRoutes = Record<HTTPMethods, string[]>;\nexport interface ContextRoutes {\n defined: DefinedContextRoutes;\n onGet: RouteMethod;\n onPost: RouteMethod;\n onPut: RouteMethod;\n onPatch: RouteMethod;\n onDelete: RouteMethod;\n onOptions: RouteMethod;\n onAll: RouteMethod;\n onHead: RouteMethod;\n}\n\nexport interface Context extends ClientContext {\n /**\n * An instance of fastify server.\n * Use at your own risk.\n * @instance\n */\n server: FastifyInstance;\n /**\n * Current request. Must be set only once!\n */\n request: FastifyRequest;\n /**\n * Current reply. Must be set only once!\n */\n reply: FastifyReply;\n /**\n * @internal\n */\n routes: ContextRoutes;\n}\n\ndeclare module \"fastify\" {\n interface FastifyInstance {\n webiny: Context;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA"}