@optimizely-opal/opal-tool-ocp-sdk 1.0.0-OCP-1442.1 โ 1.0.0-OCP-1442.3
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/README.md +72 -0
- package/dist/function/GlobalToolFunction.js +1 -1
- package/dist/function/GlobalToolFunction.js.map +1 -1
- package/dist/function/ToolFunction.js +1 -1
- package/dist/function/ToolFunction.js.map +1 -1
- package/dist/logging/ToolLogger.d.ts.map +1 -1
- package/dist/logging/ToolLogger.js +54 -19
- package/dist/logging/ToolLogger.js.map +1 -1
- package/dist/logging/ToolLogger.test.js +110 -50
- package/dist/logging/ToolLogger.test.js.map +1 -1
- package/package.json +1 -1
- package/src/function/GlobalToolFunction.ts +1 -1
- package/src/function/ToolFunction.ts +1 -1
- package/src/logging/ToolLogger.test.ts +219 -213
- package/src/logging/ToolLogger.ts +58 -20
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@ A TypeScript SDK for building Opal tools in Optimizely Connect Platform. This SD
|
|
|
14
14
|
- ๐ก๏ธ **Authorization Support** - OptiID token tool authorization
|
|
15
15
|
- ๐ **Parameter Validation** - Define and validate tool parameters with types
|
|
16
16
|
- โ
**Automatic Validation** - SDK automatically validates parameters and returns RFC 9457 compliant error responses
|
|
17
|
+
- ๐ **Request/Response Logging** - Comprehensive logging with sensitive data redaction and performance monitoring
|
|
17
18
|
- ๐งช **Comprehensive Testing** - Fully tested with Jest
|
|
18
19
|
|
|
19
20
|
## Installation
|
|
@@ -400,6 +401,77 @@ Key model classes with generic type support:
|
|
|
400
401
|
- `InteractionResult` - Response from interactions
|
|
401
402
|
- `OptiIdAuthData` - OptiID specific authentication data
|
|
402
403
|
|
|
404
|
+
## Request and Response Logging
|
|
405
|
+
|
|
406
|
+
The SDK automatically logs all incoming requests and outgoing responses with comprehensive metadata for debugging and monitoring purposes.
|
|
407
|
+
|
|
408
|
+
### Logging Features
|
|
409
|
+
|
|
410
|
+
- **Automatic Logging** - All requests and responses are logged without additional configuration
|
|
411
|
+
- **Performance Monitoring** - Request duration tracking with millisecond precision
|
|
412
|
+
- **Security-First** - Sensitive data is automatically redacted from logs
|
|
413
|
+
- **Zaius Audience** - Logs are visible only to developers with appropriate access
|
|
414
|
+
- **Structured Data** - Consistent JSON format for easy parsing and analysis
|
|
415
|
+
|
|
416
|
+
### Request Logging
|
|
417
|
+
|
|
418
|
+
Every incoming request is logged with the following information:
|
|
419
|
+
|
|
420
|
+
```json
|
|
421
|
+
{
|
|
422
|
+
"event": "opal_tool_request",
|
|
423
|
+
"path": "/create-task",
|
|
424
|
+
"parameters": {
|
|
425
|
+
"title": "Complete project",
|
|
426
|
+
"priority": "high",
|
|
427
|
+
"api_key": "[REDACTED]"
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Response Logging
|
|
433
|
+
|
|
434
|
+
Every outgoing response is logged with performance and metadata:
|
|
435
|
+
|
|
436
|
+
```json
|
|
437
|
+
{
|
|
438
|
+
"event": "opal_tool_response",
|
|
439
|
+
"path": "/create-task",
|
|
440
|
+
"duration": "150ms",
|
|
441
|
+
"status": 200,
|
|
442
|
+
"contentType": "application/json",
|
|
443
|
+
"contentLength": 234,
|
|
444
|
+
"success": true
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### Sensitive Data Redaction
|
|
449
|
+
|
|
450
|
+
The SDK automatically redacts sensitive information from request logs to protect security credentials and personal data. The following field types are automatically redacted:
|
|
451
|
+
|
|
452
|
+
**Authentication & Security:**
|
|
453
|
+
- `password`, `pass`, `secret`, `key`, `token`
|
|
454
|
+
- `auth`, `credentials`, `access_token`, `refresh_token`
|
|
455
|
+
- `api_key`, `private_key`, `client_secret`, `session_token`
|
|
456
|
+
- `authorization`, `bearer_token`, `jwt`
|
|
457
|
+
- `otp`, `pin`, `signing_key`, `encryption_key`
|
|
458
|
+
|
|
459
|
+
**Payment Information:**
|
|
460
|
+
- `card_number`, `credit_card`, `cvv`, `expiry_date`
|
|
461
|
+
|
|
462
|
+
**Personal Data:**
|
|
463
|
+
- `ssn`, `nid`, `passport`, `dob`
|
|
464
|
+
- `email`, `phone`, `address`
|
|
465
|
+
|
|
466
|
+
**Security Questions:**
|
|
467
|
+
- `security_answer`, `security_question`
|
|
468
|
+
|
|
469
|
+
Redacted fields appear as `[REDACTED]` in logs while preserving the overall request structure for debugging.
|
|
470
|
+
|
|
471
|
+
### Log Visibility
|
|
472
|
+
|
|
473
|
+
All logs use Zaius audience visibility, meaning developers only see logs for requests from organizations they have access to, maintaining proper data isolation and security.
|
|
474
|
+
|
|
403
475
|
## Discovery and Ready Endpoints
|
|
404
476
|
|
|
405
477
|
The SDK automatically provides two important endpoints:
|
|
@@ -35,7 +35,7 @@ class GlobalToolFunction extends app_sdk_1.GlobalFunction {
|
|
|
35
35
|
});
|
|
36
36
|
ToolLogger_1.ToolLogger.logRequest(this.request);
|
|
37
37
|
const response = await this.handleRequest();
|
|
38
|
-
ToolLogger_1.ToolLogger.logResponse(this.request, response,
|
|
38
|
+
ToolLogger_1.ToolLogger.logResponse(this.request, response, Date.now() - startTime);
|
|
39
39
|
return response;
|
|
40
40
|
}
|
|
41
41
|
async handleRequest() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalToolFunction.js","sourceRoot":"","sources":["../../src/function/GlobalToolFunction.ts"],"names":[],"mappings":";;;AAAA,+CAA8E;AAC9E,iDAA+E;AAC/E,gDAAkD;AAClD,sDAAmD;AAEnD;;;GAGG;AACH,MAAsB,kBAAmB,SAAQ,wBAAc;IAE7D;;;;;OAKG;IACO,KAAK;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,oEAAoE;QACpE,MAAM,QAAQ,GAAG,IAAA,2BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAEhE,IAAA,yBAAe,EAAC;YACd,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE;YAChE,UAAU,EAAE,UAAU,IAAI,EAAE;SAC7B,CAAC,CAAC;QAEH,uBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"GlobalToolFunction.js","sourceRoot":"","sources":["../../src/function/GlobalToolFunction.ts"],"names":[],"mappings":";;;AAAA,+CAA8E;AAC9E,iDAA+E;AAC/E,gDAAkD;AAClD,sDAAmD;AAEnD;;;GAGG;AACH,MAAsB,kBAAmB,SAAQ,wBAAc;IAE7D;;;;;OAKG;IACO,KAAK;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,oEAAoE;QACpE,MAAM,QAAQ,GAAG,IAAA,2BAAe,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAEhE,IAAA,yBAAe,EAAC;YACd,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE;YAChE,UAAU,EAAE,UAAU,IAAI,EAAE;SAC7B,CAAC,CAAC;QAEH,uBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,kBAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,IAAI,kBAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,sBAAY,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB;QAC5B,OAAO,MAAM,IAAA,qCAAyB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;AAzDD,gDAyDC"}
|
|
@@ -29,7 +29,7 @@ class ToolFunction extends app_sdk_1.Function {
|
|
|
29
29
|
(0, app_sdk_1.amendLogContext)({ opalThreadId: this.request.headers.get('x-opal-thread-id') || '' });
|
|
30
30
|
ToolLogger_1.ToolLogger.logRequest(this.request);
|
|
31
31
|
const response = await this.handleRequest();
|
|
32
|
-
ToolLogger_1.ToolLogger.logResponse(this.request, response,
|
|
32
|
+
ToolLogger_1.ToolLogger.logResponse(this.request, response, Date.now() - startTime);
|
|
33
33
|
return response;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolFunction.js","sourceRoot":"","sources":["../../src/function/ToolFunction.ts"],"names":[],"mappings":";;;AAAA,+CAAwE;AACxE,iDAA+D;AAC/D,gDAAkD;AAClD,sDAAmD;AAEnD;;;GAGG;AACH,MAAsB,YAAa,SAAQ,kBAAQ;IAEjD;;;;;OAKG;IACO,KAAK;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAA,yBAAe,EAAC,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEtF,uBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE5C,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ToolFunction.js","sourceRoot":"","sources":["../../src/function/ToolFunction.ts"],"names":[],"mappings":";;;AAAA,+CAAwE;AACxE,iDAA+D;AAC/D,gDAAkD;AAClD,sDAAmD;AAEnD;;;GAGG;AACH,MAAsB,YAAa,SAAQ,kBAAQ;IAEjD;;;;;OAKG;IACO,KAAK;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAA,yBAAe,EAAC,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEtF,uBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE5C,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,kBAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,IAAI,kBAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,4EAA4E;QAC5E,OAAO,sBAAY,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB;QAC5B,OAAO,MAAM,IAAA,sCAA0B,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAxDD,oCAwDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolLogger.d.ts","sourceRoot":"","sources":["../../src/logging/ToolLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAEzC;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"ToolLogger.d.ts","sourceRoot":"","sources":["../../src/logging/ToolLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAEzC;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAyCtC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAE7C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA0ClC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAO/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAQrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAoBrC;;OAEG;WACW,UAAU,CACtB,GAAG,EAAE,GAAG,CAAC,OAAO,GACf,IAAI;IAYP;;OAEG;WACW,WAAW,CACvB,GAAG,EAAE,GAAG,CAAC,OAAO,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,gBAAgB,CAAC,EAAE,MAAM,GACxB,IAAI;CAiBR"}
|
|
@@ -7,7 +7,9 @@ const app_sdk_1 = require("@zaiusinc/app-sdk");
|
|
|
7
7
|
*/
|
|
8
8
|
class ToolLogger {
|
|
9
9
|
static SENSITIVE_FIELDS = [
|
|
10
|
+
// Authentication / secrets
|
|
10
11
|
'password',
|
|
12
|
+
'pass',
|
|
11
13
|
'secret',
|
|
12
14
|
'key',
|
|
13
15
|
'token',
|
|
@@ -17,7 +19,31 @@ class ToolLogger {
|
|
|
17
19
|
'refresh_token',
|
|
18
20
|
'api_key',
|
|
19
21
|
'private_key',
|
|
20
|
-
'client_secret'
|
|
22
|
+
'client_secret',
|
|
23
|
+
'session_token',
|
|
24
|
+
'authorization',
|
|
25
|
+
// Payment-related
|
|
26
|
+
'card_number',
|
|
27
|
+
'credit_card',
|
|
28
|
+
'cvv',
|
|
29
|
+
'expiry_date',
|
|
30
|
+
// Personal info
|
|
31
|
+
'ssn', // social security number
|
|
32
|
+
'nid', // national ID
|
|
33
|
+
'passport',
|
|
34
|
+
'dob', // date of birth
|
|
35
|
+
'email',
|
|
36
|
+
'phone',
|
|
37
|
+
'address',
|
|
38
|
+
// Misc / environment
|
|
39
|
+
'otp',
|
|
40
|
+
'pin',
|
|
41
|
+
'security_answer',
|
|
42
|
+
'security_question',
|
|
43
|
+
'signing_key',
|
|
44
|
+
'encryption_key',
|
|
45
|
+
'jwt',
|
|
46
|
+
'bearer_token'
|
|
21
47
|
];
|
|
22
48
|
static MAX_PARAM_LENGTH = 100;
|
|
23
49
|
static MAX_ARRAY_ITEMS = 10;
|
|
@@ -29,18 +55,18 @@ class ToolLogger {
|
|
|
29
55
|
return data;
|
|
30
56
|
}
|
|
31
57
|
if (typeof data === 'string') {
|
|
32
|
-
return data.length >
|
|
33
|
-
? `${data.substring(0,
|
|
58
|
+
return data.length > ToolLogger.MAX_PARAM_LENGTH
|
|
59
|
+
? `${data.substring(0, ToolLogger.MAX_PARAM_LENGTH)}... (truncated, ${data.length} chars total)`
|
|
34
60
|
: data;
|
|
35
61
|
}
|
|
36
62
|
if (typeof data === 'number' || typeof data === 'boolean') {
|
|
37
63
|
return data;
|
|
38
64
|
}
|
|
39
65
|
if (Array.isArray(data)) {
|
|
40
|
-
const truncated = data.slice(0,
|
|
41
|
-
const result = truncated.map((item) =>
|
|
42
|
-
if (data.length >
|
|
43
|
-
result.push(`... (${data.length -
|
|
66
|
+
const truncated = data.slice(0, ToolLogger.MAX_ARRAY_ITEMS);
|
|
67
|
+
const result = truncated.map((item) => ToolLogger.redactSensitiveData(item, maxDepth - 1));
|
|
68
|
+
if (data.length > ToolLogger.MAX_ARRAY_ITEMS) {
|
|
69
|
+
result.push(`... (${data.length - ToolLogger.MAX_ARRAY_ITEMS} more items truncated)`);
|
|
44
70
|
}
|
|
45
71
|
return result;
|
|
46
72
|
}
|
|
@@ -48,12 +74,12 @@ class ToolLogger {
|
|
|
48
74
|
const result = {};
|
|
49
75
|
for (const [key, value] of Object.entries(data)) {
|
|
50
76
|
// Check if this field contains sensitive data
|
|
51
|
-
const isSensitive =
|
|
77
|
+
const isSensitive = ToolLogger.isSensitiveField(key);
|
|
52
78
|
if (isSensitive) {
|
|
53
79
|
result[key] = '[REDACTED]';
|
|
54
80
|
}
|
|
55
81
|
else {
|
|
56
|
-
result[key] =
|
|
82
|
+
result[key] = ToolLogger.redactSensitiveData(value, maxDepth - 1);
|
|
57
83
|
}
|
|
58
84
|
}
|
|
59
85
|
return result;
|
|
@@ -65,7 +91,7 @@ class ToolLogger {
|
|
|
65
91
|
*/
|
|
66
92
|
static isSensitiveField(fieldName) {
|
|
67
93
|
const lowerKey = fieldName.toLowerCase();
|
|
68
|
-
return
|
|
94
|
+
return ToolLogger.SENSITIVE_FIELDS.some((sensitiveField) => lowerKey.includes(sensitiveField));
|
|
69
95
|
}
|
|
70
96
|
/**
|
|
71
97
|
* Creates a summary of request parameters
|
|
@@ -74,22 +100,28 @@ class ToolLogger {
|
|
|
74
100
|
if (!params) {
|
|
75
101
|
return null;
|
|
76
102
|
}
|
|
77
|
-
return
|
|
103
|
+
return ToolLogger.redactSensitiveData(params);
|
|
78
104
|
}
|
|
79
105
|
/**
|
|
80
106
|
* Calculates content length of response data
|
|
81
107
|
*/
|
|
82
|
-
static calculateContentLength(
|
|
83
|
-
if (!
|
|
108
|
+
static calculateContentLength(response) {
|
|
109
|
+
if (!response) {
|
|
84
110
|
return 0;
|
|
85
111
|
}
|
|
86
112
|
try {
|
|
87
|
-
|
|
88
|
-
|
|
113
|
+
if (response?.bodyJSON) {
|
|
114
|
+
const responseBodyJson = JSON.stringify(response.bodyJSON);
|
|
115
|
+
console.log('BodyJson length', responseBodyJson.length || 0);
|
|
116
|
+
return responseBodyJson.length;
|
|
117
|
+
}
|
|
89
118
|
}
|
|
90
119
|
catch {
|
|
120
|
+
console.log("Circular reference or JSON error, returning 'unknown'");
|
|
91
121
|
return 'unknown';
|
|
92
122
|
}
|
|
123
|
+
console.log('Body length', response.body?.length || 0);
|
|
124
|
+
return response.body?.length || 0;
|
|
93
125
|
}
|
|
94
126
|
/**
|
|
95
127
|
* Logs an incoming request
|
|
@@ -99,26 +131,29 @@ class ToolLogger {
|
|
|
99
131
|
const requestLog = {
|
|
100
132
|
event: 'opal_tool_request',
|
|
101
133
|
path: req.path,
|
|
102
|
-
parameters:
|
|
134
|
+
parameters: ToolLogger.createParameterSummary(params)
|
|
103
135
|
};
|
|
104
136
|
// Log with Zaius audience so developers only see requests for accounts they have access to
|
|
105
|
-
app_sdk_1.logger.info(app_sdk_1.LogVisibility.Zaius, requestLog);
|
|
137
|
+
app_sdk_1.logger.info(app_sdk_1.LogVisibility.Zaius, JSON.stringify(requestLog));
|
|
106
138
|
}
|
|
107
139
|
/**
|
|
108
140
|
* Logs a successful response
|
|
109
141
|
*/
|
|
110
142
|
static logResponse(req, response, processingTimeMs) {
|
|
143
|
+
console.log('response', response);
|
|
144
|
+
console.log('response body json', response.bodyJSON);
|
|
145
|
+
console.log('response body', response.body);
|
|
111
146
|
const responseLog = {
|
|
112
147
|
event: 'opal_tool_response',
|
|
113
148
|
path: req.path,
|
|
114
149
|
duration: processingTimeMs ? `${processingTimeMs}ms` : undefined,
|
|
115
150
|
status: response.status,
|
|
116
151
|
contentType: response.headers?.get('content-type') || 'unknown',
|
|
117
|
-
contentLength:
|
|
152
|
+
contentLength: ToolLogger.calculateContentLength(response),
|
|
118
153
|
success: response.status >= 200 && response.status < 300
|
|
119
154
|
};
|
|
120
155
|
// Log with Zaius audience so developers only see requests for accounts they have access to
|
|
121
|
-
app_sdk_1.logger.info(app_sdk_1.LogVisibility.Zaius, responseLog);
|
|
156
|
+
app_sdk_1.logger.info(app_sdk_1.LogVisibility.Zaius, JSON.stringify(responseLog));
|
|
122
157
|
}
|
|
123
158
|
}
|
|
124
159
|
exports.ToolLogger = ToolLogger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolLogger.js","sourceRoot":"","sources":["../../src/logging/ToolLogger.ts"],"names":[],"mappings":";;;AAAA,+CAA0D;AAG1D;;GAEG;AACH,MAAa,UAAU;IACb,MAAM,CAAU,gBAAgB,GAAG;QACzC,UAAU;QACV,QAAQ;QACR,KAAK;QACL,OAAO;QACP,MAAM;QACN,aAAa;QACb,cAAc;QACd,eAAe;QACf,SAAS;QACT,aAAa;QACb,eAAe;
|
|
1
|
+
{"version":3,"file":"ToolLogger.js","sourceRoot":"","sources":["../../src/logging/ToolLogger.ts"],"names":[],"mappings":"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"}
|