@optimizely-opal/opal-tool-ocp-sdk 1.0.0-OCP-1441.4 → 1.0.0-OCP-1442.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.
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolLogger = void 0;
4
+ const app_sdk_1 = require("@zaiusinc/app-sdk");
5
+ /**
6
+ * Utility class for logging Opal tool requests and responses with security considerations
7
+ */
8
+ class ToolLogger {
9
+ static SENSITIVE_FIELDS = [
10
+ 'password',
11
+ 'secret',
12
+ 'key',
13
+ 'token',
14
+ 'auth',
15
+ 'credentials',
16
+ 'access_token',
17
+ 'refresh_token',
18
+ 'api_key',
19
+ 'private_key',
20
+ 'client_secret'
21
+ ];
22
+ static MAX_PARAM_LENGTH = 100;
23
+ static MAX_ARRAY_ITEMS = 10;
24
+ /**
25
+ * Redacts sensitive data from an object
26
+ */
27
+ static redactSensitiveData(data, maxDepth = 5) {
28
+ if (maxDepth <= 0 || data === null || data === undefined) {
29
+ return data;
30
+ }
31
+ if (typeof data === 'string') {
32
+ return data.length > this.MAX_PARAM_LENGTH
33
+ ? `${data.substring(0, this.MAX_PARAM_LENGTH)}... (truncated, ${data.length} chars total)`
34
+ : data;
35
+ }
36
+ if (typeof data === 'number' || typeof data === 'boolean') {
37
+ return data;
38
+ }
39
+ if (Array.isArray(data)) {
40
+ const truncated = data.slice(0, this.MAX_ARRAY_ITEMS);
41
+ const result = truncated.map((item) => this.redactSensitiveData(item, maxDepth - 1));
42
+ if (data.length > this.MAX_ARRAY_ITEMS) {
43
+ result.push(`... (${data.length - this.MAX_ARRAY_ITEMS} more items truncated)`);
44
+ }
45
+ return result;
46
+ }
47
+ if (typeof data === 'object') {
48
+ const result = {};
49
+ for (const [key, value] of Object.entries(data)) {
50
+ // Check if this field contains sensitive data
51
+ const isSensitive = this.isSensitiveField(key);
52
+ if (isSensitive) {
53
+ result[key] = '[REDACTED]';
54
+ }
55
+ else {
56
+ result[key] = this.redactSensitiveData(value, maxDepth - 1);
57
+ }
58
+ }
59
+ return result;
60
+ }
61
+ return data;
62
+ }
63
+ /**
64
+ * Checks if a field name is considered sensitive
65
+ */
66
+ static isSensitiveField(fieldName) {
67
+ const lowerKey = fieldName.toLowerCase();
68
+ return this.SENSITIVE_FIELDS.some((sensitiveField) => lowerKey.includes(sensitiveField));
69
+ }
70
+ /**
71
+ * Creates a summary of request parameters
72
+ */
73
+ static createParameterSummary(params) {
74
+ if (!params) {
75
+ return null;
76
+ }
77
+ return this.redactSensitiveData(params);
78
+ }
79
+ /**
80
+ * Calculates content length of response data
81
+ */
82
+ static calculateContentLength(responseData) {
83
+ if (!responseData) {
84
+ return 0;
85
+ }
86
+ try {
87
+ const serialized = JSON.stringify(responseData);
88
+ return serialized.length;
89
+ }
90
+ catch {
91
+ return 'unknown';
92
+ }
93
+ }
94
+ /**
95
+ * Logs an incoming request
96
+ */
97
+ static logRequest(req) {
98
+ const params = req.bodyJSON && req.bodyJSON.parameters ? req.bodyJSON.parameters : req.bodyJSON;
99
+ const requestLog = {
100
+ event: 'opal_tool_request',
101
+ path: req.path,
102
+ parameters: this.createParameterSummary(params)
103
+ };
104
+ // 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);
106
+ }
107
+ /**
108
+ * Logs a successful response
109
+ */
110
+ static logResponse(req, response, processingTimeMs) {
111
+ const responseLog = {
112
+ event: 'opal_tool_response',
113
+ path: req.path,
114
+ duration: processingTimeMs ? `${processingTimeMs}ms` : undefined,
115
+ status: response.status,
116
+ contentType: response.headers?.get('content-type') || 'unknown',
117
+ contentLength: this.calculateContentLength(response.bodyJSON),
118
+ success: response.status >= 200 && response.status < 300
119
+ };
120
+ // 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);
122
+ }
123
+ }
124
+ exports.ToolLogger = ToolLogger;
125
+ //# sourceMappingURL=ToolLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolLogger.js","sourceRoot":"","sources":["../../src/logging/ToolLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ToolLogger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolLogger.test.d.ts","sourceRoot":"","sources":["../../src/logging/ToolLogger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ToolLogger_1 = require("./ToolLogger");
4
+ const app_sdk_1 = require("@zaiusinc/app-sdk");
5
+ // Mock the logger
6
+ jest.mock('@zaiusinc/app-sdk', () => ({
7
+ logger: {
8
+ info: jest.fn()
9
+ },
10
+ LogVisibility: {
11
+ Zaius: 'zaius'
12
+ },
13
+ Headers: jest.fn(),
14
+ Response: jest.fn()
15
+ }));
16
+ describe('ToolLogger', () => {
17
+ const mockLogger = app_sdk_1.logger;
18
+ beforeEach(() => {
19
+ jest.clearAllMocks();
20
+ });
21
+ const createMockRequest = (overrides = {}) => {
22
+ const defaultRequest = {
23
+ path: '/test-tool',
24
+ bodyJSON: {
25
+ parameters: {
26
+ name: 'test',
27
+ value: 'data'
28
+ }
29
+ },
30
+ headers: {
31
+ get: jest.fn().mockReturnValue('application/json')
32
+ }
33
+ };
34
+ return { ...defaultRequest, ...overrides };
35
+ };
36
+ const createMockResponse = (status = 200, bodyJSON = {}, headers = {}) => {
37
+ const mockHeaders = {
38
+ get: jest.fn().mockImplementation((name) => {
39
+ if (name === 'content-type')
40
+ return 'application/json';
41
+ return headers[name] || null;
42
+ })
43
+ };
44
+ return {
45
+ status,
46
+ bodyJSON,
47
+ headers: mockHeaders
48
+ };
49
+ };
50
+ describe('logRequest', () => {
51
+ it('should log request with parameters', () => {
52
+ const req = createMockRequest();
53
+ ToolLogger_1.ToolLogger.logRequest(req);
54
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
55
+ event: 'opal_tool_request',
56
+ path: '/test-tool',
57
+ parameters: {
58
+ name: 'test',
59
+ value: 'data'
60
+ }
61
+ }));
62
+ });
63
+ it('should handle request without parameters', () => {
64
+ const req = createMockRequest({
65
+ bodyJSON: null
66
+ });
67
+ ToolLogger_1.ToolLogger.logRequest(req);
68
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
69
+ event: 'opal_tool_request',
70
+ path: '/test-tool',
71
+ parameters: null
72
+ }));
73
+ });
74
+ it('should use bodyJSON as parameters when no parameters field exists', () => {
75
+ const req = createMockRequest({
76
+ bodyJSON: {
77
+ name: 'direct',
78
+ action: 'test'
79
+ }
80
+ });
81
+ ToolLogger_1.ToolLogger.logRequest(req);
82
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
83
+ parameters: {
84
+ name: 'direct',
85
+ action: 'test'
86
+ }
87
+ }));
88
+ });
89
+ it('should redact all sensitive field variations', () => {
90
+ const req = createMockRequest({
91
+ bodyJSON: {
92
+ parameters: {
93
+ username: 'john',
94
+ password: 'secret123',
95
+ api_key: 'key123',
96
+ secret: 'mysecret',
97
+ token: 'abc123',
98
+ auth: 'authdata',
99
+ credentials: 'creds',
100
+ access_token: 'access123',
101
+ refresh_token: 'refresh123',
102
+ private_key: 'privatekey',
103
+ client_secret: 'clientsecret',
104
+ normal_field: 'visible'
105
+ }
106
+ }
107
+ });
108
+ ToolLogger_1.ToolLogger.logRequest(req);
109
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
110
+ parameters: {
111
+ username: 'john',
112
+ password: '[REDACTED]',
113
+ api_key: '[REDACTED]',
114
+ secret: '[REDACTED]',
115
+ token: '[REDACTED]',
116
+ auth: '[REDACTED]',
117
+ credentials: '[REDACTED]',
118
+ access_token: '[REDACTED]',
119
+ refresh_token: '[REDACTED]',
120
+ private_key: '[REDACTED]',
121
+ client_secret: '[REDACTED]',
122
+ normal_field: 'visible'
123
+ }
124
+ }));
125
+ });
126
+ it('should redact sensitive fields with case variations', () => {
127
+ const req = createMockRequest({
128
+ bodyJSON: {
129
+ parameters: {
130
+ PASSWORD: 'secret1',
131
+ API_KEY: 'secret2',
132
+ clientSecret: 'secret3',
133
+ user_password: 'secret4',
134
+ oauth_token: 'secret5',
135
+ ssh_key: 'secret6',
136
+ normal_field: 'visible'
137
+ }
138
+ }
139
+ });
140
+ ToolLogger_1.ToolLogger.logRequest(req);
141
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
142
+ parameters: {
143
+ PASSWORD: '[REDACTED]',
144
+ API_KEY: '[REDACTED]',
145
+ clientSecret: '[REDACTED]',
146
+ user_password: '[REDACTED]',
147
+ oauth_token: '[REDACTED]',
148
+ ssh_key: '[REDACTED]',
149
+ normal_field: 'visible'
150
+ }
151
+ }));
152
+ });
153
+ it('should truncate long string values', () => {
154
+ const longString = 'a'.repeat(150);
155
+ const req = createMockRequest({
156
+ bodyJSON: {
157
+ parameters: {
158
+ description: longString,
159
+ short_field: 'normal'
160
+ }
161
+ }
162
+ });
163
+ ToolLogger_1.ToolLogger.logRequest(req);
164
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
165
+ parameters: {
166
+ description: `${'a'.repeat(100)}... (truncated, 150 chars total)`,
167
+ short_field: 'normal'
168
+ }
169
+ }));
170
+ });
171
+ it('should truncate large arrays', () => {
172
+ const largeArray = Array.from({ length: 15 }, (_, i) => `item${i}`);
173
+ const req = createMockRequest({
174
+ bodyJSON: {
175
+ parameters: {
176
+ items: largeArray,
177
+ small_array: ['a', 'b']
178
+ }
179
+ }
180
+ });
181
+ ToolLogger_1.ToolLogger.logRequest(req);
182
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
183
+ parameters: {
184
+ items: [
185
+ ...largeArray.slice(0, 10),
186
+ '... (5 more items truncated)'
187
+ ],
188
+ small_array: ['a', 'b']
189
+ }
190
+ }));
191
+ });
192
+ it('should handle nested objects with sensitive fields', () => {
193
+ const req = createMockRequest({
194
+ bodyJSON: {
195
+ parameters: {
196
+ user: {
197
+ name: 'John',
198
+ email: 'john@example.com',
199
+ password: 'secret123'
200
+ },
201
+ config: {
202
+ database: {
203
+ host: 'localhost',
204
+ port: 5432,
205
+ password: 'dbpass'
206
+ },
207
+ api_key: 'apikey123'
208
+ }
209
+ }
210
+ }
211
+ });
212
+ ToolLogger_1.ToolLogger.logRequest(req);
213
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
214
+ parameters: {
215
+ user: {
216
+ name: 'John',
217
+ email: 'john@example.com',
218
+ password: '[REDACTED]'
219
+ },
220
+ config: {
221
+ database: {
222
+ host: 'localhost',
223
+ port: 5432,
224
+ password: '[REDACTED]'
225
+ },
226
+ api_key: '[REDACTED]'
227
+ }
228
+ }
229
+ }));
230
+ });
231
+ it('should handle null and undefined values', () => {
232
+ const req = createMockRequest({
233
+ bodyJSON: {
234
+ parameters: {
235
+ nullValue: null,
236
+ undefinedValue: undefined,
237
+ emptyString: '',
238
+ zero: 0,
239
+ false: false,
240
+ password: null // sensitive field with null value
241
+ }
242
+ }
243
+ });
244
+ ToolLogger_1.ToolLogger.logRequest(req);
245
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
246
+ parameters: {
247
+ nullValue: null,
248
+ undefinedValue: undefined,
249
+ emptyString: '',
250
+ zero: 0,
251
+ false: false,
252
+ password: '[REDACTED]'
253
+ }
254
+ }));
255
+ });
256
+ it('should handle arrays in sensitive fields', () => {
257
+ const req = createMockRequest({
258
+ bodyJSON: {
259
+ parameters: {
260
+ credentials: ['user', 'pass', 'token'],
261
+ public_list: ['item1', 'item2']
262
+ }
263
+ }
264
+ });
265
+ ToolLogger_1.ToolLogger.logRequest(req);
266
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
267
+ parameters: {
268
+ credentials: '[REDACTED]',
269
+ public_list: ['item1', 'item2']
270
+ }
271
+ }));
272
+ });
273
+ it('should handle objects in sensitive fields', () => {
274
+ const req = createMockRequest({
275
+ bodyJSON: {
276
+ parameters: {
277
+ auth: {
278
+ username: 'john',
279
+ password: 'secret'
280
+ },
281
+ public_config: {
282
+ timeout: 30,
283
+ retries: 3
284
+ }
285
+ }
286
+ }
287
+ });
288
+ ToolLogger_1.ToolLogger.logRequest(req);
289
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
290
+ parameters: {
291
+ auth: '[REDACTED]',
292
+ public_config: {
293
+ timeout: 30,
294
+ retries: 3
295
+ }
296
+ }
297
+ }));
298
+ });
299
+ it('should respect max depth to prevent infinite recursion', () => {
300
+ const deepObject = { level: 0, data: 'test' };
301
+ let current = deepObject;
302
+ // Create a very deep nested object (deeper than maxDepth)
303
+ for (let i = 1; i <= 10; i++) {
304
+ current.nested = { level: i, data: `level${i}` };
305
+ current = current.nested;
306
+ }
307
+ const req = createMockRequest({
308
+ bodyJSON: { parameters: { deep: deepObject } }
309
+ });
310
+ // Should not throw error or cause infinite recursion
311
+ expect(() => ToolLogger_1.ToolLogger.logRequest(req)).not.toThrow();
312
+ expect(mockLogger.info).toHaveBeenCalled();
313
+ });
314
+ });
315
+ describe('logResponse', () => {
316
+ it('should log successful response with all details', () => {
317
+ const req = createMockRequest();
318
+ const response = createMockResponse(200, { result: 'success', data: 'test' });
319
+ ToolLogger_1.ToolLogger.logResponse(req, response, 150);
320
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
321
+ event: 'opal_tool_response',
322
+ path: '/test-tool',
323
+ duration: '150ms',
324
+ status: 200,
325
+ contentType: 'application/json',
326
+ contentLength: 34, // JSON.stringify({ result: 'success', data: 'test' }).length
327
+ success: true
328
+ }));
329
+ });
330
+ it('should log error response', () => {
331
+ const req = createMockRequest();
332
+ const response = createMockResponse(400, { error: 'Bad request' });
333
+ ToolLogger_1.ToolLogger.logResponse(req, response, 75);
334
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
335
+ event: 'opal_tool_response',
336
+ path: '/test-tool',
337
+ duration: '75ms',
338
+ status: 400,
339
+ success: false
340
+ }));
341
+ });
342
+ it('should handle response without bodyJSON', () => {
343
+ const req = createMockRequest();
344
+ const response = createMockResponse(204);
345
+ response.bodyJSON = undefined;
346
+ ToolLogger_1.ToolLogger.logResponse(req, response);
347
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
348
+ contentLength: 0,
349
+ success: true
350
+ }));
351
+ });
352
+ it('should handle response without processing time', () => {
353
+ const req = createMockRequest();
354
+ const response = createMockResponse(200, { data: 'test' });
355
+ ToolLogger_1.ToolLogger.logResponse(req, response);
356
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
357
+ duration: undefined
358
+ }));
359
+ });
360
+ it('should handle unknown content type', () => {
361
+ const req = createMockRequest();
362
+ const response = createMockResponse(200, { data: 'test' });
363
+ response.headers.get = jest.fn().mockReturnValue(null);
364
+ ToolLogger_1.ToolLogger.logResponse(req, response);
365
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
366
+ contentType: 'unknown'
367
+ }));
368
+ });
369
+ it('should handle content length calculation error', () => {
370
+ const req = createMockRequest();
371
+ const circularObj = { name: 'test' };
372
+ circularObj.self = circularObj; // Create circular reference
373
+ const response = createMockResponse(200, circularObj);
374
+ ToolLogger_1.ToolLogger.logResponse(req, response);
375
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
376
+ contentLength: 'unknown'
377
+ }));
378
+ });
379
+ it('should correctly identify success status codes', () => {
380
+ const req = createMockRequest();
381
+ const testCases = [
382
+ { status: 200, expected: true },
383
+ { status: 201, expected: true },
384
+ { status: 204, expected: true },
385
+ { status: 299, expected: true },
386
+ { status: 300, expected: false },
387
+ { status: 400, expected: false },
388
+ { status: 404, expected: false },
389
+ { status: 500, expected: false }
390
+ ];
391
+ testCases.forEach(({ status, expected }) => {
392
+ mockLogger.info.mockClear();
393
+ const response = createMockResponse(status);
394
+ ToolLogger_1.ToolLogger.logResponse(req, response);
395
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
396
+ success: expected
397
+ }));
398
+ });
399
+ });
400
+ it('should handle different content types', () => {
401
+ const req = createMockRequest();
402
+ const testCases = [
403
+ 'application/json',
404
+ 'text/plain',
405
+ 'application/xml',
406
+ 'text/html'
407
+ ];
408
+ testCases.forEach((contentType) => {
409
+ mockLogger.info.mockClear();
410
+ const response = createMockResponse(200, { data: 'test' });
411
+ response.headers.get = jest.fn().mockReturnValue(contentType);
412
+ ToolLogger_1.ToolLogger.logResponse(req, response);
413
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
414
+ contentType
415
+ }));
416
+ });
417
+ });
418
+ });
419
+ describe('edge cases', () => {
420
+ it('should handle empty request bodyJSON', () => {
421
+ const req = createMockRequest({
422
+ bodyJSON: {}
423
+ });
424
+ ToolLogger_1.ToolLogger.logRequest(req);
425
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
426
+ parameters: {}
427
+ }));
428
+ });
429
+ it('should handle request with only parameters field', () => {
430
+ const req = createMockRequest({
431
+ bodyJSON: {
432
+ parameters: {
433
+ field: 'value' // Changed from 'key' to 'field' to avoid sensitive field detection
434
+ }
435
+ }
436
+ });
437
+ ToolLogger_1.ToolLogger.logRequest(req);
438
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
439
+ parameters: {
440
+ field: 'value'
441
+ }
442
+ }));
443
+ });
444
+ it('should handle mixed data types in parameters', () => {
445
+ const req = createMockRequest({
446
+ bodyJSON: {
447
+ parameters: {
448
+ string: 'text',
449
+ number: 42,
450
+ boolean: true,
451
+ array: [1, 2, 3],
452
+ object: { nested: 'value' },
453
+ nullValue: null,
454
+ password: 'secret'
455
+ }
456
+ }
457
+ });
458
+ ToolLogger_1.ToolLogger.logRequest(req);
459
+ expect(mockLogger.info).toHaveBeenCalledWith(app_sdk_1.LogVisibility.Zaius, expect.objectContaining({
460
+ parameters: {
461
+ string: 'text',
462
+ number: 42,
463
+ boolean: true,
464
+ array: [1, 2, 3],
465
+ object: { nested: 'value' },
466
+ nullValue: null,
467
+ password: '[REDACTED]'
468
+ }
469
+ }));
470
+ });
471
+ });
472
+ });
473
+ //# sourceMappingURL=ToolLogger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolLogger.test.js","sourceRoot":"","sources":["../../src/logging/ToolLogger.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optimizely-opal/opal-tool-ocp-sdk",
3
- "version": "1.0.0-OCP-1441.4",
3
+ "version": "1.0.0-OCP-1442.1",
4
4
  "description": "OCP SDK for Opal tool",
5
5
  "scripts": {
6
6
  "validate-deps": "node scripts/validate-deps.js",
@@ -36,6 +36,9 @@ jest.mock('@zaiusinc/app-sdk', () => ({
36
36
  warn: jest.fn(),
37
37
  debug: jest.fn(),
38
38
  },
39
+ LogVisibility: {
40
+ Zaius: 'zaius'
41
+ },
39
42
  }));
40
43
 
41
44
  // Create a concrete implementation for testing