cassava
Version:
AWS API Gateway Router
82 lines • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggingRoute = void 0;
/**
* Logs all requests and responses.
*/
class LoggingRoute {
constructor(options = {}) {
this.options = options;
}
matches(evt) {
return true;
}
handle(evt) {
const msg = this.requestToString(evt);
this.log(msg);
}
postProcess(evt, resp) {
const msg = `${this.requestToString(evt)} ${this.responseToString(resp)}`;
this.log(msg);
}
requestToString(evt) {
let msg = `${evt.httpMethod} ${evt.path}${this.queryMapToString(evt.multiValueQueryStringParameters || evt.queryStringParameters)}`;
if (!this.options.hideRequestBody && evt.body != null) {
msg += ` reqbody=${JSON.stringify(evt.body)}`;
}
if (this.options.logRequestHeaders) {
msg += ` reqheaders={${this.headersToString(evt.multiValueHeaders || evt.headers, this.options.logRequestHeaders)}}`;
}
return msg;
}
responseToString(resp) {
let msg = `status=${resp.statusCode || 200}`;
if (!this.options.hideResponseBody) {
msg += ` respbody=${JSON.stringify(resp.body)}`;
}
if (this.options.logResponseHeaders) {
msg += ` respheaders={${this.headersToString(resp.headers, this.options.logResponseHeaders)}}`;
}
return msg;
}
queryMapToString(queryStringParameters) {
if (!queryStringParameters) {
return "";
}
const keys = Object.keys(queryStringParameters);
if (!keys.length) {
return "";
}
return "?" + keys.map(key => {
const value = queryStringParameters[key];
if (Array.isArray(value)) {
return value.map(value => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&");
}
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
}).join("&");
}
headersToString(headers, headersFilter) {
let keys = Object.keys(headers);
if (Array.isArray(headersFilter)) {
const filterLowerCase = headersFilter.map(h => h.toLowerCase());
keys = keys.filter(key => filterLowerCase ? filterLowerCase.indexOf(key.toLowerCase()) !== -1 : true);
}
return keys.map(key => {
const value = headers[key];
if (Array.isArray(value)) {
return value.map(value => `${key}=${value}`).join(", ");
}
return `${key}=${value}`;
}).join(", ");
}
log(msg) {
if (this.options.logFunction) {
this.options.logFunction(msg);
}
else {
console.log(msg);
}
}
}
exports.LoggingRoute = LoggingRoute;
//# sourceMappingURL=LoggingRoute.js.map