1 |
|
2 |
|
3 |
|
4 | import { HttpOperationResponse } from "../httpOperationResponse";
|
5 | import { WebResourceLike } from "../webResource";
|
6 | import {
|
7 | BaseRequestPolicy,
|
8 | RequestPolicy,
|
9 | RequestPolicyFactory,
|
10 | RequestPolicyOptionsLike,
|
11 | } from "./requestPolicy";
|
12 |
|
13 | export function logPolicy(logger: any = console.log): RequestPolicyFactory {
|
14 | return {
|
15 | create: (nextPolicy: RequestPolicy, options: RequestPolicyOptionsLike) => {
|
16 | return new LogPolicy(nextPolicy, options, logger);
|
17 | },
|
18 | };
|
19 | }
|
20 |
|
21 | export class LogPolicy extends BaseRequestPolicy {
|
22 | logger?: any;
|
23 |
|
24 | constructor(
|
25 | nextPolicy: RequestPolicy,
|
26 | options: RequestPolicyOptionsLike,
|
27 | logger: any = console.log
|
28 | ) {
|
29 | super(nextPolicy, options);
|
30 | this.logger = logger;
|
31 | }
|
32 |
|
33 | public sendRequest(request: WebResourceLike): Promise<HttpOperationResponse> {
|
34 | return this._nextPolicy.sendRequest(request).then((response) => logResponse(this, response));
|
35 | }
|
36 | }
|
37 |
|
38 | function logResponse(
|
39 | policy: LogPolicy,
|
40 | response: HttpOperationResponse
|
41 | ): Promise<HttpOperationResponse> {
|
42 | policy.logger(`>> Request: ${JSON.stringify(response.request, undefined, 2)}`);
|
43 | policy.logger(`>> Response status code: ${response.status}`);
|
44 | const responseBody = response.bodyAsText;
|
45 | policy.logger(`>> Body: ${responseBody}`);
|
46 | return Promise.resolve(response);
|
47 | }
|