@hanivanrizky/nestjs-browser-action 0.11.0 → 0.13.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.
@@ -1,6 +1,9 @@
1
1
  export * from './delay.util';
2
2
  export * from './dom.util';
3
3
  export * from './logger.util';
4
+ export * from './path.util';
5
+ export * from './regex.util';
6
+ export * from './sanitize.util';
4
7
  export * from './string.util';
5
8
  export * from './truncate-log.util';
6
9
  export * from './cloak.loader';
@@ -17,6 +17,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./delay.util"), exports);
18
18
  __exportStar(require("./dom.util"), exports);
19
19
  __exportStar(require("./logger.util"), exports);
20
+ __exportStar(require("./path.util"), exports);
21
+ __exportStar(require("./regex.util"), exports);
22
+ __exportStar(require("./sanitize.util"), exports);
20
23
  __exportStar(require("./string.util"), exports);
21
24
  __exportStar(require("./truncate-log.util"), exports);
22
25
  __exportStar(require("./cloak.loader"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,6CAA2B;AAC3B,gDAA8B;AAC9B,gDAA8B;AAC9B,sDAAoC;AACpC,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,6CAA2B;AAC3B,gDAA8B;AAC9B,8CAA4B;AAC5B,+CAA6B;AAC7B,kDAAgC;AAChC,gDAA8B;AAC9B,sDAAoC;AACpC,iDAA+B"}
@@ -0,0 +1 @@
1
+ export declare function sanitizeScreenshotPath(input: string): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeScreenshotPath = sanitizeScreenshotPath;
4
+ function sanitizeScreenshotPath(input) {
5
+ const normalized = input
6
+ .replace(/\\/g, '/')
7
+ .replace(/\.\.\//g, '')
8
+ .replace(/\.\.\\/g, '');
9
+ if (normalized.startsWith('/')) {
10
+ throw new Error('Absolute paths are not allowed for screenshots');
11
+ }
12
+ return normalized;
13
+ }
14
+ //# sourceMappingURL=path.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.util.js","sourceRoot":"","sources":["../../src/utils/path.util.ts"],"names":[],"mappings":";;AAaA,wDASC;AATD,SAAgB,sBAAsB,CAAC,KAAa;IAClD,MAAM,UAAU,GAAG,KAAK;SACrB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1B,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isSafeRegex(pattern: string): boolean;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSafeRegex = isSafeRegex;
4
+ function isSafeRegex(pattern) {
5
+ const dangerous = /\([^)]*[+*]\)[+*]/;
6
+ return !dangerous.test(pattern);
7
+ }
8
+ //# sourceMappingURL=regex.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.util.js","sourceRoot":"","sources":["../../src/utils/regex.util.ts"],"names":[],"mappings":";;AAcA,kCAIC;AAJD,SAAgB,WAAW,CAAC,OAAe;IAEzC,MAAM,SAAS,GAAG,mBAAmB,CAAC;IACtC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function sanitizeForLog(value: unknown): unknown;
2
+ export declare function sanitizeErrorMessage(message: string): string;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeForLog = sanitizeForLog;
4
+ exports.sanitizeErrorMessage = sanitizeErrorMessage;
5
+ const SENSITIVE_KEYS = new Set([
6
+ 'password',
7
+ 'secret',
8
+ 'token',
9
+ 'apiKey',
10
+ 'api_key',
11
+ 'authToken',
12
+ 'accessToken',
13
+ 'refreshToken',
14
+ 'privateKey',
15
+ 'passphrase',
16
+ 'credential',
17
+ 'credentials',
18
+ 'bearer',
19
+ 'cookie',
20
+ 'session',
21
+ 'apiSecret',
22
+ 'api_secret',
23
+ 'clientSecret',
24
+ 'client_secret',
25
+ 'clientId',
26
+ 'client_id',
27
+ 'signingKey',
28
+ 'encryptionKey',
29
+ 'decryptionKey',
30
+ 'sshKey',
31
+ 'cert',
32
+ 'certificate',
33
+ 'otp',
34
+ 'pin',
35
+ 'salt',
36
+ 'hash',
37
+ 'seed',
38
+ 'mnemonic',
39
+ 'xsrfToken',
40
+ 'csrfToken',
41
+ ]);
42
+ const REDACTED_VALUE = '***';
43
+ const URL_CREDENTIAL_PATTERN = /(\w+:\/\/)([^:]+):([^@]+)@/g;
44
+ const URL_CREDENTIAL_REPLACEMENT = '$1***:***@';
45
+ function maskUrlCredentials(value) {
46
+ return value.replace(URL_CREDENTIAL_PATTERN, URL_CREDENTIAL_REPLACEMENT);
47
+ }
48
+ function sanitizeForLog(value) {
49
+ if (typeof value === 'string') {
50
+ return maskUrlCredentials(value);
51
+ }
52
+ if (Array.isArray(value)) {
53
+ return value.map(sanitizeForLog);
54
+ }
55
+ if (value && typeof value === 'object') {
56
+ const result = {};
57
+ for (const [k, v] of Object.entries(value)) {
58
+ if (SENSITIVE_KEYS.has(k)) {
59
+ result[k] = REDACTED_VALUE;
60
+ }
61
+ else {
62
+ result[k] = sanitizeForLog(v);
63
+ }
64
+ }
65
+ return result;
66
+ }
67
+ return value;
68
+ }
69
+ function sanitizeErrorMessage(message) {
70
+ return maskUrlCredentials(message);
71
+ }
72
+ //# sourceMappingURL=sanitize.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.util.js","sourceRoot":"","sources":["../../src/utils/sanitize.util.ts"],"names":[],"mappings":";;AAgEA,wCAmBC;AAKD,oDAEC;AApFD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,UAAU;IACV,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,WAAW;IACX,aAAa;IACb,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,WAAW;IACX,YAAY;IACZ,cAAc;IACd,eAAe;IACf,UAAU;IACV,WAAW;IACX,YAAY;IACZ,eAAe;IACf,eAAe;IACf,QAAQ;IACR,MAAM;IACN,aAAa;IACb,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;IACX,WAAW;CACZ,CAAC,CAAC;AAGH,MAAM,cAAc,GAAG,KAAK,CAAC;AAG7B,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAG7D,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAGhD,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,0BAA0B,CAAC,CAAC;AAC3E,CAAC;AAQD,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAKD,SAAgB,oBAAoB,CAAC,OAAe;IAClD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { WorkflowDefinition } from '../interfaces/workflow-options';
2
+ export declare class WorkflowValidationError extends Error {
3
+ readonly field: string;
4
+ readonly action?: string | undefined;
5
+ constructor(field: string, action?: string | undefined, message?: string);
6
+ }
7
+ export interface WorkflowValidationOptions {
8
+ allowCloakOverride?: boolean;
9
+ maxActions?: number;
10
+ maxRetry?: number;
11
+ maxRetryDelayMs?: number;
12
+ maxTimeoutMs?: number;
13
+ maxWaitMs?: number;
14
+ maxDelayMs?: number;
15
+ maxNavigationTimeoutMs?: number;
16
+ allowedProtocols?: string[];
17
+ }
18
+ export declare function validatePipeConfigs(configs: Array<Record<string, unknown>>, pathPrefix?: string): void;
19
+ export declare function validateWorkflow(workflow: WorkflowDefinition, options?: WorkflowValidationOptions): void;
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowValidationError = void 0;
4
+ exports.validatePipeConfigs = validatePipeConfigs;
5
+ exports.validateWorkflow = validateWorkflow;
6
+ const class_validator_1 = require("class-validator");
7
+ const regex_util_1 = require("../utils/regex.util");
8
+ class WorkflowValidationError extends Error {
9
+ field;
10
+ action;
11
+ constructor(field, action, message) {
12
+ super(message || `Invalid workflow field: ${field}`);
13
+ this.field = field;
14
+ this.action = action;
15
+ this.name = 'WorkflowValidationError';
16
+ }
17
+ }
18
+ exports.WorkflowValidationError = WorkflowValidationError;
19
+ const VALID_ACTIONS = new Set([
20
+ 'navigate',
21
+ 'wait',
22
+ 'waitFor',
23
+ 'click',
24
+ 'type',
25
+ 'select',
26
+ 'scroll',
27
+ 'extract',
28
+ 'screenshot',
29
+ 'evaluate',
30
+ 'cleanse',
31
+ 'saveCookies',
32
+ 'loadCookies',
33
+ 'clearCookies',
34
+ 'listCookies',
35
+ 'hover',
36
+ 'keyPress',
37
+ 'clear',
38
+ 'waitForNetwork',
39
+ 'reload',
40
+ ]);
41
+ const DEFAULT_MAX_ACTIONS = 100;
42
+ const DEFAULT_MAX_RETRY = 100;
43
+ const DEFAULT_MAX_RETRY_DELAY_MS = 300_000;
44
+ const DEFAULT_MAX_TIMEOUT_MS = 300_000;
45
+ const DEFAULT_MAX_WAIT_MS = 300_000;
46
+ const DEFAULT_MAX_DELAY_MS = 60_000;
47
+ const DEFAULT_MAX_NAVIGATION_TIMEOUT_MS = 300_000;
48
+ const MAX_EVALUATE_SCRIPT_LENGTH = 50_000;
49
+ const PATH_TRAVERSAL = '..';
50
+ const ABSOLUTE_PATH_PREFIX = '/';
51
+ function validateAction(action, index, opts) {
52
+ const prefix = `actions[${index}]`;
53
+ if (!VALID_ACTIONS.has(action.action)) {
54
+ throw new WorkflowValidationError(`${prefix}.action`, action.action, `Invalid action type: ${action.action}`);
55
+ }
56
+ if (action.options) {
57
+ const o = action.options;
58
+ if (o.retry !== undefined) {
59
+ if (typeof o.retry !== 'number' ||
60
+ o.retry < 0 ||
61
+ o.retry > opts.maxRetry) {
62
+ throw new WorkflowValidationError(`${prefix}.options.retry`, action.action, `retry must be a number between 0 and ${opts.maxRetry}`);
63
+ }
64
+ }
65
+ if (o.retryDelay !== undefined) {
66
+ if (typeof o.retryDelay !== 'number' ||
67
+ o.retryDelay < 0 ||
68
+ o.retryDelay > opts.maxRetryDelayMs) {
69
+ throw new WorkflowValidationError(`${prefix}.options.retryDelay`, action.action, `retryDelay must be a number between 0 and ${opts.maxRetryDelayMs}ms`);
70
+ }
71
+ }
72
+ if (o.timeout !== undefined) {
73
+ if (typeof o.timeout !== 'number' ||
74
+ o.timeout < 0 ||
75
+ o.timeout > opts.maxTimeoutMs) {
76
+ throw new WorkflowValidationError(`${prefix}.options.timeout`, action.action, `timeout must be a number between 0 and ${opts.maxTimeoutMs}ms`);
77
+ }
78
+ }
79
+ if (o.delay !== undefined) {
80
+ if (typeof o.delay !== 'number' ||
81
+ o.delay < 0 ||
82
+ o.delay > opts.maxDelayMs) {
83
+ throw new WorkflowValidationError(`${prefix}.options.delay`, action.action, `delay must be a number between 0 and ${opts.maxDelayMs}ms`);
84
+ }
85
+ }
86
+ if (o.navigationTimeout !== undefined) {
87
+ if (typeof o.navigationTimeout !== 'number' ||
88
+ o.navigationTimeout < 0 ||
89
+ o.navigationTimeout > opts.maxNavigationTimeoutMs) {
90
+ throw new WorkflowValidationError(`${prefix}.options.navigationTimeout`, action.action, `navigationTimeout must be a number between 0 and ${opts.maxNavigationTimeoutMs}ms`);
91
+ }
92
+ }
93
+ if (action.action === 'cleanse' && o.pipes) {
94
+ validatePipeConfigs(o.pipes, `${prefix}.options.pipes`);
95
+ }
96
+ }
97
+ const val = action.value;
98
+ if (action.action === 'navigate' && val !== undefined) {
99
+ const url = String(val);
100
+ if (!(0, class_validator_1.isURL)(url, { require_protocol: true, protocols: opts.allowedProtocols })) {
101
+ throw new WorkflowValidationError(`${prefix}.value`, action.action, `Invalid URL for navigate: ${url}`);
102
+ }
103
+ }
104
+ if (action.action === 'screenshot' && val !== undefined) {
105
+ const raw = String(val);
106
+ if (raw.includes(PATH_TRAVERSAL) || raw.startsWith(ABSOLUTE_PATH_PREFIX)) {
107
+ throw new WorkflowValidationError(`${prefix}.value`, action.action, `Invalid screenshot path: ${val}`);
108
+ }
109
+ }
110
+ if (action.action === 'evaluate' && val !== undefined) {
111
+ const code = String(val);
112
+ if (code.length > MAX_EVALUATE_SCRIPT_LENGTH) {
113
+ throw new WorkflowValidationError(`${prefix}.value`, action.action, `evaluate script exceeds maximum length of ${MAX_EVALUATE_SCRIPT_LENGTH} characters`);
114
+ }
115
+ }
116
+ if (action.action === 'wait' && val !== undefined) {
117
+ const ms = Number(val);
118
+ if (Number.isNaN(ms) || ms < 0 || ms > opts.maxWaitMs) {
119
+ throw new WorkflowValidationError(`${prefix}.value`, action.action, `wait value must be a number between 0 and ${opts.maxWaitMs}ms`);
120
+ }
121
+ }
122
+ }
123
+ function validatePipeConfigs(configs, pathPrefix = 'pipes') {
124
+ for (let i = 0; i < configs.length; i++) {
125
+ const cfg = configs[i];
126
+ const prefix = `${pathPrefix}[${i}]`;
127
+ if (!cfg.type || typeof cfg.type !== 'string') {
128
+ throw new WorkflowValidationError(`${prefix}.type`, undefined, 'PipeConfig must have a string type');
129
+ }
130
+ if ('pattern' in cfg && typeof cfg.pattern === 'string') {
131
+ if (!(0, regex_util_1.isSafeRegex)(cfg.pattern)) {
132
+ throw new WorkflowValidationError(`${prefix}.pattern`, undefined, `Potentially dangerous regex pattern rejected: ${cfg.pattern}`);
133
+ }
134
+ }
135
+ const primary = cfg.primaryPipes;
136
+ if (Array.isArray(primary) &&
137
+ primary.every((p) => typeof p === 'object' && p !== null)) {
138
+ validatePipeConfigs(primary, `${prefix}.primaryPipes`);
139
+ }
140
+ const fallback = cfg.fallbackPipes;
141
+ if (Array.isArray(fallback) &&
142
+ fallback.every((p) => typeof p === 'object' && p !== null)) {
143
+ validatePipeConfigs(fallback, `${prefix}.fallbackPipes`);
144
+ }
145
+ }
146
+ }
147
+ function validateWorkflow(workflow, options) {
148
+ const opts = {
149
+ allowCloakOverride: options?.allowCloakOverride ?? true,
150
+ maxActions: options?.maxActions ?? DEFAULT_MAX_ACTIONS,
151
+ maxRetry: options?.maxRetry ?? DEFAULT_MAX_RETRY,
152
+ maxRetryDelayMs: options?.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS,
153
+ maxTimeoutMs: options?.maxTimeoutMs ?? DEFAULT_MAX_TIMEOUT_MS,
154
+ maxWaitMs: options?.maxWaitMs ?? DEFAULT_MAX_WAIT_MS,
155
+ maxDelayMs: options?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS,
156
+ maxNavigationTimeoutMs: options?.maxNavigationTimeoutMs ?? DEFAULT_MAX_NAVIGATION_TIMEOUT_MS,
157
+ allowedProtocols: options?.allowedProtocols ?? ['http', 'https'],
158
+ };
159
+ if (!Array.isArray(workflow.actions)) {
160
+ throw new WorkflowValidationError('actions', undefined, 'workflow.actions must be an array');
161
+ }
162
+ if (workflow.actions.length > opts.maxActions) {
163
+ throw new WorkflowValidationError('actions', undefined, `Too many actions: ${workflow.actions.length} (max ${opts.maxActions})`);
164
+ }
165
+ for (let i = 0; i < workflow.actions.length; i++) {
166
+ validateAction(workflow.actions[i], i, opts);
167
+ }
168
+ if (workflow.cloak && !opts.allowCloakOverride) {
169
+ throw new WorkflowValidationError('cloak', undefined, 'Per-workflow cloak override is disabled');
170
+ }
171
+ if (workflow.onError?.screenshotPath) {
172
+ const raw = workflow.onError.screenshotPath;
173
+ if (raw.includes(PATH_TRAVERSAL) || raw.startsWith(ABSOLUTE_PATH_PREFIX)) {
174
+ throw new WorkflowValidationError('onError.screenshotPath', undefined, `Invalid error screenshot path: ${raw}`);
175
+ }
176
+ }
177
+ }
178
+ //# sourceMappingURL=workflow.validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.validator.js","sourceRoot":"","sources":["../../src/validators/workflow.validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanivanrizky/nestjs-browser-action",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Stealth browser automation module for NestJS (CloakBrowser + puppeteer-core)",
5
5
  "author": "Hanivan Rizky S <hanivan20@gmail.com> (https://www.hanivan.my.id)",
6
6
  "license": "MIT",