jiren 3.4.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -27
- package/components/client-node-fetch.ts +953 -0
- package/components/client-node.ts +9 -0
- package/components/native-node.ts +126 -138
- package/components/native.ts +3 -44
- package/dist/components/client-node-fetch.d.ts +56 -0
- package/dist/components/client-node-fetch.d.ts.map +1 -0
- package/dist/components/client-node-fetch.js +652 -0
- package/dist/components/client-node-fetch.js.map +1 -0
- package/dist/components/client-node.d.ts +3 -0
- package/dist/components/client-node.d.ts.map +1 -0
- package/dist/components/client-node.js +6 -0
- package/dist/components/client-node.js.map +1 -0
- package/dist/components/native-node.d.ts +155 -153
- package/dist/components/native-node.d.ts.map +1 -1
- package/dist/components/native-node.js +119 -126
- package/dist/components/native-node.js.map +1 -1
- package/dist/index-node-native.d.ts +3 -0
- package/dist/index-node-native.d.ts.map +1 -0
- package/dist/index-node-native.js +5 -0
- package/dist/index-node-native.js.map +1 -0
- package/dist/index-node.d.ts +1 -1
- package/dist/index-node.d.ts.map +1 -1
- package/dist/index-node.js +2 -2
- package/dist/index-node.js.map +1 -1
- package/index-node-native.ts +5 -0
- package/index-node.ts +2 -2
- package/package.json +8 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { isNativeAvailable } from "./native-node.js";
|
|
2
|
+
import { JirenClient as NativeJirenClient } from "./client-node-native.js";
|
|
3
|
+
import { JirenClient as FetchJirenClient } from "./client-node-fetch.js";
|
|
4
|
+
|
|
5
|
+
const forceFallback = process.env.JIREN_FORCE_FETCH_FALLBACK === "1";
|
|
6
|
+
|
|
7
|
+
export const JirenClient = (
|
|
8
|
+
isNativeAvailable && !forceFallback ? NativeJirenClient : FetchJirenClient
|
|
9
|
+
) as unknown as typeof NativeJirenClient;
|
|
@@ -8,86 +8,76 @@ const __dirname = path.dirname(__filename);
|
|
|
8
8
|
|
|
9
9
|
const platform = process.platform;
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
let suffix = "so";
|
|
12
|
+
if (platform === "darwin") {
|
|
13
|
+
suffix = "dylib";
|
|
14
|
+
} else if (platform === "win32") {
|
|
15
|
+
suffix = "dll";
|
|
16
|
+
}
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
path.resolve(__dirname, "../../lib"),
|
|
17
|
-
];
|
|
18
|
-
const libNames =
|
|
19
|
-
platform === "win32"
|
|
20
|
-
? [`libhttpclient.${suffix}`, `httpclient.${suffix}`]
|
|
21
|
-
: [`libhttpclient.${suffix}`];
|
|
18
|
+
// Reverted to flat structure based on user request
|
|
19
|
+
let libPath = path.join(__dirname, `../lib/libhttpclient.${suffix}`);
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
libCandidates.push(path.join(dir, name));
|
|
27
|
-
}
|
|
21
|
+
if (!fs.existsSync(libPath)) {
|
|
22
|
+
// Try one level up (monorepo/dev context)
|
|
23
|
+
libPath = path.join(__dirname, `../../lib/libhttpclient.${suffix}`);
|
|
28
24
|
}
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
let lib: any = null;
|
|
27
|
+
let nativeLoadError: Error | null = null;
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
if (!fs.existsSync(libPath)) {
|
|
31
|
+
nativeLoadError = new Error(`Native library not found at: ${libPath}`);
|
|
32
|
+
} else {
|
|
33
|
+
lib = koffi.load(libPath);
|
|
34
|
+
}
|
|
35
|
+
} catch (error) {
|
|
36
|
+
nativeLoadError =
|
|
37
|
+
error instanceof Error ? error : new Error("Unknown native load error");
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
...libDirs.map((dir) => path.join(dir, "windows")),
|
|
43
|
-
].filter((dir, index, arr) => fs.existsSync(dir) && arr.indexOf(dir) === index);
|
|
40
|
+
export const isNativeAvailable = lib !== null;
|
|
41
|
+
export const nativeLibraryPath = libPath;
|
|
42
|
+
export const nativeAvailabilityError = nativeLoadError;
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
function unavailableSymbol(symbol: string, cause?: unknown) {
|
|
45
|
+
return () => {
|
|
46
|
+
const causeMessage =
|
|
47
|
+
cause instanceof Error ? cause.message : cause ? String(cause) : "";
|
|
48
|
+
const reason =
|
|
49
|
+
causeMessage || nativeLoadError?.message || "Native runtime unavailable";
|
|
50
|
+
throw new Error(
|
|
51
|
+
`[Jiren] Native symbol "${symbol}" is unavailable. ${reason}`,
|
|
50
52
|
);
|
|
51
|
-
|
|
52
|
-
process.env.PATH = `${toPrepend.join(";")};${currentPath}`;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
for (const dir of dllDirs) {
|
|
57
|
-
for (const depName of ["curl-impersonate.dll", "libcurl-impersonate.dll"]) {
|
|
58
|
-
const depPath = path.join(dir, depName);
|
|
59
|
-
if (!fs.existsSync(depPath)) continue;
|
|
60
|
-
try {
|
|
61
|
-
koffi.load(depPath);
|
|
62
|
-
} catch {
|
|
63
|
-
// Best-effort preload; main load error below is the actionable one.
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
53
|
+
};
|
|
67
54
|
}
|
|
68
55
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
56
|
+
function bindSymbol(
|
|
57
|
+
symbol: string,
|
|
58
|
+
returnType: string,
|
|
59
|
+
args: string[],
|
|
60
|
+
): (...args: any[]) => any {
|
|
61
|
+
if (!lib) {
|
|
62
|
+
return unavailableSymbol(symbol);
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
return lib.func(symbol, returnType, args);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
return unavailableSymbol(symbol, error);
|
|
68
|
+
}
|
|
79
69
|
}
|
|
80
70
|
|
|
81
71
|
export const symbols = {
|
|
82
|
-
zclient_new:
|
|
83
|
-
zclient_free:
|
|
84
|
-
zclient_get:
|
|
85
|
-
zclient_post:
|
|
72
|
+
zclient_new: bindSymbol("zclient_new", "void *", []),
|
|
73
|
+
zclient_free: bindSymbol("zclient_free", "void", ["void *"]),
|
|
74
|
+
zclient_get: bindSymbol("zclient_get", "void *", ["void *", "const char *"]),
|
|
75
|
+
zclient_post: bindSymbol("zclient_post", "void *", [
|
|
86
76
|
"void *",
|
|
87
77
|
"const char *",
|
|
88
78
|
"const char *",
|
|
89
79
|
]),
|
|
90
|
-
zclient_request:
|
|
80
|
+
zclient_request: bindSymbol("zclient_request", "void *", [
|
|
91
81
|
"void *", // ptr
|
|
92
82
|
"const char *", // method
|
|
93
83
|
"const char *", // url
|
|
@@ -96,49 +86,49 @@ export const symbols = {
|
|
|
96
86
|
"uint8_t", // max_redirects
|
|
97
87
|
"bool", // antibot
|
|
98
88
|
]),
|
|
99
|
-
zclient_prefetch:
|
|
89
|
+
zclient_prefetch: bindSymbol("zclient_prefetch", "void", [
|
|
100
90
|
"void *",
|
|
101
91
|
"const char *",
|
|
102
92
|
]),
|
|
103
|
-
zclient_response_status:
|
|
93
|
+
zclient_response_status: bindSymbol("zclient_response_status", "uint16_t", [
|
|
104
94
|
"void *",
|
|
105
95
|
]),
|
|
106
|
-
zclient_response_body:
|
|
96
|
+
zclient_response_body: bindSymbol("zclient_response_body", "void *", [
|
|
107
97
|
"void *",
|
|
108
98
|
]),
|
|
109
|
-
zclient_response_body_len:
|
|
99
|
+
zclient_response_body_len: bindSymbol("zclient_response_body_len", "uint64_t", [
|
|
110
100
|
"void *",
|
|
111
101
|
]),
|
|
112
|
-
zclient_response_headers:
|
|
102
|
+
zclient_response_headers: bindSymbol("zclient_response_headers", "void *", [
|
|
113
103
|
"void *",
|
|
114
104
|
]),
|
|
115
|
-
zclient_response_headers_len:
|
|
105
|
+
zclient_response_headers_len: bindSymbol(
|
|
116
106
|
"zclient_response_headers_len",
|
|
117
107
|
"uint64_t",
|
|
118
108
|
["void *"],
|
|
119
109
|
),
|
|
120
|
-
zclient_response_parse_header_offsets:
|
|
110
|
+
zclient_response_parse_header_offsets: bindSymbol(
|
|
121
111
|
"zclient_response_parse_header_offsets",
|
|
122
112
|
"void *",
|
|
123
113
|
["void *"],
|
|
124
114
|
),
|
|
125
|
-
zclient_header_offsets_free:
|
|
115
|
+
zclient_header_offsets_free: bindSymbol("zclient_header_offsets_free", "void", [
|
|
126
116
|
"void *",
|
|
127
117
|
]),
|
|
128
|
-
z_find_header_value:
|
|
118
|
+
z_find_header_value: bindSymbol("z_find_header_value", "void *", [
|
|
129
119
|
"void *", // raw headers ptr
|
|
130
120
|
"uint64_t", // len
|
|
131
121
|
"const char *", // key
|
|
132
122
|
]),
|
|
133
|
-
zclient_header_value_free:
|
|
123
|
+
zclient_header_value_free: bindSymbol("zclient_header_value_free", "void", [
|
|
134
124
|
"void *",
|
|
135
125
|
]),
|
|
136
|
-
zclient_response_free:
|
|
137
|
-
zclient_set_benchmark_mode:
|
|
126
|
+
zclient_response_free: bindSymbol("zclient_response_free", "void", ["void *"]),
|
|
127
|
+
zclient_set_benchmark_mode: bindSymbol("zclient_set_benchmark_mode", "void", [
|
|
138
128
|
"void *",
|
|
139
129
|
"bool",
|
|
140
130
|
]),
|
|
141
|
-
zclient_request_full:
|
|
131
|
+
zclient_request_full: bindSymbol("zclient_request_full", "void *", [
|
|
142
132
|
"void *",
|
|
143
133
|
"const char *",
|
|
144
134
|
"const char *",
|
|
@@ -147,45 +137,43 @@ export const symbols = {
|
|
|
147
137
|
"uint8_t",
|
|
148
138
|
"bool",
|
|
149
139
|
]),
|
|
150
|
-
zfull_response_status:
|
|
140
|
+
zfull_response_status: bindSymbol("zfull_response_status", "uint16_t", [
|
|
151
141
|
"void *",
|
|
152
142
|
]),
|
|
153
|
-
|
|
143
|
+
zfull_response_header_ptr: bindSymbol("zfull_response_header_ptr", "void *", [
|
|
154
144
|
"void *",
|
|
155
145
|
]),
|
|
156
|
-
|
|
157
|
-
"
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
),
|
|
161
|
-
zfull_response_body: lib.func("zfull_response_body", "void *", [
|
|
146
|
+
zfull_response_header_len: bindSymbol("zfull_response_header_len", "uint64_t", [
|
|
147
|
+
"void *",
|
|
148
|
+
]),
|
|
149
|
+
zfull_response_body_ptr: bindSymbol("zfull_response_body_ptr", "void *", [
|
|
162
150
|
"void *",
|
|
163
151
|
]),
|
|
164
|
-
zfull_response_body_len:
|
|
152
|
+
zfull_response_body_len: bindSymbol("zfull_response_body_len", "uint64_t", [
|
|
165
153
|
"void *",
|
|
166
154
|
]),
|
|
167
|
-
zfull_response_was_decompressed:
|
|
155
|
+
zfull_response_was_decompressed: bindSymbol(
|
|
168
156
|
"zfull_response_was_decompressed",
|
|
169
157
|
"uint8_t",
|
|
170
158
|
["void *"],
|
|
171
159
|
),
|
|
172
|
-
z_simd_key_match:
|
|
160
|
+
z_simd_key_match: bindSymbol("z_simd_key_match", "bool", [
|
|
173
161
|
"void *",
|
|
174
162
|
"uint64_t",
|
|
175
163
|
"void *",
|
|
176
164
|
"uint64_t",
|
|
177
165
|
]),
|
|
178
|
-
z_find_double_crlf:
|
|
166
|
+
z_find_double_crlf: bindSymbol("z_find_double_crlf", "int64_t", [
|
|
179
167
|
"void *",
|
|
180
168
|
"uint64_t",
|
|
181
169
|
]),
|
|
182
|
-
zclient_get_json_fields:
|
|
170
|
+
zclient_get_json_fields: bindSymbol("zclient_get_json_fields", "void *", [
|
|
183
171
|
"void *",
|
|
184
172
|
"const char *",
|
|
185
173
|
"const char **",
|
|
186
174
|
"uint64_t",
|
|
187
175
|
]),
|
|
188
|
-
zclient_request_json_fields:
|
|
176
|
+
zclient_request_json_fields: bindSymbol(
|
|
189
177
|
"zclient_request_json_fields",
|
|
190
178
|
"void *",
|
|
191
179
|
[
|
|
@@ -198,50 +186,50 @@ export const symbols = {
|
|
|
198
186
|
"uint64_t",
|
|
199
187
|
],
|
|
200
188
|
),
|
|
201
|
-
zclient_json_fields_free:
|
|
189
|
+
zclient_json_fields_free: bindSymbol("zclient_json_fields_free", "void", [
|
|
202
190
|
"void *",
|
|
203
191
|
]),
|
|
204
|
-
zjson_field_str:
|
|
192
|
+
zjson_field_str: bindSymbol("zjson_field_str", "void *", [
|
|
205
193
|
"void *",
|
|
206
194
|
"uint64_t",
|
|
207
195
|
]),
|
|
208
|
-
zjson_field_len:
|
|
196
|
+
zjson_field_len: bindSymbol("zjson_field_len", "uint64_t", [
|
|
209
197
|
"void *",
|
|
210
198
|
"uint64_t",
|
|
211
199
|
]),
|
|
212
|
-
zjson_field_type:
|
|
200
|
+
zjson_field_type: bindSymbol("zjson_field_type", "uint8_t", [
|
|
213
201
|
"void *",
|
|
214
202
|
"uint64_t",
|
|
215
203
|
]),
|
|
216
|
-
zjson_object_len:
|
|
217
|
-
zjson_validate:
|
|
218
|
-
zjson_parse:
|
|
219
|
-
zjson_get_string:
|
|
204
|
+
zjson_object_len: bindSymbol("zjson_object_len", "uint64_t", ["void *"]),
|
|
205
|
+
zjson_validate: bindSymbol("zjson_validate", "bool", ["void *", "uint64_t"]),
|
|
206
|
+
zjson_parse: bindSymbol("zjson_parse", "void *", ["void *", "uint64_t"]),
|
|
207
|
+
zjson_get_string: bindSymbol("zjson_get_string", "void *", [
|
|
220
208
|
"void *",
|
|
221
209
|
"const char *",
|
|
222
210
|
]),
|
|
223
|
-
zjson_get_string_len:
|
|
211
|
+
zjson_get_string_len: bindSymbol("zjson_get_string_len", "uint64_t", [
|
|
224
212
|
"void *",
|
|
225
213
|
"const char *",
|
|
226
214
|
]),
|
|
227
|
-
zjson_get_int:
|
|
215
|
+
zjson_get_int: bindSymbol("zjson_get_int", "int64_t", [
|
|
228
216
|
"void *",
|
|
229
217
|
"const char *",
|
|
230
218
|
]),
|
|
231
|
-
zjson_get_bool:
|
|
219
|
+
zjson_get_bool: bindSymbol("zjson_get_bool", "bool", [
|
|
232
220
|
"void *",
|
|
233
221
|
"const char *",
|
|
234
222
|
]),
|
|
235
|
-
zjson_has_key:
|
|
236
|
-
zjson_get_type:
|
|
237
|
-
zjson_array_len:
|
|
238
|
-
zjson_free:
|
|
223
|
+
zjson_has_key: bindSymbol("zjson_has_key", "bool", ["void *", "const char *"]),
|
|
224
|
+
zjson_get_type: bindSymbol("zjson_get_type", "uint8_t", ["void *"]),
|
|
225
|
+
zjson_array_len: bindSymbol("zjson_array_len", "uint64_t", ["void *"]),
|
|
226
|
+
zjson_free: bindSymbol("zjson_free", "void", ["void *"]),
|
|
239
227
|
|
|
240
|
-
zcache_new:
|
|
241
|
-
zcache_free:
|
|
242
|
-
zcache_get:
|
|
243
|
-
zcache_entry_free:
|
|
244
|
-
zcache_set:
|
|
228
|
+
zcache_new: bindSymbol("zcache_new", "void *", ["uint64_t"]),
|
|
229
|
+
zcache_free: bindSymbol("zcache_free", "void", ["void *"]),
|
|
230
|
+
zcache_get: bindSymbol("zcache_get", "void *", ["void *", "const char *"]),
|
|
231
|
+
zcache_entry_free: bindSymbol("zcache_entry_free", "void", ["void *"]),
|
|
232
|
+
zcache_set: bindSymbol("zcache_set", "void", [
|
|
245
233
|
"void *", // cache
|
|
246
234
|
"const char *", // key
|
|
247
235
|
"uint16_t", // status
|
|
@@ -251,18 +239,18 @@ export const symbols = {
|
|
|
251
239
|
"uint64_t", // body_len
|
|
252
240
|
"int64_t", // ttl
|
|
253
241
|
]),
|
|
254
|
-
zcache_preload_l1:
|
|
242
|
+
zcache_preload_l1: bindSymbol("zcache_preload_l1", "bool", [
|
|
255
243
|
"void *",
|
|
256
244
|
"const char *",
|
|
257
245
|
]),
|
|
258
|
-
zcache_clear:
|
|
259
|
-
zcache_stats:
|
|
260
|
-
zcache_stats_free:
|
|
246
|
+
zcache_clear: bindSymbol("zcache_clear", "void", ["void *"]),
|
|
247
|
+
zcache_stats: bindSymbol("zcache_stats", "void *", ["void *"]),
|
|
248
|
+
zcache_stats_free: bindSymbol("zcache_stats_free", "void", ["void *"]),
|
|
261
249
|
|
|
262
250
|
// =========================================================================
|
|
263
251
|
// STREAMING DOWNLOAD FFI (PROGRESS TRACKING)
|
|
264
252
|
// =========================================================================
|
|
265
|
-
zclient_request_stream:
|
|
253
|
+
zclient_request_stream: bindSymbol("zclient_request_stream", "void *", [
|
|
266
254
|
"void *", // client
|
|
267
255
|
"const char *", // method
|
|
268
256
|
"const char *", // url
|
|
@@ -270,25 +258,25 @@ export const symbols = {
|
|
|
270
258
|
"const char *", // body (nullable)
|
|
271
259
|
"void *", // progress_callback (nullable)
|
|
272
260
|
]),
|
|
273
|
-
zstream_poll:
|
|
274
|
-
zstream_body:
|
|
275
|
-
zstream_body_len:
|
|
276
|
-
zstream_headers:
|
|
277
|
-
zstream_headers_len:
|
|
278
|
-
zstream_status:
|
|
279
|
-
zstream_content_length:
|
|
261
|
+
zstream_poll: bindSymbol("zstream_poll", "uint64_t", ["void *"]),
|
|
262
|
+
zstream_body: bindSymbol("zstream_body", "void *", ["void *"]),
|
|
263
|
+
zstream_body_len: bindSymbol("zstream_body_len", "uint64_t", ["void *"]),
|
|
264
|
+
zstream_headers: bindSymbol("zstream_headers", "void *", ["void *"]),
|
|
265
|
+
zstream_headers_len: bindSymbol("zstream_headers_len", "uint64_t", ["void *"]),
|
|
266
|
+
zstream_status: bindSymbol("zstream_status", "uint16_t", ["void *"]),
|
|
267
|
+
zstream_content_length: bindSymbol("zstream_content_length", "uint64_t", [
|
|
280
268
|
"void *",
|
|
281
269
|
]),
|
|
282
|
-
zstream_bytes_received:
|
|
270
|
+
zstream_bytes_received: bindSymbol("zstream_bytes_received", "uint64_t", [
|
|
283
271
|
"void *",
|
|
284
272
|
]),
|
|
285
|
-
zstream_is_complete:
|
|
286
|
-
zstream_free:
|
|
273
|
+
zstream_is_complete: bindSymbol("zstream_is_complete", "bool", ["void *"]),
|
|
274
|
+
zstream_free: bindSymbol("zstream_free", "void", ["void *"]),
|
|
287
275
|
|
|
288
276
|
// =========================================================================
|
|
289
277
|
// STREAMING UPLOAD FFI (PROGRESS TRACKING)
|
|
290
278
|
// =========================================================================
|
|
291
|
-
zclient_upload_stream:
|
|
279
|
+
zclient_upload_stream: bindSymbol("zclient_upload_stream", "void *", [
|
|
292
280
|
"void *", // client
|
|
293
281
|
"const char *", // method
|
|
294
282
|
"const char *", // url
|
|
@@ -297,32 +285,32 @@ export const symbols = {
|
|
|
297
285
|
"uint64_t", // body length
|
|
298
286
|
"void *", // progress_callback (nullable)
|
|
299
287
|
]),
|
|
300
|
-
zupload_send_chunk:
|
|
301
|
-
zupload_read_response:
|
|
288
|
+
zupload_send_chunk: bindSymbol("zupload_send_chunk", "uint64_t", ["void *"]),
|
|
289
|
+
zupload_read_response: bindSymbol("zupload_read_response", "uint64_t", [
|
|
302
290
|
"void *",
|
|
303
291
|
]),
|
|
304
|
-
zupload_bytes_sent:
|
|
305
|
-
zupload_total_bytes:
|
|
306
|
-
zupload_is_upload_complete:
|
|
292
|
+
zupload_bytes_sent: bindSymbol("zupload_bytes_sent", "uint64_t", ["void *"]),
|
|
293
|
+
zupload_total_bytes: bindSymbol("zupload_total_bytes", "uint64_t", ["void *"]),
|
|
294
|
+
zupload_is_upload_complete: bindSymbol("zupload_is_upload_complete", "bool", [
|
|
307
295
|
"void *",
|
|
308
296
|
]),
|
|
309
|
-
zupload_is_complete:
|
|
310
|
-
zupload_status:
|
|
311
|
-
zupload_response_body:
|
|
297
|
+
zupload_is_complete: bindSymbol("zupload_is_complete", "bool", ["void *"]),
|
|
298
|
+
zupload_status: bindSymbol("zupload_status", "uint16_t", ["void *"]),
|
|
299
|
+
zupload_response_body: bindSymbol("zupload_response_body", "void *", [
|
|
312
300
|
"void *",
|
|
313
301
|
]),
|
|
314
|
-
zupload_response_body_len:
|
|
302
|
+
zupload_response_body_len: bindSymbol("zupload_response_body_len", "uint64_t", [
|
|
315
303
|
"void *",
|
|
316
304
|
]),
|
|
317
|
-
zupload_response_headers:
|
|
305
|
+
zupload_response_headers: bindSymbol("zupload_response_headers", "void *", [
|
|
318
306
|
"void *",
|
|
319
307
|
]),
|
|
320
|
-
zupload_response_headers_len:
|
|
308
|
+
zupload_response_headers_len: bindSymbol(
|
|
321
309
|
"zupload_response_headers_len",
|
|
322
310
|
"uint64_t",
|
|
323
311
|
["void *"],
|
|
324
312
|
),
|
|
325
|
-
zupload_free:
|
|
313
|
+
zupload_free: bindSymbol("zupload_free", "void", ["void *"]),
|
|
326
314
|
};
|
|
327
315
|
|
|
328
316
|
export const nativeLib = {
|
package/components/native.ts
CHANGED
|
@@ -1,52 +1,11 @@
|
|
|
1
1
|
import { dlopen, FFIType, suffix } from "bun:ffi";
|
|
2
|
-
import { existsSync } from "fs";
|
|
3
2
|
import { join } from "path";
|
|
4
3
|
|
|
5
4
|
const platform = process.platform;
|
|
5
|
+
const arch = process.arch;
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
join(import.meta.dir, "../../lib"),
|
|
10
|
-
];
|
|
11
|
-
const libNames =
|
|
12
|
-
platform === "win32"
|
|
13
|
-
? [`libhttpclient.${suffix}`, `httpclient.${suffix}`]
|
|
14
|
-
: [`libhttpclient.${suffix}`];
|
|
15
|
-
const libCandidates: string[] = [];
|
|
16
|
-
for (const dir of libDirs) {
|
|
17
|
-
for (const name of libNames) {
|
|
18
|
-
libCandidates.push(join(dir, name));
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
const libPath = libCandidates.find((candidate) => existsSync(candidate));
|
|
22
|
-
|
|
23
|
-
if (!libPath) {
|
|
24
|
-
throw new Error(
|
|
25
|
-
`Native library not found. Looked in:\n${libCandidates
|
|
26
|
-
.map((p) => `- ${p}`)
|
|
27
|
-
.join("\n")}`,
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (platform === "win32") {
|
|
32
|
-
const dllDirs = [
|
|
33
|
-
join(import.meta.dir, "../lib"),
|
|
34
|
-
join(import.meta.dir, "../../lib"),
|
|
35
|
-
join(import.meta.dir, "../lib/windows"),
|
|
36
|
-
join(import.meta.dir, "../../lib/windows"),
|
|
37
|
-
].filter(
|
|
38
|
-
(dir, index, arr) => existsSync(dir) && arr.indexOf(dir) === index,
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const currentPath = process.env.PATH ?? "";
|
|
42
|
-
const currentPathLower = currentPath.toLowerCase();
|
|
43
|
-
const toPrepend = dllDirs.filter(
|
|
44
|
-
(dir) => !currentPathLower.includes(dir.toLowerCase()),
|
|
45
|
-
);
|
|
46
|
-
if (toPrepend.length > 0) {
|
|
47
|
-
process.env.PATH = `${toPrepend.join(";")};${currentPath}`;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
7
|
+
// Reverted to flat structure
|
|
8
|
+
const libPath = join(import.meta.dir, `../lib/libhttpclient.${suffix}`);
|
|
50
9
|
|
|
51
10
|
export const ffiDef = {
|
|
52
11
|
zclient_new: {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { RequestOptions, JirenResponse, TargetUrlConfig, Interceptors, MetricsAPI, UrlConfig, JirenClientOptions, UrlAccessor } from "./types.js";
|
|
2
|
+
export declare function defineUrls<const T extends readonly TargetUrlConfig[]>(urls: T): T;
|
|
3
|
+
export declare class JirenClient<T extends readonly TargetUrlConfig[] | Record<string, UrlConfig> = readonly TargetUrlConfig[] | Record<string, UrlConfig>> implements Disposable {
|
|
4
|
+
private closed;
|
|
5
|
+
private urlMap;
|
|
6
|
+
private cacheConfig;
|
|
7
|
+
private antibotConfig;
|
|
8
|
+
private inflightRequests;
|
|
9
|
+
private globalRetry?;
|
|
10
|
+
private requestInterceptors;
|
|
11
|
+
private responseInterceptors;
|
|
12
|
+
private errorInterceptors;
|
|
13
|
+
private targetsPromise;
|
|
14
|
+
private targetsComplete;
|
|
15
|
+
private performanceMode;
|
|
16
|
+
private useDefaultHeaders;
|
|
17
|
+
private cacheStore;
|
|
18
|
+
private readonly defaultHeaders;
|
|
19
|
+
readonly url: UrlAccessor<T>;
|
|
20
|
+
private metricsCollector;
|
|
21
|
+
readonly metrics: MetricsAPI;
|
|
22
|
+
constructor(options?: JirenClientOptions<T>);
|
|
23
|
+
private waitFor;
|
|
24
|
+
waitForTargets(): Promise<void>;
|
|
25
|
+
waitForWarmup(): Promise<void>;
|
|
26
|
+
private createUrlAccessor;
|
|
27
|
+
close(): void;
|
|
28
|
+
[Symbol.dispose](): void;
|
|
29
|
+
use(interceptors: Interceptors): this;
|
|
30
|
+
preconnect(urls: string[]): Promise<void>;
|
|
31
|
+
warmup(urls: string[]): Promise<void>;
|
|
32
|
+
prefetch(urls: string[]): void;
|
|
33
|
+
protected _request<T = any>(method: string, url: string, body?: string | null, options?: RequestOptions & {
|
|
34
|
+
responseType: "json";
|
|
35
|
+
}): Promise<T>;
|
|
36
|
+
protected _request<T = any>(method: string, url: string, body?: string | null, options?: RequestOptions & {
|
|
37
|
+
responseType: "text";
|
|
38
|
+
}): Promise<string>;
|
|
39
|
+
protected _request<T = any>(method: string, url: string, body?: string | null, options?: RequestOptions & {
|
|
40
|
+
responseType: "arraybuffer";
|
|
41
|
+
}): Promise<ArrayBuffer>;
|
|
42
|
+
protected _request<T = any>(method: string, url: string, body?: string | null, options?: RequestOptions & {
|
|
43
|
+
responseType: "blob";
|
|
44
|
+
}): Promise<Blob>;
|
|
45
|
+
protected _request<T = any>(method: string, url: string, body?: string | null, options?: RequestOptions): Promise<JirenResponse<T>>;
|
|
46
|
+
private createResponse;
|
|
47
|
+
private cloneResponse;
|
|
48
|
+
private createBufferedResponse;
|
|
49
|
+
private isJirenResponse;
|
|
50
|
+
private prepareBody;
|
|
51
|
+
private buildHeaders;
|
|
52
|
+
private getRequestKey;
|
|
53
|
+
private getCachedResponse;
|
|
54
|
+
private setCachedResponse;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=client-node-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-node-fetch.d.ts","sourceRoot":"","sources":["../../components/client-node-fetch.ts"],"names":[],"mappings":"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"}
|