@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
  /**
@@ -22,16 +22,17 @@ export const createErrorHandler = (inputHandlers) => {
22
22
  return async (e, logger) => {
23
23
  const name = isAppError(e) ? e.constructor.TYPE : e.constructor.name;
24
24
  const handler = handlers[name];
25
+ const logLevel = handler ? Level.Info : Level.Error;
26
+ logger.logEvent(logLevel, {
27
+ name: e.name,
28
+ message: e.message,
29
+ stack: e.stack,
30
+ });
25
31
  if (handler) {
26
32
  // convincing typescript that this error is the right kind for the handler
27
33
  // we looked up based on the errors name is very annoying
28
34
  return handler(e, logger);
29
35
  }
30
- logger.logEvent(Level.Error, {
31
- name: e.name,
32
- message: e.message,
33
- stack: e.stack,
34
- });
35
36
  return apiTextResponse(500, '500 Error');
36
37
  };
37
38
  };
@@ -105,7 +105,10 @@ const bindRoute = (services, appBinder, pathExtractor, matcher) => (route) => {
105
105
  const path = pathExtractor(request);
106
106
  const match = getParamsFromPath(path);
107
107
  if ((!matcher || matcher(request, route)) && match) {
108
- return () => route.handler(match.params, boundServiceProvider ? boundServiceProvider({ request, logger }, { route, params: match.params }) : undefined);
108
+ return {
109
+ name: route.name,
110
+ executor: () => route.handler(match.params, boundServiceProvider ? boundServiceProvider({ request, logger }, { route, params: match.params }) : undefined)
111
+ };
109
112
  }
110
113
  };
111
114
  };
@@ -158,11 +161,13 @@ export const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatc
158
161
  if (logExtractor) {
159
162
  logger.setContext(logExtractor(request));
160
163
  }
164
+ logger.log('begin request');
161
165
  try {
162
- const executor = mapFind(boundRoutes, (route) => route(request, logger));
163
- if (executor) {
166
+ const route = mapFind(boundRoutes, (route) => route(request, logger));
167
+ if (route) {
168
+ logger.log(`route matched ${route.name}`);
164
169
  const result = boundResponseMiddleware ?
165
- boundResponseMiddleware(executor(), { request, logger }) : executor();
170
+ boundResponseMiddleware(route.executor(), { request, logger }) : route.executor();
166
171
  if (isPromise(result) && errorHandler) {
167
172
  const errorHandlerWithMiddleware = (e) => boundResponseMiddleware ?
168
173
  boundResponseMiddleware(errorHandler(e, logger), { request, logger }) : errorHandler(e, logger);
@@ -173,6 +178,7 @@ export const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatc
173
178
  }
174
179
  }
175
180
  else if (boundResponseMiddleware) {
181
+ logger.log('no route matched, returning 404');
176
182
  return boundResponseMiddleware(undefined, { request, logger });
177
183
  }
178
184
  }