scrapfly-sdk 0.7.1 → 0.7.3

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/esm/main.d.ts CHANGED
@@ -6,4 +6,5 @@ export * as errors from './errors.js';
6
6
  export { ExtractionResult, ScrapeResult, ScreenshotResult } from './result.js';
7
7
  export type { AccountData, ConfigData, ContextData, ResultData, ScreenshotMetadata } from './result.js';
8
8
  export { log } from './logger.js';
9
+ export { createServer, verifySignature } from './webhookserver.js';
9
10
  //# sourceMappingURL=main.d.ts.map
package/esm/main.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,mBAAmB,EACnC,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,OAAO,IAAI,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,mBAAmB,EACnC,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,OAAO,IAAI,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
package/esm/main.js CHANGED
@@ -5,3 +5,4 @@ export { ExtractionConfig } from './extractionconfig.js';
5
5
  export * as errors from './errors.js';
6
6
  export { ExtractionResult, ScrapeResult, ScreenshotResult } from './result.js';
7
7
  export { log } from './logger.js';
8
+ export { createServer, verifySignature } from './webhookserver.js';
@@ -0,0 +1,8 @@
1
+ import { Buffer } from 'node:buffer';
2
+ export declare enum ResourceType {
3
+ SCRAPE = "scrape",
4
+ PING = "ping"
5
+ }
6
+ export declare function verifySignature(body: Buffer, signature: string, signingSecret: string): boolean;
7
+ export declare function createServer(callback: (data: any, resourceType: string, request: any) => void, app?: any): Promise<any>;
8
+ //# sourceMappingURL=webhookserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookserver.d.ts","sourceRoot":"","sources":["../src/webhookserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAM/F;AAGD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,EACjE,GAAG,CAAC,EAAE,GAAG,GACR,OAAO,CAAC,GAAG,CAAC,CA4Cd"}
@@ -0,0 +1,56 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import crypto from 'node:crypto';
3
+ import { log } from './logger.js';
4
+ export var ResourceType;
5
+ (function (ResourceType) {
6
+ ResourceType["SCRAPE"] = "scrape";
7
+ ResourceType["PING"] = "ping";
8
+ })(ResourceType || (ResourceType = {}));
9
+ export function verifySignature(body, signature, signingSecret) {
10
+ const secret = Buffer.from(signingSecret, 'hex');
11
+ const hmac = crypto.createHmac('sha256', secret);
12
+ hmac.update(body);
13
+ const computed = hmac.digest('hex').toUpperCase();
14
+ return computed === signature;
15
+ }
16
+ export async function createServer(callback, app) {
17
+ let express;
18
+ try {
19
+ const expressModule = await import('express');
20
+ express = expressModule.default || expressModule;
21
+ }
22
+ catch (e) {
23
+ throw new Error('express is not installed, please install it with `npm install express`');
24
+ }
25
+ if (!app) {
26
+ app = express();
27
+ }
28
+ const jsonMiddleware = express.json({
29
+ verify: (req, _res, buf) => {
30
+ req.rawBody = buf;
31
+ },
32
+ });
33
+ app.post('/webhook', jsonMiddleware, (req, res) => {
34
+ try {
35
+ const resourceType = req.headers['x-scrapfly-webhook-resource-type'];
36
+ if (resourceType !== 'scrape' && resourceType !== 'ping') {
37
+ log.error(`Unsupported resource type: ${resourceType}`);
38
+ return res.status(400).send(`this webhook server only supports scrape and ping calls`);
39
+ }
40
+ const data = req.body;
41
+ try {
42
+ callback(data, resourceType, req);
43
+ res.status(200).send('');
44
+ }
45
+ catch (e) {
46
+ log.error('Callback error:', e);
47
+ res.status(500).send('');
48
+ }
49
+ }
50
+ catch (e) {
51
+ log.error('Webhook processing error:', e);
52
+ res.status(400).send('');
53
+ }
54
+ });
55
+ return app;
56
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrapfly-sdk",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "SDK for Scrapfly.io API for web scraping, screenshotting and data extraction",
5
5
  "keywords": [
6
6
  "web scraping",
@@ -32,7 +32,8 @@
32
32
  "@deno/shim-deno": "~0.18.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@types/node": "^20.9.0"
35
+ "@types/node": "^20.9.0",
36
+ "@types/express": "^4.17.21"
36
37
  },
37
38
  "_generatedBy": "dnt@dev"
38
39
  }
package/script/main.d.ts CHANGED
@@ -6,4 +6,5 @@ export * as errors from './errors.js';
6
6
  export { ExtractionResult, ScrapeResult, ScreenshotResult } from './result.js';
7
7
  export type { AccountData, ConfigData, ContextData, ResultData, ScreenshotMetadata } from './result.js';
8
8
  export { log } from './logger.js';
