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.
@@ -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
- const suffix =
12
- platform === "darwin" ? "dylib" : platform === "win32" ? "dll" : "so";
11
+ let suffix = "so";
12
+ if (platform === "darwin") {
13
+ suffix = "dylib";
14
+ } else if (platform === "win32") {
15
+ suffix = "dll";
16
+ }
13
17
 
14
- const libDirs = [
15
- path.resolve(__dirname, "../lib"),
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
- const libCandidates: string[] = [];
24
- for (const dir of libDirs) {
25
- for (const name of libNames) {
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
- const libPath = libCandidates.find((candidate) => fs.existsSync(candidate));
31
- if (!libPath) {
32
- throw new Error(
33
- `Native library not found. Looked in:\n${libCandidates
34
- .map((p) => `- ${p}`)
35
- .join("\n")}`,
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
- if (platform === "win32") {
40
- const dllDirs = [
41
- path.dirname(libPath),
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
- if (dllDirs.length > 0) {
46
- const currentPath = process.env.PATH ?? "";
47
- const currentPathLower = currentPath.toLowerCase();
48
- const toPrepend = dllDirs.filter(
49
- (dir) => !currentPathLower.includes(dir.toLowerCase()),
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
- if (toPrepend.length > 0) {
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
- let lib: ReturnType<typeof koffi.load>;
70
- try {
71
- lib = koffi.load(libPath);
72
- } catch (error) {
73
- const reason = error instanceof Error ? error.message : String(error);
74
- throw new Error(
75
- platform === "win32"
76
- ? `Failed to load ${libPath}. Ensure Windows deps are present in jiren/lib/windows (curl-impersonate.dll + import lib). Original error: ${reason}`
77
- : `Failed to load ${libPath}: ${reason}`,
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: lib.func("zclient_new", "void *", []),
83
- zclient_free: lib.func("zclient_free", "void", ["void *"]),
84
- zclient_get: lib.func("zclient_get", "void *", ["void *", "const char *"]),
85
- zclient_post: lib.func("zclient_post", "void *", [
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: lib.func("zclient_request", "void *", [
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: lib.func("zclient_prefetch", "void", [
89
+ zclient_prefetch: bindSymbol("zclient_prefetch", "void", [
100
90
  "void *",
101
91
  "const char *",
102
92
  ]),
103
- zclient_response_status: lib.func("zclient_response_status", "uint16_t", [
93
+ zclient_response_status: bindSymbol("zclient_response_status", "uint16_t", [
104
94
  "void *",
105
95
  ]),
106
- zclient_response_body: lib.func("zclient_response_body", "void *", [
96
+ zclient_response_body: bindSymbol("zclient_response_body", "void *", [
107
97
  "void *",
108
98
  ]),
109
- zclient_response_body_len: lib.func("zclient_response_body_len", "uint64_t", [
99
+ zclient_response_body_len: bindSymbol("zclient_response_body_len", "uint64_t", [
110
100
  "void *",
111
101
  ]),
112
- zclient_response_headers: lib.func("zclient_response_headers", "void *", [
102
+ zclient_response_headers: bindSymbol("zclient_response_headers", "void *", [
113
103
  "void *",
114
104
  ]),
115
- zclient_response_headers_len: lib.func(
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: lib.func(
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: lib.func("zclient_header_offsets_free", "void", [
115
+ zclient_header_offsets_free: bindSymbol("zclient_header_offsets_free", "void", [
126
116
  "void *",
127
117
  ]),
128
- z_find_header_value: lib.func("z_find_header_value", "void *", [
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: lib.func("zclient_header_value_free", "void", [
123
+ zclient_header_value_free: bindSymbol("zclient_header_value_free", "void", [
134
124
  "void *",
135
125
  ]),
136
- zclient_response_free: lib.func("zclient_response_free", "void", ["void *"]),
137
- zclient_set_benchmark_mode: lib.func("zclient_set_benchmark_mode", "void", [
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: lib.func("zclient_request_full", "void *", [
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: lib.func("zfull_response_status", "uint16_t", [
140
+ zfull_response_status: bindSymbol("zfull_response_status", "uint16_t", [
151
141
  "void *",
152
142
  ]),
153
- zfull_response_headers: lib.func("zfull_response_headers", "void *", [
143
+ zfull_response_header_ptr: bindSymbol("zfull_response_header_ptr", "void *", [
154
144
  "void *",
155
145
  ]),
156
- zfull_response_headers_len: lib.func(
157
- "zfull_response_headers_len",
158
- "uint64_t",
159
- ["void *"],
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: lib.func("zfull_response_body_len", "uint64_t", [
152
+ zfull_response_body_len: bindSymbol("zfull_response_body_len", "uint64_t", [
165
153
  "void *",
166
154
  ]),
167
- zfull_response_was_decompressed: lib.func(
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: lib.func("z_simd_key_match", "bool", [
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: lib.func("z_find_double_crlf", "int64_t", [
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: lib.func("zclient_get_json_fields", "void *", [
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: lib.func(
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: lib.func("zclient_json_fields_free", "void", [
189
+ zclient_json_fields_free: bindSymbol("zclient_json_fields_free", "void", [
202
190
  "void *",
203
191
  ]),
204
- zjson_field_str: lib.func("zjson_field_str", "void *", [
192
+ zjson_field_str: bindSymbol("zjson_field_str", "void *", [
205
193
  "void *",
206
194
  "uint64_t",
207
195
  ]),
208
- zjson_field_len: lib.func("zjson_field_len", "uint64_t", [
196
+ zjson_field_len: bindSymbol("zjson_field_len", "uint64_t", [
209
197
  "void *",
210
198
  "uint64_t",
211
199
  ]),
212
- zjson_field_type: lib.func("zjson_field_type", "uint8_t", [
200
+ zjson_field_type: bindSymbol("zjson_field_type", "uint8_t", [
213
201
  "void *",
214
202
  "uint64_t",
215
203
  ]),
216
- zjson_object_len: lib.func("zjson_object_len", "uint64_t", ["void *"]),
217
- zjson_validate: lib.func("zjson_validate", "bool", ["void *", "uint64_t"]),
218
- zjson_parse: lib.func("zjson_parse", "void *", ["void *", "uint64_t"]),
219
- zjson_get_string: lib.func("zjson_get_string", "void *", [
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: lib.func("zjson_get_string_len", "uint64_t", [
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: lib.func("zjson_get_int", "int64_t", [
215
+ zjson_get_int: bindSymbol("zjson_get_int", "int64_t", [
228
216
  "void *",
229
217
  "const char *",
230
218
  ]),
231
- zjson_get_bool: lib.func("zjson_get_bool", "bool", [
219
+ zjson_get_bool: bindSymbol("zjson_get_bool", "bool", [
232
220
  "void *",
233
221
  "const char *",
234
222
  ]),
235
- zjson_has_key: lib.func("zjson_has_key", "bool", ["void *", "const char *"]),
236
- zjson_get_type: lib.func("zjson_get_type", "uint8_t", ["void *"]),
237
- zjson_array_len: lib.func("zjson_array_len", "uint64_t", ["void *"]),
238
- zjson_free: lib.func("zjson_free", "void", ["void *"]),
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: lib.func("zcache_new", "void *", ["uint64_t"]),
241
- zcache_free: lib.func("zcache_free", "void", ["void *"]),
242
- zcache_get: lib.func("zcache_get", "void *", ["void *", "const char *"]),
243
- zcache_entry_free: lib.func("zcache_entry_free", "void", ["void *"]),
244
- zcache_set: lib.func("zcache_set", "void", [
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: lib.func("zcache_preload_l1", "bool", [
242
+ zcache_preload_l1: bindSymbol("zcache_preload_l1", "bool", [
255
243
  "void *",
256
244
  "const char *",
257
245
  ]),
258
- zcache_clear: lib.func("zcache_clear", "void", ["void *"]),
259
- zcache_stats: lib.func("zcache_stats", "void *", ["void *"]),
260
- zcache_stats_free: lib.func("zcache_stats_free", "void", ["void *"]),
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: lib.func("zclient_request_stream", "void *", [
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: lib.func("zstream_poll", "uint64_t", ["void *"]),
274
- zstream_body: lib.func("zstream_body", "void *", ["void *"]),
275
- zstream_body_len: lib.func("zstream_body_len", "uint64_t", ["void *"]),
276
- zstream_headers: lib.func("zstream_headers", "void *", ["void *"]),
277
- zstream_headers_len: lib.func("zstream_headers_len", "uint64_t", ["void *"]),
278
- zstream_status: lib.func("zstream_status", "uint16_t", ["void *"]),
279
- zstream_content_length: lib.func("zstream_content_length", "uint64_t", [
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: lib.func("zstream_bytes_received", "uint64_t", [
270
+ zstream_bytes_received: bindSymbol("zstream_bytes_received", "uint64_t", [
283
271
  "void *",
284
272
  ]),
285
- zstream_is_complete: lib.func("zstream_is_complete", "bool", ["void *"]),
286
- zstream_free: lib.func("zstream_free", "void", ["void *"]),
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: lib.func("zclient_upload_stream", "void *", [
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: lib.func("zupload_send_chunk", "uint64_t", ["void *"]),
301
- zupload_read_response: lib.func("zupload_read_response", "uint64_t", [
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: lib.func("zupload_bytes_sent", "uint64_t", ["void *"]),
305
- zupload_total_bytes: lib.func("zupload_total_bytes", "uint64_t", ["void *"]),
306
- zupload_is_upload_complete: lib.func("zupload_is_upload_complete", "bool", [
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: lib.func("zupload_is_complete", "bool", ["void *"]),
310
- zupload_status: lib.func("zupload_status", "uint16_t", ["void *"]),
311
- zupload_response_body: lib.func("zupload_response_body", "void *", [
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: lib.func("zupload_response_body_len", "uint64_t", [
302
+ zupload_response_body_len: bindSymbol("zupload_response_body_len", "uint64_t", [
315
303
  "void *",
316
304
  ]),
317
- zupload_response_headers: lib.func("zupload_response_headers", "void *", [
305
+ zupload_response_headers: bindSymbol("zupload_response_headers", "void *", [
318
306
  "void *",
319
307
  ]),
320
- zupload_response_headers_len: lib.func(
308
+ zupload_response_headers_len: bindSymbol(
321
309
  "zupload_response_headers_len",
322
310
  "uint64_t",
323
311
  ["void *"],
324
312
  ),
325
- zupload_free: lib.func("zupload_free", "void", ["void *"]),
313
+ zupload_free: bindSymbol("zupload_free", "void", ["void *"]),
326
314
  };
327
315
 
328
316
  export const nativeLib = {
@@ -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
- const libDirs = [
8
- join(import.meta.dir, "../lib"),
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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"}