wreq-js 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/dist/test/http.spec.js +30 -30
- package/dist/test/http.spec.js.map +1 -1
- package/dist/test/websocket.spec.js +45 -45
- package/dist/test/websocket.spec.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/wreq-js.d.ts +7 -5
- package/dist/wreq-js.d.ts.map +1 -1
- package/dist/wreq-js.js +43 -26
- package/dist/wreq-js.js.map +1 -1
- package/package.json +19 -21
- package/rust/wreq-js.darwin-arm64.node +0 -0
- package/rust/wreq-js.darwin-x64.node +0 -0
- package/rust/wreq-js.linux-arm64-gnu.node +0 -0
- package/rust/wreq-js.linux-x64-gnu.node +0 -0
- package/rust/wreq-js.win32-x64-msvc.node +0 -0
package/dist/test/http.spec.js
CHANGED
|
@@ -3,61 +3,61 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_test_1 = require("node:test");
|
|
7
6
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
8
|
const wreq_js_1 = require("../wreq-js");
|
|
9
|
-
(0, node_test_1.describe)(
|
|
9
|
+
(0, node_test_1.describe)("HTTP", () => {
|
|
10
10
|
(0, node_test_1.before)(() => {
|
|
11
|
-
console.log(
|
|
11
|
+
console.log("🔌 HTTP Test Suite\n");
|
|
12
12
|
});
|
|
13
|
-
(0, node_test_1.test)(
|
|
13
|
+
(0, node_test_1.test)("should return available browser profiles", () => {
|
|
14
14
|
const profiles = (0, wreq_js_1.getProfiles)();
|
|
15
|
-
node_assert_1.default.ok(Array.isArray(profiles),
|
|
16
|
-
node_assert_1.default.ok(profiles.length > 0,
|
|
17
|
-
node_assert_1.default.ok(profiles.some((p) => p.includes(
|
|
18
|
-
profiles.some((p) => p.includes(
|
|
19
|
-
profiles.some((p) => p.includes(
|
|
20
|
-
console.log(
|
|
15
|
+
node_assert_1.default.ok(Array.isArray(profiles), "Profiles should be an array");
|
|
16
|
+
node_assert_1.default.ok(profiles.length > 0, "Should have at least one profile");
|
|
17
|
+
node_assert_1.default.ok(profiles.some((p) => p.includes("chrome")) ||
|
|
18
|
+
profiles.some((p) => p.includes("firefox")) ||
|
|
19
|
+
profiles.some((p) => p.includes("safari")), "Should include standard browser profiles");
|
|
20
|
+
console.log("Available profiles:", profiles.join(", "));
|
|
21
21
|
});
|
|
22
|
-
(0, node_test_1.test)(
|
|
22
|
+
(0, node_test_1.test)("should make a simple GET request", async () => {
|
|
23
23
|
const response = await (0, wreq_js_1.request)({
|
|
24
|
-
url:
|
|
25
|
-
browser:
|
|
24
|
+
url: "https://httpbingo.org/get",
|
|
25
|
+
browser: "chrome_131",
|
|
26
26
|
timeout: 10000,
|
|
27
27
|
});
|
|
28
|
-
node_assert_1.default.ok(response.status >= 200 && response.status < 300,
|
|
29
|
-
node_assert_1.default.ok(Object.keys(response.headers).length > 0,
|
|
30
|
-
node_assert_1.default.ok(response.body.length > 0,
|
|
28
|
+
node_assert_1.default.ok(response.status >= 200 && response.status < 300, "Should return successful status");
|
|
29
|
+
node_assert_1.default.ok(Object.keys(response.headers).length > 0, "Should have response headers");
|
|
30
|
+
node_assert_1.default.ok(response.body.length > 0, "Should have response body");
|
|
31
31
|
const body = JSON.parse(response.body);
|
|
32
|
-
node_assert_1.default.ok(body.headers[
|
|
33
|
-
console.log(
|
|
34
|
-
console.log(
|
|
32
|
+
node_assert_1.default.ok(body.headers["User-Agent"], "Should have User-Agent header");
|
|
33
|
+
console.log("Status:", response.status);
|
|
34
|
+
console.log("User-Agent:", body.headers["User-Agent"]);
|
|
35
35
|
});
|
|
36
|
-
(0, node_test_1.test)(
|
|
37
|
-
const testUrl =
|
|
38
|
-
const browsers = [
|
|
36
|
+
(0, node_test_1.test)("should work with different browser profiles", async () => {
|
|
37
|
+
const testUrl = "https://httpbingo.org/user-agent";
|
|
38
|
+
const browsers = ["chrome_137", "firefox_139", "safari_18"];
|
|
39
39
|
for (const browser of browsers) {
|
|
40
40
|
const response = await (0, wreq_js_1.request)({
|
|
41
41
|
url: testUrl,
|
|
42
|
-
browser
|
|
42
|
+
browser,
|
|
43
43
|
timeout: 10000,
|
|
44
44
|
});
|
|
45
45
|
node_assert_1.default.ok(response.status === 200, `${browser} should return status 200`);
|
|
46
46
|
const data = JSON.parse(response.body);
|
|
47
|
-
node_assert_1.default.ok(data[
|
|
48
|
-
console.log(`${browser}:`, data[
|
|
47
|
+
node_assert_1.default.ok(data["user-agent"], `${browser} should have user-agent`);
|
|
48
|
+
console.log(`${browser}:`, `${data["user-agent"].substring(0, 70)}...`);
|
|
49
49
|
}
|
|
50
50
|
});
|
|
51
|
-
(0, node_test_1.test)(
|
|
51
|
+
(0, node_test_1.test)("should handle timeout errors", async () => {
|
|
52
52
|
await node_assert_1.default.rejects(async () => {
|
|
53
53
|
await (0, wreq_js_1.request)({
|
|
54
|
-
url:
|
|
55
|
-
browser:
|
|
54
|
+
url: "https://httpbingo.org/delay/10",
|
|
55
|
+
browser: "chrome_137",
|
|
56
56
|
timeout: 1000, // 1 second timeout for 10 second delay
|
|
57
57
|
});
|
|
58
58
|
}, {
|
|
59
|
-
name:
|
|
60
|
-
},
|
|
59
|
+
name: "RequestError",
|
|
60
|
+
}, "Should throw an error on timeout");
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
//# sourceMappingURL=http.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../src/test/http.spec.ts"],"names":[],"mappings":";;;;;AAAA,yCAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../src/test/http.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,20 +3,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_test_1 = require("node:test");
|
|
7
6
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_test_1 = require("node:test");
|
|
8
8
|
const promises_1 = require("node:timers/promises");
|
|
9
9
|
const wreq_js_1 = require("../wreq-js");
|
|
10
|
-
(0, node_test_1.describe)(
|
|
10
|
+
(0, node_test_1.describe)("WebSocket", () => {
|
|
11
11
|
(0, node_test_1.before)(() => {
|
|
12
|
-
console.log(
|
|
12
|
+
console.log("🔌 WebSocket Test Suite\n");
|
|
13
13
|
});
|
|
14
|
-
(0, node_test_1.test)(
|
|
14
|
+
(0, node_test_1.test)("should connect to WebSocket and send/receive messages", async () => {
|
|
15
15
|
const messages = [];
|
|
16
16
|
let isClosed = false;
|
|
17
17
|
const ws = await (0, wreq_js_1.websocket)({
|
|
18
|
-
url:
|
|
19
|
-
browser:
|
|
18
|
+
url: "wss://echo.websocket.org",
|
|
19
|
+
browser: "chrome_137",
|
|
20
20
|
onMessage: (data) => {
|
|
21
21
|
messages.push(data);
|
|
22
22
|
},
|
|
@@ -24,97 +24,97 @@ const wreq_js_1 = require("../wreq-js");
|
|
|
24
24
|
isClosed = true;
|
|
25
25
|
},
|
|
26
26
|
onError: (error) => {
|
|
27
|
-
console.error(
|
|
27
|
+
console.error("WebSocket error:", error);
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
|
-
console.log(
|
|
31
|
-
await ws.send(
|
|
30
|
+
console.log("WebSocket connected");
|
|
31
|
+
await ws.send("Hello!");
|
|
32
32
|
// Wait for echo response
|
|
33
33
|
await (0, promises_1.setTimeout)(1000);
|
|
34
|
-
node_assert_1.default.ok(messages.length > 0,
|
|
34
|
+
node_assert_1.default.ok(messages.length > 0, "Should receive at least one message");
|
|
35
35
|
// Wait a bit for close callback
|
|
36
36
|
await ws.close();
|
|
37
|
-
await (0, promises_1.setTimeout)(
|
|
38
|
-
node_assert_1.default.ok(isClosed,
|
|
37
|
+
await (0, promises_1.setTimeout)(10000);
|
|
38
|
+
node_assert_1.default.ok(isClosed, "Should receive close event");
|
|
39
39
|
// Rate limit protection: wait before next test
|
|
40
40
|
await (0, promises_1.setTimeout)(2000);
|
|
41
41
|
});
|
|
42
|
-
(0, node_test_1.test)(
|
|
42
|
+
(0, node_test_1.test)("should handle parallel sends on same WebSocket", async () => {
|
|
43
43
|
const messages = [];
|
|
44
|
-
const expectedMessages = [
|
|
44
|
+
const expectedMessages = ["Message 1", "Message 2", "Message 3", "Message 4", "Message 5"];
|
|
45
45
|
const ws = await (0, wreq_js_1.websocket)({
|
|
46
|
-
url:
|
|
47
|
-
browser:
|
|
46
|
+
url: "wss://echo.websocket.org",
|
|
47
|
+
browser: "chrome_137",
|
|
48
48
|
onMessage: (data) => {
|
|
49
49
|
messages.push(data);
|
|
50
50
|
},
|
|
51
51
|
onClose: () => { },
|
|
52
52
|
onError: (error) => {
|
|
53
|
-
console.error(
|
|
53
|
+
console.error("WebSocket error:", error);
|
|
54
54
|
},
|
|
55
55
|
});
|
|
56
|
-
console.log(
|
|
56
|
+
console.log("Testing parallel sends...");
|
|
57
57
|
// Send multiple messages in parallel
|
|
58
58
|
await Promise.all([
|
|
59
|
-
ws.send(
|
|
60
|
-
ws.send(
|
|
61
|
-
ws.send(
|
|
62
|
-
ws.send(
|
|
63
|
-
ws.send(
|
|
59
|
+
ws.send("Message 1"),
|
|
60
|
+
ws.send("Message 2"),
|
|
61
|
+
ws.send("Message 3"),
|
|
62
|
+
ws.send("Message 4"),
|
|
63
|
+
ws.send("Message 5"),
|
|
64
64
|
]);
|
|
65
|
-
console.log(
|
|
65
|
+
console.log("All messages sent in parallel");
|
|
66
66
|
// Wait for echo responses
|
|
67
67
|
await (0, promises_1.setTimeout)(2000);
|
|
68
|
-
node_assert_1.default.ok(messages.length >= 5,
|
|
68
|
+
node_assert_1.default.ok(messages.length >= 5, "Should receive at least 5 messages");
|
|
69
69
|
// Verify that all expected messages were received (order may vary)
|
|
70
70
|
const receivedStrings = messages.map((m) => (Buffer.isBuffer(m) ? m.toString() : m));
|
|
71
71
|
for (const expected of expectedMessages) {
|
|
72
|
-
node_assert_1.default.ok(receivedStrings.includes(expected), `Should receive message: "${expected}". Got: ${receivedStrings.join(
|
|
72
|
+
node_assert_1.default.ok(receivedStrings.includes(expected), `Should receive message: "${expected}". Got: ${receivedStrings.join(", ")}`);
|
|
73
73
|
}
|
|
74
|
-
console.log(
|
|
74
|
+
console.log("All messages received correctly:", receivedStrings.join(", "));
|
|
75
75
|
await ws.close();
|
|
76
76
|
// Rate limit protection: wait before next test
|
|
77
77
|
await (0, promises_1.setTimeout)(2000);
|
|
78
78
|
});
|
|
79
|
-
(0, node_test_1.test)(
|
|
79
|
+
(0, node_test_1.test)("should handle multiple WebSocket connections simultaneously", async () => {
|
|
80
80
|
const ws1Messages = [];
|
|
81
81
|
const ws2Messages = [];
|
|
82
82
|
// Create two WebSocket connections in parallel
|
|
83
83
|
const [ws1, ws2] = await Promise.all([
|
|
84
84
|
(0, wreq_js_1.websocket)({
|
|
85
|
-
url:
|
|
86
|
-
browser:
|
|
85
|
+
url: "wss://echo.websocket.org",
|
|
86
|
+
browser: "chrome_137",
|
|
87
87
|
onMessage: (data) => ws1Messages.push(data),
|
|
88
88
|
onClose: () => { },
|
|
89
89
|
onError: () => { },
|
|
90
90
|
}),
|
|
91
91
|
(0, wreq_js_1.websocket)({
|
|
92
|
-
url:
|
|
93
|
-
browser:
|
|
92
|
+
url: "wss://echo.websocket.org",
|
|
93
|
+
browser: "firefox_139",
|
|
94
94
|
onMessage: (data) => ws2Messages.push(data),
|
|
95
95
|
onClose: () => { },
|
|
96
96
|
onError: () => { },
|
|
97
97
|
}),
|
|
98
98
|
]);
|
|
99
|
-
console.log(
|
|
99
|
+
console.log("WebSocket connections created");
|
|
100
100
|
// Send unique messages on both connections in parallel
|
|
101
|
-
await Promise.all([ws1.send(
|
|
102
|
-
// Wait for responses
|
|
103
|
-
await (0, promises_1.setTimeout)(
|
|
104
|
-
node_assert_1.default.ok(ws1Messages.length > 0,
|
|
105
|
-
node_assert_1.default.ok(ws2Messages.length > 0,
|
|
101
|
+
await Promise.all([ws1.send("From WS1"), ws2.send("From WS2")]);
|
|
102
|
+
// Wait for responses (long timeout for CI)
|
|
103
|
+
await (0, promises_1.setTimeout)(5000);
|
|
104
|
+
node_assert_1.default.ok(ws1Messages.length > 0, "WS1 should receive messages");
|
|
105
|
+
node_assert_1.default.ok(ws2Messages.length > 0, "WS2 should receive messages");
|
|
106
106
|
// Verify that each connection received the correct message (not mixed up)
|
|
107
107
|
// Note: echo.websocket.org sends a "Request served by..." message first, then echoes
|
|
108
108
|
const ws1Strings = ws1Messages.map((m) => (Buffer.isBuffer(m) ? m.toString() : m));
|
|
109
109
|
const ws2Strings = ws2Messages.map((m) => (Buffer.isBuffer(m) ? m.toString() : m));
|
|
110
|
-
node_assert_1.default.ok(ws1Strings.includes(
|
|
111
|
-
node_assert_1.default.ok(ws2Strings.includes(
|
|
110
|
+
node_assert_1.default.ok(ws1Strings.includes("From WS1"), "WS1 should receive its own message");
|
|
111
|
+
node_assert_1.default.ok(ws2Strings.includes("From WS2"), "WS2 should receive its own message");
|
|
112
112
|
// Verify messages are not mixed up between connections
|
|
113
|
-
node_assert_1.default.ok(!ws1Strings.includes(
|
|
114
|
-
node_assert_1.default.ok(!ws2Strings.includes(
|
|
115
|
-
console.log(
|
|
116
|
-
console.log(
|
|
117
|
-
console.log(
|
|
113
|
+
node_assert_1.default.ok(!ws1Strings.includes("From WS2"), "WS1 should NOT receive WS2 message");
|
|
114
|
+
node_assert_1.default.ok(!ws2Strings.includes("From WS1"), "WS2 should NOT receive WS1 message");
|
|
115
|
+
console.log("Messages correctly isolated between connections:");
|
|
116
|
+
console.log(" WS1:", ws1Strings);
|
|
117
|
+
console.log(" WS2:", ws2Strings);
|
|
118
118
|
// Close both connections
|
|
119
119
|
await Promise.all([ws1.close(), ws2.close()]);
|
|
120
120
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.spec.js","sourceRoot":"","sources":["../../src/test/websocket.spec.ts"],"names":[],"mappings":";;;;;AAAA,yCAAmD;AACnD,
|
|
1
|
+
{"version":3,"file":"websocket.spec.js","sourceRoot":"","sources":["../../src/test/websocket.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { BrowserProfile } from
|
|
1
|
+
import type { BrowserProfile } from "./generated-types";
|
|
2
2
|
export type { BrowserProfile };
|
|
3
3
|
/**
|
|
4
4
|
* HTTP method types
|
|
5
5
|
*/
|
|
6
|
-
export type HttpMethod =
|
|
6
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD";
|
|
7
7
|
/**
|
|
8
8
|
* Request options for making HTTP requests with browser impersonation
|
|
9
9
|
*/
|
package/dist/types.js
CHANGED
package/dist/wreq-js.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { RequestError } from
|
|
1
|
+
import type { BrowserProfile, NativeWebSocketConnection, RequestOptions, Response, WebSocketOptions } from "./types";
|
|
2
|
+
import { RequestError } from "./types";
|
|
3
3
|
/**
|
|
4
4
|
* Make an HTTP request with browser impersonation
|
|
5
5
|
*
|
|
@@ -51,7 +51,7 @@ export declare function getProfiles(): BrowserProfile[];
|
|
|
51
51
|
* const response = await get('https://example.com/api');
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
|
-
export declare function get(url: string, options?: Omit<RequestOptions,
|
|
54
|
+
export declare function get(url: string, options?: Omit<RequestOptions, "url" | "method">): Promise<Response>;
|
|
55
55
|
/**
|
|
56
56
|
* Convenience function for POST requests
|
|
57
57
|
*
|
|
@@ -71,7 +71,7 @@ export declare function get(url: string, options?: Omit<RequestOptions, 'url' |
|
|
|
71
71
|
* );
|
|
72
72
|
* ```
|
|
73
73
|
*/
|
|
74
|
-
export declare function post(url: string, body?: string, options?: Omit<RequestOptions,
|
|
74
|
+
export declare function post(url: string, body?: string, options?: Omit<RequestOptions, "url" | "method" | "body">): Promise<Response>;
|
|
75
75
|
/**
|
|
76
76
|
* WebSocket connection class
|
|
77
77
|
*
|
|
@@ -105,6 +105,8 @@ export declare function post(url: string, body?: string, options?: Omit<RequestO
|
|
|
105
105
|
*/
|
|
106
106
|
export declare class WebSocket {
|
|
107
107
|
private _connection;
|
|
108
|
+
private _finalizerToken;
|
|
109
|
+
private _closed;
|
|
108
110
|
constructor(connection: NativeWebSocketConnection);
|
|
109
111
|
/**
|
|
110
112
|
* Send a message (text or binary)
|
|
@@ -122,7 +124,7 @@ export declare class WebSocket {
|
|
|
122
124
|
* @returns Promise that resolves to the WebSocket instance
|
|
123
125
|
*/
|
|
124
126
|
export declare function websocket(options: WebSocketOptions): Promise<WebSocket>;
|
|
125
|
-
export type {
|
|
127
|
+
export type { BrowserProfile, HttpMethod, RequestOptions, Response, WebSocketOptions, } from "./types";
|
|
126
128
|
export type { RequestError };
|
|
127
129
|
declare const _default: {
|
|
128
130
|
request: typeof request;
|
package/dist/wreq-js.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wreq-js.d.ts","sourceRoot":"","sources":["../src/wreq-js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wreq-js.d.ts","sourceRoot":"","sources":["../src/wreq-js.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA+EvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAM9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAE1G;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,GACxD,OAAO,CAAC,QAAQ,CAAC,CAEnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,yBAAyB;IASjD;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB7B;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgC7E;AAED,YAAY,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,QAAQ,EACR,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,YAAY,EAAE,CAAC;;;;;;;;;AAE7B,wBAOE"}
|
package/dist/wreq-js.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.post = post;
|
|
|
8
8
|
exports.websocket = websocket;
|
|
9
9
|
const types_1 = require("./types");
|
|
10
10
|
let nativeBinding;
|
|
11
|
+
let cachedProfiles;
|
|
11
12
|
function loadNativeBinding() {
|
|
12
13
|
const platform = process.platform;
|
|
13
14
|
const arch = process.arch;
|
|
@@ -15,15 +16,15 @@ function loadNativeBinding() {
|
|
|
15
16
|
// napi-rs creates files like: wreq-js.linux-x64-gnu.node
|
|
16
17
|
const platformArchMap = {
|
|
17
18
|
darwin: {
|
|
18
|
-
x64:
|
|
19
|
-
arm64:
|
|
19
|
+
x64: "darwin-x64",
|
|
20
|
+
arm64: "darwin-arm64",
|
|
20
21
|
},
|
|
21
22
|
linux: {
|
|
22
|
-
x64:
|
|
23
|
-
arm64:
|
|
23
|
+
x64: "linux-x64-gnu",
|
|
24
|
+
arm64: "linux-arm64-gnu",
|
|
24
25
|
},
|
|
25
26
|
win32: {
|
|
26
|
-
x64:
|
|
27
|
+
x64: "win32-x64-msvc",
|
|
27
28
|
},
|
|
28
29
|
};
|
|
29
30
|
const platformArch = platformArchMap[platform]?.[arch];
|
|
@@ -36,24 +37,24 @@ function loadNativeBinding() {
|
|
|
36
37
|
try {
|
|
37
38
|
return require(`../rust/${binaryName}`);
|
|
38
39
|
}
|
|
39
|
-
catch
|
|
40
|
+
catch {
|
|
40
41
|
// Fallback to wreq-js.node (for local development)
|
|
41
42
|
try {
|
|
42
|
-
return require(
|
|
43
|
+
return require("../rust/wreq-js.node");
|
|
43
44
|
}
|
|
44
|
-
catch
|
|
45
|
+
catch {
|
|
45
46
|
throw new Error(`Failed to load native module for ${platform}-${arch}. ` +
|
|
46
47
|
`Tried: ../rust/${binaryName} and ../rust/wreq-js.node. ` +
|
|
47
48
|
`Make sure the package is installed correctly and the native module is built for your platform.`);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
nativeBinding = loadNativeBinding();
|
|
53
|
+
const websocketFinalizer = typeof FinalizationRegistry === "function"
|
|
54
|
+
? new FinalizationRegistry((connection) => {
|
|
55
|
+
void nativeBinding.websocketClose(connection).catch(() => undefined);
|
|
56
|
+
})
|
|
57
|
+
: undefined;
|
|
57
58
|
/**
|
|
58
59
|
* Make an HTTP request with browser impersonation
|
|
59
60
|
*
|
|
@@ -78,12 +79,12 @@ catch (error) {
|
|
|
78
79
|
*/
|
|
79
80
|
async function request(options) {
|
|
80
81
|
if (!options.url) {
|
|
81
|
-
throw new types_1.RequestError(
|
|
82
|
+
throw new types_1.RequestError("URL is required");
|
|
82
83
|
}
|
|
83
84
|
if (options.browser) {
|
|
84
85
|
const profiles = getProfiles();
|
|
85
86
|
if (!profiles.includes(options.browser)) {
|
|
86
|
-
throw new types_1.RequestError(`Invalid browser profile: ${options.browser}. Available profiles: ${profiles.join(
|
|
87
|
+
throw new types_1.RequestError(`Invalid browser profile: ${options.browser}. Available profiles: ${profiles.join(", ")}`);
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
try {
|
|
@@ -107,7 +108,10 @@ async function request(options) {
|
|
|
107
108
|
* ```
|
|
108
109
|
*/
|
|
109
110
|
function getProfiles() {
|
|
110
|
-
|
|
111
|
+
if (!cachedProfiles) {
|
|
112
|
+
cachedProfiles = nativeBinding.getProfiles();
|
|
113
|
+
}
|
|
114
|
+
return cachedProfiles;
|
|
111
115
|
}
|
|
112
116
|
/**
|
|
113
117
|
* Convenience function for GET requests
|
|
@@ -124,7 +128,7 @@ function getProfiles() {
|
|
|
124
128
|
* ```
|
|
125
129
|
*/
|
|
126
130
|
async function get(url, options) {
|
|
127
|
-
return request({ ...options, url, method:
|
|
131
|
+
return request({ ...options, url, method: "GET" });
|
|
128
132
|
}
|
|
129
133
|
/**
|
|
130
134
|
* Convenience function for POST requests
|
|
@@ -146,7 +150,7 @@ async function get(url, options) {
|
|
|
146
150
|
* ```
|
|
147
151
|
*/
|
|
148
152
|
async function post(url, body, options) {
|
|
149
|
-
return request({ ...options, url, method:
|
|
153
|
+
return request({ ...options, url, method: "POST", ...(body !== undefined && { body }) });
|
|
150
154
|
}
|
|
151
155
|
/**
|
|
152
156
|
* WebSocket connection class
|
|
@@ -181,7 +185,12 @@ async function post(url, body, options) {
|
|
|
181
185
|
*/
|
|
182
186
|
class WebSocket {
|
|
183
187
|
constructor(connection) {
|
|
188
|
+
this._closed = false;
|
|
184
189
|
this._connection = connection;
|
|
190
|
+
if (websocketFinalizer) {
|
|
191
|
+
this._finalizerToken = connection;
|
|
192
|
+
websocketFinalizer.register(this, connection, connection);
|
|
193
|
+
}
|
|
185
194
|
}
|
|
186
195
|
/**
|
|
187
196
|
* Send a message (text or binary)
|
|
@@ -198,6 +207,14 @@ class WebSocket {
|
|
|
198
207
|
* Close the WebSocket connection
|
|
199
208
|
*/
|
|
200
209
|
async close() {
|
|
210
|
+
if (this._closed) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
this._closed = true;
|
|
214
|
+
if (this._finalizerToken && websocketFinalizer) {
|
|
215
|
+
websocketFinalizer.unregister(this._finalizerToken);
|
|
216
|
+
this._finalizerToken = undefined;
|
|
217
|
+
}
|
|
201
218
|
try {
|
|
202
219
|
await nativeBinding.websocketClose(this._connection);
|
|
203
220
|
}
|
|
@@ -215,26 +232,26 @@ exports.WebSocket = WebSocket;
|
|
|
215
232
|
*/
|
|
216
233
|
async function websocket(options) {
|
|
217
234
|
if (!options.url) {
|
|
218
|
-
throw new types_1.RequestError(
|
|
235
|
+
throw new types_1.RequestError("URL is required");
|
|
219
236
|
}
|
|
220
237
|
if (!options.onMessage) {
|
|
221
|
-
throw new types_1.RequestError(
|
|
238
|
+
throw new types_1.RequestError("onMessage callback is required");
|
|
222
239
|
}
|
|
223
240
|
if (options.browser) {
|
|
224
241
|
const profiles = getProfiles();
|
|
225
242
|
if (!profiles.includes(options.browser)) {
|
|
226
|
-
throw new types_1.RequestError(`Invalid browser profile: ${options.browser}. Available profiles: ${profiles.join(
|
|
243
|
+
throw new types_1.RequestError(`Invalid browser profile: ${options.browser}. Available profiles: ${profiles.join(", ")}`);
|
|
227
244
|
}
|
|
228
245
|
}
|
|
229
246
|
try {
|
|
230
247
|
const connection = await nativeBinding.websocketConnect({
|
|
231
248
|
url: options.url,
|
|
232
|
-
browser: options.browser ||
|
|
249
|
+
browser: options.browser || "chrome_137",
|
|
233
250
|
headers: options.headers || {},
|
|
234
|
-
proxy: options.proxy,
|
|
251
|
+
...(options.proxy !== undefined && { proxy: options.proxy }),
|
|
235
252
|
onMessage: options.onMessage,
|
|
236
|
-
onClose: options.onClose,
|
|
237
|
-
onError: options.onError,
|
|
253
|
+
...(options.onClose !== undefined && { onClose: options.onClose }),
|
|
254
|
+
...(options.onError !== undefined && { onError: options.onError }),
|
|
238
255
|
});
|
|
239
256
|
return new WebSocket(connection);
|
|
240
257
|
}
|
package/dist/wreq-js.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wreq-js.js","sourceRoot":"","sources":["../src/wreq-js.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"wreq-js.js","sourceRoot":"","sources":["../src/wreq-js.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wreq-js",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Browser fingerprint bypass library using Rust for TLS/HTTP2 impersonation",
|
|
5
5
|
"main": "dist/wreq-js.js",
|
|
6
6
|
"types": "dist/wreq-js.d.ts",
|
|
@@ -13,14 +13,15 @@
|
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
15
|
"build": "npm run build:rust && npm run build:ts",
|
|
16
|
-
"build:rust": "napi build --platform --release --
|
|
16
|
+
"build:rust": "napi build --platform --release --manifest-path rust/Cargo.toml",
|
|
17
17
|
"build:ts": "npm run clean:dist && tsc",
|
|
18
18
|
"clean:dist": "rimraf dist",
|
|
19
19
|
"artifacts": "napi artifacts",
|
|
20
20
|
"clean": "rimraf dist rust/target rust/*.node",
|
|
21
21
|
"test": "npm run build && node --test dist/test/http.spec.js dist/test/websocket.spec.js",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
22
|
+
"check": "biome check .",
|
|
23
|
+
"check:fix": "biome check --write .",
|
|
24
|
+
"ci:biome": "biome ci ."
|
|
24
25
|
},
|
|
25
26
|
"keywords": [
|
|
26
27
|
"browser",
|
|
@@ -35,8 +36,8 @@
|
|
|
35
36
|
"web-scraper",
|
|
36
37
|
"wreq",
|
|
37
38
|
"ja3",
|
|
38
|
-
"tls-fingerprint",
|
|
39
|
-
"ja4",
|
|
39
|
+
"tls-fingerprint",
|
|
40
|
+
"ja4",
|
|
40
41
|
"browser-fingerprint-bypass"
|
|
41
42
|
],
|
|
42
43
|
"author": "Oleksandr Herasymov <herasymov7@icloud.com>",
|
|
@@ -53,10 +54,10 @@
|
|
|
53
54
|
},
|
|
54
55
|
"homepage": "https://github.com/sqdshguy/wreq-js#readme",
|
|
55
56
|
"devDependencies": {
|
|
56
|
-
"@
|
|
57
|
-
"@
|
|
58
|
-
"
|
|
59
|
-
"rimraf": "^6.0
|
|
57
|
+
"@biomejs/biome": "^2.3.4",
|
|
58
|
+
"@napi-rs/cli": "^3.4.1",
|
|
59
|
+
"@types/node": "^24.10.0",
|
|
60
|
+
"rimraf": "^6.1.0",
|
|
60
61
|
"typescript": "^5.0.0"
|
|
61
62
|
},
|
|
62
63
|
"engines": {
|
|
@@ -76,16 +77,13 @@
|
|
|
76
77
|
"rust/*.node"
|
|
77
78
|
],
|
|
78
79
|
"napi": {
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
"x86_64-pc-windows-msvc"
|
|
88
|
-
]
|
|
89
|
-
}
|
|
80
|
+
"binaryName": "wreq-js",
|
|
81
|
+
"targets": [
|
|
82
|
+
"x86_64-apple-darwin",
|
|
83
|
+
"aarch64-apple-darwin",
|
|
84
|
+
"x86_64-unknown-linux-gnu",
|
|
85
|
+
"aarch64-unknown-linux-gnu",
|
|
86
|
+
"x86_64-pc-windows-msvc"
|
|
87
|
+
]
|
|
90
88
|
}
|
|
91
89
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|