@rudderstack/integrations-lib 0.2.59 → 0.2.60
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/build/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
|
package/build/utils/index.js
CHANGED
|
@@ -18,6 +18,7 @@ __exportStar(require("./batch-processing"), exports);
|
|
|
18
18
|
__exportStar(require("./json-schema-generator"), exports);
|
|
19
19
|
__exportStar(require("./misc"), exports);
|
|
20
20
|
__exportStar(require("./request"), exports);
|
|
21
|
+
__exportStar(require("./sanitizer"), exports);
|
|
21
22
|
__exportStar(require("./tests"), exports);
|
|
22
23
|
__exportStar(require("./zod"), exports);
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFtQztBQUNuQywwREFBd0M7QUFDeEMseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQiw4Q0FBNEI7QUFDNUIsMENBQXdCO0FBQ3hCLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmF0Y2gtcHJvY2Vzc2luZyc7XG5leHBvcnQgKiBmcm9tICcuL2pzb24tc2NoZW1hLWdlbmVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21pc2MnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc2FuaXRpemVyJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi96b2QnO1xuIl19
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Sanitization Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides comprehensive sanitization for API responses to prevent XSS attacks
|
|
5
|
+
* and other security vulnerabilities.
|
|
6
|
+
*
|
|
7
|
+
* Key Features:
|
|
8
|
+
* - HTML entity escaping (always enabled, uses validator library)
|
|
9
|
+
* - Control character removal (configurable)
|
|
10
|
+
* - String length truncation (configurable)
|
|
11
|
+
* - Deep object traversal (configurable depth)
|
|
12
|
+
* - Type preservation (numbers, booleans, null remain unchanged)
|
|
13
|
+
* - Non-destructive (returns new objects without mutating originals)
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Regular expression to match dangerous control characters
|
|
19
|
+
*
|
|
20
|
+
* Matches ASCII control characters (0x00-0x1F and 0x7F) EXCEPT:
|
|
21
|
+
* - \x09 (tab)
|
|
22
|
+
* - \x0A (newline)
|
|
23
|
+
* - \x0D (carriage return)
|
|
24
|
+
*
|
|
25
|
+
* Range breakdown:
|
|
26
|
+
* - \x00-\x08: NULL to BACKSPACE
|
|
27
|
+
* - \x0B: Vertical Tab (skips \x09 tab and \x0A newline)
|
|
28
|
+
* - \x0C: Form Feed (skips \x0D carriage return)
|
|
29
|
+
* - \x0E-\x1F: Shift Out to Unit Separator
|
|
30
|
+
* - \x7F: DELETE
|
|
31
|
+
*
|
|
32
|
+
* These characters can cause issues in logs, APIs, and downstream systems.
|
|
33
|
+
*/
|
|
34
|
+
export declare const CONTROL_CHARS_REGEX: RegExp;
|
|
35
|
+
/**
|
|
36
|
+
* Configuration for response sanitization
|
|
37
|
+
*
|
|
38
|
+
* This configuration controls how the sanitization utility processes data:
|
|
39
|
+
* - HTML escaping is ALWAYS enabled (cannot be disabled for security)
|
|
40
|
+
* - Control character removal is configurable
|
|
41
|
+
* - String length limits are configurable
|
|
42
|
+
* - Object depth limits are configurable
|
|
43
|
+
*/
|
|
44
|
+
export interface SanitizationConfig {
|
|
45
|
+
/**
|
|
46
|
+
* Remove dangerous control characters (0x00-0x1F, 0x7F)
|
|
47
|
+
* Preserves safe formatting characters: \n (newline), \r (carriage return), \t (tab)
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
removeControlChars: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Maximum string length before truncation (in characters)
|
|
53
|
+
* Prevents DOS attacks by limiting string size
|
|
54
|
+
* Set to 0 to disable truncation
|
|
55
|
+
* @default 10240
|
|
56
|
+
*/
|
|
57
|
+
maxStringLength: number;
|
|
58
|
+
/**
|
|
59
|
+
* Maximum object depth to traverse
|
|
60
|
+
* Prevents stack overflow from deeply nested objects
|
|
61
|
+
* Objects deeper than this will be replaced with '[Max depth exceeded]'
|
|
62
|
+
* @default 50
|
|
63
|
+
*/
|
|
64
|
+
maxDepth: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Default sanitization configuration
|
|
68
|
+
* Suitable for general-purpose API responses
|
|
69
|
+
*
|
|
70
|
+
* For specific use cases, create custom configs:
|
|
71
|
+
* - Processor responses: { maxStringLength: 50000, maxDepth: 50, removeControlChars: true }
|
|
72
|
+
* - Delivery responses: { maxStringLength: 20000, maxDepth: 30, removeControlChars: true }
|
|
73
|
+
*/
|
|
74
|
+
export declare const DEFAULT_SANITIZATION_CONFIG: SanitizationConfig;
|
|
75
|
+
/**
|
|
76
|
+
* Deep sanitize an object, array, or primitive value
|
|
77
|
+
*
|
|
78
|
+
* This function recursively processes data structures:
|
|
79
|
+
* - Arrays: Sanitizes each element
|
|
80
|
+
* - Objects: Sanitizes both keys and values
|
|
81
|
+
* - Strings: Applies HTML escaping and other string sanitization
|
|
82
|
+
* - Primitives: Returns as-is (numbers, booleans, null, undefined)
|
|
83
|
+
*
|
|
84
|
+
* @param data - The data to sanitize (any type)
|
|
85
|
+
* @param config - Sanitization configuration (defaults to DEFAULT_SANITIZATION_CONFIG)
|
|
86
|
+
* @param depth - Current recursion depth (internal use, starts at 0)
|
|
87
|
+
* @returns Sanitized copy of the data
|
|
88
|
+
*
|
|
89
|
+
* @example Sanitize an object
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const data = {
|
|
92
|
+
* user: '<script>xss</script>',
|
|
93
|
+
* count: 42,
|
|
94
|
+
* active: true
|
|
95
|
+
* };
|
|
96
|
+
* const clean = sanitize(data);
|
|
97
|
+
* // Returns: { user: '<script>xss</script>', count: 42, active: true }
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @example Sanitize an array
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const data = ['<b>item1</b>', '<i>item2</i>'];
|
|
103
|
+
* const clean = sanitize(data);
|
|
104
|
+
* // Returns: ['<b>item1</b>', '<i>item2</i>']
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare function sanitize<T>(data: T, config?: SanitizationConfig, depth?: number): T;
|
|
108
|
+
/**
|
|
109
|
+
* Sanitize any response data to prevent XSS attacks and security vulnerabilities
|
|
110
|
+
*
|
|
111
|
+
* This is a convenience function that merges custom config with defaults.
|
|
112
|
+
* For direct control, use the `sanitize` function directly.
|
|
113
|
+
*
|
|
114
|
+
* This function:
|
|
115
|
+
* - Escapes HTML entities in all strings (ALWAYS, cannot be disabled)
|
|
116
|
+
* - Removes dangerous control characters (configurable)
|
|
117
|
+
* - Truncates overly long strings (configurable)
|
|
118
|
+
* - Handles nested objects/arrays recursively
|
|
119
|
+
* - Preserves data types (numbers, booleans, null)
|
|
120
|
+
*
|
|
121
|
+
* @param data - The data to sanitize (objects, arrays, primitives)
|
|
122
|
+
* @param config - Optional partial configuration (merged with defaults)
|
|
123
|
+
* @returns Sanitized copy of the data with same type
|
|
124
|
+
*
|
|
125
|
+
* @example Basic usage with defaults
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const unsafe = { message: '<script>alert("xss")</script>' };
|
|
128
|
+
* const safe = sanitizeResponse(unsafe);
|
|
129
|
+
* // Result: { message: '<script>alert("xss")</script>' }
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @example Custom configuration for large payloads
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const response = sanitizeResponse(processorData, {
|
|
135
|
+
* maxStringLength: 50000,
|
|
136
|
+
* maxDepth: 50,
|
|
137
|
+
* removeControlChars: true
|
|
138
|
+
* });
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @example In a Koa controller
|
|
142
|
+
* ```typescript
|
|
143
|
+
* export class Controller {
|
|
144
|
+
* async transform(ctx: Context) {
|
|
145
|
+
* const result = await transformData(ctx.request.body);
|
|
146
|
+
* ctx.body = sanitizeResponse(result);
|
|
147
|
+
* }
|
|
148
|
+
* }
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export declare function sanitizeResponse<T>(data: T, config?: Partial<SanitizationConfig>): T;
|
|
152
|
+
//# sourceMappingURL=sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/utils/sanitizer.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,mBAAmB,QAAsC,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,EAAE,kBAIzC,CAAC;AA2CF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,CAAC,EACP,MAAM,GAAE,kBAAgD,EACxD,KAAK,GAAE,MAAU,GAChB,CAAC,CAyCH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAKpF"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_SANITIZATION_CONFIG = exports.CONTROL_CHARS_REGEX = void 0;
|
|
7
|
+
exports.sanitize = sanitize;
|
|
8
|
+
exports.sanitizeResponse = sanitizeResponse;
|
|
9
|
+
const validator_1 = __importDefault(require("validator"));
|
|
10
|
+
/**
|
|
11
|
+
* Response Sanitization Utility
|
|
12
|
+
*
|
|
13
|
+
* Provides comprehensive sanitization for API responses to prevent XSS attacks
|
|
14
|
+
* and other security vulnerabilities.
|
|
15
|
+
*
|
|
16
|
+
* Key Features:
|
|
17
|
+
* - HTML entity escaping (always enabled, uses validator library)
|
|
18
|
+
* - Control character removal (configurable)
|
|
19
|
+
* - String length truncation (configurable)
|
|
20
|
+
* - Deep object traversal (configurable depth)
|
|
21
|
+
* - Type preservation (numbers, booleans, null remain unchanged)
|
|
22
|
+
* - Non-destructive (returns new objects without mutating originals)
|
|
23
|
+
*
|
|
24
|
+
* @packageDocumentation
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Regular expression to match dangerous control characters
|
|
28
|
+
*
|
|
29
|
+
* Matches ASCII control characters (0x00-0x1F and 0x7F) EXCEPT:
|
|
30
|
+
* - \x09 (tab)
|
|
31
|
+
* - \x0A (newline)
|
|
32
|
+
* - \x0D (carriage return)
|
|
33
|
+
*
|
|
34
|
+
* Range breakdown:
|
|
35
|
+
* - \x00-\x08: NULL to BACKSPACE
|
|
36
|
+
* - \x0B: Vertical Tab (skips \x09 tab and \x0A newline)
|
|
37
|
+
* - \x0C: Form Feed (skips \x0D carriage return)
|
|
38
|
+
* - \x0E-\x1F: Shift Out to Unit Separator
|
|
39
|
+
* - \x7F: DELETE
|
|
40
|
+
*
|
|
41
|
+
* These characters can cause issues in logs, APIs, and downstream systems.
|
|
42
|
+
*/
|
|
43
|
+
// eslint-disable-next-line no-control-regex
|
|
44
|
+
exports.CONTROL_CHARS_REGEX = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g;
|
|
45
|
+
/**
|
|
46
|
+
* Default sanitization configuration
|
|
47
|
+
* Suitable for general-purpose API responses
|
|
48
|
+
*
|
|
49
|
+
* For specific use cases, create custom configs:
|
|
50
|
+
* - Processor responses: { maxStringLength: 50000, maxDepth: 50, removeControlChars: true }
|
|
51
|
+
* - Delivery responses: { maxStringLength: 20000, maxDepth: 30, removeControlChars: true }
|
|
52
|
+
*/
|
|
53
|
+
exports.DEFAULT_SANITIZATION_CONFIG = {
|
|
54
|
+
removeControlChars: true,
|
|
55
|
+
maxStringLength: 10240, // 10KB per string
|
|
56
|
+
maxDepth: 50,
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Sanitize a single string value
|
|
60
|
+
*
|
|
61
|
+
* Processing order:
|
|
62
|
+
* 1. Remove control characters (if enabled)
|
|
63
|
+
* 2. Escape HTML entities (always applied)
|
|
64
|
+
* 3. Truncate if exceeds max length (if enabled)
|
|
65
|
+
*
|
|
66
|
+
* @param value - The string to sanitize
|
|
67
|
+
* @param config - Sanitization configuration
|
|
68
|
+
* @returns Sanitized string with HTML entities escaped
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
function sanitizeString(value, config) {
|
|
72
|
+
if (typeof value !== 'string') {
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
let sanitized = value;
|
|
76
|
+
// Step 1: Remove control characters (except newline \n, carriage return \r, and tab \t)
|
|
77
|
+
// Control characters (0x00-0x1F, 0x7F) can break logs and cause security issues
|
|
78
|
+
// We preserve \n (0x0A), \r (0x0D), \t (0x09) for legitimate formatting
|
|
79
|
+
if (config.removeControlChars) {
|
|
80
|
+
sanitized = sanitized.replace(exports.CONTROL_CHARS_REGEX, '');
|
|
81
|
+
}
|
|
82
|
+
// Step 2: Escape HTML entities to prevent XSS attacks
|
|
83
|
+
// This is ALWAYS applied regardless of config
|
|
84
|
+
// Uses validator.escape() which converts: < > " ' & / to HTML entities
|
|
85
|
+
sanitized = validator_1.default.escape(sanitized);
|
|
86
|
+
// Step 3: Truncate long strings to prevent DOS attacks
|
|
87
|
+
// Adds '... [truncated]' suffix to indicate truncation
|
|
88
|
+
if (config.maxStringLength > 0 && sanitized.length > config.maxStringLength) {
|
|
89
|
+
sanitized = `${sanitized.substring(0, config.maxStringLength)}... [truncated]`;
|
|
90
|
+
}
|
|
91
|
+
return sanitized;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Deep sanitize an object, array, or primitive value
|
|
95
|
+
*
|
|
96
|
+
* This function recursively processes data structures:
|
|
97
|
+
* - Arrays: Sanitizes each element
|
|
98
|
+
* - Objects: Sanitizes both keys and values
|
|
99
|
+
* - Strings: Applies HTML escaping and other string sanitization
|
|
100
|
+
* - Primitives: Returns as-is (numbers, booleans, null, undefined)
|
|
101
|
+
*
|
|
102
|
+
* @param data - The data to sanitize (any type)
|
|
103
|
+
* @param config - Sanitization configuration (defaults to DEFAULT_SANITIZATION_CONFIG)
|
|
104
|
+
* @param depth - Current recursion depth (internal use, starts at 0)
|
|
105
|
+
* @returns Sanitized copy of the data
|
|
106
|
+
*
|
|
107
|
+
* @example Sanitize an object
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const data = {
|
|
110
|
+
* user: '<script>xss</script>',
|
|
111
|
+
* count: 42,
|
|
112
|
+
* active: true
|
|
113
|
+
* };
|
|
114
|
+
* const clean = sanitize(data);
|
|
115
|
+
* // Returns: { user: '<script>xss</script>', count: 42, active: true }
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* @example Sanitize an array
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const data = ['<b>item1</b>', '<i>item2</i>'];
|
|
121
|
+
* const clean = sanitize(data);
|
|
122
|
+
* // Returns: ['<b>item1</b>', '<i>item2</i>']
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
function sanitize(data, config = exports.DEFAULT_SANITIZATION_CONFIG, depth = 0) {
|
|
126
|
+
// Handle null and undefined - return as-is
|
|
127
|
+
if (data === null || data === undefined) {
|
|
128
|
+
return data;
|
|
129
|
+
}
|
|
130
|
+
// Prevent infinite recursion by checking depth limit
|
|
131
|
+
// Replaces deeply nested data with a warning string
|
|
132
|
+
if (depth > config.maxDepth) {
|
|
133
|
+
return '[Max depth exceeded]';
|
|
134
|
+
}
|
|
135
|
+
// Handle arrays - recursively sanitize each element
|
|
136
|
+
if (Array.isArray(data)) {
|
|
137
|
+
return data.map((item) => sanitize(item, config, depth + 1));
|
|
138
|
+
}
|
|
139
|
+
// Handle strings - apply string-level sanitization
|
|
140
|
+
if (typeof data === 'string') {
|
|
141
|
+
return sanitizeString(data, config);
|
|
142
|
+
}
|
|
143
|
+
// Handle objects - sanitize both keys and values
|
|
144
|
+
if (typeof data === 'object') {
|
|
145
|
+
const sanitized = {};
|
|
146
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
147
|
+
for (const [key, value] of Object.entries(data)) {
|
|
148
|
+
// Sanitize the key itself to prevent malicious property names
|
|
149
|
+
const sanitizedKey = sanitizeString(key, config);
|
|
150
|
+
// Recursively sanitize the value, incrementing depth
|
|
151
|
+
sanitized[sanitizedKey] = sanitize(value, config, depth + 1);
|
|
152
|
+
}
|
|
153
|
+
return sanitized;
|
|
154
|
+
}
|
|
155
|
+
// Return primitives as-is (numbers, booleans, bigints, symbols)
|
|
156
|
+
// These types don't need sanitization
|
|
157
|
+
return data;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Sanitize any response data to prevent XSS attacks and security vulnerabilities
|
|
161
|
+
*
|
|
162
|
+
* This is a convenience function that merges custom config with defaults.
|
|
163
|
+
* For direct control, use the `sanitize` function directly.
|
|
164
|
+
*
|
|
165
|
+
* This function:
|
|
166
|
+
* - Escapes HTML entities in all strings (ALWAYS, cannot be disabled)
|
|
167
|
+
* - Removes dangerous control characters (configurable)
|
|
168
|
+
* - Truncates overly long strings (configurable)
|
|
169
|
+
* - Handles nested objects/arrays recursively
|
|
170
|
+
* - Preserves data types (numbers, booleans, null)
|
|
171
|
+
*
|
|
172
|
+
* @param data - The data to sanitize (objects, arrays, primitives)
|
|
173
|
+
* @param config - Optional partial configuration (merged with defaults)
|
|
174
|
+
* @returns Sanitized copy of the data with same type
|
|
175
|
+
*
|
|
176
|
+
* @example Basic usage with defaults
|
|
177
|
+
* ```typescript
|
|
178
|
+
* const unsafe = { message: '<script>alert("xss")</script>' };
|
|
179
|
+
* const safe = sanitizeResponse(unsafe);
|
|
180
|
+
* // Result: { message: '<script>alert("xss")</script>' }
|
|
181
|
+
* ```
|
|
182
|
+
*
|
|
183
|
+
* @example Custom configuration for large payloads
|
|
184
|
+
* ```typescript
|
|
185
|
+
* const response = sanitizeResponse(processorData, {
|
|
186
|
+
* maxStringLength: 50000,
|
|
187
|
+
* maxDepth: 50,
|
|
188
|
+
* removeControlChars: true
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*
|
|
192
|
+
* @example In a Koa controller
|
|
193
|
+
* ```typescript
|
|
194
|
+
* export class Controller {
|
|
195
|
+
* async transform(ctx: Context) {
|
|
196
|
+
* const result = await transformData(ctx.request.body);
|
|
197
|
+
* ctx.body = sanitizeResponse(result);
|
|
198
|
+
* }
|
|
199
|
+
* }
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
function sanitizeResponse(data, config) {
|
|
203
|
+
return sanitize(data, {
|
|
204
|
+
...exports.DEFAULT_SANITIZATION_CONFIG,
|
|
205
|
+
...config,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Nhbml0aXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFnS0EsNEJBNkNDO0FBNkNELDRDQUtDO0FBL1BELDBEQUFrQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILDRDQUE0QztBQUMvQixRQUFBLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0FBb0N2RTs7Ozs7OztHQU9HO0FBQ1UsUUFBQSwyQkFBMkIsR0FBdUI7SUFDN0Qsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixlQUFlLEVBQUUsS0FBSyxFQUFFLGtCQUFrQjtJQUMxQyxRQUFRLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxLQUFhLEVBQUUsTUFBMEI7SUFDL0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFdEIsd0ZBQXdGO0lBQ3hGLGdGQUFnRjtJQUNoRix3RUFBd0U7SUFDeEUsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQywyQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELDhDQUE4QztJQUM5Qyx1RUFBdUU7SUFDdkUsU0FBUyxHQUFHLG1CQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXhDLHVEQUF1RDtJQUN2RCx1REFBdUQ7SUFDdkQsSUFBSSxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1RSxTQUFTLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO0lBQ2pGLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxTQUFnQixRQUFRLENBQ3RCLElBQU8sRUFDUCxTQUE2QixtQ0FBMkIsRUFDeEQsUUFBZ0IsQ0FBQztJQUVqQiwyQ0FBMkM7SUFDM0MsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsb0RBQW9EO0lBQ3BELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLHNCQUEyQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQU0sQ0FBQztJQUNwRSxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBTSxDQUFDO0lBQzNDLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBNEIsRUFBRSxDQUFDO1FBRTlDLGdEQUFnRDtRQUNoRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hELDhEQUE4RDtZQUM5RCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRWpELHFEQUFxRDtZQUNyRCxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLFNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLHNDQUFzQztJQUN0QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUksSUFBTyxFQUFFLE1BQW9DO0lBQy9FLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRTtRQUNwQixHQUFHLG1DQUEyQjtRQUM5QixHQUFHLE1BQU07S0FDVixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZhbGlkYXRvciBmcm9tICd2YWxpZGF0b3InO1xuXG4vKipcbiAqIFJlc3BvbnNlIFNhbml0aXphdGlvbiBVdGlsaXR5XG4gKlxuICogUHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzYW5pdGl6YXRpb24gZm9yIEFQSSByZXNwb25zZXMgdG8gcHJldmVudCBYU1MgYXR0YWNrc1xuICogYW5kIG90aGVyIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cbiAqXG4gKiBLZXkgRmVhdHVyZXM6XG4gKiAtIEhUTUwgZW50aXR5IGVzY2FwaW5nIChhbHdheXMgZW5hYmxlZCwgdXNlcyB2YWxpZGF0b3IgbGlicmFyeSlcbiAqIC0gQ29udHJvbCBjaGFyYWN0ZXIgcmVtb3ZhbCAoY29uZmlndXJhYmxlKVxuICogLSBTdHJpbmcgbGVuZ3RoIHRydW5jYXRpb24gKGNvbmZpZ3VyYWJsZSlcbiAqIC0gRGVlcCBvYmplY3QgdHJhdmVyc2FsIChjb25maWd1cmFibGUgZGVwdGgpXG4gKiAtIFR5cGUgcHJlc2VydmF0aW9uIChudW1iZXJzLCBib29sZWFucywgbnVsbCByZW1haW4gdW5jaGFuZ2VkKVxuICogLSBOb24tZGVzdHJ1Y3RpdmUgKHJldHVybnMgbmV3IG9iamVjdHMgd2l0aG91dCBtdXRhdGluZyBvcmlnaW5hbHMpXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZGFuZ2Vyb3VzIGNvbnRyb2wgY2hhcmFjdGVyc1xuICpcbiAqIE1hdGNoZXMgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzICgweDAwLTB4MUYgYW5kIDB4N0YpIEVYQ0VQVDpcbiAqIC0gXFx4MDkgKHRhYilcbiAqIC0gXFx4MEEgKG5ld2xpbmUpXG4gKiAtIFxceDBEIChjYXJyaWFnZSByZXR1cm4pXG4gKlxuICogUmFuZ2UgYnJlYWtkb3duOlxuICogLSBcXHgwMC1cXHgwODogTlVMTCB0byBCQUNLU1BBQ0VcbiAqIC0gXFx4MEI6IFZlcnRpY2FsIFRhYiAoc2tpcHMgXFx4MDkgdGFiIGFuZCBcXHgwQSBuZXdsaW5lKVxuICogLSBcXHgwQzogRm9ybSBGZWVkIChza2lwcyBcXHgwRCBjYXJyaWFnZSByZXR1cm4pXG4gKiAtIFxceDBFLVxceDFGOiBTaGlmdCBPdXQgdG8gVW5pdCBTZXBhcmF0b3JcbiAqIC0gXFx4N0Y6IERFTEVURVxuICpcbiAqIFRoZXNlIGNoYXJhY3RlcnMgY2FuIGNhdXNlIGlzc3VlcyBpbiBsb2dzLCBBUElzLCBhbmQgZG93bnN0cmVhbSBzeXN0ZW1zLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuZXhwb3J0IGNvbnN0IENPTlRST0xfQ0hBUlNfUkVHRVggPSAvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0ZdL2c7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgcmVzcG9uc2Ugc2FuaXRpemF0aW9uXG4gKlxuICogVGhpcyBjb25maWd1cmF0aW9uIGNvbnRyb2xzIGhvdyB0aGUgc2FuaXRpemF0aW9uIHV0aWxpdHkgcHJvY2Vzc2VzIGRhdGE6XG4gKiAtIEhUTUwgZXNjYXBpbmcgaXMgQUxXQVlTIGVuYWJsZWQgKGNhbm5vdCBiZSBkaXNhYmxlZCBmb3Igc2VjdXJpdHkpXG4gKiAtIENvbnRyb2wgY2hhcmFjdGVyIHJlbW92YWwgaXMgY29uZmlndXJhYmxlXG4gKiAtIFN0cmluZyBsZW5ndGggbGltaXRzIGFyZSBjb25maWd1cmFibGVcbiAqIC0gT2JqZWN0IGRlcHRoIGxpbWl0cyBhcmUgY29uZmlndXJhYmxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FuaXRpemF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFJlbW92ZSBkYW5nZXJvdXMgY29udHJvbCBjaGFyYWN0ZXJzICgweDAwLTB4MUYsIDB4N0YpXG4gICAqIFByZXNlcnZlcyBzYWZlIGZvcm1hdHRpbmcgY2hhcmFjdGVyczogXFxuIChuZXdsaW5lKSwgXFxyIChjYXJyaWFnZSByZXR1cm4pLCBcXHQgKHRhYilcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVtb3ZlQ29udHJvbENoYXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHN0cmluZyBsZW5ndGggYmVmb3JlIHRydW5jYXRpb24gKGluIGNoYXJhY3RlcnMpXG4gICAqIFByZXZlbnRzIERPUyBhdHRhY2tzIGJ5IGxpbWl0aW5nIHN0cmluZyBzaXplXG4gICAqIFNldCB0byAwIHRvIGRpc2FibGUgdHJ1bmNhdGlvblxuICAgKiBAZGVmYXVsdCAxMDI0MFxuICAgKi9cbiAgbWF4U3RyaW5nTGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gb2JqZWN0IGRlcHRoIHRvIHRyYXZlcnNlXG4gICAqIFByZXZlbnRzIHN0YWNrIG92ZXJmbG93IGZyb20gZGVlcGx5IG5lc3RlZCBvYmplY3RzXG4gICAqIE9iamVjdHMgZGVlcGVyIHRoYW4gdGhpcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggJ1tNYXggZGVwdGggZXhjZWVkZWRdJ1xuICAgKiBAZGVmYXVsdCA1MFxuICAgKi9cbiAgbWF4RGVwdGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHNhbml0aXphdGlvbiBjb25maWd1cmF0aW9uXG4gKiBTdWl0YWJsZSBmb3IgZ2VuZXJhbC1wdXJwb3NlIEFQSSByZXNwb25zZXNcbiAqXG4gKiBGb3Igc3BlY2lmaWMgdXNlIGNhc2VzLCBjcmVhdGUgY3VzdG9tIGNvbmZpZ3M6XG4gKiAtIFByb2Nlc3NvciByZXNwb25zZXM6IHsgbWF4U3RyaW5nTGVuZ3RoOiA1MDAwMCwgbWF4RGVwdGg6IDUwLCByZW1vdmVDb250cm9sQ2hhcnM6IHRydWUgfVxuICogLSBEZWxpdmVyeSByZXNwb25zZXM6IHsgbWF4U3RyaW5nTGVuZ3RoOiAyMDAwMCwgbWF4RGVwdGg6IDMwLCByZW1vdmVDb250cm9sQ2hhcnM6IHRydWUgfVxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TQU5JVElaQVRJT05fQ09ORklHOiBTYW5pdGl6YXRpb25Db25maWcgPSB7XG4gIHJlbW92ZUNvbnRyb2xDaGFyczogdHJ1ZSxcbiAgbWF4U3RyaW5nTGVuZ3RoOiAxMDI0MCwgLy8gMTBLQiBwZXIgc3RyaW5nXG4gIG1heERlcHRoOiA1MCxcbn07XG5cbi8qKlxuICogU2FuaXRpemUgYSBzaW5nbGUgc3RyaW5nIHZhbHVlXG4gKlxuICogUHJvY2Vzc2luZyBvcmRlcjpcbiAqIDEuIFJlbW92ZSBjb250cm9sIGNoYXJhY3RlcnMgKGlmIGVuYWJsZWQpXG4gKiAyLiBFc2NhcGUgSFRNTCBlbnRpdGllcyAoYWx3YXlzIGFwcGxpZWQpXG4gKiAzLiBUcnVuY2F0ZSBpZiBleGNlZWRzIG1heCBsZW5ndGggKGlmIGVuYWJsZWQpXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBzYW5pdGl6ZVxuICogQHBhcmFtIGNvbmZpZyAtIFNhbml0aXphdGlvbiBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBTYW5pdGl6ZWQgc3RyaW5nIHdpdGggSFRNTCBlbnRpdGllcyBlc2NhcGVkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCBjb25maWc6IFNhbml0aXphdGlvbkNvbmZpZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgbGV0IHNhbml0aXplZCA9IHZhbHVlO1xuXG4gIC8vIFN0ZXAgMTogUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVycyAoZXhjZXB0IG5ld2xpbmUgXFxuLCBjYXJyaWFnZSByZXR1cm4gXFxyLCBhbmQgdGFiIFxcdClcbiAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzICgweDAwLTB4MUYsIDB4N0YpIGNhbiBicmVhayBsb2dzIGFuZCBjYXVzZSBzZWN1cml0eSBpc3N1ZXNcbiAgLy8gV2UgcHJlc2VydmUgXFxuICgweDBBKSwgXFxyICgweDBEKSwgXFx0ICgweDA5KSBmb3IgbGVnaXRpbWF0ZSBmb3JtYXR0aW5nXG4gIGlmIChjb25maWcucmVtb3ZlQ29udHJvbENoYXJzKSB7XG4gICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UoQ09OVFJPTF9DSEFSU19SRUdFWCwgJycpO1xuICB9XG5cbiAgLy8gU3RlcCAyOiBFc2NhcGUgSFRNTCBlbnRpdGllcyB0byBwcmV2ZW50IFhTUyBhdHRhY2tzXG4gIC8vIFRoaXMgaXMgQUxXQVlTIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBjb25maWdcbiAgLy8gVXNlcyB2YWxpZGF0b3IuZXNjYXBlKCkgd2hpY2ggY29udmVydHM6IDwgPiBcIiAnICYgLyB0byBIVE1MIGVudGl0aWVzXG4gIHNhbml0aXplZCA9IHZhbGlkYXRvci5lc2NhcGUoc2FuaXRpemVkKTtcblxuICAvLyBTdGVwIDM6IFRydW5jYXRlIGxvbmcgc3RyaW5ncyB0byBwcmV2ZW50IERPUyBhdHRhY2tzXG4gIC8vIEFkZHMgJy4uLiBbdHJ1bmNhdGVkXScgc3VmZml4IHRvIGluZGljYXRlIHRydW5jYXRpb25cbiAgaWYgKGNvbmZpZy5tYXhTdHJpbmdMZW5ndGggPiAwICYmIHNhbml0aXplZC5sZW5ndGggPiBjb25maWcubWF4U3RyaW5nTGVuZ3RoKSB7XG4gICAgc2FuaXRpemVkID0gYCR7c2FuaXRpemVkLnN1YnN0cmluZygwLCBjb25maWcubWF4U3RyaW5nTGVuZ3RoKX0uLi4gW3RydW5jYXRlZF1gO1xuICB9XG5cbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cblxuLyoqXG4gKiBEZWVwIHNhbml0aXplIGFuIG9iamVjdCwgYXJyYXksIG9yIHByaW1pdGl2ZSB2YWx1ZVxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgcHJvY2Vzc2VzIGRhdGEgc3RydWN0dXJlczpcbiAqIC0gQXJyYXlzOiBTYW5pdGl6ZXMgZWFjaCBlbGVtZW50XG4gKiAtIE9iamVjdHM6IFNhbml0aXplcyBib3RoIGtleXMgYW5kIHZhbHVlc1xuICogLSBTdHJpbmdzOiBBcHBsaWVzIEhUTUwgZXNjYXBpbmcgYW5kIG90aGVyIHN0cmluZyBzYW5pdGl6YXRpb25cbiAqIC0gUHJpbWl0aXZlczogUmV0dXJucyBhcy1pcyAobnVtYmVycywgYm9vbGVhbnMsIG51bGwsIHVuZGVmaW5lZClcbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIHNhbml0aXplIChhbnkgdHlwZSlcbiAqIEBwYXJhbSBjb25maWcgLSBTYW5pdGl6YXRpb24gY29uZmlndXJhdGlvbiAoZGVmYXVsdHMgdG8gREVGQVVMVF9TQU5JVElaQVRJT05fQ09ORklHKVxuICogQHBhcmFtIGRlcHRoIC0gQ3VycmVudCByZWN1cnNpb24gZGVwdGggKGludGVybmFsIHVzZSwgc3RhcnRzIGF0IDApXG4gKiBAcmV0dXJucyBTYW5pdGl6ZWQgY29weSBvZiB0aGUgZGF0YVxuICpcbiAqIEBleGFtcGxlIFNhbml0aXplIGFuIG9iamVjdFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZGF0YSA9IHtcbiAqICAgdXNlcjogJzxzY3JpcHQ+eHNzPC9zY3JpcHQ+JyxcbiAqICAgY291bnQ6IDQyLFxuICogICBhY3RpdmU6IHRydWVcbiAqIH07XG4gKiBjb25zdCBjbGVhbiA9IHNhbml0aXplKGRhdGEpO1xuICogLy8gUmV0dXJuczogeyB1c2VyOiAnJmx0O3NjcmlwdCZndDt4c3MmbHQ7JiN4MkY7c2NyaXB0Jmd0OycsIGNvdW50OiA0MiwgYWN0aXZlOiB0cnVlIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFNhbml0aXplIGFuIGFycmF5XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkYXRhID0gWyc8Yj5pdGVtMTwvYj4nLCAnPGk+aXRlbTI8L2k+J107XG4gKiBjb25zdCBjbGVhbiA9IHNhbml0aXplKGRhdGEpO1xuICogLy8gUmV0dXJuczogWycmbHQ7YiZndDtpdGVtMSZsdDsmI3gyRjtiJmd0OycsICcmbHQ7aSZndDtpdGVtMiZsdDsmI3gyRjtpJmd0OyddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplPFQ+KFxuICBkYXRhOiBULFxuICBjb25maWc6IFNhbml0aXphdGlvbkNvbmZpZyA9IERFRkFVTFRfU0FOSVRJWkFUSU9OX0NPTkZJRyxcbiAgZGVwdGg6IG51bWJlciA9IDAsXG4pOiBUIHtcbiAgLy8gSGFuZGxlIG51bGwgYW5kIHVuZGVmaW5lZCAtIHJldHVybiBhcy1pc1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8vIFByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uIGJ5IGNoZWNraW5nIGRlcHRoIGxpbWl0XG4gIC8vIFJlcGxhY2VzIGRlZXBseSBuZXN0ZWQgZGF0YSB3aXRoIGEgd2FybmluZyBzdHJpbmdcbiAgaWYgKGRlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG4gICAgcmV0dXJuICdbTWF4IGRlcHRoIGV4Y2VlZGVkXScgYXMgVDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBhcnJheXMgLSByZWN1cnNpdmVseSBzYW5pdGl6ZSBlYWNoIGVsZW1lbnRcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+IHNhbml0aXplKGl0ZW0sIGNvbmZpZywgZGVwdGggKyAxKSkgYXMgVDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdHJpbmdzIC0gYXBwbHkgc3RyaW5nLWxldmVsIHNhbml0aXphdGlvblxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHNhbml0aXplU3RyaW5nKGRhdGEsIGNvbmZpZykgYXMgVDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBvYmplY3RzIC0gc2FuaXRpemUgYm90aCBrZXlzIGFuZCB2YWx1ZXNcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHNhbml0aXplZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAvLyBTYW5pdGl6ZSB0aGUga2V5IGl0c2VsZiB0byBwcmV2ZW50IG1hbGljaW91cyBwcm9wZXJ0eSBuYW1lc1xuICAgICAgY29uc3Qgc2FuaXRpemVkS2V5ID0gc2FuaXRpemVTdHJpbmcoa2V5LCBjb25maWcpO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBzYW5pdGl6ZSB0aGUgdmFsdWUsIGluY3JlbWVudGluZyBkZXB0aFxuICAgICAgc2FuaXRpemVkW3Nhbml0aXplZEtleV0gPSBzYW5pdGl6ZSh2YWx1ZSwgY29uZmlnLCBkZXB0aCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBzYW5pdGl6ZWQgYXMgVDtcbiAgfVxuXG4gIC8vIFJldHVybiBwcmltaXRpdmVzIGFzLWlzIChudW1iZXJzLCBib29sZWFucywgYmlnaW50cywgc3ltYm9scylcbiAgLy8gVGhlc2UgdHlwZXMgZG9uJ3QgbmVlZCBzYW5pdGl6YXRpb25cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYW55IHJlc3BvbnNlIGRhdGEgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzXG4gKlxuICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgbWVyZ2VzIGN1c3RvbSBjb25maWcgd2l0aCBkZWZhdWx0cy5cbiAqIEZvciBkaXJlY3QgY29udHJvbCwgdXNlIHRoZSBgc2FuaXRpemVgIGZ1bmN0aW9uIGRpcmVjdGx5LlxuICpcbiAqIFRoaXMgZnVuY3Rpb246XG4gKiAtIEVzY2FwZXMgSFRNTCBlbnRpdGllcyBpbiBhbGwgc3RyaW5ncyAoQUxXQVlTLCBjYW5ub3QgYmUgZGlzYWJsZWQpXG4gKiAtIFJlbW92ZXMgZGFuZ2Vyb3VzIGNvbnRyb2wgY2hhcmFjdGVycyAoY29uZmlndXJhYmxlKVxuICogLSBUcnVuY2F0ZXMgb3Zlcmx5IGxvbmcgc3RyaW5ncyAoY29uZmlndXJhYmxlKVxuICogLSBIYW5kbGVzIG5lc3RlZCBvYmplY3RzL2FycmF5cyByZWN1cnNpdmVseVxuICogLSBQcmVzZXJ2ZXMgZGF0YSB0eXBlcyAobnVtYmVycywgYm9vbGVhbnMsIG51bGwpXG4gKlxuICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSB0byBzYW5pdGl6ZSAob2JqZWN0cywgYXJyYXlzLCBwcmltaXRpdmVzKVxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIHBhcnRpYWwgY29uZmlndXJhdGlvbiAobWVyZ2VkIHdpdGggZGVmYXVsdHMpXG4gKiBAcmV0dXJucyBTYW5pdGl6ZWQgY29weSBvZiB0aGUgZGF0YSB3aXRoIHNhbWUgdHlwZVxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlIHdpdGggZGVmYXVsdHNcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVuc2FmZSA9IHsgbWVzc2FnZTogJzxzY3JpcHQ+YWxlcnQoXCJ4c3NcIik8L3NjcmlwdD4nIH07XG4gKiBjb25zdCBzYWZlID0gc2FuaXRpemVSZXNwb25zZSh1bnNhZmUpO1xuICogLy8gUmVzdWx0OiB7IG1lc3NhZ2U6ICcmbHQ7c2NyaXB0Jmd0O2FsZXJ0KCZxdW90O3hzcyZxdW90OykmbHQ7JiN4MkY7c2NyaXB0Jmd0OycgfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ3VzdG9tIGNvbmZpZ3VyYXRpb24gZm9yIGxhcmdlIHBheWxvYWRzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXNwb25zZSA9IHNhbml0aXplUmVzcG9uc2UocHJvY2Vzc29yRGF0YSwge1xuICogICBtYXhTdHJpbmdMZW5ndGg6IDUwMDAwLFxuICogICBtYXhEZXB0aDogNTAsXG4gKiAgIHJlbW92ZUNvbnRyb2xDaGFyczogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBJbiBhIEtvYSBjb250cm9sbGVyXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgQ29udHJvbGxlciB7XG4gKiAgIGFzeW5jIHRyYW5zZm9ybShjdHg6IENvbnRleHQpIHtcbiAqICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm1EYXRhKGN0eC5yZXF1ZXN0LmJvZHkpO1xuICogICAgIGN0eC5ib2R5ID0gc2FuaXRpemVSZXNwb25zZShyZXN1bHQpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplUmVzcG9uc2U8VD4oZGF0YTogVCwgY29uZmlnPzogUGFydGlhbDxTYW5pdGl6YXRpb25Db25maWc+KTogVCB7XG4gIHJldHVybiBzYW5pdGl6ZShkYXRhLCB7XG4gICAgLi4uREVGQVVMVF9TQU5JVElaQVRJT05fQ09ORklHLFxuICAgIC4uLmNvbmZpZyxcbiAgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderstack/integrations-lib",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.60",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"module": "build/index.js",
|
|
@@ -55,11 +55,13 @@
|
|
|
55
55
|
"sqlstring": "^2.3.3",
|
|
56
56
|
"tslib": "^2.4.0",
|
|
57
57
|
"uuid": "^11.0.5",
|
|
58
|
+
"validator": "^13.15.26",
|
|
58
59
|
"winston": "^3.11.0",
|
|
59
60
|
"zod": "^3.24.2"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
62
63
|
"@commitlint/config-conventional": "^18.5.0",
|
|
64
|
+
"@linear/sdk": "^68.0.0",
|
|
63
65
|
"@types/get-value": "^3.0.3",
|
|
64
66
|
"@types/jest": "^29.5.4",
|
|
65
67
|
"@types/lodash": "^4.14.195",
|
|
@@ -67,6 +69,7 @@
|
|
|
67
69
|
"@types/set-value": "^4.0.1",
|
|
68
70
|
"@types/sha256": "^0.2.0",
|
|
69
71
|
"@types/sqlstring": "^2.3.2",
|
|
72
|
+
"@types/validator": "^13.15.10",
|
|
70
73
|
"@typescript-eslint/eslint-plugin": "^6.20.0",
|
|
71
74
|
"@typescript-eslint/parser": "^6.20.0",
|
|
72
75
|
"axios-mock-adapter": "^2.1.0",
|