@openstax/ts-utils 1.25.1-pre2 → 1.25.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.
@@ -10,7 +10,7 @@ export declare type DefaultErrors = {
10
10
  SessionExpiredError: SessionExpiredError;
11
11
  };
12
12
  export declare type Handlers<E> = {
13
- [T in keyof E]: (e: E[T], logger: Logger) => ApiResponse<number, any>;
13
+ [T in keyof E]?: (e: E[T], logger: Logger) => ApiResponse<number, any>;
14
14
  };
15
15
  export declare const defaultHandlers: Handlers<DefaultErrors>;
16
16
  /**
@@ -25,16 +25,17 @@ const createErrorHandler = (inputHandlers) => {
25
25
  return async (e, logger) => {
26
26
  const name = (0, errors_1.isAppError)(e) ? e.constructor.TYPE : e.constructor.name;
27
27
  const handler = handlers[name];
28
+ const logLevel = handler ? logger_1.Level.Info : logger_1.Level.Error;
29
+ logger.logEvent(logLevel, {
30
+ name: e.name,
31
+ message: e.message,
32
+ stack: e.stack,
33
+ });
28
34
  if (handler) {
29
35
  // convincing typescript that this error is the right kind for the handler
30
36
  // we looked up based on the errors name is very annoying
31
37
  return handler(e, logger);
32
38
  }
33
- logger.logEvent(logger_1.Level.Error, {
34
- name: e.name,
35
- message: e.message,
36
- stack: e.stack,
37
- });
38
39
  return (0, routing_1.apiTextResponse)(500, '500 Error');
39
40
  };
40
41
  };
@@ -139,7 +139,10 @@ const bindRoute = (services, appBinder, pathExtractor, matcher) => (route) => {
139
139
  const path = pathExtractor(request);
140
140
  const match = getParamsFromPath(path);
141
141
  if ((!matcher || matcher(request, route)) && match) {
142
- return () => route.handler(match.params, boundServiceProvider ? boundServiceProvider({ request, logger }, { route, params: match.params }) : undefined);
142
+ return {
143
+ name: route.name,
144
+ executor: () => route.handler(match.params, boundServiceProvider ? boundServiceProvider({ request, logger }, { route, params: match.params }) : undefined)
145
+ };
143
146
  }
144
147
  };
145
148
  };
@@ -192,11 +195,13 @@ const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatcher, er
192
195
  if (logExtractor) {
193
196
  logger.setContext(logExtractor(request));
194
197
  }
198
+ logger.log('begin request');
195
199
  try {
196
- const executor = (0, helpers_1.mapFind)(boundRoutes, (route) => route(request, logger));
197
- if (executor) {
200
+ const route = (0, helpers_1.mapFind)(boundRoutes, (route) => route(request, logger));
201
+ if (route) {
202
+ logger.log(`route matched ${route.name}`);
198
203
  const result = boundResponseMiddleware ?
199
- boundResponseMiddleware(executor(), { request, logger }) : executor();
204
+ boundResponseMiddleware(route.executor(), { request, logger }) : route.executor();
200
205
  if (isPromise(result) && errorHandler) {
201
206
  const errorHandlerWithMiddleware = (e) => boundResponseMiddleware ?
202
207
  boundResponseMiddleware(errorHandler(e, logger), { request, logger }) : errorHandler(e, logger);
@@ -207,6 +212,7 @@ const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatcher, er
207
212
  }
208
213
  }
209
214
  else if (boundResponseMiddleware) {
215
+ logger.log('no route matched, returning 404');
210
216
  return boundResponseMiddleware(undefined, { request, logger });
211
217
  }
212
218
  }