@rafikidota/cuba-ofertas-scraping 0.24.1 → 0.26.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/dist/common/index.d.ts +4 -0
- package/dist/common/index.js +4 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/logger/constant/network-interceptor.d.ts +1 -0
- package/dist/common/logger/constant/network-interceptor.js +5 -0
- package/dist/common/logger/constant/network-interceptor.js.map +1 -0
- package/dist/common/logger/enum/handler-logger-context.enum.d.ts +8 -0
- package/dist/common/logger/enum/handler-logger-context.enum.js +13 -0
- package/dist/common/logger/enum/handler-logger-context.enum.js.map +1 -0
- package/dist/common/logger/enum/processor-logger-context.enum.d.ts +8 -0
- package/dist/common/logger/enum/processor-logger-context.enum.js +13 -0
- package/dist/common/logger/enum/processor-logger-context.enum.js.map +1 -0
- package/dist/common/logger/enum/router-logger-context.enum.d.ts +8 -0
- package/dist/common/logger/enum/router-logger-context.enum.js +13 -0
- package/dist/common/logger/enum/router-logger-context.enum.js.map +1 -0
- package/dist/modules/cloudflare/cloudflare.module.d.ts +2 -0
- package/dist/modules/cloudflare/cloudflare.module.js +33 -0
- package/dist/modules/cloudflare/cloudflare.module.js.map +1 -0
- package/dist/modules/cloudflare/cloudflare.service.d.ts +26 -0
- package/dist/modules/cloudflare/cloudflare.service.js +62 -0
- package/dist/modules/cloudflare/cloudflare.service.js.map +1 -0
- package/dist/modules/cloudflare/services/cloudflare-repository.service.d.ts +12 -0
- package/dist/modules/cloudflare/services/cloudflare-repository.service.js +55 -0
- package/dist/modules/cloudflare/services/cloudflare-repository.service.js.map +1 -0
- package/dist/modules/cloudflare/types/block-info.d.ts +7 -0
- package/dist/modules/cloudflare/types/block-info.js +3 -0
- package/dist/modules/cloudflare/types/block-info.js.map +1 -0
- package/dist/modules/cloudflare/types/handle-request.types.d.ts +18 -0
- package/dist/modules/cloudflare/types/handle-request.types.js +21 -0
- package/dist/modules/cloudflare/types/handle-request.types.js.map +1 -0
- package/dist/modules/cloudflare/types/normalize-response.types.d.ts +26 -0
- package/dist/modules/cloudflare/types/normalize-response.types.js +3 -0
- package/dist/modules/cloudflare/types/normalize-response.types.js.map +1 -0
- package/dist/modules/cloudflare/use-cases/check-cloudflare-block.use-case.d.ts +11 -0
- package/dist/modules/cloudflare/use-cases/check-cloudflare-block.use-case.js +46 -0
- package/dist/modules/cloudflare/use-cases/check-cloudflare-block.use-case.js.map +1 -0
- package/dist/modules/cloudflare/use-cases/normalize-cloudflare-response.use-case.d.ts +8 -0
- package/dist/modules/cloudflare/use-cases/normalize-cloudflare-response.use-case.js +55 -0
- package/dist/modules/cloudflare/use-cases/normalize-cloudflare-response.use-case.js.map +1 -0
- package/dist/modules/cloudflare/use-cases/report-cloudflare.use-case.d.ts +12 -0
- package/dist/modules/cloudflare/use-cases/report-cloudflare.use-case.js +41 -0
- package/dist/modules/cloudflare/use-cases/report-cloudflare.use-case.js.map +1 -0
- package/dist/modules/delayer/delayer.service.d.ts +1 -3
- package/dist/modules/delayer/delayer.service.js +3 -6
- package/dist/modules/delayer/delayer.service.js.map +1 -1
- package/dist/modules/index.d.ts +2 -0
- package/dist/modules/index.js +2 -0
- package/dist/modules/index.js.map +1 -1
- package/package.json +4 -1
package/dist/common/index.d.ts
CHANGED
|
@@ -28,6 +28,10 @@ export * from './interface/provider.interface';
|
|
|
28
28
|
export * from './interface/province.interface';
|
|
29
29
|
export * from './interface/scraping-result.interface';
|
|
30
30
|
export * from './interface/transport-event.interface';
|
|
31
|
+
export * from './logger/constant/network-interceptor';
|
|
32
|
+
export * from './logger/enum/handler-logger-context.enum';
|
|
33
|
+
export * from './logger/enum/processor-logger-context.enum';
|
|
34
|
+
export * from './logger/enum/router-logger-context.enum';
|
|
31
35
|
export * from './logger/logger';
|
|
32
36
|
export * from './types/country';
|
|
33
37
|
export * from './types/delay-range';
|
package/dist/common/index.js
CHANGED
|
@@ -44,6 +44,10 @@ __exportStar(require("./interface/provider.interface"), exports);
|
|
|
44
44
|
__exportStar(require("./interface/province.interface"), exports);
|
|
45
45
|
__exportStar(require("./interface/scraping-result.interface"), exports);
|
|
46
46
|
__exportStar(require("./interface/transport-event.interface"), exports);
|
|
47
|
+
__exportStar(require("./logger/constant/network-interceptor"), exports);
|
|
48
|
+
__exportStar(require("./logger/enum/handler-logger-context.enum"), exports);
|
|
49
|
+
__exportStar(require("./logger/enum/processor-logger-context.enum"), exports);
|
|
50
|
+
__exportStar(require("./logger/enum/router-logger-context.enum"), exports);
|
|
47
51
|
__exportStar(require("./logger/logger"), exports);
|
|
48
52
|
__exportStar(require("./types/country"), exports);
|
|
49
53
|
__exportStar(require("./types/delay-range"), exports);
|
package/dist/common/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,iDAA+B;AAC/B,uDAAqC;AACrC,kDAAgC;AAChC,mDAAiC;AACjC,mDAAiC;AACjC,yDAAuC;AACvC,qEAAmD;AACnD,0DAAwC;AAExC,4DAA0C;AAC1C,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AACnC,kDAAgC;AAEhC,oDAAkC;AAClC,sDAAoC;AACpC,2DAAyC;AACzC,6DAA2C;AAC3C,qEAAmD;AACnD,4DAA0C;AAE1C,2DAAyC;AACzC,+DAA6C;AAE7C,iEAA+C;AAC/C,+DAA6C;AAC7C,qEAAmD;AACnD,gEAA8C;AAC9C,iEAA+C;AAC/C,iEAA+C;AAC/C,wEAAsD;AACtD,wEAAsD;AAEtD,kDAAgC;AAEhC,kDAAgC;AAChC,sDAAoC;AACpC,mDAAiC;AACjC,mDAAiC;AACjC,iDAA+B;AAC/B,2DAAyC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,iDAA+B;AAC/B,uDAAqC;AACrC,kDAAgC;AAChC,mDAAiC;AACjC,mDAAiC;AACjC,yDAAuC;AACvC,qEAAmD;AACnD,0DAAwC;AAExC,4DAA0C;AAC1C,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AACnC,kDAAgC;AAEhC,oDAAkC;AAClC,sDAAoC;AACpC,2DAAyC;AACzC,6DAA2C;AAC3C,qEAAmD;AACnD,4DAA0C;AAE1C,2DAAyC;AACzC,+DAA6C;AAE7C,iEAA+C;AAC/C,+DAA6C;AAC7C,qEAAmD;AACnD,gEAA8C;AAC9C,iEAA+C;AAC/C,iEAA+C;AAC/C,wEAAsD;AACtD,wEAAsD;AAEtD,wEAAsD;AACtD,4EAA0D;AAC1D,8EAA4D;AAC5D,2EAAyD;AACzD,kDAAgC;AAEhC,kDAAgC;AAChC,sDAAoC;AACpC,mDAAiC;AACjC,mDAAiC;AACjC,iDAA+B;AAC/B,2DAAyC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NETWORK_INTERCEPTOR = "NetworkInterceptor";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-interceptor.js","sourceRoot":"","sources":["../../../../src/common/logger/constant/network-interceptor.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandlerLoggerContext = void 0;
|
|
4
|
+
var HandlerLoggerContext;
|
|
5
|
+
(function (HandlerLoggerContext) {
|
|
6
|
+
HandlerLoggerContext["CATEGORY"] = "CategoryHandler";
|
|
7
|
+
HandlerLoggerContext["PAGINATION"] = "PaginationHandler";
|
|
8
|
+
HandlerLoggerContext["PRODUCT"] = "ProductHandler";
|
|
9
|
+
HandlerLoggerContext["PROVIDER"] = "ProviderHandler";
|
|
10
|
+
HandlerLoggerContext["PROVINCE"] = "ProvinceHandler";
|
|
11
|
+
HandlerLoggerContext["ERROR"] = "ErrorHandler";
|
|
12
|
+
})(HandlerLoggerContext || (exports.HandlerLoggerContext = HandlerLoggerContext = {}));
|
|
13
|
+
//# sourceMappingURL=handler-logger-context.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-logger-context.enum.js","sourceRoot":"","sources":["../../../../src/common/logger/enum/handler-logger-context.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,oDAA4B,CAAA;IAC5B,wDAAgC,CAAA;IAChC,kDAA0B,CAAA;IAC1B,oDAA4B,CAAA;IAC5B,oDAA4B,CAAA;IAC5B,8CAAsB,CAAA;AACxB,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProcessorLoggerContext = void 0;
|
|
4
|
+
var ProcessorLoggerContext;
|
|
5
|
+
(function (ProcessorLoggerContext) {
|
|
6
|
+
ProcessorLoggerContext["CATEGORY"] = "CategoryProcessor";
|
|
7
|
+
ProcessorLoggerContext["PAGINATION"] = "PaginationProcessor";
|
|
8
|
+
ProcessorLoggerContext["PRODUCT"] = "ProductProcessor";
|
|
9
|
+
ProcessorLoggerContext["PROVIDER"] = "ProviderProcessor";
|
|
10
|
+
ProcessorLoggerContext["PROVINCE"] = "ProvinceProcessor";
|
|
11
|
+
ProcessorLoggerContext["ERROR"] = "ErrorProcessor";
|
|
12
|
+
})(ProcessorLoggerContext || (exports.ProcessorLoggerContext = ProcessorLoggerContext = {}));
|
|
13
|
+
//# sourceMappingURL=processor-logger-context.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor-logger-context.enum.js","sourceRoot":"","sources":["../../../../src/common/logger/enum/processor-logger-context.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,wDAA8B,CAAA;IAC9B,4DAAkC,CAAA;IAClC,sDAA4B,CAAA;IAC5B,wDAA8B,CAAA;IAC9B,wDAA8B,CAAA;IAC9B,kDAAwB,CAAA;AAC1B,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RouterLoggerContext = void 0;
|
|
4
|
+
var RouterLoggerContext;
|
|
5
|
+
(function (RouterLoggerContext) {
|
|
6
|
+
RouterLoggerContext["CATEGORY"] = "CategoryRouter";
|
|
7
|
+
RouterLoggerContext["PAGINATION"] = "PaginationRouter";
|
|
8
|
+
RouterLoggerContext["PRODUCT"] = "ProductRouter";
|
|
9
|
+
RouterLoggerContext["PROVIDER"] = "ProviderRouter";
|
|
10
|
+
RouterLoggerContext["PROVINCE"] = "ProvinceRouter";
|
|
11
|
+
RouterLoggerContext["ERROR"] = "ErrorRouter";
|
|
12
|
+
})(RouterLoggerContext || (exports.RouterLoggerContext = RouterLoggerContext = {}));
|
|
13
|
+
//# sourceMappingURL=router-logger-context.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-logger-context.enum.js","sourceRoot":"","sources":["../../../../src/common/logger/enum/router-logger-context.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC7B,kDAA2B,CAAA;IAC3B,sDAA+B,CAAA;IAC/B,gDAAyB,CAAA;IACzB,kDAA2B,CAAA;IAC3B,kDAA2B,CAAA;IAC3B,4CAAqB,CAAA;AACvB,CAAC,EAPW,mBAAmB,mCAAnB,mBAAmB,QAO9B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CloudflareModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const delayer_module_1 = require("../delayer/delayer.module");
|
|
12
|
+
const cloudflare_service_1 = require("./cloudflare.service");
|
|
13
|
+
const check_cloudflare_block_use_case_1 = require("./use-cases/check-cloudflare-block.use-case");
|
|
14
|
+
const normalize_cloudflare_response_use_case_1 = require("./use-cases/normalize-cloudflare-response.use-case");
|
|
15
|
+
const report_cloudflare_use_case_1 = require("./use-cases/report-cloudflare.use-case");
|
|
16
|
+
const cloudflare_repository_service_1 = require("./services/cloudflare-repository.service");
|
|
17
|
+
let CloudflareModule = class CloudflareModule {
|
|
18
|
+
};
|
|
19
|
+
exports.CloudflareModule = CloudflareModule;
|
|
20
|
+
exports.CloudflareModule = CloudflareModule = __decorate([
|
|
21
|
+
(0, common_1.Module)({
|
|
22
|
+
imports: [delayer_module_1.DelayerModule],
|
|
23
|
+
providers: [
|
|
24
|
+
cloudflare_service_1.CloudflareService,
|
|
25
|
+
normalize_cloudflare_response_use_case_1.NormalizeCloudflareResponseUseCase,
|
|
26
|
+
check_cloudflare_block_use_case_1.CheckCloudflareBlockUseCase,
|
|
27
|
+
report_cloudflare_use_case_1.ReportCloudflareUseCase,
|
|
28
|
+
cloudflare_repository_service_1.CloudflareRepositoryService,
|
|
29
|
+
],
|
|
30
|
+
exports: [cloudflare_service_1.CloudflareService],
|
|
31
|
+
})
|
|
32
|
+
], CloudflareModule);
|
|
33
|
+
//# sourceMappingURL=cloudflare.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.module.js","sourceRoot":"","sources":["../../../src/modules/cloudflare/cloudflare.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAExC,8DAA0D;AAC1D,6DAAyD;AACzD,iGAA0F;AAC1F,+GAAwG;AACxG,uFAAiF;AACjF,4FAAuF;AAahF,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAX5B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,8BAAa,CAAC;QACxB,SAAS,EAAE;YACT,sCAAiB;YACjB,2EAAkC;YAClC,6DAA2B;YAC3B,oDAAuB;YACvB,2DAA2B;SAC5B;QACD,OAAO,EAAE,CAAC,sCAAiB,CAAC;KAC7B,CAAC;GACW,gBAAgB,CAAG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FinalStatistics } from 'crawlee';
|
|
2
|
+
import { DelayerService } from '../delayer/delayer.service';
|
|
3
|
+
import { CheckCloudflareBlockUseCase } from './use-cases/check-cloudflare-block.use-case';
|
|
4
|
+
import { ReportCloudflareUseCase } from './use-cases/report-cloudflare.use-case';
|
|
5
|
+
import { CloudflareRepositoryService } from './services/cloudflare-repository.service';
|
|
6
|
+
import { NormalizeCloudflareResponseUseCase } from './use-cases/normalize-cloudflare-response.use-case';
|
|
7
|
+
import { CrawleeResponse } from './types/normalize-response.types';
|
|
8
|
+
import { IHandleBlockOption } from './types/handle-request.types';
|
|
9
|
+
export declare class CloudflareService {
|
|
10
|
+
private readonly delayer;
|
|
11
|
+
private readonly checker;
|
|
12
|
+
private readonly reporter;
|
|
13
|
+
private readonly repository;
|
|
14
|
+
private readonly normalizer;
|
|
15
|
+
private logger;
|
|
16
|
+
constructor(delayer: DelayerService, checker: CheckCloudflareBlockUseCase, reporter: ReportCloudflareUseCase, repository: CloudflareRepositoryService, normalizer: NormalizeCloudflareResponseUseCase);
|
|
17
|
+
check(response: CrawleeResponse): boolean;
|
|
18
|
+
get blocks(): import("./types/block-info").BlockInfo[];
|
|
19
|
+
handle(response: CrawleeResponse, blockOptions?: IHandleBlockOption): Promise<void>;
|
|
20
|
+
report(stats: FinalStatistics): {
|
|
21
|
+
blocks: number;
|
|
22
|
+
total: number;
|
|
23
|
+
percent: number;
|
|
24
|
+
};
|
|
25
|
+
reset(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var CloudflareService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.CloudflareService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const delayer_service_1 = require("../delayer/delayer.service");
|
|
16
|
+
const logger_1 = require("../../common/logger/logger");
|
|
17
|
+
const check_cloudflare_block_use_case_1 = require("./use-cases/check-cloudflare-block.use-case");
|
|
18
|
+
const report_cloudflare_use_case_1 = require("./use-cases/report-cloudflare.use-case");
|
|
19
|
+
const cloudflare_repository_service_1 = require("./services/cloudflare-repository.service");
|
|
20
|
+
const normalize_cloudflare_response_use_case_1 = require("./use-cases/normalize-cloudflare-response.use-case");
|
|
21
|
+
const handle_request_types_1 = require("./types/handle-request.types");
|
|
22
|
+
let CloudflareService = CloudflareService_1 = class CloudflareService {
|
|
23
|
+
constructor(delayer, checker, reporter, repository, normalizer) {
|
|
24
|
+
this.delayer = delayer;
|
|
25
|
+
this.checker = checker;
|
|
26
|
+
this.reporter = reporter;
|
|
27
|
+
this.repository = repository;
|
|
28
|
+
this.normalizer = normalizer;
|
|
29
|
+
this.logger = new logger_1.Logger(CloudflareService_1.name);
|
|
30
|
+
}
|
|
31
|
+
check(response) {
|
|
32
|
+
return this.checker.execute(response);
|
|
33
|
+
}
|
|
34
|
+
get blocks() {
|
|
35
|
+
return this.repository.blocks;
|
|
36
|
+
}
|
|
37
|
+
async handle(response, blockOptions) {
|
|
38
|
+
const normalized = this.normalizer.execute(response);
|
|
39
|
+
const { options } = new handle_request_types_1.HandleBlockOption(blockOptions);
|
|
40
|
+
const { statusCode, url } = normalized;
|
|
41
|
+
const { method, body, delay } = options;
|
|
42
|
+
this.repository.add({ url, method, body });
|
|
43
|
+
this.logger.warn(`⚠️ ${statusCode} ${url}`);
|
|
44
|
+
return await this.delayer.wait(url, delay.min, delay.max);
|
|
45
|
+
}
|
|
46
|
+
report(stats) {
|
|
47
|
+
return this.reporter.execute(stats);
|
|
48
|
+
}
|
|
49
|
+
reset() {
|
|
50
|
+
this.delayer.reset();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.CloudflareService = CloudflareService;
|
|
54
|
+
exports.CloudflareService = CloudflareService = CloudflareService_1 = __decorate([
|
|
55
|
+
(0, common_1.Injectable)(),
|
|
56
|
+
__metadata("design:paramtypes", [delayer_service_1.DelayerService,
|
|
57
|
+
check_cloudflare_block_use_case_1.CheckCloudflareBlockUseCase,
|
|
58
|
+
report_cloudflare_use_case_1.ReportCloudflareUseCase,
|
|
59
|
+
cloudflare_repository_service_1.CloudflareRepositoryService,
|
|
60
|
+
normalize_cloudflare_response_use_case_1.NormalizeCloudflareResponseUseCase])
|
|
61
|
+
], CloudflareService);
|
|
62
|
+
//# sourceMappingURL=cloudflare.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.service.js","sourceRoot":"","sources":["../../../src/modules/cloudflare/cloudflare.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAG5C,gEAA4D;AAC5D,uDAAoD;AACpD,iGAA0F;AAC1F,uFAAiF;AACjF,4FAAuF;AACvF,+GAAwG;AAKxG,uEAAiE;AAG1D,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG5B,YACmB,OAAuB,EACvB,OAAoC,EACpC,QAAiC,EACjC,UAAuC,EACvC,UAA8C;QAJ9C,YAAO,GAAP,OAAO,CAAgB;QACvB,YAAO,GAAP,OAAO,CAA6B;QACpC,aAAQ,GAAR,QAAQ,CAAyB;QACjC,eAAU,GAAV,UAAU,CAA6B;QACvC,eAAU,GAAV,UAAU,CAAoC;QAPzD,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAQjD,CAAC;IAEJ,KAAK,CAAC,QAAyB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAyB,EAAE,YAAiC;QACvE,MAAM,UAAU,GAAuB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,wCAAiB,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,KAAsB;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AApCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAKiB,gCAAc;QACd,6DAA2B;QAC1B,oDAAuB;QACrB,2DAA2B;QAC3B,2EAAkC;GARtD,iBAAiB,CAoC7B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BlockInfo } from '../types/block-info';
|
|
2
|
+
export declare class CloudflareRepositoryService {
|
|
3
|
+
private map;
|
|
4
|
+
private logger;
|
|
5
|
+
constructor();
|
|
6
|
+
get size(): number;
|
|
7
|
+
get blocks(): BlockInfo[];
|
|
8
|
+
private hash;
|
|
9
|
+
add(block: BlockInfo): void;
|
|
10
|
+
exists(block: BlockInfo): boolean;
|
|
11
|
+
reset(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var CloudflareRepositoryService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.CloudflareRepositoryService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
const logger_1 = require("../../../common/logger/logger");
|
|
17
|
+
let CloudflareRepositoryService = CloudflareRepositoryService_1 = class CloudflareRepositoryService {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.map = new Map();
|
|
20
|
+
this.logger = new logger_1.Logger(CloudflareRepositoryService_1.name);
|
|
21
|
+
}
|
|
22
|
+
get size() {
|
|
23
|
+
return this.map.size;
|
|
24
|
+
}
|
|
25
|
+
get blocks() {
|
|
26
|
+
return Array.from(this.map.values());
|
|
27
|
+
}
|
|
28
|
+
hash(block) {
|
|
29
|
+
const data = JSON.stringify(block);
|
|
30
|
+
return (0, crypto_1.createHash)('sha256').update(data).digest('hex');
|
|
31
|
+
}
|
|
32
|
+
add(block) {
|
|
33
|
+
const key = this.hash(block);
|
|
34
|
+
const mappedBlock = this.map.get(key);
|
|
35
|
+
const previous = mappedBlock?.count ?? 0;
|
|
36
|
+
this.map.set(key, {
|
|
37
|
+
...block,
|
|
38
|
+
count: previous + 1,
|
|
39
|
+
timestamp: new Date(),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
exists(block) {
|
|
43
|
+
const key = this.hash(block);
|
|
44
|
+
return this.map.has(key);
|
|
45
|
+
}
|
|
46
|
+
reset() {
|
|
47
|
+
this.map.clear();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.CloudflareRepositoryService = CloudflareRepositoryService;
|
|
51
|
+
exports.CloudflareRepositoryService = CloudflareRepositoryService = CloudflareRepositoryService_1 = __decorate([
|
|
52
|
+
(0, common_1.Injectable)(),
|
|
53
|
+
__metadata("design:paramtypes", [])
|
|
54
|
+
], CloudflareRepositoryService);
|
|
55
|
+
//# sourceMappingURL=cloudflare-repository.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-repository.service.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/services/cloudflare-repository.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,mCAAoC;AAEpC,0DAAuD;AAIhD,IAAM,2BAA2B,mCAAjC,MAAM,2BAA2B;IAItC;QAHQ,QAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;QACnC,WAAM,GAAG,IAAI,eAAM,CAAC,6BAA2B,CAAC,IAAI,CAAC,CAAC;IAE/C,CAAC;IAEhB,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAEO,IAAI,CAAC,KAAgB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAC,KAAgB;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;YAChB,GAAG,KAAK;YACR,KAAK,EAAE,QAAQ,GAAG,CAAC;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAgB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF,CAAA;AAvCY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;;GACA,2BAA2B,CAuCvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-info.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/types/block-info.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { HttpMethod } from '../../../common/enum/request.enum';
|
|
2
|
+
import { DelayRange } from '../../../common/types/delay-range';
|
|
3
|
+
export type IHandleBlockOption = {
|
|
4
|
+
method: HttpMethod;
|
|
5
|
+
body?: any;
|
|
6
|
+
delay?: DelayRange;
|
|
7
|
+
};
|
|
8
|
+
export declare class HandleBlockOption {
|
|
9
|
+
private readonly method;
|
|
10
|
+
private body;
|
|
11
|
+
private delay;
|
|
12
|
+
constructor(options: IHandleBlockOption);
|
|
13
|
+
get options(): {
|
|
14
|
+
method: HttpMethod;
|
|
15
|
+
body: any;
|
|
16
|
+
delay: DelayRange;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HandleBlockOption = void 0;
|
|
4
|
+
const request_enum_1 = require("../../../common/enum/request.enum");
|
|
5
|
+
class HandleBlockOption {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.method = request_enum_1.HttpMethod.GET;
|
|
8
|
+
this.method = options.method ?? this.method;
|
|
9
|
+
this.body = options.body ?? this.body;
|
|
10
|
+
this.delay = options.delay ?? this.delay;
|
|
11
|
+
}
|
|
12
|
+
get options() {
|
|
13
|
+
return {
|
|
14
|
+
method: this.method,
|
|
15
|
+
body: this.body,
|
|
16
|
+
delay: this.delay,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.HandleBlockOption = HandleBlockOption;
|
|
21
|
+
//# sourceMappingURL=handle-request.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-request.types.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/types/handle-request.types.ts"],"names":[],"mappings":";;;AAAA,oEAA+D;AAS/D,MAAa,iBAAiB;IAK5B,YAAY,OAA2B;QAJtB,WAAM,GAAe,yBAAU,CAAC,GAAG,CAAC;QAKnD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO;QACT,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF;AAlBD,8CAkBC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Response as PlaywrightResponse } from 'playwright';
|
|
2
|
+
import { CheerioAPI } from 'cheerio';
|
|
3
|
+
export interface HttpResponse {
|
|
4
|
+
statusCode: number;
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
url: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CheerioResponse extends HttpResponse {
|
|
9
|
+
body: string;
|
|
10
|
+
$: CheerioAPI;
|
|
11
|
+
}
|
|
12
|
+
export interface PuppeteerResponse {
|
|
13
|
+
status: () => number;
|
|
14
|
+
headers: () => Record<string, string>;
|
|
15
|
+
url: () => string;
|
|
16
|
+
}
|
|
17
|
+
export interface JSDOMResponse extends HttpResponse {
|
|
18
|
+
body: string;
|
|
19
|
+
window: any;
|
|
20
|
+
}
|
|
21
|
+
export type CrawleeResponse = HttpResponse | CheerioResponse | PlaywrightResponse | PuppeteerResponse | JSDOMResponse;
|
|
22
|
+
export interface NormalizedResponse {
|
|
23
|
+
statusCode: number;
|
|
24
|
+
headers: Record<string, string>;
|
|
25
|
+
url: string;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-response.types.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/types/normalize-response.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CrawleeResponse } from '../types/normalize-response.types';
|
|
2
|
+
import { NormalizeCloudflareResponseUseCase } from './normalize-cloudflare-response.use-case';
|
|
3
|
+
export declare class CheckCloudflareBlockUseCase {
|
|
4
|
+
private readonly normalizer;
|
|
5
|
+
private readonly cloudflare;
|
|
6
|
+
private readonly blockedStatusCodes;
|
|
7
|
+
constructor(normalizer: NormalizeCloudflareResponseUseCase);
|
|
8
|
+
execute(response: CrawleeResponse): boolean;
|
|
9
|
+
private detect;
|
|
10
|
+
private check;
|
|
11
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CheckCloudflareBlockUseCase = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const normalize_cloudflare_response_use_case_1 = require("./normalize-cloudflare-response.use-case");
|
|
15
|
+
let CheckCloudflareBlockUseCase = class CheckCloudflareBlockUseCase {
|
|
16
|
+
constructor(normalizer) {
|
|
17
|
+
this.normalizer = normalizer;
|
|
18
|
+
this.cloudflare = 'cloudflare';
|
|
19
|
+
this.blockedStatusCodes = [
|
|
20
|
+
common_1.HttpStatus.FORBIDDEN,
|
|
21
|
+
common_1.HttpStatus.SERVICE_UNAVAILABLE,
|
|
22
|
+
];
|
|
23
|
+
}
|
|
24
|
+
execute(response) {
|
|
25
|
+
const result = this.normalizer.execute(response);
|
|
26
|
+
const { statusCode, headers = {} } = result;
|
|
27
|
+
return this.detect(headers) && this.check(statusCode);
|
|
28
|
+
}
|
|
29
|
+
detect(headers) {
|
|
30
|
+
const server = headers['server']?.toLowerCase();
|
|
31
|
+
const poweredBy = headers['x-powered-by']?.toLowerCase();
|
|
32
|
+
return (!!headers['cf-ray'] ||
|
|
33
|
+
!!headers['cf-cache-status'] ||
|
|
34
|
+
server.includes(this.cloudflare) ||
|
|
35
|
+
poweredBy.includes(this.cloudflare));
|
|
36
|
+
}
|
|
37
|
+
check(statusCode) {
|
|
38
|
+
return this.blockedStatusCodes.includes(statusCode);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.CheckCloudflareBlockUseCase = CheckCloudflareBlockUseCase;
|
|
42
|
+
exports.CheckCloudflareBlockUseCase = CheckCloudflareBlockUseCase = __decorate([
|
|
43
|
+
(0, common_1.Injectable)(),
|
|
44
|
+
__metadata("design:paramtypes", [normalize_cloudflare_response_use_case_1.NormalizeCloudflareResponseUseCase])
|
|
45
|
+
], CheckCloudflareBlockUseCase);
|
|
46
|
+
//# sourceMappingURL=check-cloudflare-block.use-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-cloudflare-block.use-case.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/use-cases/check-cloudflare-block.use-case.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwD;AAExD,qGAA8F;AAGvF,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAQtC,YACmB,UAA8C;QAA9C,eAAU,GAAV,UAAU,CAAoC;QARhD,eAAU,GAAG,YAAY,CAAC;QAE1B,uBAAkB,GAAG;YACpC,mBAAU,CAAC,SAAS;YACpB,mBAAU,CAAC,mBAAmB;SAC/B,CAAC;IAIC,CAAC;IAEJ,OAAO,CAAC,QAAyB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAEO,MAAM,CAAC,OAA4B;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC;QAEzD,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAChC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;CACF,CAAA;AAjCY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;qCAUoB,2EAAkC;GATtD,2BAA2B,CAiCvC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CrawleeResponse } from '../types/normalize-response.types';
|
|
2
|
+
import { NormalizedResponse } from '../types/normalize-response.types';
|
|
3
|
+
export declare class NormalizeCloudflareResponseUseCase {
|
|
4
|
+
execute(response: CrawleeResponse): NormalizedResponse;
|
|
5
|
+
private isPlaywrightResponse;
|
|
6
|
+
private isPuppeteerResponse;
|
|
7
|
+
private isHttpLikeResponse;
|
|
8
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.NormalizeCloudflareResponseUseCase = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let NormalizeCloudflareResponseUseCase = class NormalizeCloudflareResponseUseCase {
|
|
12
|
+
execute(response) {
|
|
13
|
+
if (this.isPlaywrightResponse(response)) {
|
|
14
|
+
return {
|
|
15
|
+
statusCode: response.status(),
|
|
16
|
+
headers: response.headers(),
|
|
17
|
+
url: response.url(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (this.isPuppeteerResponse(response)) {
|
|
21
|
+
return {
|
|
22
|
+
statusCode: response.status(),
|
|
23
|
+
headers: response.headers(),
|
|
24
|
+
url: response.url(),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (this.isHttpLikeResponse(response)) {
|
|
28
|
+
return {
|
|
29
|
+
statusCode: response.statusCode,
|
|
30
|
+
headers: response.headers,
|
|
31
|
+
url: response.url,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
throw new Error('Unable to normalize response: unknown response type');
|
|
35
|
+
}
|
|
36
|
+
isPlaywrightResponse(response) {
|
|
37
|
+
return response && typeof response.status === 'function';
|
|
38
|
+
}
|
|
39
|
+
isPuppeteerResponse(response) {
|
|
40
|
+
return (response &&
|
|
41
|
+
typeof response.status === 'function' &&
|
|
42
|
+
typeof response.headers === 'function');
|
|
43
|
+
}
|
|
44
|
+
isHttpLikeResponse(response) {
|
|
45
|
+
return (response &&
|
|
46
|
+
typeof response.statusCode === 'number' &&
|
|
47
|
+
typeof response.headers === 'object' &&
|
|
48
|
+
typeof response.url === 'string');
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.NormalizeCloudflareResponseUseCase = NormalizeCloudflareResponseUseCase;
|
|
52
|
+
exports.NormalizeCloudflareResponseUseCase = NormalizeCloudflareResponseUseCase = __decorate([
|
|
53
|
+
(0, common_1.Injectable)()
|
|
54
|
+
], NormalizeCloudflareResponseUseCase);
|
|
55
|
+
//# sourceMappingURL=normalize-cloudflare-response.use-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-cloudflare-response.use-case.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/use-cases/normalize-cloudflare-response.use-case.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAUrC,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAC7C,OAAO,CAAC,QAAyB;QAC/B,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,OAAO;gBACL,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE;gBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;gBAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE;gBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;gBAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;aACpB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,GAAG,EAAE,QAAQ,CAAC,GAAG;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAEO,oBAAoB,CAAC,QAAa;QACxC,OAAO,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC;IAC3D,CAAC;IAEO,mBAAmB,CAAC,QAAa;QACvC,OAAO,CACL,QAAQ;YACR,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;YACrC,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,CACvC,CAAC;IACJ,CAAC;IAEO,kBAAkB,CACxB,QAAa;QAEb,OAAO,CACL,QAAQ;YACR,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;YACvC,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;YACpC,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,CACjC,CAAC;IACJ,CAAC;CACF,CAAA;AAnDY,gFAAkC;6CAAlC,kCAAkC;IAD9C,IAAA,mBAAU,GAAE;GACA,kCAAkC,CAmD9C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FinalStatistics } from 'crawlee';
|
|
2
|
+
export declare class ReportCloudflareUseCase {
|
|
3
|
+
private _blocks;
|
|
4
|
+
private logger;
|
|
5
|
+
constructor();
|
|
6
|
+
execute(stats: FinalStatistics): {
|
|
7
|
+
blocks: number;
|
|
8
|
+
total: number;
|
|
9
|
+
percent: number;
|
|
10
|
+
};
|
|
11
|
+
private reduce;
|
|
12
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ReportCloudflareUseCase = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const logger_1 = require("../../../common/logger/logger");
|
|
15
|
+
const cloudflare_service_1 = require("../cloudflare.service");
|
|
16
|
+
let ReportCloudflareUseCase = class ReportCloudflareUseCase {
|
|
17
|
+
constructor() {
|
|
18
|
+
this._blocks = 0;
|
|
19
|
+
this.logger = new logger_1.Logger(cloudflare_service_1.CloudflareService.name);
|
|
20
|
+
}
|
|
21
|
+
execute(stats) {
|
|
22
|
+
const reducer = this.reduce.bind(this);
|
|
23
|
+
const total = stats.retryHistogram.reduce(reducer, 0);
|
|
24
|
+
const percentValue = (this._blocks / total) * 100;
|
|
25
|
+
const percent = Number(percentValue.toFixed(2));
|
|
26
|
+
const { _blocks: blocks } = this;
|
|
27
|
+
const report = { blocks, total, percent };
|
|
28
|
+
const message = `⚠️ ${report.blocks}/${report.total} → ${report.percent}%`;
|
|
29
|
+
this.logger.warn(message);
|
|
30
|
+
return report;
|
|
31
|
+
}
|
|
32
|
+
reduce(total, count, retries) {
|
|
33
|
+
return total + count * (retries + 1);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.ReportCloudflareUseCase = ReportCloudflareUseCase;
|
|
37
|
+
exports.ReportCloudflareUseCase = ReportCloudflareUseCase = __decorate([
|
|
38
|
+
(0, common_1.Injectable)(),
|
|
39
|
+
__metadata("design:paramtypes", [])
|
|
40
|
+
], ReportCloudflareUseCase);
|
|
41
|
+
//# sourceMappingURL=report-cloudflare.use-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-cloudflare.use-case.js","sourceRoot":"","sources":["../../../../src/modules/cloudflare/use-cases/report-cloudflare.use-case.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAG5C,0DAAuD;AACvD,8DAA0D;AAGnD,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAIlC;QAHQ,YAAO,GAAG,CAAC,CAAC;QACZ,WAAM,GAAG,IAAI,eAAM,CAAC,sCAAiB,CAAC,IAAI,CAAC,CAAC;IAErC,CAAC;IAEhB,OAAO,CAAC,KAAsB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACjC,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,OAAO,GAAG,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,KAAa,EAAE,KAAa,EAAE,OAAe;QAC1D,OAAO,KAAK,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CACF,CAAA;AArBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;;GACA,uBAAuB,CAqBnC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { DelayerSleepService } from './use-cases/delayer-sleeper.service';
|
|
2
2
|
import { DelayerMapService } from './use-cases/delayer-mapper.service';
|
|
3
|
-
import { DelayerConfigService } from './use-cases/delayer-config.service';
|
|
4
3
|
import { DelayRange } from '../../common/types/delay-range';
|
|
5
4
|
export declare class DelayerService {
|
|
6
5
|
private readonly sleeper;
|
|
7
6
|
private readonly mapper;
|
|
8
|
-
|
|
9
|
-
constructor(sleeper: DelayerSleepService, mapper: DelayerMapService, config: DelayerConfigService);
|
|
7
|
+
constructor(sleeper: DelayerSleepService, mapper: DelayerMapService);
|
|
10
8
|
wait(url?: string, min?: number, max?: number): Promise<void>;
|
|
11
9
|
update(statusCode: number): number;
|
|
12
10
|
sleep(min?: number, max?: number): Promise<void>;
|
|
@@ -13,14 +13,12 @@ exports.DelayerService = void 0;
|
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const delayer_sleeper_service_1 = require("./use-cases/delayer-sleeper.service");
|
|
15
15
|
const delayer_mapper_service_1 = require("./use-cases/delayer-mapper.service");
|
|
16
|
-
const delayer_config_service_1 = require("./use-cases/delayer-config.service");
|
|
17
16
|
let DelayerService = class DelayerService {
|
|
18
|
-
constructor(sleeper, mapper
|
|
17
|
+
constructor(sleeper, mapper) {
|
|
19
18
|
this.sleeper = sleeper;
|
|
20
19
|
this.mapper = mapper;
|
|
21
|
-
this.config = config;
|
|
22
20
|
}
|
|
23
|
-
async wait(url, min
|
|
21
|
+
async wait(url, min, max) {
|
|
24
22
|
await this.mapper.wait(url, min, max);
|
|
25
23
|
}
|
|
26
24
|
update(statusCode) {
|
|
@@ -44,7 +42,6 @@ exports.DelayerService = DelayerService;
|
|
|
44
42
|
exports.DelayerService = DelayerService = __decorate([
|
|
45
43
|
(0, common_1.Injectable)(),
|
|
46
44
|
__metadata("design:paramtypes", [delayer_sleeper_service_1.DelayerSleepService,
|
|
47
|
-
delayer_mapper_service_1.DelayerMapService
|
|
48
|
-
delayer_config_service_1.DelayerConfigService])
|
|
45
|
+
delayer_mapper_service_1.DelayerMapService])
|
|
49
46
|
], DelayerService);
|
|
50
47
|
//# sourceMappingURL=delayer.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delayer.service.js","sourceRoot":"","sources":["../../../src/modules/delayer/delayer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,iFAA0E;AAC1E,+EAAuE;
|
|
1
|
+
{"version":3,"file":"delayer.service.js","sourceRoot":"","sources":["../../../src/modules/delayer/delayer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,iFAA0E;AAC1E,+EAAuE;AAIhE,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACmB,OAA4B,EAC5B,MAAyB;QADzB,YAAO,GAAP,OAAO,CAAqB;QAC5B,WAAM,GAAN,MAAM,CAAmB;IACzC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,GAAY,EAAE,GAAY,EAAE,GAAY;QACjD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,UAAkB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAY,EAAE,GAAY;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AA9BY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAGiB,6CAAmB;QACpB,0CAAiB;GAHjC,cAAc,CA8B1B"}
|
package/dist/modules/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * from './cleaner/use-cases/cleaner-dataset.service';
|
|
|
4
4
|
export * from './cleaner/use-cases/cleaner-key-value-store.service';
|
|
5
5
|
export * from './cleaner/use-cases/cleaner-request-queue.service';
|
|
6
6
|
export * from './cleaner/use-cases/cleaner-storage.service';
|
|
7
|
+
export * from './cloudflare/cloudflare.module';
|
|
8
|
+
export * from './cloudflare/cloudflare.service';
|
|
7
9
|
export * from './delayer/env/delay.env.config';
|
|
8
10
|
export * from './delayer/env/delay.env.validation';
|
|
9
11
|
export * from './delayer/delayer.module';
|
package/dist/modules/index.js
CHANGED
|
@@ -20,6 +20,8 @@ __exportStar(require("./cleaner/use-cases/cleaner-dataset.service"), exports);
|
|
|
20
20
|
__exportStar(require("./cleaner/use-cases/cleaner-key-value-store.service"), exports);
|
|
21
21
|
__exportStar(require("./cleaner/use-cases/cleaner-request-queue.service"), exports);
|
|
22
22
|
__exportStar(require("./cleaner/use-cases/cleaner-storage.service"), exports);
|
|
23
|
+
__exportStar(require("./cloudflare/cloudflare.module"), exports);
|
|
24
|
+
__exportStar(require("./cloudflare/cloudflare.service"), exports);
|
|
23
25
|
__exportStar(require("./delayer/env/delay.env.config"), exports);
|
|
24
26
|
__exportStar(require("./delayer/env/delay.env.validation"), exports);
|
|
25
27
|
__exportStar(require("./delayer/delayer.module"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,4DAA0C;AAC1C,8EAA4D;AAC5D,sFAAoE;AACpE,oFAAkE;AAClE,8EAA4D;AAE5D,iEAA+C;AAC/C,qEAAmD;AACnD,2DAAyC;AACzC,4DAA0C;AAC1C,6EAA2D;AAC3D,6EAA2D;AAC3D,8EAA4D;AAE5D,uDAAqC;AACrC,wDAAsC;AACtC,+DAA6C;AAC7C,mEAAiD;AAEjD,+DAA6C;AAC7C,gEAA8C;AAE9C,+DAA6C;AAC7C,gEAA8C;AAE9C,qEAAmD;AACnD,yEAAuD;AACvD,6DAA2C;AAC3C,8DAA4C;AAE5C,iEAA+C;AAC/C,kEAAgD;AAEhD,2DAAyC;AACzC,4DAA0C;AAE1C,qEAAmD;AACnD,yEAAuD;AACvD,6DAA2C;AAC3C,8DAA4C;AAE5C,6DAA2C;AAC3C,8DAA4C;AAE5C,uEAAqD;AACrD,2EAAyD;AACzD,+DAA6C;AAC7C,gEAA8C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,4DAA0C;AAC1C,8EAA4D;AAC5D,sFAAoE;AACpE,oFAAkE;AAClE,8EAA4D;AAE5D,iEAA+C;AAC/C,kEAAgD;AAEhD,iEAA+C;AAC/C,qEAAmD;AACnD,2DAAyC;AACzC,4DAA0C;AAC1C,6EAA2D;AAC3D,6EAA2D;AAC3D,8EAA4D;AAE5D,uDAAqC;AACrC,wDAAsC;AACtC,+DAA6C;AAC7C,mEAAiD;AAEjD,+DAA6C;AAC7C,gEAA8C;AAE9C,+DAA6C;AAC7C,gEAA8C;AAE9C,qEAAmD;AACnD,yEAAuD;AACvD,6DAA2C;AAC3C,8DAA4C;AAE5C,iEAA+C;AAC/C,kEAAgD;AAEhD,2DAAyC;AACzC,4DAA0C;AAE1C,qEAAmD;AACnD,yEAAuD;AACvD,6DAA2C;AAC3C,8DAA4C;AAE5C,6DAA2C;AAC3C,8DAA4C;AAE5C,uEAAqD;AACrD,2EAAyD;AACzD,+DAA6C;AAC7C,gEAA8C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rafikidota/cuba-ofertas-scraping",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "Sometimes, the best way to solve your own problems is to help someone else.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@aws-sdk/client-s3": "3.990.0",
|
|
19
19
|
"@aws-sdk/s3-request-presigner": "3.990.0",
|
|
20
|
+
"@crawlee/cheerio": "3.16.0",
|
|
21
|
+
"@crawlee/playwright": "3.16.0",
|
|
20
22
|
"@eslint/eslintrc": "3.3.3",
|
|
21
23
|
"@eslint/js": "9.39.2",
|
|
22
24
|
"@nestjs/axios": "4.0.1",
|
|
@@ -32,6 +34,7 @@
|
|
|
32
34
|
"@typescript-eslint/parser": "8.55.0",
|
|
33
35
|
"archiver": "7.0.1",
|
|
34
36
|
"axios": "1.13.5",
|
|
37
|
+
"cheerio": "1.2.0",
|
|
35
38
|
"crawlee": "3.16.0",
|
|
36
39
|
"dotenv": "17.3.1",
|
|
37
40
|
"eslint": "9.39.2",
|