@hanivanrizky/nestjs-browser-action 0.1.0 → 0.2.0
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 +30 -0
- package/dist/constants/browser-action.constants.d.ts +9 -0
- package/dist/constants/browser-action.constants.js +10 -1
- package/dist/constants/browser-action.constants.js.map +1 -1
- package/dist/helpers/action-helpers.service.d.ts +0 -1
- package/dist/helpers/action-helpers.service.js +7 -9
- package/dist/helpers/action-helpers.service.js.map +1 -1
- package/dist/helpers/delay.util.d.ts +1 -0
- package/dist/helpers/delay.util.js +7 -0
- package/dist/helpers/delay.util.js.map +1 -0
- package/dist/helpers/index.d.ts +3 -0
- package/dist/helpers/index.js +3 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/string.util.d.ts +1 -0
- package/dist/helpers/string.util.js +7 -0
- package/dist/helpers/string.util.js.map +1 -0
- package/dist/interfaces/browser-action-options.d.ts +15 -7
- package/dist/interfaces/workflow-options.d.ts +2 -1
- package/dist/pipes/date-format.pipe.js +3 -8
- package/dist/pipes/date-format.pipe.js.map +1 -1
- package/dist/pipes/regex-extract.pipe.d.ts +1 -0
- package/dist/pipes/regex-extract.pipe.js +9 -4
- package/dist/pipes/regex-extract.pipe.js.map +1 -1
- package/dist/pipes/regex-replace.pipe.d.ts +2 -1
- package/dist/pipes/regex-replace.pipe.js +8 -11
- package/dist/pipes/regex-replace.pipe.js.map +1 -1
- package/dist/pipes/remove-currency-symbol.pipe.d.ts +1 -0
- package/dist/pipes/remove-currency-symbol.pipe.js +2 -25
- package/dist/pipes/remove-currency-symbol.pipe.js.map +1 -1
- package/dist/pipes/remove-line-breaks.pipe.js +2 -3
- package/dist/pipes/remove-line-breaks.pipe.js.map +1 -1
- package/dist/pipes/remove-special-chars.pipe.d.ts +1 -0
- package/dist/pipes/remove-special-chars.pipe.js +10 -7
- package/dist/pipes/remove-special-chars.pipe.js.map +1 -1
- package/dist/pipes/sanitize-text.pipe.d.ts +3 -0
- package/dist/pipes/sanitize-text.pipe.js +54 -41
- package/dist/pipes/sanitize-text.pipe.js.map +1 -1
- package/dist/services/browser-pool.service.d.ts +3 -0
- package/dist/services/browser-pool.service.js +65 -13
- package/dist/services/browser-pool.service.js.map +1 -1
- package/dist/services/cleansing.service.d.ts +0 -1
- package/dist/services/cleansing.service.js +1 -11
- package/dist/services/cleansing.service.js.map +1 -1
- package/dist/services/cookie.service.js +27 -28
- package/dist/services/cookie.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +19 -1
|
@@ -13,26 +13,29 @@ exports.RemoveSpecialCharsPipe = void 0;
|
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const cleansing_pipe_1 = require("./cleansing-pipe");
|
|
15
15
|
const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
|
|
16
|
+
const string_util_1 = require("../helpers/string.util");
|
|
16
17
|
class RemoveSpecialCharsPipe extends cleansing_pipe_1.CleansingPipe {
|
|
17
18
|
type = cleansing_type_enum_1.CleansingType.REMOVE_SPECIAL_CHARS;
|
|
18
19
|
allowedChars;
|
|
20
|
+
_regex;
|
|
19
21
|
exec(value) {
|
|
20
22
|
if (typeof value !== 'string') {
|
|
21
23
|
return value;
|
|
22
24
|
}
|
|
23
25
|
let result = value;
|
|
24
26
|
if (this.allowedChars) {
|
|
25
|
-
|
|
26
|
-
.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
if (!this._regex) {
|
|
28
|
+
const escaped = this.allowedChars
|
|
29
|
+
.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
30
|
+
.replace(/-/g, '\\-');
|
|
31
|
+
this._regex = new RegExp(`[^a-zA-Z0-9${escaped}]`, 'g');
|
|
32
|
+
}
|
|
33
|
+
result = result.replace(this._regex, '');
|
|
30
34
|
}
|
|
31
35
|
else {
|
|
32
36
|
result = result.replace(/[^\p{L}\p{N}\s]/gu, '');
|
|
33
37
|
}
|
|
34
|
-
|
|
35
|
-
return result;
|
|
38
|
+
return (0, string_util_1.normalizeWhitespace)(result);
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
exports.RemoveSpecialCharsPipe = RemoveSpecialCharsPipe;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-special-chars.pipe.js","sourceRoot":"","sources":["../../src/pipes/remove-special-chars.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAuD;AACvD,qDAAiD;AACjD,sEAA6D;AAK7D,MAAa,sBAAuB,SAAQ,8BAA6B;IACvE,IAAI,GAAG,mCAAa,CAAC,oBAAoB,CAAC;IAI1C,YAAY,CAAU;
|
|
1
|
+
{"version":3,"file":"remove-special-chars.pipe.js","sourceRoot":"","sources":["../../src/pipes/remove-special-chars.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAuD;AACvD,qDAAiD;AACjD,sEAA6D;AAC7D,wDAA6D;AAK7D,MAAa,sBAAuB,SAAQ,8BAA6B;IACvE,IAAI,GAAG,mCAAa,CAAC,oBAAoB,CAAC;IAI1C,YAAY,CAAU;IAEd,MAAM,CAAU;IAExB,IAAI,CAAC,KAAa;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;qBAC9B,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;qBACtC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,cAAc,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACF;AA9BD,wDA8BC;AAzBC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;4DACW"}
|
|
@@ -2,6 +2,9 @@ import { CleansingPipe } from './cleansing-pipe';
|
|
|
2
2
|
import { CleansingType } from '../enums/cleansing-type.enum';
|
|
3
3
|
export declare class SanitizeTextPipe extends CleansingPipe<string, string> {
|
|
4
4
|
type: CleansingType;
|
|
5
|
+
private static readonly TAG_PAIR_REGEXES;
|
|
6
|
+
private static readonly TAG_SELF_CLOSING_REGEXES;
|
|
7
|
+
private static readonly EVENT_HANDLER_REGEXES;
|
|
5
8
|
preserveEntities?: boolean;
|
|
6
9
|
exec(value: string): string;
|
|
7
10
|
}
|
|
@@ -13,57 +13,70 @@ exports.SanitizeTextPipe = void 0;
|
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const cleansing_pipe_1 = require("./cleansing-pipe");
|
|
15
15
|
const cleansing_type_enum_1 = require("../enums/cleansing-type.enum");
|
|
16
|
+
const string_util_1 = require("../helpers/string.util");
|
|
16
17
|
class SanitizeTextPipe extends cleansing_pipe_1.CleansingPipe {
|
|
17
18
|
type = cleansing_type_enum_1.CleansingType.SANITIZE_TEXT;
|
|
19
|
+
static TAG_PAIR_REGEXES = [
|
|
20
|
+
'script',
|
|
21
|
+
'iframe',
|
|
22
|
+
'object',
|
|
23
|
+
'embed',
|
|
24
|
+
'applet',
|
|
25
|
+
'form',
|
|
26
|
+
'input',
|
|
27
|
+
'button',
|
|
28
|
+
'select',
|
|
29
|
+
'textarea',
|
|
30
|
+
'meta',
|
|
31
|
+
'link',
|
|
32
|
+
'style',
|
|
33
|
+
].map((tag) => new RegExp(`<${tag}[^>]*>.*?<\\/${tag}>`, 'gi'));
|
|
34
|
+
static TAG_SELF_CLOSING_REGEXES = [
|
|
35
|
+
'script',
|
|
36
|
+
'iframe',
|
|
37
|
+
'object',
|
|
38
|
+
'embed',
|
|
39
|
+
'applet',
|
|
40
|
+
'form',
|
|
41
|
+
'input',
|
|
42
|
+
'button',
|
|
43
|
+
'select',
|
|
44
|
+
'textarea',
|
|
45
|
+
'meta',
|
|
46
|
+
'link',
|
|
47
|
+
'style',
|
|
48
|
+
].map((tag) => new RegExp(`<${tag}[^>]*\\s*\\/?>`, 'gi'));
|
|
49
|
+
static EVENT_HANDLER_REGEXES = [
|
|
50
|
+
'onclick',
|
|
51
|
+
'onerror',
|
|
52
|
+
'onload',
|
|
53
|
+
'onmouseover',
|
|
54
|
+
'onmouseout',
|
|
55
|
+
'onfocus',
|
|
56
|
+
'onblur',
|
|
57
|
+
'onchange',
|
|
58
|
+
'onsubmit',
|
|
59
|
+
'onreset',
|
|
60
|
+
'onselect',
|
|
61
|
+
'onkeydown',
|
|
62
|
+
'onkeyup',
|
|
63
|
+
'onkeypress',
|
|
64
|
+
].map((h) => new RegExp(`${h}=\\S*`, 'gi'));
|
|
18
65
|
preserveEntities;
|
|
19
66
|
exec(value) {
|
|
20
67
|
if (typeof value !== 'string' || !value) {
|
|
21
68
|
return value;
|
|
22
69
|
}
|
|
23
70
|
let result = value;
|
|
24
|
-
const
|
|
25
|
-
'script',
|
|
26
|
-
'iframe',
|
|
27
|
-
'object',
|
|
28
|
-
'embed',
|
|
29
|
-
'applet',
|
|
30
|
-
'form',
|
|
31
|
-
'input',
|
|
32
|
-
'button',
|
|
33
|
-
'select',
|
|
34
|
-
'textarea',
|
|
35
|
-
'meta',
|
|
36
|
-
'link',
|
|
37
|
-
'style',
|
|
38
|
-
];
|
|
39
|
-
dangerousTags.forEach((tag) => {
|
|
40
|
-
const regex = new RegExp(`<${tag}[^>]*>.*?<\\/${tag}>`, 'gi');
|
|
71
|
+
for (const regex of SanitizeTextPipe.TAG_PAIR_REGEXES) {
|
|
41
72
|
result = result.replace(regex, '');
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const regex = new RegExp(`<${tag}[^>]*\\s*\\/?>`, 'gi');
|
|
73
|
+
}
|
|
74
|
+
for (const regex of SanitizeTextPipe.TAG_SELF_CLOSING_REGEXES) {
|
|
45
75
|
result = result.replace(regex, '');
|
|
46
|
-
}
|
|
47
|
-
const
|
|
48
|
-
'onclick',
|
|
49
|
-
'onerror',
|
|
50
|
-
'onload',
|
|
51
|
-
'onmouseover',
|
|
52
|
-
'onmouseout',
|
|
53
|
-
'onfocus',
|
|
54
|
-
'onblur',
|
|
55
|
-
'onchange',
|
|
56
|
-
'onsubmit',
|
|
57
|
-
'onreset',
|
|
58
|
-
'onselect',
|
|
59
|
-
'onkeydown',
|
|
60
|
-
'onkeyup',
|
|
61
|
-
'onkeypress',
|
|
62
|
-
];
|
|
63
|
-
eventHandlers.forEach((handler) => {
|
|
64
|
-
const regex = new RegExp(`${handler}=\\S*`, 'gi');
|
|
76
|
+
}
|
|
77
|
+
for (const regex of SanitizeTextPipe.EVENT_HANDLER_REGEXES) {
|
|
65
78
|
result = result.replace(regex, '');
|
|
66
|
-
}
|
|
79
|
+
}
|
|
67
80
|
result = result.replace(/javascript:/gi, '');
|
|
68
81
|
result = result.replace(/<[^>]*>/g, '');
|
|
69
82
|
if (!this.preserveEntities) {
|
|
@@ -74,7 +87,7 @@ class SanitizeTextPipe extends cleansing_pipe_1.CleansingPipe {
|
|
|
74
87
|
.replace(/"/g, '"')
|
|
75
88
|
.replace(/'/g, "'");
|
|
76
89
|
}
|
|
77
|
-
result =
|
|
90
|
+
result = (0, string_util_1.normalizeWhitespace)(result);
|
|
78
91
|
return result;
|
|
79
92
|
}
|
|
80
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize-text.pipe.js","sourceRoot":"","sources":["../../src/pipes/sanitize-text.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6C;AAC7C,qDAAiD;AACjD,sEAA6D;AAK7D,MAAa,gBAAiB,SAAQ,8BAA6B;IACjE,IAAI,GAAG,mCAAa,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sanitize-text.pipe.js","sourceRoot":"","sources":["../../src/pipes/sanitize-text.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6C;AAC7C,qDAAiD;AACjD,sEAA6D;AAC7D,wDAA6D;AAK7D,MAAa,gBAAiB,SAAQ,8BAA6B;IACjE,IAAI,GAAG,mCAAa,CAAC,aAAa,CAAC;IAE3B,MAAM,CAAU,gBAAgB,GAAa;QACnD,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,MAAM;QACN,MAAM;QACN,OAAO;KACR,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,gBAAgB,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,CAAU,wBAAwB,GAAa;QAC3D,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,MAAM;QACN,MAAM;QACN,OAAO;KACR,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC;IAElD,MAAM,CAAU,qBAAqB,GAAa;QACxD,SAAS;QACT,SAAS;QACT,QAAQ;QACR,aAAa;QACb,YAAY;QACZ,SAAS;QACT,QAAQ;QACR,UAAU;QACV,UAAU;QACV,SAAS;QACT,UAAU;QACV,WAAW;QACX,SAAS;QACT,YAAY;KACb,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAG5C,gBAAgB,CAAW;IAE3B,IAAI,CAAC,KAAa;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;YACtD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,wBAAwB,EAAE,CAAC;YAC9D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YAC3D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,GAAG,MAAM;iBACZ,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;iBACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;iBACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;iBACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;iBACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,GAAG,IAAA,iCAAmB,EAAC,MAAM,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC;IAChB,CAAC;;AAvFH,4CAwFC;AAnCC;IADC,IAAA,4BAAU,GAAE;;0DACc"}
|
|
@@ -8,6 +8,7 @@ export declare class BrowserPoolService implements OnModuleInit, OnModuleDestroy
|
|
|
8
8
|
private pool;
|
|
9
9
|
private available;
|
|
10
10
|
private inUse;
|
|
11
|
+
private disconnectListeners;
|
|
11
12
|
private launchOptions;
|
|
12
13
|
private minSize;
|
|
13
14
|
private maxSize;
|
|
@@ -15,7 +16,9 @@ export declare class BrowserPoolService implements OnModuleInit, OnModuleDestroy
|
|
|
15
16
|
constructor(options: BrowserActionOptions);
|
|
16
17
|
onModuleInit(): Promise<void>;
|
|
17
18
|
getLogLevel(): LogLevel;
|
|
19
|
+
private validateRemoteOptions;
|
|
18
20
|
private createBrowser;
|
|
21
|
+
private connectWithRetry;
|
|
19
22
|
acquire(): Promise<Browser>;
|
|
20
23
|
private getNextAvailable;
|
|
21
24
|
private waitForAvailable;
|
|
@@ -51,12 +51,14 @@ const common_1 = require("@nestjs/common");
|
|
|
51
51
|
const puppeteer = __importStar(require("puppeteer"));
|
|
52
52
|
const browser_action_constants_1 = require("../constants/browser-action.constants");
|
|
53
53
|
const logger_util_1 = require("../helpers/logger.util");
|
|
54
|
+
const delay_util_1 = require("../helpers/delay.util");
|
|
54
55
|
let BrowserPoolService = BrowserPoolService_1 = class BrowserPoolService {
|
|
55
56
|
options;
|
|
56
57
|
logger;
|
|
57
58
|
pool = [];
|
|
58
59
|
available = new Set();
|
|
59
60
|
inUse = new Set();
|
|
61
|
+
disconnectListeners = new Map();
|
|
60
62
|
launchOptions = {};
|
|
61
63
|
minSize = browser_action_constants_1.DEFAULT_POOL_OPTIONS.min;
|
|
62
64
|
maxSize = browser_action_constants_1.DEFAULT_POOL_OPTIONS.max;
|
|
@@ -69,29 +71,73 @@ let BrowserPoolService = BrowserPoolService_1 = class BrowserPoolService {
|
|
|
69
71
|
this.launchOptions = this.options.launchOptions || {};
|
|
70
72
|
this.minSize = this.options.pool?.min || browser_action_constants_1.DEFAULT_POOL_OPTIONS.min;
|
|
71
73
|
this.maxSize = this.options.pool?.max || browser_action_constants_1.DEFAULT_POOL_OPTIONS.max;
|
|
74
|
+
this.validateRemoteOptions(this.options.remote);
|
|
72
75
|
this.logger.log(`Initializing browser pool (min: ${this.minSize}, max: ${this.maxSize})`);
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
const browsers = await Promise.all(Array.from({ length: this.minSize }, () => this.createBrowser()));
|
|
77
|
+
browsers.forEach((browser) => {
|
|
75
78
|
this.pool.push(browser);
|
|
76
79
|
this.available.add(browser);
|
|
77
|
-
}
|
|
80
|
+
});
|
|
78
81
|
this.logger.log(`Browser pool initialized with ${this.pool.length} browsers`);
|
|
79
82
|
}
|
|
80
83
|
getLogLevel() {
|
|
81
84
|
return this.logger.getLogLevel();
|
|
82
85
|
}
|
|
86
|
+
validateRemoteOptions(remote) {
|
|
87
|
+
if (!remote)
|
|
88
|
+
return;
|
|
89
|
+
const hasURL = !!remote.browserURL;
|
|
90
|
+
const hasWSEndpoint = !!remote.browserWSEndpoint;
|
|
91
|
+
if (hasURL && hasWSEndpoint) {
|
|
92
|
+
throw new Error(browser_action_constants_1.ERROR_MESSAGES.REMOTE_BOTH_PROVIDED);
|
|
93
|
+
}
|
|
94
|
+
if (!hasURL && !hasWSEndpoint) {
|
|
95
|
+
throw new Error(browser_action_constants_1.ERROR_MESSAGES.REMOTE_NONE_PROVIDED);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
83
98
|
async createBrowser() {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
if (this.options.remote) {
|
|
100
|
+
return await this.connectWithRetry(this.options.remote);
|
|
101
|
+
}
|
|
102
|
+
const browser = await puppeteer.launch(this.launchOptions);
|
|
103
|
+
const disconnectHandler = () => {
|
|
104
|
+
this.logger.log('Browser disconnected', 'warn');
|
|
105
|
+
};
|
|
106
|
+
browser.on('disconnected', disconnectHandler);
|
|
107
|
+
this.disconnectListeners.set(browser, disconnectHandler);
|
|
108
|
+
return browser;
|
|
109
|
+
}
|
|
110
|
+
async connectWithRetry(remoteOptions) {
|
|
111
|
+
const { browserURL, browserWSEndpoint, retryMax = browser_action_constants_1.DEFAULT_REMOTE_OPTIONS.retryMax, retryDelay = browser_action_constants_1.DEFAULT_REMOTE_OPTIONS.retryDelay, } = remoteOptions;
|
|
112
|
+
const connectOptions = {};
|
|
113
|
+
if (browserURL) {
|
|
114
|
+
connectOptions.browserURL = browserURL;
|
|
115
|
+
}
|
|
116
|
+
else if (browserWSEndpoint) {
|
|
117
|
+
connectOptions.browserWSEndpoint = browserWSEndpoint;
|
|
90
118
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
119
|
+
let lastError;
|
|
120
|
+
for (let attempt = 1; attempt <= retryMax; attempt++) {
|
|
121
|
+
try {
|
|
122
|
+
this.logger.log(`Connecting to remote Chrome (attempt ${attempt}/${retryMax})`, 'debug');
|
|
123
|
+
const browser = await puppeteer.connect(connectOptions);
|
|
124
|
+
const disconnectHandler = () => {
|
|
125
|
+
this.logger.log('Remote Chrome disconnected', 'warn');
|
|
126
|
+
};
|
|
127
|
+
browser.on('disconnected', disconnectHandler);
|
|
128
|
+
this.disconnectListeners.set(browser, disconnectHandler);
|
|
129
|
+
this.logger.log('Successfully connected to remote Chrome', 'debug');
|
|
130
|
+
return browser;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
lastError = error;
|
|
134
|
+
this.logger.log(`Connection attempt ${attempt}/${retryMax} failed: ${lastError.message}`, 'warn');
|
|
135
|
+
if (attempt < retryMax) {
|
|
136
|
+
await (0, delay_util_1.delay)(retryDelay);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
94
139
|
}
|
|
140
|
+
throw new Error(`Failed to connect to remote Chrome after ${retryMax} attempts: ${lastError?.message}`);
|
|
95
141
|
}
|
|
96
142
|
async acquire() {
|
|
97
143
|
if (this.available.size === 0) {
|
|
@@ -122,7 +168,7 @@ let BrowserPoolService = BrowserPoolService_1 = class BrowserPoolService {
|
|
|
122
168
|
clearInterval(checkInterval);
|
|
123
169
|
resolve();
|
|
124
170
|
}
|
|
125
|
-
},
|
|
171
|
+
}, browser_action_constants_1.AVAILABILITY_CHECK_INTERVAL_MS);
|
|
126
172
|
});
|
|
127
173
|
}
|
|
128
174
|
release(browser) {
|
|
@@ -141,6 +187,11 @@ let BrowserPoolService = BrowserPoolService_1 = class BrowserPoolService {
|
|
|
141
187
|
this.logger.log('Closing all browsers in pool');
|
|
142
188
|
await Promise.all(this.pool.map(async (browser) => {
|
|
143
189
|
try {
|
|
190
|
+
const handler = this.disconnectListeners.get(browser);
|
|
191
|
+
if (handler) {
|
|
192
|
+
browser.off('disconnected', handler);
|
|
193
|
+
this.disconnectListeners.delete(browser);
|
|
194
|
+
}
|
|
144
195
|
if (browser.isConnected()) {
|
|
145
196
|
await browser.close();
|
|
146
197
|
}
|
|
@@ -152,6 +203,7 @@ let BrowserPoolService = BrowserPoolService_1 = class BrowserPoolService {
|
|
|
152
203
|
this.pool = [];
|
|
153
204
|
this.available.clear();
|
|
154
205
|
this.inUse.clear();
|
|
206
|
+
this.disconnectListeners.clear();
|
|
155
207
|
}
|
|
156
208
|
};
|
|
157
209
|
exports.BrowserPoolService = BrowserPoolService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-pool.service.js","sourceRoot":"","sources":["../../src/services/browser-pool.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAKwB;AAExB,qDAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"browser-pool.service.js","sourceRoot":"","sources":["../../src/services/browser-pool.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,5 +6,4 @@ export declare class CleansingService {
|
|
|
6
6
|
cleanse<TInput = unknown, TOutput = unknown>(data: TInput, pipes: CleansingPipe<TInput, TOutput>[]): TOutput;
|
|
7
7
|
cleanseWithProfile<T = unknown>(data: string, profileName: CleansingProfile): T;
|
|
8
8
|
loadPipes(config: PipeConfig[]): CleansingPipe[];
|
|
9
|
-
private loadPipesSync;
|
|
10
9
|
}
|
|
@@ -44,7 +44,7 @@ let CleansingService = class CleansingService {
|
|
|
44
44
|
}
|
|
45
45
|
cleanseWithProfile(data, profileName) {
|
|
46
46
|
const profilePipes = profiles_1.CLEANSING_PROFILES[profileName];
|
|
47
|
-
return this.cleanse(data, this.
|
|
47
|
+
return this.cleanse(data, this.loadPipes(profilePipes));
|
|
48
48
|
}
|
|
49
49
|
loadPipes(config) {
|
|
50
50
|
const pipes = [];
|
|
@@ -60,16 +60,6 @@ let CleansingService = class CleansingService {
|
|
|
60
60
|
}
|
|
61
61
|
return pipes;
|
|
62
62
|
}
|
|
63
|
-
loadPipesSync(config) {
|
|
64
|
-
const pipes = [];
|
|
65
|
-
for (const pipeConfig of config) {
|
|
66
|
-
const PipeClass = this.PIPE_TYPE_MAP[pipeConfig.type];
|
|
67
|
-
if (PipeClass) {
|
|
68
|
-
pipes.push(new PipeClass());
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return pipes;
|
|
72
|
-
}
|
|
73
63
|
};
|
|
74
64
|
exports.CleansingService = CleansingService;
|
|
75
65
|
exports.CleansingService = CleansingService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleansing.service.js","sourceRoot":"","sources":["../../src/services/cleansing.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAE5C,kDAA8C;AAC9C,4DAAuD;AACvD,oEAA8D;AAC9D,oEAA8D;AAC9D,oEAA+D;AAC/D,kFAA6E;AAC7E,8EAAwE;AACxE,gEAA2D;AAC3D,oEAA+D;AAC/D,oEAA+D;AAC/D,sFAAgF;AAChF,kFAA4E;AAC5E,0DAAqD;AACrD,gDAAuD;AAEvD,sEAA6D;AAItD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACV,aAAa,GAAG;QAC/B,CAAC,mCAAa,CAAC,IAAI,CAAC,EAAE,oBAAQ;QAC9B,CAAC,mCAAa,CAAC,SAAS,CAAC,EAAE,6BAAY;QACvC,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,qCAAgB;QAC/C,CAAC,mCAAa,CAAC,WAAW,CAAC,EAAE,iCAAc;QAC3C,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,qCAAgB;QAC/C,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,qCAAgB;QAC/C,CAAC,mCAAa,CAAC,sBAAsB,CAAC,EAAE,sDAAwB;QAChE,CAAC,mCAAa,CAAC,oBAAoB,CAAC,EAAE,kDAAsB;QAC5D,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,oCAAe;QAC9C,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,oCAAe;QAC9C,CAAC,mCAAa,CAAC,oBAAoB,CAAC,EAAE,mDAAuB;QAC7D,CAAC,mCAAa,CAAC,kBAAkB,CAAC,EAAE,8CAAoB;QACxD,CAAC,mCAAa,CAAC,QAAQ,CAAC,EAAE,2BAAW;KACtC,CAAC;IAEF,OAAO,CACL,IAAY,EACZ,KAAuC;QAEvC,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,MAAe,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAgB,CAAC,EACtD,IAAe,CACL,CAAC;IACf,CAAC;IAED,kBAAkB,CAChB,IAAY,EACZ,WAA6B;QAE7B,MAAM,YAAY,GAAG,6BAAkB,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"cleansing.service.js","sourceRoot":"","sources":["../../src/services/cleansing.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAE5C,kDAA8C;AAC9C,4DAAuD;AACvD,oEAA8D;AAC9D,oEAA8D;AAC9D,oEAA+D;AAC/D,kFAA6E;AAC7E,8EAAwE;AACxE,gEAA2D;AAC3D,oEAA+D;AAC/D,oEAA+D;AAC/D,sFAAgF;AAChF,kFAA4E;AAC5E,0DAAqD;AACrD,gDAAuD;AAEvD,sEAA6D;AAItD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACV,aAAa,GAAG;QAC/B,CAAC,mCAAa,CAAC,IAAI,CAAC,EAAE,oBAAQ;QAC9B,CAAC,mCAAa,CAAC,SAAS,CAAC,EAAE,6BAAY;QACvC,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,qCAAgB;QAC/C,CAAC,mCAAa,CAAC,WAAW,CAAC,EAAE,iCAAc;QAC3C,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,qCAAgB;QAC/C,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,qCAAgB;QAC/C,CAAC,mCAAa,CAAC,sBAAsB,CAAC,EAAE,sDAAwB;QAChE,CAAC,mCAAa,CAAC,oBAAoB,CAAC,EAAE,kDAAsB;QAC5D,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,oCAAe;QAC9C,CAAC,mCAAa,CAAC,aAAa,CAAC,EAAE,oCAAe;QAC9C,CAAC,mCAAa,CAAC,oBAAoB,CAAC,EAAE,mDAAuB;QAC7D,CAAC,mCAAa,CAAC,kBAAkB,CAAC,EAAE,8CAAoB;QACxD,CAAC,mCAAa,CAAC,QAAQ,CAAC,EAAE,2BAAW;KACtC,CAAC;IAEF,OAAO,CACL,IAAY,EACZ,KAAuC;QAEvC,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,MAAe,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAgB,CAAC,EACtD,IAAe,CACL,CAAC;IACf,CAAC;IAED,kBAAkB,CAChB,IAAY,EACZ,WAA6B;QAE7B,MAAM,YAAY,GAAG,6BAAkB,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAM,CAAC;IAC/D,CAAC;IAED,SAAS,CAAC,MAAoB;QAC5B,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEtD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YAGD,MAAM,UAAU,GACb,UAAmD,CAAC,MAAM,IAAI,EAAE,CAAC;YACpE,MAAM,YAAY,GAAG,IAAI,SAAS,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;YAE1D,KAAK,CAAC,IAAI,CAAC,YAA6B,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAxDY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAwD5B"}
|
|
@@ -95,7 +95,10 @@ let CookieService = CookieService_1 = class CookieService {
|
|
|
95
95
|
await fs_1.promises.access(sessionPath);
|
|
96
96
|
throw new Error(`Session '${sessionName}' already exists. Use overwrite: true to replace.`);
|
|
97
97
|
}
|
|
98
|
-
catch {
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error.code !== 'ENOENT') {
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
99
102
|
}
|
|
100
103
|
}
|
|
101
104
|
const cookies = await page.cookies();
|
|
@@ -132,25 +135,22 @@ let CookieService = CookieService_1 = class CookieService {
|
|
|
132
135
|
this.logger.log(`Loading cookies for session: ${sessionName}`, 'debug');
|
|
133
136
|
const cookiesDir = options?.cookiesDir || this.cookiesDir;
|
|
134
137
|
const sessionPath = this.getSessionPath(sessionName, cookiesDir);
|
|
135
|
-
try {
|
|
136
|
-
await fs_1.promises.access(sessionPath);
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
if (options?.throwIfNotExists !== false) {
|
|
140
|
-
throw new Error(`Session '${sessionName}' not found at ${sessionPath}`);
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
name: sessionName,
|
|
144
|
-
cookies: [],
|
|
145
|
-
savedAt: new Date(),
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
138
|
let sessionData;
|
|
149
139
|
try {
|
|
150
140
|
const content = await fs_1.promises.readFile(sessionPath, 'utf-8');
|
|
151
141
|
sessionData = JSON.parse(content);
|
|
152
142
|
}
|
|
153
143
|
catch (error) {
|
|
144
|
+
if (error.code === 'ENOENT') {
|
|
145
|
+
if (options?.throwIfNotExists !== false) {
|
|
146
|
+
throw new Error(`Session '${sessionName}' not found at ${sessionPath}`);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
name: sessionName,
|
|
150
|
+
cookies: [],
|
|
151
|
+
savedAt: new Date(),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
154
|
throw new Error(`Failed to read session file ${sessionPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
155
155
|
}
|
|
156
156
|
try {
|
|
@@ -179,22 +179,21 @@ let CookieService = CookieService_1 = class CookieService {
|
|
|
179
179
|
this.logger.log(`Deleting session: ${sessionName}`, 'debug');
|
|
180
180
|
const sessionPath = this.getSessionPath(sessionName);
|
|
181
181
|
try {
|
|
182
|
-
await fs_1.promises.
|
|
182
|
+
await fs_1.promises.unlink(sessionPath);
|
|
183
183
|
}
|
|
184
|
-
catch {
|
|
185
|
-
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (error.code === 'ENOENT') {
|
|
186
|
+
throw new Error(`Session '${sessionName}' not found at ${sessionPath}`);
|
|
187
|
+
}
|
|
188
|
+
throw error;
|
|
186
189
|
}
|
|
187
|
-
await fs_1.promises.unlink(sessionPath);
|
|
188
190
|
this.logger.log(`Deleted session: ${sessionName}`);
|
|
189
191
|
}
|
|
190
192
|
async clearAllCookies() {
|
|
191
193
|
this.logger.log('Clearing all cookie sessions', 'debug');
|
|
192
194
|
const files = await fs_1.promises.readdir(this.cookiesDir);
|
|
193
195
|
const jsonFiles = files.filter((f) => f.endsWith('.json'));
|
|
194
|
-
|
|
195
|
-
const filePath = path.join(this.cookiesDir, file);
|
|
196
|
-
await fs_1.promises.unlink(filePath);
|
|
197
|
-
}
|
|
196
|
+
await Promise.all(jsonFiles.map((file) => fs_1.promises.unlink(path.join(this.cookiesDir, file))));
|
|
198
197
|
this.logger.log(`Cleared ${jsonFiles.length} cookie sessions`);
|
|
199
198
|
}
|
|
200
199
|
async listCookies() {
|
|
@@ -202,25 +201,25 @@ let CookieService = CookieService_1 = class CookieService {
|
|
|
202
201
|
try {
|
|
203
202
|
const files = await fs_1.promises.readdir(this.cookiesDir);
|
|
204
203
|
const jsonFiles = files.filter((f) => f.endsWith('.json'));
|
|
205
|
-
const
|
|
206
|
-
for (const file of jsonFiles) {
|
|
204
|
+
const results = await Promise.all(jsonFiles.map(async (file) => {
|
|
207
205
|
const filePath = path.join(this.cookiesDir, file);
|
|
208
206
|
try {
|
|
209
207
|
const content = await fs_1.promises.readFile(filePath, 'utf-8');
|
|
210
208
|
const data = JSON.parse(content);
|
|
211
|
-
|
|
209
|
+
return {
|
|
212
210
|
name: data.name,
|
|
213
211
|
savedAt: new Date(data.savedAt),
|
|
214
212
|
cookieCount: data.cookies.length,
|
|
215
213
|
url: data.url,
|
|
216
214
|
metadata: data.metadata,
|
|
217
|
-
}
|
|
215
|
+
};
|
|
218
216
|
}
|
|
219
217
|
catch {
|
|
220
218
|
this.logger.log(`Skipping invalid session file: ${file}`, 'warn');
|
|
219
|
+
return null;
|
|
221
220
|
}
|
|
222
|
-
}
|
|
223
|
-
return
|
|
221
|
+
}));
|
|
222
|
+
return results.filter((s) => s !== null);
|
|
224
223
|
}
|
|
225
224
|
catch {
|
|
226
225
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.service.js","sourceRoot":"","sources":["../../src/services/cookie.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,2BAAoC;AACpC,2CAA6B;AAC7B,oFAG+C;AAS/C,wDAAyD;AAGlD,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAOL;IANF,MAAM,CAAkB;IACxB,UAAU,CAAS;IACnB,OAAO,CAAU;IAElC,YAEmB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QAE9C,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,iDAAsB,CAAC,OAAO,CAAC;QAClE,IAAI,CAAC,UAAU;YACb,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,IAAI,iDAAsB,CAAC,UAAU,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAe,CAC/B,eAAa,CAAC,IAAI,EAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAC/B,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAKO,mBAAmB,CAAC,WAAmB;QAC7C,OAAO,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAKO,cAAc,CAAC,WAAmB,EAAE,UAAmB;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAC7C,CAAC;IAKO,KAAK,CAAC,eAAe,CAAC,GAAW;QACvC,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAGf,IAAU,EACV,WAAmB,EACnB,OAAsC;QAEtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cookie.service.js","sourceRoot":"","sources":["../../src/services/cookie.service.ts"],"names":[],"mappings":"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"}
|