9
+ export { createServer, verifySignature } from './webhookserver.js';
9
10
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,mBAAmB,EACnC,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,OAAO,IAAI,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,mBAAmB,EACnC,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,OAAO,IAAI,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
package/script/main.js CHANGED
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.log = exports.ScreenshotResult = exports.ScrapeResult = exports.ExtractionResult = exports.errors = exports.ExtractionConfig = exports.ScreenshotConfig = exports.ScreenshotOptions = exports.ScreenshotFormat = exports.ScreenshotFlags = exports.ScrapeConfig = exports.ScrapeFormatOptions = exports.ScrapeFormat = exports.ScrapflyClient = void 0;
26
+ exports.verifySignature = exports.createServer = exports.log = exports.ScreenshotResult = exports.ScrapeResult = exports.ExtractionResult = exports.errors = exports.ExtractionConfig = exports.ScreenshotConfig = exports.ScreenshotOptions = exports.ScreenshotFormat = exports.ScreenshotFlags = exports.ScrapeConfig = exports.ScrapeFormatOptions = exports.ScrapeFormat = exports.ScrapflyClient = void 0;
27
27
  var client_js_1 = require("./client.js");
28
28
  Object.defineProperty(exports, "ScrapflyClient", { enumerable: true, get: function () { return client_js_1.ScrapflyClient; } });
29
29
  var scrapeconfig_js_1 = require("./scrapeconfig.js");
@@ -44,3 +44,6 @@ Object.defineProperty(exports, "ScrapeResult", { enumerable: true, get: function
44
44
  Object.defineProperty(exports, "ScreenshotResult", { enumerable: true, get: function () { return result_js_1.ScreenshotResult; } });
45
45
  var logger_js_1 = require("./logger.js");
46
46
  Object.defineProperty(exports, "log", { enumerable: true, get: function () { return logger_js_1.log; } });
47
+ var webhookserver_js_1 = require("./webhookserver.js");
48
+ Object.defineProperty(exports, "createServer", { enumerable: true, get: function () { return webhookserver_js_1.createServer; } });
49
+ Object.defineProperty(exports, "verifySignature", { enumerable: true, get: function () { return webhookserver_js_1.verifySignature; } });
@@ -0,0 +1,8 @@
1
+ import { Buffer } from 'node:buffer';
2
+ export declare enum ResourceType {
3
+ SCRAPE = "scrape",
4
+ PING = "ping"
5
+ }
6
+ export declare function verifySignature(body: Buffer, signature: string, signingSecret: string): boolean;
7
+ export declare function createServer(callback: (data: any, resourceType: string, request: any) => void, app?: any): Promise<any>;
8
+ //# sourceMappingURL=webhookserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookserver.d.ts","sourceRoot":"","sources":["../src/webhookserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAM/F;AAGD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,EACjE,GAAG,CAAC,EAAE,GAAG,GACR,OAAO,CAAC,GAAG,CAAC,CA4Cd"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ResourceType = void 0;
30
+ exports.verifySignature = verifySignature;
31
+ exports.createServer = createServer;
32
+ const node_buffer_1 = require("node:buffer");
33
+ const node_crypto_1 = __importDefault(require("node:crypto"));
34
+ const logger_js_1 = require("./logger.js");
35
+ var ResourceType;
36
+ (function (ResourceType) {
37
+ ResourceType["SCRAPE"] = "scrape";
38
+ ResourceType["PING"] = "ping";
39
+ })(ResourceType || (exports.ResourceType = ResourceType = {}));
40
+ function verifySignature(body, signature, signingSecret) {
41
+ const secret = node_buffer_1.Buffer.from(signingSecret, 'hex');
42
+ const hmac = node_crypto_1.default.createHmac('sha256', secret);
43
+ hmac.update(body);
44
+ const computed = hmac.digest('hex').toUpperCase();
45
+ return computed === signature;
46
+ }
47
+ async function createServer(callback, app) {
48
+ let express;
49
+ try {
50
+ const expressModule = await Promise.resolve().then(() => __importStar(require('express')));
51
+ express = expressModule.default || expressModule;
52
+ }
53
+ catch (e) {
54
+ throw new Error('express is not installed, please install it with `npm install express`');
55
+ }
56
+ if (!app) {
57
+ app = express();
58
+ }
59
+ const jsonMiddleware = express.json({
60
+ verify: (req, _res, buf) => {
61
+ req.rawBody = buf;
62
+ },
63
+ });
64
+ app.post('/webhook', jsonMiddleware, (req, res) => {
65
+ try {
66
+ const resourceType = req.headers['x-scrapfly-webhook-resource-type'];
67
+ if (resourceType !== 'scrape' && resourceType !== 'ping') {
68
+ logger_js_1.log.error(`Unsupported resource type: ${resourceType}`);
69
+ return res.status(400).send(`this webhook server only supports scrape and ping calls`);
70
+ }
71
+ const data = req.body;
72
+ try {
73
+ callback(data, resourceType, req);
74
+ res.status(200).send('');
75
+ }
76
+ catch (e) {
77
+ logger_js_1.log.error('Callback error:', e);
78
+ res.status(500).send('');
79
+ }
80
+ }
81
+ catch (e) {
82
+ logger_js_1.log.error('Webhook processing error:', e);
83
+ res.status(400).send('');
84
+ }
85
+ });
86
+ return app;
87
+ }