@tasker-systems/tasker 0.1.3 → 0.1.4

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/ffi/index.js CHANGED
@@ -69,1254 +69,1385 @@ var init_runtime_interface = __esm({
69
69
  }
70
70
  });
71
71
 
72
- // node_modules/koffi/build/koffi/darwin_arm64/koffi.node
73
- var koffi_default;
74
- var init_koffi = __esm({
75
- "node_modules/koffi/build/koffi/darwin_arm64/koffi.node"() {
76
- koffi_default = "../koffi-X7JMBSZH.node";
77
- }
78
- });
79
-
80
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_arm64/koffi.node
81
- var require_koffi = __commonJS2({
82
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_arm64/koffi.node"(exports2, module2) {
83
- init_koffi();
84
- try {
85
- module2.exports = __require(koffi_default);
86
- } catch {
87
- }
88
- }
89
- });
90
-
91
- // node_modules/koffi/build/koffi/darwin_x64/koffi.node
92
- var koffi_default2;
93
- var init_koffi2 = __esm({
94
- "node_modules/koffi/build/koffi/darwin_x64/koffi.node"() {
95
- koffi_default2 = "../koffi-OMHWL3D6.node";
96
- }
97
- });
98
-
99
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_x64/koffi.node
100
- var require_koffi2 = __commonJS2({
101
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_x64/koffi.node"(exports2, module2) {
102
- init_koffi2();
103
- try {
104
- module2.exports = __require(koffi_default2);
105
- } catch {
106
- }
107
- }
108
- });
109
-
110
- // node_modules/koffi/build/koffi/freebsd_arm64/koffi.node
111
- var koffi_default3;
112
- var init_koffi3 = __esm({
113
- "node_modules/koffi/build/koffi/freebsd_arm64/koffi.node"() {
114
- koffi_default3 = "../koffi-AVDVVSXH.node";
115
- }
116
- });
117
-
118
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node
119
- var require_koffi3 = __commonJS2({
120
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node"(exports2, module2) {
121
- init_koffi3();
122
- try {
123
- module2.exports = __require(koffi_default3);
124
- } catch {
125
- }
126
- }
127
- });
128
-
129
- // node_modules/koffi/build/koffi/freebsd_ia32/koffi.node
130
- var koffi_default4;
131
- var init_koffi4 = __esm({
132
- "node_modules/koffi/build/koffi/freebsd_ia32/koffi.node"() {
133
- koffi_default4 = "../koffi-GG4SDSYA.node";
134
- }
135
- });
136
-
137
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node
138
- var require_koffi4 = __commonJS2({
139
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node"(exports2, module2) {
140
- init_koffi4();
141
- try {
142
- module2.exports = __require(koffi_default4);
143
- } catch {
144
- }
145
- }
146
- });
147
-
148
- // node_modules/koffi/build/koffi/freebsd_x64/koffi.node
149
- var koffi_default5;
150
- var init_koffi5 = __esm({
151
- "node_modules/koffi/build/koffi/freebsd_x64/koffi.node"() {
152
- koffi_default5 = "../koffi-AHHUCM3C.node";
153
- }
154
- });
155
-
156
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_x64/koffi.node
157
- var require_koffi5 = __commonJS2({
158
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_x64/koffi.node"(exports2, module2) {
159
- init_koffi5();
160
- try {
161
- module2.exports = __require(koffi_default5);
162
- } catch {
163
- }
164
- }
165
- });
166
-
167
- // node_modules/koffi/build/koffi/linux_armhf/koffi.node
168
- var koffi_default6;
169
- var init_koffi6 = __esm({
170
- "node_modules/koffi/build/koffi/linux_armhf/koffi.node"() {
171
- koffi_default6 = "../koffi-YNQDUF3Q.node";
172
- }
173
- });
174
-
175
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_armhf/koffi.node
176
- var require_koffi6 = __commonJS2({
177
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_armhf/koffi.node"(exports2, module2) {
178
- init_koffi6();
179
- try {
180
- module2.exports = __require(koffi_default6);
181
- } catch {
182
- }
183
- }
184
- });
185
-
186
- // node_modules/koffi/build/koffi/linux_arm64/koffi.node
187
- var koffi_default7;
188
- var init_koffi7 = __esm({
189
- "node_modules/koffi/build/koffi/linux_arm64/koffi.node"() {
190
- koffi_default7 = "../koffi-SE4ZI36U.node";
191
- }
192
- });
193
-
194
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_arm64/koffi.node
195
- var require_koffi7 = __commonJS2({
196
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_arm64/koffi.node"(exports2, module2) {
197
- init_koffi7();
198
- try {
199
- module2.exports = __require(koffi_default7);
200
- } catch {
201
- }
202
- }
203
- });
204
-
205
- // node_modules/koffi/build/koffi/linux_ia32/koffi.node
206
- var koffi_default8;
207
- var init_koffi8 = __esm({
208
- "node_modules/koffi/build/koffi/linux_ia32/koffi.node"() {
209
- koffi_default8 = "../koffi-LOH6WKRQ.node";
210
- }
211
- });
212
-
213
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_ia32/koffi.node
214
- var require_koffi8 = __commonJS2({
215
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_ia32/koffi.node"(exports2, module2) {
216
- init_koffi8();
217
- try {
218
- module2.exports = __require(koffi_default8);
219
- } catch {
220
- }
221
- }
222
- });
223
-
224
- // node_modules/koffi/build/koffi/linux_loong64/koffi.node
225
- var koffi_default9;
226
- var init_koffi9 = __esm({
227
- "node_modules/koffi/build/koffi/linux_loong64/koffi.node"() {
228
- koffi_default9 = "../koffi-QKY2KSXW.node";
229
- }
230
- });
231
-
232
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_loong64/koffi.node
233
- var require_koffi9 = __commonJS2({
234
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_loong64/koffi.node"(exports2, module2) {
235
- init_koffi9();
236
- try {
237
- module2.exports = __require(koffi_default9);
238
- } catch {
239
- }
240
- }
241
- });
242
-
243
- // node_modules/koffi/build/koffi/linux_riscv64d/koffi.node
244
- var koffi_default10;
245
- var init_koffi10 = __esm({
246
- "node_modules/koffi/build/koffi/linux_riscv64d/koffi.node"() {
247
- koffi_default10 = "../koffi-X3YT67KE.node";
248
- }
249
- });
250
-
251
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node
252
- var require_koffi10 = __commonJS2({
253
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node"(exports2, module2) {
254
- init_koffi10();
255
- try {
256
- module2.exports = __require(koffi_default10);
257
- } catch {
258
- }
259
- }
260
- });
261
-
262
- // node_modules/koffi/build/koffi/linux_x64/koffi.node
263
- var koffi_default11;
264
- var init_koffi11 = __esm({
265
- "node_modules/koffi/build/koffi/linux_x64/koffi.node"() {
266
- koffi_default11 = "../koffi-G4D35B2D.node";
267
- }
268
- });
269
-
270
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_x64/koffi.node
271
- var require_koffi11 = __commonJS2({
272
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_x64/koffi.node"(exports2, module2) {
273
- init_koffi11();
274
- try {
275
- module2.exports = __require(koffi_default11);
276
- } catch {
277
- }
278
- }
279
- });
280
-
281
- // node_modules/koffi/build/koffi/openbsd_ia32/koffi.node
282
- var koffi_default12;
283
- var init_koffi12 = __esm({
284
- "node_modules/koffi/build/koffi/openbsd_ia32/koffi.node"() {
285
- koffi_default12 = "../koffi-LUY2JHJP.node";
286
- }
287
- });
288
-
289
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node
290
- var require_koffi12 = __commonJS2({
291
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node"(exports2, module2) {
292
- init_koffi12();
293
- try {
294
- module2.exports = __require(koffi_default12);
295
- } catch {
296
- }
297
- }
298
- });
299
-
300
- // node_modules/koffi/build/koffi/openbsd_x64/koffi.node
301
- var koffi_default13;
302
- var init_koffi13 = __esm({
303
- "node_modules/koffi/build/koffi/openbsd_x64/koffi.node"() {
304
- koffi_default13 = "../koffi-ROB3FRHA.node";
305
- }
306
- });
307
-
308
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_x64/koffi.node
309
- var require_koffi13 = __commonJS2({
310
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_x64/koffi.node"(exports2, module2) {
311
- init_koffi13();
312
- try {
313
- module2.exports = __require(koffi_default13);
314
- } catch {
315
- }
316
- }
72
+ // src/ffi/deno-runtime.ts
73
+ var deno_runtime_exports = {};
74
+ __export(deno_runtime_exports, {
75
+ DenoRuntime: () => DenoRuntime
317
76
  });
318
-
319
- // node_modules/koffi/build/koffi/win32_arm64/koffi.node
320
- var koffi_default14;
321
- var init_koffi14 = __esm({
322
- "node_modules/koffi/build/koffi/win32_arm64/koffi.node"() {
323
- koffi_default14 = "../koffi-GOENU54R.node";
324
- }
325
- });
326
-
327
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_arm64/koffi.node
328
- var require_koffi14 = __commonJS2({
329
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_arm64/koffi.node"(exports2, module2) {
330
- init_koffi14();
331
- try {
332
- module2.exports = __require(koffi_default14);
333
- } catch {
334
- }
335
- }
336
- });
337
-
338
- // node_modules/koffi/build/koffi/win32_ia32/koffi.node
339
- var koffi_default15;
340
- var init_koffi15 = __esm({
341
- "node_modules/koffi/build/koffi/win32_ia32/koffi.node"() {
342
- koffi_default15 = "../koffi-KFZAXWPQ.node";
343
- }
344
- });
345
-
346
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_ia32/koffi.node
347
- var require_koffi15 = __commonJS2({
348
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_ia32/koffi.node"(exports2, module2) {
349
- init_koffi15();
350
- try {
351
- module2.exports = __require(koffi_default15);
352
- } catch {
353
- }
354
- }
355
- });
356
-
357
- // node_modules/koffi/build/koffi/win32_x64/koffi.node
358
- var koffi_default16;
359
- var init_koffi16 = __esm({
360
- "node_modules/koffi/build/koffi/win32_x64/koffi.node"() {
361
- koffi_default16 = "../koffi-IDX6JEDH.node";
362
- }
363
- });
364
-
365
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_x64/koffi.node
366
- var require_koffi16 = __commonJS2({
367
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_x64/koffi.node"(exports2, module2) {
368
- init_koffi16();
369
- try {
370
- module2.exports = __require(koffi_default16);
371
- } catch {
372
- }
373
- }
374
- });
375
-
376
- // node_modules/koffi/build/koffi/musl_arm64/koffi.node
377
- var koffi_default17;
378
- var init_koffi17 = __esm({
379
- "node_modules/koffi/build/koffi/musl_arm64/koffi.node"() {
380
- koffi_default17 = "../koffi-3HFAASOB.node";
381
- }
382
- });
383
-
384
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_arm64/koffi.node
385
- var require_koffi17 = __commonJS2({
386
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_arm64/koffi.node"(exports2, module2) {
387
- init_koffi17();
388
- try {
389
- module2.exports = __require(koffi_default17);
390
- } catch {
391
- }
392
- }
393
- });
394
-
395
- // node_modules/koffi/build/koffi/musl_x64/koffi.node
396
- var koffi_default18;
397
- var init_koffi18 = __esm({
398
- "node_modules/koffi/build/koffi/musl_x64/koffi.node"() {
399
- koffi_default18 = "../koffi-BMO5K7B3.node";
400
- }
401
- });
402
-
403
- // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_x64/koffi.node
404
- var require_koffi18 = __commonJS2({
405
- "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_x64/koffi.node"(exports2, module2) {
406
- init_koffi18();
407
- try {
408
- module2.exports = __require(koffi_default18);
409
- } catch {
410
- }
411
- }
412
- });
413
-
414
- // node_modules/koffi/index.js
415
- var require_koffi19 = __commonJS2({
416
- "node_modules/koffi/index.js"(exports$1, module) {
417
- var __getOwnPropNames = Object.getOwnPropertyNames;
418
- var __commonJS = (cb, mod3) => function __require2() {
419
- return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports;
420
- };
421
- var require_tools = __commonJS({
422
- "bin/Koffi/package/src/cnoke/src/tools.js"(exports2, module2) {
423
- var crypto = __require("crypto");
424
- var fs2 = __require("fs");
425
- var http = __require("https");
426
- var path2 = __require("path");
427
- var zlib = __require("zlib");
428
- async function download_http(url, dest) {
429
- console.log(">> Downloading " + url);
430
- let [tmp_name, file] = open_temporary_stream(dest);
431
- try {
432
- await new Promise((resolve, reject) => {
433
- let request = http.get(url, (response) => {
434
- if (response.statusCode != 200) {
435
- let err = new Error(`Download failed: ${response.statusMessage} [${response.statusCode}]`);
436
- err.code = response.statusCode;
437
- reject(err);
438
- return;
439
- }
440
- response.pipe(file);
441
- file.on("finish", () => file.close(() => {
442
- try {
443
- fs2.renameSync(file.path, dest);
444
- } catch (err) {
445
- if (!fs2.existsSync(dest))
446
- reject(err);
447
- }
448
- resolve();
449
- }));
450
- });
451
- request.on("error", reject);
452
- file.on("error", reject);
453
- });
454
- } catch (err) {
455
- file.close();
456
- try {
457
- fs2.unlinkSync(tmp_name);
458
- } catch (err2) {
459
- if (err2.code != "ENOENT")
460
- throw err2;
461
- }
462
- throw err;
463
- }
464
- }
465
- function open_temporary_stream(prefix) {
466
- let buf = Buffer.allocUnsafe(4);
467
- for (; ; ) {
468
- try {
469
- crypto.randomFillSync(buf);
470
- let suffix = buf.toString("hex").padStart(8, "0");
471
- let filename2 = `${prefix}.${suffix}`;
472
- let file = fs2.createWriteStream(filename2, { flags: "wx", mode: 420 });
473
- return [filename2, file];
474
- } catch (err) {
475
- if (err.code != "EEXIST")
476
- throw err;
477
- }
478
- }
77
+ var DenoRuntime;
78
+ var init_deno_runtime = __esm({
79
+ "src/ffi/deno-runtime.ts"() {
80
+ init_runtime_interface();
81
+ DenoRuntime = class extends BaseTaskerRuntime {
82
+ name = "deno";
83
+ lib = null;
84
+ encoder = new TextEncoder();
85
+ get isLoaded() {
86
+ return this.lib !== null;
87
+ }
88
+ async load(libraryPath) {
89
+ if (this.lib !== null) {
90
+ return;
479
91
  }
480
- function extract_targz(filename2, dest_dir, strip = 0) {
481
- let reader = fs2.createReadStream(filename2).pipe(zlib.createGunzip());
482
- return new Promise((resolve, reject) => {
483
- let header = null;
484
- let extended = {};
485
- reader.on("readable", () => {
486
- try {
487
- for (; ; ) {
488
- if (header == null) {
489
- let buf = reader.read(512);
490
- if (buf == null)
491
- break;
492
- if (!buf[0])
493
- continue;
494
- header = {
495
- filename: buf.toString("utf-8", 0, 100).replace(/\0/g, ""),
496
- mode: parseInt(buf.toString("ascii", 100, 109), 8),
497
- size: parseInt(buf.toString("ascii", 124, 137), 8),
498
- type: String.fromCharCode(buf[156])
499
- };
500
- Object.assign(header, extended);
501
- extended = {};
502
- header.filename = header.filename.replace(/\\/g, "/");
503
- if (!header.filename.length)
504
- throw new Error(`Insecure empty filename inside TAR archive`);
505
- if (path_is_absolute(header.filename[0]))
506
- throw new Error(`Insecure filename starting with / inside TAR archive`);
507
- if (path_has_dotdot(header.filename))
508
- throw new Error(`Insecure filename containing '..' inside TAR archive`);
509
- for (let i = 0; i < strip; i++)
510
- header.filename = header.filename.substr(header.filename.indexOf("/") + 1);
511
- }
512
- let aligned = Math.floor((header.size + 511) / 512) * 512;
513
- let data = header.size ? reader.read(aligned) : null;
514
- if (data == null) {
515
- if (header.size)
516
- break;
517
- data = Buffer.alloc(0);
518
- }
519
- data = data.subarray(0, header.size);
520
- if (header.type == "0" || header.type == "7") {
521
- let filename3 = dest_dir + "/" + header.filename;
522
- let dirname2 = path2.dirname(filename3);
523
- fs2.mkdirSync(dirname2, { recursive: true, mode: 493 });
524
- fs2.writeFileSync(filename3, data, { mode: header.mode });
525
- } else if (header.type == "5") {
526
- let filename3 = dest_dir + "/" + header.filename;
527
- fs2.mkdirSync(filename3, { recursive: true, mode: header.mode });
528
- } else if (header.type == "L") {
529
- extended.filename = data.toString("utf-8").replace(/\0/g, "");
530
- } else if (header.type == "x") {
531
- let str = data.toString("utf-8");
532
- try {
533
- while (str.length) {
534
- let matches = str.match(/^([0-9]+) ([a-zA-Z0-9\._]+)=(.*)\n/);
535
- let skip = parseInt(matches[1], 10);
536
- let key = matches[2];
537
- let value = matches[3];
538
- switch (key) {
539
- case "path":
540
- {
541
- extended.filename = value;
542
- }
543
- break;
544
- case "size":
545
- {
546
- extended.size = parseInt(value, 10);
547
- }
548
- break;
549
- }
550
- str = str.substr(skip).trimStart();
551
- }
552
- } catch (err) {
553
- throw new Error("Malformed PAX entry");
554
- }
555
- }
556
- header = null;
557
- }
558
- } catch (err) {
559
- reject(err);
560
- }
561
- });
562
- reader.on("error", reject);
563
- reader.on("end", resolve);
564
- });
92
+ if (typeof Deno === "undefined") {
93
+ throw new Error("Deno runtime not detected");
565
94
  }
566
- function path_is_absolute(path3) {
567
- if (process.platform == "win32" && path3.match(/^[a-zA-Z]:/))
568
- path3 = path3.substr(2);
569
- return is_path_separator(path3[0]);
570
- }
571
- function path_has_dotdot(path3) {
572
- let start = 0;
573
- for (; ; ) {
574
- let offset = path3.indexOf("..", start);
575
- if (offset < 0)
576
- break;
577
- start = offset + 2;
578
- if (offset && !is_path_separator(path3[offset - 1]))
579
- continue;
580
- if (offset + 2 < path3.length && !is_path_separator(path3[offset + 2]))
581
- continue;
582
- return true;
583
- }
584
- return false;
585
- }
586
- function is_path_separator(c) {
587
- if (c == "/")
588
- return true;
589
- if (process.platform == "win32" && c == "\\")
590
- return true;
591
- return false;
592
- }
593
- function sync_files(src_dir, dest_dir) {
594
- let keep = /* @__PURE__ */ new Set();
595
- {
596
- let entries = fs2.readdirSync(src_dir, { withFileTypes: true });
597
- for (let entry of entries) {
598
- if (!entry.isFile())
599
- continue;
600
- keep.add(entry.name);
601
- fs2.copyFileSync(src_dir + `/${entry.name}`, dest_dir + `/${entry.name}`);
602
- }
603
- }
604
- {
605
- let entries = fs2.readdirSync(dest_dir, { withFileTypes: true });
606
- for (let entry of entries) {
607
- if (!entry.isFile())
608
- continue;
609
- if (keep.has(entry.name))
610
- continue;
611
- fs2.unlinkSync(dest_dir + `/${entry.name}`);
612
- }
95
+ this.lib = Deno.dlopen(libraryPath, {
96
+ get_version: {
97
+ parameters: [],
98
+ result: "pointer"
99
+ },
100
+ get_rust_version: {
101
+ parameters: [],
102
+ result: "pointer"
103
+ },
104
+ health_check: {
105
+ parameters: [],
106
+ result: "i32"
107
+ },
108
+ is_worker_running: {
109
+ parameters: [],
110
+ result: "i32"
111
+ },
112
+ bootstrap_worker: {
113
+ parameters: ["buffer"],
114
+ result: "pointer"
115
+ },
116
+ get_worker_status: {
117
+ parameters: [],
118
+ result: "pointer"
119
+ },
120
+ stop_worker: {
121
+ parameters: [],
122
+ result: "pointer"
123
+ },
124
+ transition_to_graceful_shutdown: {
125
+ parameters: [],
126
+ result: "pointer"
127
+ },
128
+ poll_step_events: {
129
+ parameters: [],
130
+ result: "pointer"
131
+ },
132
+ poll_in_process_events: {
133
+ parameters: [],
134
+ result: "pointer"
135
+ },
136
+ complete_step_event: {
137
+ parameters: ["buffer", "buffer"],
138
+ result: "i32"
139
+ },
140
+ checkpoint_yield_step_event: {
141
+ parameters: ["buffer", "buffer"],
142
+ result: "i32"
143
+ },
144
+ get_ffi_dispatch_metrics: {
145
+ parameters: [],
146
+ result: "pointer"
147
+ },
148
+ check_starvation_warnings: {
149
+ parameters: [],
150
+ result: "void"
151
+ },
152
+ cleanup_timeouts: {
153
+ parameters: [],
154
+ result: "void"
155
+ },
156
+ log_error: {
157
+ parameters: ["buffer", "buffer"],
158
+ result: "void"
159
+ },
160
+ log_warn: {
161
+ parameters: ["buffer", "buffer"],
162
+ result: "void"
163
+ },
164
+ log_info: {
165
+ parameters: ["buffer", "buffer"],
166
+ result: "void"
167
+ },
168
+ log_debug: {
169
+ parameters: ["buffer", "buffer"],
170
+ result: "void"
171
+ },
172
+ log_trace: {
173
+ parameters: ["buffer", "buffer"],
174
+ result: "void"
175
+ },
176
+ free_rust_string: {
177
+ parameters: ["pointer"],
178
+ result: "void"
179
+ },
180
+ // Client API functions (TAS-231)
181
+ client_create_task: {
182
+ parameters: ["buffer"],
183
+ result: "pointer"
184
+ },
185
+ client_get_task: {
186
+ parameters: ["buffer"],
187
+ result: "pointer"
188
+ },
189
+ client_list_tasks: {
190
+ parameters: ["buffer"],
191
+ result: "pointer"
192
+ },
193
+ client_cancel_task: {
194
+ parameters: ["buffer"],
195
+ result: "pointer"
196
+ },
197
+ client_list_task_steps: {
198
+ parameters: ["buffer"],
199
+ result: "pointer"
200
+ },
201
+ client_get_step: {
202
+ parameters: ["buffer", "buffer"],
203
+ result: "pointer"
204
+ },
205
+ client_get_step_audit_history: {
206
+ parameters: ["buffer", "buffer"],
207
+ result: "pointer"
208
+ },
209
+ client_health_check: {
210
+ parameters: [],
211
+ result: "pointer"
613
212
  }
213
+ });
214
+ }
215
+ unload() {
216
+ if (this.lib) {
217
+ this.lib.close();
218
+ this.lib = null;
614
219
  }
615
- function determine_arch2() {
616
- let arch = process.arch;
617
- if (arch == "riscv32" || arch == "riscv64") {
618
- let buf = read_file_header(process.execPath, 512);
619
- let header = decode_elf_header(buf);
620
- let float_abi = header.e_flags & 6;
621
- switch (float_abi) {
622
- case 0:
623
- break;
624
- case 2:
625
- {
626
- arch += "f";
627
- }
628
- break;
629
- case 4:
630
- {
631
- arch += "d";
632
- }
633
- break;
634
- case 6:
635
- {
636
- arch += "q";
637
- }
638
- break;
639
- }
640
- } else if (arch == "arm") {
641
- let buf = read_file_header(process.execPath, 512);
642
- let header = decode_elf_header(buf);
643
- if (header.e_flags & 1024) {
644
- arch += "hf";
645
- } else if (header.e_flags & 512) {
646
- arch += "sf";
647
- } else {
648
- throw new Error("Unknown ARM floating-point ABI");
649
- }
650
- }
651
- return arch;
220
+ }
221
+ ensureLoaded() {
222
+ if (!this.lib) {
223
+ throw new Error("Native library not loaded. Call load() first.");
652
224
  }
653
- function read_file_header(filename2, read) {
654
- try {
655
- let fd2 = fs2.openSync(filename2);
656
- let buf = Buffer.allocUnsafe(read);
657
- let len = fs2.readSync(fd2, buf);
658
- return buf.subarray(0, len);
659
- } finally {
660
- }
225
+ return this.lib.symbols;
226
+ }
227
+ /**
228
+ * Creates a null-terminated C string buffer.
229
+ * With 'buffer' FFI type, we return Uint8Array directly.
230
+ */
231
+ toCString(str) {
232
+ return this.encoder.encode(`${str}\0`);
233
+ }
234
+ // biome-ignore lint/suspicious/noExplicitAny: Deno PointerValue type
235
+ fromCString(ptr) {
236
+ if (ptr === null || Deno.UnsafePointer.equals(ptr, null)) {
237
+ return null;
661
238
  }
662
- function decode_elf_header(buf) {
663
- let header = {};
664
- if (buf.length < 16)
665
- throw new Error("Truncated header");
666
- if (buf[0] != 127 || buf[1] != 69 || buf[2] != 76 || buf[3] != 70)
667
- throw new Error("Invalid magic number");
668
- if (buf[6] != 1)
669
- throw new Error("Invalid ELF version");
670
- if (buf[5] != 1)
671
- throw new Error("Big-endian architectures are not supported");
672
- let machine = buf.readUInt16LE(18);
673
- switch (machine) {
674
- case 3:
675
- {
676
- header.e_machine = "ia32";
677
- }
678
- break;
679
- case 40:
680
- {
681
- header.e_machine = "arm";
682
- }
683
- break;
684
- case 62:
685
- {
686
- header.e_machine = "amd64";
687
- }
688
- break;
689
- case 183:
690
- {
691
- header.e_machine = "arm64";
692
- }
693
- break;
694
- case 243:
695
- {
696
- switch (buf[4]) {
697
- case 1:
698
- {
699
- header.e_machine = "riscv32";
700
- }
701
- break;
702
- case 2:
703
- {
704
- header.e_machine = "riscv64";
705
- }
706
- break;
707
- }
708
- }
709
- break;
710
- case 248:
711
- {
712
- switch (buf[4]) {
713
- case 1:
714
- {
715
- header.e_machine = "loong32";
716
- }
717
- break;
718
- case 2:
719
- {
720
- header.e_machine = "loong64";
721
- }
722
- break;
723
- }
724
- }
725
- break;
726
- default:
727
- throw new Error("Unknown ELF machine type");
728
- }
729
- switch (buf[4]) {
730
- case 1:
731
- {
732
- buf = buf.subarray(0, 68);
733
- if (buf.length < 68)
734
- throw new Error("Truncated ELF header");
735
- header.ei_class = 32;
736
- header.e_flags = buf.readUInt32LE(36);
737
- }
738
- break;
739
- case 2:
740
- {
741
- buf = buf.subarray(0, 120);
742
- if (buf.length < 120)
743
- throw new Error("Truncated ELF header");
744
- header.ei_class = 64;
745
- header.e_flags = buf.readUInt32LE(48);
746
- }
747
- break;
748
- default:
749
- throw new Error("Invalid ELF class");
750
- }
751
- return header;
239
+ const view = new Deno.UnsafePointerView(ptr);
240
+ return view.getCString();
241
+ }
242
+ getVersion() {
243
+ const symbols = this.ensureLoaded();
244
+ const result = symbols.get_version();
245
+ const version = this.fromCString(result) ?? "unknown";
246
+ if (result !== null) symbols.free_rust_string(result);
247
+ return version;
248
+ }
249
+ getRustVersion() {
250
+ const symbols = this.ensureLoaded();
251
+ const result = symbols.get_rust_version();
252
+ const version = this.fromCString(result) ?? "unknown";
253
+ if (result !== null) symbols.free_rust_string(result);
254
+ return version;
255
+ }
256
+ healthCheck() {
257
+ const symbols = this.ensureLoaded();
258
+ return symbols.health_check() === 1;
259
+ }
260
+ bootstrapWorker(config) {
261
+ const symbols = this.ensureLoaded();
262
+ const configBuf = config ? this.toCString(this.toJson(config)) : null;
263
+ const result = symbols.bootstrap_worker(configBuf);
264
+ const jsonStr = this.fromCString(result);
265
+ if (result !== null) symbols.free_rust_string(result);
266
+ const parsed = this.parseJson(jsonStr);
267
+ return parsed ?? {
268
+ success: false,
269
+ status: "error",
270
+ message: "Failed to parse bootstrap result",
271
+ error: "Invalid JSON response"
272
+ };
273
+ }
274
+ isWorkerRunning() {
275
+ const symbols = this.ensureLoaded();
276
+ return symbols.is_worker_running() === 1;
277
+ }
278
+ getWorkerStatus() {
279
+ const symbols = this.ensureLoaded();
280
+ const result = symbols.get_worker_status();
281
+ const jsonStr = this.fromCString(result);
282
+ if (result !== null) symbols.free_rust_string(result);
283
+ const parsed = this.parseJson(jsonStr);
284
+ return parsed ?? { success: false, running: false };
285
+ }
286
+ stopWorker() {
287
+ const symbols = this.ensureLoaded();
288
+ const result = symbols.stop_worker();
289
+ const jsonStr = this.fromCString(result);
290
+ if (result !== null) symbols.free_rust_string(result);
291
+ const parsed = this.parseJson(jsonStr);
292
+ return parsed ?? {
293
+ success: false,
294
+ status: "error",
295
+ message: "Failed to parse stop result",
296
+ error: "Invalid JSON response"
297
+ };
298
+ }
299
+ transitionToGracefulShutdown() {
300
+ const symbols = this.ensureLoaded();
301
+ const result = symbols.transition_to_graceful_shutdown();
302
+ const jsonStr = this.fromCString(result);
303
+ if (result !== null) symbols.free_rust_string(result);
304
+ const parsed = this.parseJson(jsonStr);
305
+ return parsed ?? {
306
+ success: false,
307
+ status: "error",
308
+ message: "Failed to parse shutdown result",
309
+ error: "Invalid JSON response"
310
+ };
311
+ }
312
+ pollStepEvents() {
313
+ const symbols = this.ensureLoaded();
314
+ const result = symbols.poll_step_events();
315
+ if (result === null || Deno.UnsafePointer.equals(result, null)) {
316
+ return null;
752
317
  }
753
- function unlink_recursive(path3) {
318
+ const jsonStr = this.fromCString(result);
319
+ symbols.free_rust_string(result);
320
+ return this.parseJson(jsonStr);
321
+ }
322
+ pollInProcessEvents() {
323
+ const symbols = this.ensureLoaded();
324
+ const result = symbols.poll_in_process_events();
325
+ if (result === null || Deno.UnsafePointer.equals(result, null)) {
326
+ return null;
327
+ }
328
+ const jsonStr = this.fromCString(result);
329
+ symbols.free_rust_string(result);
330
+ return this.parseJson(jsonStr);
331
+ }
332
+ completeStepEvent(eventId, result) {
333
+ const symbols = this.ensureLoaded();
334
+ const eventIdBuf = this.toCString(eventId);
335
+ const resultJsonBuf = this.toCString(this.toJson(result));
336
+ return symbols.complete_step_event(eventIdBuf, resultJsonBuf) === 1;
337
+ }
338
+ checkpointYieldStepEvent(eventId, checkpointData) {
339
+ const symbols = this.ensureLoaded();
340
+ const eventIdBuf = this.toCString(eventId);
341
+ const checkpointJsonBuf = this.toCString(this.toJson(checkpointData));
342
+ return symbols.checkpoint_yield_step_event(eventIdBuf, checkpointJsonBuf) === 1;
343
+ }
344
+ getFfiDispatchMetrics() {
345
+ const symbols = this.ensureLoaded();
346
+ const result = symbols.get_ffi_dispatch_metrics();
347
+ const jsonStr = this.fromCString(result);
348
+ if (result !== null) symbols.free_rust_string(result);
349
+ const parsed = this.parseJson(jsonStr);
350
+ if (parsed && typeof parsed.pending_count === "number") {
351
+ return parsed;
352
+ }
353
+ return {
354
+ pending_count: 0,
355
+ starvation_detected: false,
356
+ starving_event_count: 0,
357
+ oldest_pending_age_ms: null,
358
+ newest_pending_age_ms: null,
359
+ oldest_event_id: null
360
+ };
361
+ }
362
+ checkStarvationWarnings() {
363
+ const symbols = this.ensureLoaded();
364
+ symbols.check_starvation_warnings();
365
+ }
366
+ cleanupTimeouts() {
367
+ const symbols = this.ensureLoaded();
368
+ symbols.cleanup_timeouts();
369
+ }
370
+ logError(message, fields) {
371
+ const symbols = this.ensureLoaded();
372
+ const msgBuf = this.toCString(message);
373
+ const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
374
+ symbols.log_error(msgBuf, fieldsBuf);
375
+ }
376
+ logWarn(message, fields) {
377
+ const symbols = this.ensureLoaded();
378
+ const msgBuf = this.toCString(message);
379
+ const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
380
+ symbols.log_warn(msgBuf, fieldsBuf);
381
+ }
382
+ logInfo(message, fields) {
383
+ const symbols = this.ensureLoaded();
384
+ const msgBuf = this.toCString(message);
385
+ const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
386
+ symbols.log_info(msgBuf, fieldsBuf);
387
+ }
388
+ logDebug(message, fields) {
389
+ const symbols = this.ensureLoaded();
390
+ const msgBuf = this.toCString(message);
391
+ const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
392
+ symbols.log_debug(msgBuf, fieldsBuf);
393
+ }
394
+ logTrace(message, fields) {
395
+ const symbols = this.ensureLoaded();
396
+ const msgBuf = this.toCString(message);
397
+ const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
398
+ symbols.log_trace(msgBuf, fieldsBuf);
399
+ }
400
+ // ==========================================================================
401
+ // Client API Operations (TAS-231)
402
+ // ==========================================================================
403
+ parseClientResult(result) {
404
+ const jsonStr = this.fromCString(result);
405
+ if (result !== null) this.ensureLoaded().free_rust_string(result);
406
+ const parsed = this.parseJson(jsonStr);
407
+ return parsed ?? {
408
+ success: false,
409
+ data: null,
410
+ error: "Failed to parse client result",
411
+ recoverable: null
412
+ };
413
+ }
414
+ clientCreateTask(requestJson) {
415
+ const symbols = this.ensureLoaded();
416
+ const buf = this.toCString(requestJson);
417
+ const result = symbols.client_create_task(buf);
418
+ return this.parseClientResult(result);
419
+ }
420
+ clientGetTask(taskUuid) {
421
+ const symbols = this.ensureLoaded();
422
+ const buf = this.toCString(taskUuid);
423
+ const result = symbols.client_get_task(buf);
424
+ return this.parseClientResult(result);
425
+ }
426
+ clientListTasks(paramsJson) {
427
+ const symbols = this.ensureLoaded();
428
+ const buf = this.toCString(paramsJson);
429
+ const result = symbols.client_list_tasks(buf);
430
+ return this.parseClientResult(result);
431
+ }
432
+ clientCancelTask(taskUuid) {
433
+ const symbols = this.ensureLoaded();
434
+ const buf = this.toCString(taskUuid);
435
+ const result = symbols.client_cancel_task(buf);
436
+ return this.parseClientResult(result);
437
+ }
438
+ clientListTaskSteps(taskUuid) {
439
+ const symbols = this.ensureLoaded();
440
+ const buf = this.toCString(taskUuid);
441
+ const result = symbols.client_list_task_steps(buf);
442
+ return this.parseClientResult(result);
443
+ }
444
+ clientGetStep(taskUuid, stepUuid) {
445
+ const symbols = this.ensureLoaded();
446
+ const tBuf = this.toCString(taskUuid);
447
+ const sBuf = this.toCString(stepUuid);
448
+ const result = symbols.client_get_step(tBuf, sBuf);
449
+ return this.parseClientResult(result);
450
+ }
451
+ clientGetStepAuditHistory(taskUuid, stepUuid) {
452
+ const symbols = this.ensureLoaded();
453
+ const tBuf = this.toCString(taskUuid);
454
+ const sBuf = this.toCString(stepUuid);
455
+ const result = symbols.client_get_step_audit_history(tBuf, sBuf);
456
+ return this.parseClientResult(result);
457
+ }
458
+ clientHealthCheck() {
459
+ const symbols = this.ensureLoaded();
460
+ const result = symbols.client_health_check();
461
+ return this.parseClientResult(result);
462
+ }
463
+ };
464
+ }
465
+ });
466
+
467
+ // node_modules/koffi/build/koffi/darwin_arm64/koffi.node
468
+ var koffi_default;
469
+ var init_koffi = __esm({
470
+ "node_modules/koffi/build/koffi/darwin_arm64/koffi.node"() {
471
+ koffi_default = "../koffi-X7JMBSZH.node";
472
+ }
473
+ });
474
+
475
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_arm64/koffi.node
476
+ var require_koffi = __commonJS2({
477
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_arm64/koffi.node"(exports2, module2) {
478
+ init_koffi();
479
+ try {
480
+ module2.exports = __require(koffi_default);
481
+ } catch {
482
+ }
483
+ }
484
+ });
485
+
486
+ // node_modules/koffi/build/koffi/darwin_x64/koffi.node
487
+ var koffi_default2;
488
+ var init_koffi2 = __esm({
489
+ "node_modules/koffi/build/koffi/darwin_x64/koffi.node"() {
490
+ koffi_default2 = "../koffi-OMHWL3D6.node";
491
+ }
492
+ });
493
+
494
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_x64/koffi.node
495
+ var require_koffi2 = __commonJS2({
496
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/darwin_x64/koffi.node"(exports2, module2) {
497
+ init_koffi2();
498
+ try {
499
+ module2.exports = __require(koffi_default2);
500
+ } catch {
501
+ }
502
+ }
503
+ });
504
+
505
+ // node_modules/koffi/build/koffi/freebsd_arm64/koffi.node
506
+ var koffi_default3;
507
+ var init_koffi3 = __esm({
508
+ "node_modules/koffi/build/koffi/freebsd_arm64/koffi.node"() {
509
+ koffi_default3 = "../koffi-AVDVVSXH.node";
510
+ }
511
+ });
512
+
513
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node
514
+ var require_koffi3 = __commonJS2({
515
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_arm64/koffi.node"(exports2, module2) {
516
+ init_koffi3();
517
+ try {
518
+ module2.exports = __require(koffi_default3);
519
+ } catch {
520
+ }
521
+ }
522
+ });
523
+
524
+ // node_modules/koffi/build/koffi/freebsd_ia32/koffi.node
525
+ var koffi_default4;
526
+ var init_koffi4 = __esm({
527
+ "node_modules/koffi/build/koffi/freebsd_ia32/koffi.node"() {
528
+ koffi_default4 = "../koffi-GG4SDSYA.node";
529
+ }
530
+ });
531
+
532
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node
533
+ var require_koffi4 = __commonJS2({
534
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_ia32/koffi.node"(exports2, module2) {
535
+ init_koffi4();
536
+ try {
537
+ module2.exports = __require(koffi_default4);
538
+ } catch {
539
+ }
540
+ }
541
+ });
542
+
543
+ // node_modules/koffi/build/koffi/freebsd_x64/koffi.node
544
+ var koffi_default5;
545
+ var init_koffi5 = __esm({
546
+ "node_modules/koffi/build/koffi/freebsd_x64/koffi.node"() {
547
+ koffi_default5 = "../koffi-AHHUCM3C.node";
548
+ }
549
+ });
550
+
551
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_x64/koffi.node
552
+ var require_koffi5 = __commonJS2({
553
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/freebsd_x64/koffi.node"(exports2, module2) {
554
+ init_koffi5();
555
+ try {
556
+ module2.exports = __require(koffi_default5);
557
+ } catch {
558
+ }
559
+ }
560
+ });
561
+
562
+ // node_modules/koffi/build/koffi/linux_armhf/koffi.node
563
+ var koffi_default6;
564
+ var init_koffi6 = __esm({
565
+ "node_modules/koffi/build/koffi/linux_armhf/koffi.node"() {
566
+ koffi_default6 = "../koffi-YNQDUF3Q.node";
567
+ }
568
+ });
569
+
570
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_armhf/koffi.node
571
+ var require_koffi6 = __commonJS2({
572
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_armhf/koffi.node"(exports2, module2) {
573
+ init_koffi6();
574
+ try {
575
+ module2.exports = __require(koffi_default6);
576
+ } catch {
577
+ }
578
+ }
579
+ });
580
+
581
+ // node_modules/koffi/build/koffi/linux_arm64/koffi.node
582
+ var koffi_default7;
583
+ var init_koffi7 = __esm({
584
+ "node_modules/koffi/build/koffi/linux_arm64/koffi.node"() {
585
+ koffi_default7 = "../koffi-SE4ZI36U.node";
586
+ }
587
+ });
588
+
589
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_arm64/koffi.node
590
+ var require_koffi7 = __commonJS2({
591
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_arm64/koffi.node"(exports2, module2) {
592
+ init_koffi7();
593
+ try {
594
+ module2.exports = __require(koffi_default7);
595
+ } catch {
596
+ }
597
+ }
598
+ });
599
+
600
+ // node_modules/koffi/build/koffi/linux_ia32/koffi.node
601
+ var koffi_default8;
602
+ var init_koffi8 = __esm({
603
+ "node_modules/koffi/build/koffi/linux_ia32/koffi.node"() {
604
+ koffi_default8 = "../koffi-LOH6WKRQ.node";
605
+ }
606
+ });
607
+
608
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_ia32/koffi.node
609
+ var require_koffi8 = __commonJS2({
610
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_ia32/koffi.node"(exports2, module2) {
611
+ init_koffi8();
612
+ try {
613
+ module2.exports = __require(koffi_default8);
614
+ } catch {
615
+ }
616
+ }
617
+ });
618
+
619
+ // node_modules/koffi/build/koffi/linux_loong64/koffi.node
620
+ var koffi_default9;
621
+ var init_koffi9 = __esm({
622
+ "node_modules/koffi/build/koffi/linux_loong64/koffi.node"() {
623
+ koffi_default9 = "../koffi-QKY2KSXW.node";
624
+ }
625
+ });
626
+
627
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_loong64/koffi.node
628
+ var require_koffi9 = __commonJS2({
629
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_loong64/koffi.node"(exports2, module2) {
630
+ init_koffi9();
631
+ try {
632
+ module2.exports = __require(koffi_default9);
633
+ } catch {
634
+ }
635
+ }
636
+ });
637
+
638
+ // node_modules/koffi/build/koffi/linux_riscv64d/koffi.node
639
+ var koffi_default10;
640
+ var init_koffi10 = __esm({
641
+ "node_modules/koffi/build/koffi/linux_riscv64d/koffi.node"() {
642
+ koffi_default10 = "../koffi-X3YT67KE.node";
643
+ }
644
+ });
645
+
646
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node
647
+ var require_koffi10 = __commonJS2({
648
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_riscv64d/koffi.node"(exports2, module2) {
649
+ init_koffi10();
650
+ try {
651
+ module2.exports = __require(koffi_default10);
652
+ } catch {
653
+ }
654
+ }
655
+ });
656
+
657
+ // node_modules/koffi/build/koffi/linux_x64/koffi.node
658
+ var koffi_default11;
659
+ var init_koffi11 = __esm({
660
+ "node_modules/koffi/build/koffi/linux_x64/koffi.node"() {
661
+ koffi_default11 = "../koffi-G4D35B2D.node";
662
+ }
663
+ });
664
+
665
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_x64/koffi.node
666
+ var require_koffi11 = __commonJS2({
667
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/linux_x64/koffi.node"(exports2, module2) {
668
+ init_koffi11();
669
+ try {
670
+ module2.exports = __require(koffi_default11);
671
+ } catch {
672
+ }
673
+ }
674
+ });
675
+
676
+ // node_modules/koffi/build/koffi/openbsd_ia32/koffi.node
677
+ var koffi_default12;
678
+ var init_koffi12 = __esm({
679
+ "node_modules/koffi/build/koffi/openbsd_ia32/koffi.node"() {
680
+ koffi_default12 = "../koffi-LUY2JHJP.node";
681
+ }
682
+ });
683
+
684
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node
685
+ var require_koffi12 = __commonJS2({
686
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_ia32/koffi.node"(exports2, module2) {
687
+ init_koffi12();
688
+ try {
689
+ module2.exports = __require(koffi_default12);
690
+ } catch {
691
+ }
692
+ }
693
+ });
694
+
695
+ // node_modules/koffi/build/koffi/openbsd_x64/koffi.node
696
+ var koffi_default13;
697
+ var init_koffi13 = __esm({
698
+ "node_modules/koffi/build/koffi/openbsd_x64/koffi.node"() {
699
+ koffi_default13 = "../koffi-ROB3FRHA.node";
700
+ }
701
+ });
702
+
703
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_x64/koffi.node
704
+ var require_koffi13 = __commonJS2({
705
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/openbsd_x64/koffi.node"(exports2, module2) {
706
+ init_koffi13();
707
+ try {
708
+ module2.exports = __require(koffi_default13);
709
+ } catch {
710
+ }
711
+ }
712
+ });
713
+
714
+ // node_modules/koffi/build/koffi/win32_arm64/koffi.node
715
+ var koffi_default14;
716
+ var init_koffi14 = __esm({
717
+ "node_modules/koffi/build/koffi/win32_arm64/koffi.node"() {
718
+ koffi_default14 = "../koffi-GOENU54R.node";
719
+ }
720
+ });
721
+
722
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_arm64/koffi.node
723
+ var require_koffi14 = __commonJS2({
724
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_arm64/koffi.node"(exports2, module2) {
725
+ init_koffi14();
726
+ try {
727
+ module2.exports = __require(koffi_default14);
728
+ } catch {
729
+ }
730
+ }
731
+ });
732
+
733
+ // node_modules/koffi/build/koffi/win32_ia32/koffi.node
734
+ var koffi_default15;
735
+ var init_koffi15 = __esm({
736
+ "node_modules/koffi/build/koffi/win32_ia32/koffi.node"() {
737
+ koffi_default15 = "../koffi-KFZAXWPQ.node";
738
+ }
739
+ });
740
+
741
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_ia32/koffi.node
742
+ var require_koffi15 = __commonJS2({
743
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_ia32/koffi.node"(exports2, module2) {
744
+ init_koffi15();
745
+ try {
746
+ module2.exports = __require(koffi_default15);
747
+ } catch {
748
+ }
749
+ }
750
+ });
751
+
752
+ // node_modules/koffi/build/koffi/win32_x64/koffi.node
753
+ var koffi_default16;
754
+ var init_koffi16 = __esm({
755
+ "node_modules/koffi/build/koffi/win32_x64/koffi.node"() {
756
+ koffi_default16 = "../koffi-IDX6JEDH.node";
757
+ }
758
+ });
759
+
760
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_x64/koffi.node
761
+ var require_koffi16 = __commonJS2({
762
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/win32_x64/koffi.node"(exports2, module2) {
763
+ init_koffi16();
764
+ try {
765
+ module2.exports = __require(koffi_default16);
766
+ } catch {
767
+ }
768
+ }
769
+ });
770
+
771
+ // node_modules/koffi/build/koffi/musl_arm64/koffi.node
772
+ var koffi_default17;
773
+ var init_koffi17 = __esm({
774
+ "node_modules/koffi/build/koffi/musl_arm64/koffi.node"() {
775
+ koffi_default17 = "../koffi-3HFAASOB.node";
776
+ }
777
+ });
778
+
779
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_arm64/koffi.node
780
+ var require_koffi17 = __commonJS2({
781
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_arm64/koffi.node"(exports2, module2) {
782
+ init_koffi17();
783
+ try {
784
+ module2.exports = __require(koffi_default17);
785
+ } catch {
786
+ }
787
+ }
788
+ });
789
+
790
+ // node_modules/koffi/build/koffi/musl_x64/koffi.node
791
+ var koffi_default18;
792
+ var init_koffi18 = __esm({
793
+ "node_modules/koffi/build/koffi/musl_x64/koffi.node"() {
794
+ koffi_default18 = "../koffi-BMO5K7B3.node";
795
+ }
796
+ });
797
+
798
+ // node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_x64/koffi.node
799
+ var require_koffi18 = __commonJS2({
800
+ "node-file:/home/runner/work/tasker-core/tasker-core/workers/typescript/node_modules/koffi/build/koffi/musl_x64/koffi.node"(exports2, module2) {
801
+ init_koffi18();
802
+ try {
803
+ module2.exports = __require(koffi_default18);
804
+ } catch {
805
+ }
806
+ }
807
+ });
808
+
809
+ // node_modules/koffi/index.js
810
+ var require_koffi19 = __commonJS2({
811
+ "node_modules/koffi/index.js"(exports$1, module) {
812
+ var __getOwnPropNames = Object.getOwnPropertyNames;
813
+ var __commonJS = (cb, mod3) => function __require2() {
814
+ return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports;
815
+ };
816
+ var require_tools = __commonJS({
817
+ "bin/Koffi/package/src/cnoke/src/tools.js"(exports2, module2) {
818
+ var crypto = __require("crypto");
819
+ var fs2 = __require("fs");
820
+ var http = __require("https");
821
+ var path2 = __require("path");
822
+ var zlib = __require("zlib");
823
+ async function download_http(url, dest) {
824
+ console.log(">> Downloading " + url);
825
+ let [tmp_name, file] = open_temporary_stream(dest);
754
826
  try {
755
- if (fs2.rmSync != null) {
756
- fs2.rmSync(path3, { recursive: true, maxRetries: process.platform == "win32" ? 3 : 0 });
757
- } else {
758
- fs2.rmdirSync(path3, { recursive: true, maxRetries: process.platform == "win32" ? 3 : 0 });
759
- }
827
+ await new Promise((resolve, reject) => {
828
+ let request = http.get(url, (response) => {
829
+ if (response.statusCode != 200) {
830
+ let err = new Error(`Download failed: ${response.statusMessage} [${response.statusCode}]`);
831
+ err.code = response.statusCode;
832
+ reject(err);
833
+ return;
834
+ }
835
+ response.pipe(file);
836
+ file.on("finish", () => file.close(() => {
837
+ try {
838
+ fs2.renameSync(file.path, dest);
839
+ } catch (err) {
840
+ if (!fs2.existsSync(dest))
841
+ reject(err);
842
+ }
843
+ resolve();
844
+ }));
845
+ });
846
+ request.on("error", reject);
847
+ file.on("error", reject);
848
+ });
760
849
  } catch (err) {
761
- if (err.code !== "ENOENT")
762
- throw err;
850
+ file.close();
851
+ try {
852
+ fs2.unlinkSync(tmp_name);
853
+ } catch (err2) {
854
+ if (err2.code != "ENOENT")
855
+ throw err2;
856
+ }
857
+ throw err;
763
858
  }
764
859
  }
765
- function get_napi_version2(napi, major) {
766
- if (napi > 8)
767
- return null;
768
- const support = {
769
- 6: ["6.14.2", "6.14.2", "6.14.2"],
770
- 8: ["8.6.0", "8.10.0", "8.11.2"],
771
- 9: ["9.0.0", "9.3.0", "9.11.0"],
772
- 10: ["10.0.0", "10.0.0", "10.0.0", "10.16.0", "10.17.0", "10.20.0", "10.23.0"],
773
- 11: ["11.0.0", "11.0.0", "11.0.0", "11.8.0"],
774
- 12: ["12.0.0", "12.0.0", "12.0.0", "12.0.0", "12.11.0", "12.17.0", "12.19.0", "12.22.0"],
775
- 13: ["13.0.0", "13.0.0", "13.0.0", "13.0.0", "13.0.0"],
776
- 14: ["14.0.0", "14.0.0", "14.0.0", "14.0.0", "14.0.0", "14.0.0", "14.12.0", "14.17.0"],
777
- 15: ["15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.12.0"]
778
- };
779
- const max = Math.max(...Object.keys(support).map((k) => parseInt(k, 10)));
780
- if (major > max)
781
- return major + ".0.0";
782
- if (support[major] == null)
783
- return null;
784
- let required = support[major][napi - 1] || null;
785
- return required;
786
- }
787
- function cmp_version(ver1, ver2) {
788
- ver1 = String(ver1).replace(/-.*$/, "").split(".").reduce((acc, v, idx) => acc + parseInt(v, 10) * Math.pow(10, 2 * (5 - idx)), 0);
789
- ver2 = String(ver2).replace(/-.*$/, "").split(".").reduce((acc, v, idx) => acc + parseInt(v, 10) * Math.pow(10, 2 * (5 - idx)), 0);
790
- let cmp = Math.min(Math.max(ver1 - ver2, -1), 1);
791
- return cmp;
792
- }
793
- module2.exports = {
794
- download_http,
795
- extract_targz,
796
- path_is_absolute,
797
- path_has_dotdot,
798
- sync_files,
799
- determine_arch: determine_arch2,
800
- unlink_recursive,
801
- get_napi_version: get_napi_version2,
802
- cmp_version
803
- };
804
- }
805
- });
806
- var require_package = __commonJS({
807
- "bin/Koffi/package/src/koffi/package.json"(exports2, module2) {
808
- module2.exports = {
809
- name: "koffi",
810
- version: "2.15.0",
811
- description: "Fast and simple C FFI (foreign function interface) for Node.js",
812
- keywords: [
813
- "foreign",
814
- "function",
815
- "interface",
816
- "ffi",
817
- "binding",
818
- "c",
819
- "napi"
820
- ],
821
- repository: {
822
- type: "git",
823
- url: "https://github.com/Koromix/koffi"
824
- },
825
- homepage: "https://koffi.dev/",
826
- author: {
827
- name: "Niels Martign\xE8ne",
828
- email: "niels.martignene@protonmail.com",
829
- url: "https://koromix.dev/"
830
- },
831
- main: "./index.js",
832
- types: "./index.d.ts",
833
- scripts: {
834
- test: "node tools/koffi.js test",
835
- prepack: `echo 'Use "npm run package" instead' && false`,
836
- prepublishOnly: `echo 'Use "npm run package" instead' && false`,
837
- package: "node tools/koffi.js build"
838
- },
839
- license: "MIT",
840
- cnoke: {
841
- api: "../../vendor/node-api-headers",
842
- output: "../../bin/Koffi/{{ platform }}_{{ arch }}",
843
- node: 16,
844
- napi: 8,
845
- require: "./index.js"
846
- },
847
- funding: "https://buymeacoffee.com/koromix"
848
- };
849
- }
850
- });
851
- var require_init = __commonJS({
852
- "bin/Koffi/package/src/koffi/src/init.js"(exports$1, module) {
853
- var fs = __require("fs");
854
- var path = __require("path");
855
- var util = __require("util");
856
- var { get_napi_version, determine_arch } = require_tools();
857
- var pkg = require_package();
858
- function detect() {
859
- if (process.versions.napi == null || process.versions.napi < pkg.cnoke.napi) {
860
- let major = parseInt(process.versions.node, 10);
861
- let required = get_napi_version(pkg.cnoke.napi, major);
862
- if (required != null) {
863
- throw new Error(`This engine is based on Node ${process.versions.node}, but ${pkg.name} requires Node >= ${required} in the Node ${major}.x branch (N-API >= ${pkg.cnoke.napi})`);
864
- } else {
865
- throw new Error(`This engine is based on Node ${process.versions.node}, but ${pkg.name} does not support the Node ${major}.x branch (N-API < ${pkg.cnoke.napi})`);
860
+ function open_temporary_stream(prefix) {
861
+ let buf = Buffer.allocUnsafe(4);
862
+ for (; ; ) {
863
+ try {
864
+ crypto.randomFillSync(buf);
865
+ let suffix = buf.toString("hex").padStart(8, "0");
866
+ let filename2 = `${prefix}.${suffix}`;
867
+ let file = fs2.createWriteStream(filename2, { flags: "wx", mode: 420 });
868
+ return [filename2, file];
869
+ } catch (err) {
870
+ if (err.code != "EEXIST")
871
+ throw err;
866
872
  }
867
873
  }
868
- let arch = determine_arch();
869
- let triplet3 = `${process.platform}_${arch}`;
870
- return triplet3;
871
874
  }
872
- function init(triplet, native) {
873
- if (native == null) {
874
- let roots = [path.join(__dirname, "..")];
875
- let triplets = [triplet];
876
- if (process.resourcesPath != null)
877
- roots.push(process.resourcesPath);
878
- if (triplet.startsWith("linux_")) {
879
- let musl = triplet.replace(/^linux_/, "musl_");
880
- triplets.push(musl);
881
- }
882
- let filenames = roots.flatMap((root) => triplets.flatMap((triplet3) => [
883
- `${root}/build/koffi/${triplet3}/koffi.node`,
884
- `${root}/koffi/${triplet3}/koffi.node`,
885
- `${root}/node_modules/koffi/build/koffi/${triplet3}/koffi.node`,
886
- `${root}/../../bin/Koffi/${triplet3}/koffi.node`
887
- ]));
888
- let first_err = null;
889
- for (let filename of filenames) {
890
- if (!fs.existsSync(filename))
891
- continue;
875
+ function extract_targz(filename2, dest_dir, strip = 0) {
876
+ let reader = fs2.createReadStream(filename2).pipe(zlib.createGunzip());
877
+ return new Promise((resolve, reject) => {
878
+ let header = null;
879
+ let extended = {};
880
+ reader.on("readable", () => {
892
881
  try {
893
- native = eval("require")(filename);
882
+ for (; ; ) {
883
+ if (header == null) {
884
+ let buf = reader.read(512);
885
+ if (buf == null)
886
+ break;
887
+ if (!buf[0])
888
+ continue;
889
+ header = {
890
+ filename: buf.toString("utf-8", 0, 100).replace(/\0/g, ""),
891
+ mode: parseInt(buf.toString("ascii", 100, 109), 8),
892
+ size: parseInt(buf.toString("ascii", 124, 137), 8),
893
+ type: String.fromCharCode(buf[156])
894
+ };
895
+ Object.assign(header, extended);
896
+ extended = {};
897
+ header.filename = header.filename.replace(/\\/g, "/");
898
+ if (!header.filename.length)
899
+ throw new Error(`Insecure empty filename inside TAR archive`);
900
+ if (path_is_absolute(header.filename[0]))
901
+ throw new Error(`Insecure filename starting with / inside TAR archive`);
902
+ if (path_has_dotdot(header.filename))
903
+ throw new Error(`Insecure filename containing '..' inside TAR archive`);
904
+ for (let i = 0; i < strip; i++)
905
+ header.filename = header.filename.substr(header.filename.indexOf("/") + 1);
906
+ }
907
+ let aligned = Math.floor((header.size + 511) / 512) * 512;
908
+ let data = header.size ? reader.read(aligned) : null;
909
+ if (data == null) {
910
+ if (header.size)
911
+ break;
912
+ data = Buffer.alloc(0);
913
+ }
914
+ data = data.subarray(0, header.size);
915
+ if (header.type == "0" || header.type == "7") {
916
+ let filename3 = dest_dir + "/" + header.filename;
917
+ let dirname2 = path2.dirname(filename3);
918
+ fs2.mkdirSync(dirname2, { recursive: true, mode: 493 });
919
+ fs2.writeFileSync(filename3, data, { mode: header.mode });
920
+ } else if (header.type == "5") {
921
+ let filename3 = dest_dir + "/" + header.filename;
922
+ fs2.mkdirSync(filename3, { recursive: true, mode: header.mode });
923
+ } else if (header.type == "L") {
924
+ extended.filename = data.toString("utf-8").replace(/\0/g, "");
925
+ } else if (header.type == "x") {
926
+ let str = data.toString("utf-8");
927
+ try {
928
+ while (str.length) {
929
+ let matches = str.match(/^([0-9]+) ([a-zA-Z0-9\._]+)=(.*)\n/);
930
+ let skip = parseInt(matches[1], 10);
931
+ let key = matches[2];
932
+ let value = matches[3];
933
+ switch (key) {
934
+ case "path":
935
+ {
936
+ extended.filename = value;
937
+ }
938
+ break;
939
+ case "size":
940
+ {
941
+ extended.size = parseInt(value, 10);
942
+ }
943
+ break;
944
+ }
945
+ str = str.substr(skip).trimStart();
946
+ }
947
+ } catch (err) {
948
+ throw new Error("Malformed PAX entry");
949
+ }
950
+ }
951
+ header = null;
952
+ }
894
953
  } catch (err) {
895
- if (first_err == null)
896
- first_err = err;
897
- continue;
954
+ reject(err);
898
955
  }
956
+ });
957
+ reader.on("error", reject);
958
+ reader.on("end", resolve);
959
+ });
960
+ }
961
+ function path_is_absolute(path3) {
962
+ if (process.platform == "win32" && path3.match(/^[a-zA-Z]:/))
963
+ path3 = path3.substr(2);
964
+ return is_path_separator(path3[0]);
965
+ }
966
+ function path_has_dotdot(path3) {
967
+ let start = 0;
968
+ for (; ; ) {
969
+ let offset = path3.indexOf("..", start);
970
+ if (offset < 0)
899
971
  break;
900
- }
901
- if (first_err != null)
902
- throw first_err;
972
+ start = offset + 2;
973
+ if (offset && !is_path_separator(path3[offset - 1]))
974
+ continue;
975
+ if (offset + 2 < path3.length && !is_path_separator(path3[offset + 2]))
976
+ continue;
977
+ return true;
903
978
  }
904
- if (native == null)
905
- throw new Error("Cannot find the native Koffi module; did you bundle it correctly?");
906
- if (native.version != pkg.version)
907
- throw new Error("Mismatched native Koffi modules");
908
- let mod = wrap(native);
909
- return mod;
979
+ return false;
910
980
  }
911
- function wrap(native3) {
912
- let obj = {
913
- ...native3,
914
- // Deprecated functions
915
- handle: util.deprecate(native3.opaque, "The koffi.handle() function was deprecated in Koffi 2.1, use koffi.opaque() instead", "KOFFI001"),
916
- callback: util.deprecate(native3.proto, "The koffi.callback() function was deprecated in Koffi 2.4, use koffi.proto() instead", "KOFFI002")
917
- };
918
- obj.load = (...args) => {
919
- let lib = native3.load(...args);
920
- lib.cdecl = util.deprecate((...args2) => lib.func("__cdecl", ...args2), "The koffi.cdecl() function was deprecated in Koffi 2.7, use koffi.func(...) instead", "KOFFI003");
921
- lib.stdcall = util.deprecate((...args2) => lib.func("__stdcall", ...args2), 'The koffi.stdcall() function was deprecated in Koffi 2.7, use koffi.func("__stdcall", ...) instead', "KOFFI004");
922
- lib.fastcall = util.deprecate((...args2) => lib.func("__fastcall", ...args2), 'The koffi.fastcall() function was deprecated in Koffi 2.7, use koffi.func("__fastcall", ...) instead', "KOFFI005");
923
- lib.thiscall = util.deprecate((...args2) => lib.func("__thiscall", ...args2), 'The koffi.thiscall() function was deprecated in Koffi 2.7, use koffi.func("__thiscall", ...) instead', "KOFFI006");
924
- return lib;
925
- };
926
- return obj;
981
+ function is_path_separator(c) {
982
+ if (c == "/")
983
+ return true;
984
+ if (process.platform == "win32" && c == "\\")
985
+ return true;
986
+ return false;
927
987
  }
928
- module.exports = {
929
- detect,
930
- init
931
- };
932
- }
933
- });
934
- var { detect: detect2, init: init2 } = require_init();
935
- var triplet2 = detect2();
936
- var native2 = null;
937
- try {
938
- switch (triplet2) {
939
- case "darwin_arm64":
940
- {
941
- native2 = require_koffi();
942
- }
943
- break;
944
- case "darwin_x64":
945
- {
946
- native2 = require_koffi2();
947
- }
948
- break;
949
- case "freebsd_arm64":
950
- {
951
- native2 = require_koffi3();
952
- }
953
- break;
954
- case "freebsd_ia32":
955
- {
956
- native2 = require_koffi4();
957
- }
958
- break;
959
- case "freebsd_x64":
960
- {
961
- native2 = require_koffi5();
962
- }
963
- break;
964
- case "linux_armhf":
965
- {
966
- native2 = require_koffi6();
967
- }
968
- break;
969
- case "linux_arm64":
970
- {
971
- native2 = require_koffi7();
972
- }
973
- break;
974
- case "linux_ia32":
975
- {
976
- native2 = require_koffi8();
977
- }
978
- break;
979
- case "linux_loong64":
980
- {
981
- native2 = require_koffi9();
982
- }
983
- break;
984
- case "linux_riscv64d":
985
- {
986
- native2 = require_koffi10();
987
- }
988
- break;
989
- case "linux_x64":
988
+ function sync_files(src_dir, dest_dir) {
989
+ let keep = /* @__PURE__ */ new Set();
990
990
  {
991
- native2 = require_koffi11();
991
+ let entries = fs2.readdirSync(src_dir, { withFileTypes: true });
992
+ for (let entry of entries) {
993
+ if (!entry.isFile())
994
+ continue;
995
+ keep.add(entry.name);
996
+ fs2.copyFileSync(src_dir + `/${entry.name}`, dest_dir + `/${entry.name}`);
997
+ }
992
998
  }
993
- break;
994
- case "openbsd_ia32":
995
999
  {
996
- native2 = require_koffi12();
1000
+ let entries = fs2.readdirSync(dest_dir, { withFileTypes: true });
1001
+ for (let entry of entries) {
1002
+ if (!entry.isFile())
1003
+ continue;
1004
+ if (keep.has(entry.name))
1005
+ continue;
1006
+ fs2.unlinkSync(dest_dir + `/${entry.name}`);
1007
+ }
997
1008
  }
998
- break;
999
- case "openbsd_x64":
1000
- {
1001
- native2 = require_koffi13();
1009
+ }
1010
+ function determine_arch2() {
1011
+ let arch = process.arch;
1012
+ if (arch == "riscv32" || arch == "riscv64") {
1013
+ let buf = read_file_header(process.execPath, 512);
1014
+ let header = decode_elf_header(buf);
1015
+ let float_abi = header.e_flags & 6;
1016
+ switch (float_abi) {
1017
+ case 0:
1018
+ break;
1019
+ case 2:
1020
+ {
1021
+ arch += "f";
1022
+ }
1023
+ break;
1024
+ case 4:
1025
+ {
1026
+ arch += "d";
1027
+ }
1028
+ break;
1029
+ case 6:
1030
+ {
1031
+ arch += "q";
1032
+ }
1033
+ break;
1034
+ }
1035
+ } else if (arch == "arm") {
1036
+ let buf = read_file_header(process.execPath, 512);
1037
+ let header = decode_elf_header(buf);
1038
+ if (header.e_flags & 1024) {
1039
+ arch += "hf";
1040
+ } else if (header.e_flags & 512) {
1041
+ arch += "sf";
1042
+ } else {
1043
+ throw new Error("Unknown ARM floating-point ABI");
1044
+ }
1002
1045
  }
1003
- break;
1004
- case "win32_arm64":
1005
- {
1006
- native2 = require_koffi14();
1046
+ return arch;
1047
+ }
1048
+ function read_file_header(filename2, read) {
1049
+ try {
1050
+ let fd2 = fs2.openSync(filename2);
1051
+ let buf = Buffer.allocUnsafe(read);
1052
+ let len = fs2.readSync(fd2, buf);
1053
+ return buf.subarray(0, len);
1054
+ } finally {
1007
1055
  }
1008
- break;
1009
- case "win32_ia32":
1010
- {
1011
- native2 = require_koffi15();
1056
+ }
1057
+ function decode_elf_header(buf) {
1058
+ let header = {};
1059
+ if (buf.length < 16)
1060
+ throw new Error("Truncated header");
1061
+ if (buf[0] != 127 || buf[1] != 69 || buf[2] != 76 || buf[3] != 70)
1062
+ throw new Error("Invalid magic number");
1063
+ if (buf[6] != 1)
1064
+ throw new Error("Invalid ELF version");
1065
+ if (buf[5] != 1)
1066
+ throw new Error("Big-endian architectures are not supported");
1067
+ let machine = buf.readUInt16LE(18);
1068
+ switch (machine) {
1069
+ case 3:
1070
+ {
1071
+ header.e_machine = "ia32";
1072
+ }
1073
+ break;
1074
+ case 40:
1075
+ {
1076
+ header.e_machine = "arm";
1077
+ }
1078
+ break;
1079
+ case 62:
1080
+ {
1081
+ header.e_machine = "amd64";
1082
+ }
1083
+ break;
1084
+ case 183:
1085
+ {
1086
+ header.e_machine = "arm64";
1087
+ }
1088
+ break;
1089
+ case 243:
1090
+ {
1091
+ switch (buf[4]) {
1092
+ case 1:
1093
+ {
1094
+ header.e_machine = "riscv32";
1095
+ }
1096
+ break;
1097
+ case 2:
1098
+ {
1099
+ header.e_machine = "riscv64";
1100
+ }
1101
+ break;
1102
+ }
1103
+ }
1104
+ break;
1105
+ case 248:
1106
+ {
1107
+ switch (buf[4]) {
1108
+ case 1:
1109
+ {
1110
+ header.e_machine = "loong32";
1111
+ }
1112
+ break;
1113
+ case 2:
1114
+ {
1115
+ header.e_machine = "loong64";
1116
+ }
1117
+ break;
1118
+ }
1119
+ }
1120
+ break;
1121
+ default:
1122
+ throw new Error("Unknown ELF machine type");
1012
1123
  }
1013
- break;
1014
- case "win32_x64":
1015
- {
1016
- native2 = require_koffi16();
1124
+ switch (buf[4]) {
1125
+ case 1:
1126
+ {
1127
+ buf = buf.subarray(0, 68);
1128
+ if (buf.length < 68)
1129
+ throw new Error("Truncated ELF header");
1130
+ header.ei_class = 32;
1131
+ header.e_flags = buf.readUInt32LE(36);
1132
+ }
1133
+ break;
1134
+ case 2:
1135
+ {
1136
+ buf = buf.subarray(0, 120);
1137
+ if (buf.length < 120)
1138
+ throw new Error("Truncated ELF header");
1139
+ header.ei_class = 64;
1140
+ header.e_flags = buf.readUInt32LE(48);
1141
+ }
1142
+ break;
1143
+ default:
1144
+ throw new Error("Invalid ELF class");
1017
1145
  }
1018
- break;
1019
- }
1020
- } catch {
1021
- try {
1022
- switch (triplet2) {
1023
- case "linux_arm64":
1024
- {
1025
- native2 = require_koffi17();
1026
- }
1027
- break;
1028
- case "linux_x64":
1029
- {
1030
- native2 = require_koffi18();
1146
+ return header;
1147
+ }
1148
+ function unlink_recursive(path3) {
1149
+ try {
1150
+ if (fs2.rmSync != null) {
1151
+ fs2.rmSync(path3, { recursive: true, maxRetries: process.platform == "win32" ? 3 : 0 });
1152
+ } else {
1153
+ fs2.rmdirSync(path3, { recursive: true, maxRetries: process.platform == "win32" ? 3 : 0 });
1031
1154
  }
1032
- break;
1155
+ } catch (err) {
1156
+ if (err.code !== "ENOENT")
1157
+ throw err;
1158
+ }
1033
1159
  }
1034
- } catch {
1035
- }
1036
- }
1037
- var mod2 = init2(triplet2, native2);
1038
- module.exports = mod2;
1039
- }
1040
- });
1041
-
1042
- // src/ffi/node-runtime.ts
1043
- var node_runtime_exports = {};
1044
- __export(node_runtime_exports, {
1045
- NodeRuntime: () => NodeRuntime
1046
- });
1047
- var NodeRuntime;
1048
- var init_node_runtime = __esm({
1049
- "src/ffi/node-runtime.ts"() {
1050
- init_runtime_interface();
1051
- NodeRuntime = class extends BaseTaskerRuntime {
1052
- name = "node";
1053
- lib = null;
1054
- // biome-ignore lint/suspicious/noExplicitAny: koffi module type
1055
- koffi = null;
1056
- get isLoaded() {
1057
- return this.lib !== null;
1058
- }
1059
- async load(libraryPath) {
1060
- if (this.lib !== null) {
1061
- return;
1160
+ function get_napi_version2(napi, major) {
1161
+ if (napi > 8)
1162
+ return null;
1163
+ const support = {
1164
+ 6: ["6.14.2", "6.14.2", "6.14.2"],
1165
+ 8: ["8.6.0", "8.10.0", "8.11.2"],
1166
+ 9: ["9.0.0", "9.3.0", "9.11.0"],
1167
+ 10: ["10.0.0", "10.0.0", "10.0.0", "10.16.0", "10.17.0", "10.20.0", "10.23.0"],
1168
+ 11: ["11.0.0", "11.0.0", "11.0.0", "11.8.0"],
1169
+ 12: ["12.0.0", "12.0.0", "12.0.0", "12.0.0", "12.11.0", "12.17.0", "12.19.0", "12.22.0"],
1170
+ 13: ["13.0.0", "13.0.0", "13.0.0", "13.0.0", "13.0.0"],
1171
+ 14: ["14.0.0", "14.0.0", "14.0.0", "14.0.0", "14.0.0", "14.0.0", "14.12.0", "14.17.0"],
1172
+ 15: ["15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.0.0", "15.12.0"]
1173
+ };
1174
+ const max = Math.max(...Object.keys(support).map((k) => parseInt(k, 10)));
1175
+ if (major > max)
1176
+ return major + ".0.0";
1177
+ if (support[major] == null)
1178
+ return null;
1179
+ let required = support[major][napi - 1] || null;
1180
+ return required;
1062
1181
  }
1063
- const koffiModule = await Promise.resolve().then(() => __toESM(require_koffi19()));
1064
- this.koffi = koffiModule.default ?? koffiModule;
1065
- const lib = this.koffi.load(libraryPath);
1066
- this.lib = {
1067
- get_version: lib.func("void* get_version()"),
1068
- get_rust_version: lib.func("void* get_rust_version()"),
1069
- health_check: lib.func("int health_check()"),
1070
- is_worker_running: lib.func("int is_worker_running()"),
1071
- bootstrap_worker: lib.func("void* bootstrap_worker(str)"),
1072
- get_worker_status: lib.func("void* get_worker_status()"),
1073
- stop_worker: lib.func("void* stop_worker()"),
1074
- transition_to_graceful_shutdown: lib.func("void* transition_to_graceful_shutdown()"),
1075
- poll_step_events: lib.func("void* poll_step_events()"),
1076
- poll_in_process_events: lib.func("void* poll_in_process_events()"),
1077
- complete_step_event: lib.func("int complete_step_event(str, str)"),
1078
- checkpoint_yield_step_event: lib.func("int checkpoint_yield_step_event(str, str)"),
1079
- get_ffi_dispatch_metrics: lib.func("void* get_ffi_dispatch_metrics()"),
1080
- check_starvation_warnings: lib.func("void check_starvation_warnings()"),
1081
- cleanup_timeouts: lib.func("void cleanup_timeouts()"),
1082
- log_error: lib.func("void log_error(str, str)"),
1083
- log_warn: lib.func("void log_warn(str, str)"),
1084
- log_info: lib.func("void log_info(str, str)"),
1085
- log_debug: lib.func("void log_debug(str, str)"),
1086
- log_trace: lib.func("void log_trace(str, str)"),
1087
- free_rust_string: lib.func("void free_rust_string(void*)"),
1088
- // Client API functions (TAS-231)
1089
- client_create_task: lib.func("void* client_create_task(str)"),
1090
- client_get_task: lib.func("void* client_get_task(str)"),
1091
- client_list_tasks: lib.func("void* client_list_tasks(str)"),
1092
- client_cancel_task: lib.func("void* client_cancel_task(str)"),
1093
- client_list_task_steps: lib.func("void* client_list_task_steps(str)"),
1094
- client_get_step: lib.func("void* client_get_step(str, str)"),
1095
- client_get_step_audit_history: lib.func("void* client_get_step_audit_history(str, str)"),
1096
- client_health_check: lib.func("void* client_health_check()")
1097
- };
1098
- }
1099
- unload() {
1100
- this.lib = null;
1101
- this.koffi = null;
1102
- }
1103
- ensureLoaded() {
1104
- if (!this.lib) {
1105
- throw new Error("Native library not loaded. Call load() first.");
1182
+ function cmp_version(ver1, ver2) {
1183
+ ver1 = String(ver1).replace(/-.*$/, "").split(".").reduce((acc, v, idx) => acc + parseInt(v, 10) * Math.pow(10, 2 * (5 - idx)), 0);
1184
+ ver2 = String(ver2).replace(/-.*$/, "").split(".").reduce((acc, v, idx) => acc + parseInt(v, 10) * Math.pow(10, 2 * (5 - idx)), 0);
1185
+ let cmp = Math.min(Math.max(ver1 - ver2, -1), 1);
1186
+ return cmp;
1106
1187
  }
1107
- return this.lib;
1108
- }
1109
- /**
1110
- * Read a C string from a pointer and free the Rust-allocated memory.
1111
- *
1112
- * Uses koffi.decode with 'char' type and -1 length for null-terminated strings.
1113
- */
1114
- readAndFreeRustString(ptr) {
1115
- if (!ptr) return null;
1116
- const lib = this.ensureLoaded();
1117
- const str = this.koffi.decode(ptr, "char", -1);
1118
- lib.free_rust_string(ptr);
1119
- return str;
1120
- }
1121
- getVersion() {
1122
- const lib = this.ensureLoaded();
1123
- const ptr = lib.get_version();
1124
- return this.readAndFreeRustString(ptr) ?? "unknown";
1125
- }
1126
- getRustVersion() {
1127
- const lib = this.ensureLoaded();
1128
- const ptr = lib.get_rust_version();
1129
- return this.readAndFreeRustString(ptr) ?? "unknown";
1130
- }
1131
- healthCheck() {
1132
- const lib = this.ensureLoaded();
1133
- return lib.health_check() === 1;
1134
- }
1135
- bootstrapWorker(config) {
1136
- const lib = this.ensureLoaded();
1137
- const configJson = config ? this.toJson(config) : null;
1138
- const ptr = lib.bootstrap_worker(configJson);
1139
- const jsonStr = this.readAndFreeRustString(ptr);
1140
- const parsed = this.parseJson(jsonStr);
1141
- return parsed ?? {
1142
- success: false,
1143
- status: "error",
1144
- message: "Failed to parse bootstrap result",
1145
- error: "Invalid JSON response"
1146
- };
1147
- }
1148
- isWorkerRunning() {
1149
- const lib = this.ensureLoaded();
1150
- return lib.is_worker_running() === 1;
1151
- }
1152
- getWorkerStatus() {
1153
- const lib = this.ensureLoaded();
1154
- const ptr = lib.get_worker_status();
1155
- const jsonStr = this.readAndFreeRustString(ptr);
1156
- const parsed = this.parseJson(jsonStr);
1157
- return parsed ?? { success: false, running: false };
1158
- }
1159
- stopWorker() {
1160
- const lib = this.ensureLoaded();
1161
- const ptr = lib.stop_worker();
1162
- const jsonStr = this.readAndFreeRustString(ptr);
1163
- const parsed = this.parseJson(jsonStr);
1164
- return parsed ?? {
1165
- success: false,
1166
- status: "error",
1167
- message: "Failed to parse stop result",
1168
- error: "Invalid JSON response"
1188
+ module2.exports = {
1189
+ download_http,
1190
+ extract_targz,
1191
+ path_is_absolute,
1192
+ path_has_dotdot,
1193
+ sync_files,
1194
+ determine_arch: determine_arch2,
1195
+ unlink_recursive,
1196
+ get_napi_version: get_napi_version2,
1197
+ cmp_version
1169
1198
  };
1170
1199
  }
1171
- transitionToGracefulShutdown() {
1172
- const lib = this.ensureLoaded();
1173
- const ptr = lib.transition_to_graceful_shutdown();
1174
- const jsonStr = this.readAndFreeRustString(ptr);
1175
- const parsed = this.parseJson(jsonStr);
1176
- return parsed ?? {
1177
- success: false,
1178
- status: "error",
1179
- message: "Failed to parse shutdown result",
1180
- error: "Invalid JSON response"
1200
+ });
1201
+ var require_package = __commonJS({
1202
+ "bin/Koffi/package/src/koffi/package.json"(exports2, module2) {
1203
+ module2.exports = {
1204
+ name: "koffi",
1205
+ version: "2.15.0",
1206
+ description: "Fast and simple C FFI (foreign function interface) for Node.js",
1207
+ keywords: [
1208
+ "foreign",
1209
+ "function",
1210
+ "interface",
1211
+ "ffi",
1212
+ "binding",
1213
+ "c",
1214
+ "napi"
1215
+ ],
1216
+ repository: {
1217
+ type: "git",
1218
+ url: "https://github.com/Koromix/koffi"
1219
+ },
1220
+ homepage: "https://koffi.dev/",
1221
+ author: {
1222
+ name: "Niels Martign\xE8ne",
1223
+ email: "niels.martignene@protonmail.com",
1224
+ url: "https://koromix.dev/"
1225
+ },
1226
+ main: "./index.js",
1227
+ types: "./index.d.ts",
1228
+ scripts: {
1229
+ test: "node tools/koffi.js test",
1230
+ prepack: `echo 'Use "npm run package" instead' && false`,
1231
+ prepublishOnly: `echo 'Use "npm run package" instead' && false`,
1232
+ package: "node tools/koffi.js build"
1233
+ },
1234
+ license: "MIT",
1235
+ cnoke: {
1236
+ api: "../../vendor/node-api-headers",
1237
+ output: "../../bin/Koffi/{{ platform }}_{{ arch }}",
1238
+ node: 16,
1239
+ napi: 8,
1240
+ require: "./index.js"
1241
+ },
1242
+ funding: "https://buymeacoffee.com/koromix"
1181
1243
  };
1182
1244
  }
1183
- pollStepEvents() {
1184
- const lib = this.ensureLoaded();
1185
- const ptr = lib.poll_step_events();
1186
- if (!ptr) return null;
1187
- const jsonStr = this.readAndFreeRustString(ptr);
1188
- return this.parseJson(jsonStr);
1189
- }
1190
- pollInProcessEvents() {
1191
- const lib = this.ensureLoaded();
1192
- const ptr = lib.poll_in_process_events();
1193
- if (!ptr) return null;
1194
- const jsonStr = this.readAndFreeRustString(ptr);
1195
- return this.parseJson(jsonStr);
1196
- }
1197
- completeStepEvent(eventId, result) {
1198
- const lib = this.ensureLoaded();
1199
- return lib.complete_step_event(eventId, this.toJson(result)) === 1;
1200
- }
1201
- checkpointYieldStepEvent(eventId, checkpointData) {
1202
- const lib = this.ensureLoaded();
1203
- return lib.checkpoint_yield_step_event(eventId, this.toJson(checkpointData)) === 1;
1204
- }
1205
- getFfiDispatchMetrics() {
1206
- const lib = this.ensureLoaded();
1207
- const ptr = lib.get_ffi_dispatch_metrics();
1208
- const jsonStr = this.readAndFreeRustString(ptr);
1209
- const parsed = this.parseJson(jsonStr);
1210
- if (parsed && typeof parsed.pending_count === "number") {
1211
- return parsed;
1245
+ });
1246
+ var require_init = __commonJS({
1247
+ "bin/Koffi/package/src/koffi/src/init.js"(exports$1, module) {
1248
+ var fs = __require("fs");
1249
+ var path = __require("path");
1250
+ var util = __require("util");
1251
+ var { get_napi_version, determine_arch } = require_tools();
1252
+ var pkg = require_package();
1253
+ function detect() {
1254
+ if (process.versions.napi == null || process.versions.napi < pkg.cnoke.napi) {
1255
+ let major = parseInt(process.versions.node, 10);
1256
+ let required = get_napi_version(pkg.cnoke.napi, major);
1257
+ if (required != null) {
1258
+ throw new Error(`This engine is based on Node ${process.versions.node}, but ${pkg.name} requires Node >= ${required} in the Node ${major}.x branch (N-API >= ${pkg.cnoke.napi})`);
1259
+ } else {
1260
+ throw new Error(`This engine is based on Node ${process.versions.node}, but ${pkg.name} does not support the Node ${major}.x branch (N-API < ${pkg.cnoke.napi})`);
1261
+ }
1262
+ }
1263
+ let arch = determine_arch();
1264
+ let triplet3 = `${process.platform}_${arch}`;
1265
+ return triplet3;
1212
1266
  }
1213
- return {
1214
- pending_count: 0,
1215
- starvation_detected: false,
1216
- starving_event_count: 0,
1217
- oldest_pending_age_ms: null,
1218
- newest_pending_age_ms: null,
1219
- oldest_event_id: null
1220
- };
1221
- }
1222
- checkStarvationWarnings() {
1223
- const lib = this.ensureLoaded();
1224
- lib.check_starvation_warnings();
1225
- }
1226
- cleanupTimeouts() {
1227
- const lib = this.ensureLoaded();
1228
- lib.cleanup_timeouts();
1229
- }
1230
- logError(message, fields) {
1231
- const lib = this.ensureLoaded();
1232
- lib.log_error(message, fields ? this.toJson(fields) : null);
1233
- }
1234
- logWarn(message, fields) {
1235
- const lib = this.ensureLoaded();
1236
- lib.log_warn(message, fields ? this.toJson(fields) : null);
1237
- }
1238
- logInfo(message, fields) {
1239
- const lib = this.ensureLoaded();
1240
- lib.log_info(message, fields ? this.toJson(fields) : null);
1241
- }
1242
- logDebug(message, fields) {
1243
- const lib = this.ensureLoaded();
1244
- lib.log_debug(message, fields ? this.toJson(fields) : null);
1245
- }
1246
- logTrace(message, fields) {
1247
- const lib = this.ensureLoaded();
1248
- lib.log_trace(message, fields ? this.toJson(fields) : null);
1249
- }
1250
- // ==========================================================================
1251
- // Client API Operations (TAS-231)
1252
- // ==========================================================================
1253
- parseClientResult(ptr) {
1254
- const jsonStr = this.readAndFreeRustString(ptr);
1255
- const parsed = this.parseJson(jsonStr);
1256
- return parsed ?? {
1257
- success: false,
1258
- data: null,
1259
- error: "Failed to parse client result",
1260
- recoverable: null
1267
+ function init(triplet, native) {
1268
+ if (native == null) {
1269
+ let roots = [path.join(__dirname, "..")];
1270
+ let triplets = [triplet];
1271
+ if (process.resourcesPath != null)
1272
+ roots.push(process.resourcesPath);
1273
+ if (triplet.startsWith("linux_")) {
1274
+ let musl = triplet.replace(/^linux_/, "musl_");
1275
+ triplets.push(musl);
1276
+ }
1277
+ let filenames = roots.flatMap((root) => triplets.flatMap((triplet3) => [
1278
+ `${root}/build/koffi/${triplet3}/koffi.node`,
1279
+ `${root}/koffi/${triplet3}/koffi.node`,
1280
+ `${root}/node_modules/koffi/build/koffi/${triplet3}/koffi.node`,
1281
+ `${root}/../../bin/Koffi/${triplet3}/koffi.node`
1282
+ ]));
1283
+ let first_err = null;
1284
+ for (let filename of filenames) {
1285
+ if (!fs.existsSync(filename))
1286
+ continue;
1287
+ try {
1288
+ native = eval("require")(filename);
1289
+ } catch (err) {
1290
+ if (first_err == null)
1291
+ first_err = err;
1292
+ continue;
1293
+ }
1294
+ break;
1295
+ }
1296
+ if (first_err != null)
1297
+ throw first_err;
1298
+ }
1299
+ if (native == null)
1300
+ throw new Error("Cannot find the native Koffi module; did you bundle it correctly?");
1301
+ if (native.version != pkg.version)
1302
+ throw new Error("Mismatched native Koffi modules");
1303
+ let mod = wrap(native);
1304
+ return mod;
1305
+ }
1306
+ function wrap(native3) {
1307
+ let obj = {
1308
+ ...native3,
1309
+ // Deprecated functions
1310
+ handle: util.deprecate(native3.opaque, "The koffi.handle() function was deprecated in Koffi 2.1, use koffi.opaque() instead", "KOFFI001"),
1311
+ callback: util.deprecate(native3.proto, "The koffi.callback() function was deprecated in Koffi 2.4, use koffi.proto() instead", "KOFFI002")
1312
+ };
1313
+ obj.load = (...args) => {
1314
+ let lib = native3.load(...args);
1315
+ lib.cdecl = util.deprecate((...args2) => lib.func("__cdecl", ...args2), "The koffi.cdecl() function was deprecated in Koffi 2.7, use koffi.func(...) instead", "KOFFI003");
1316
+ lib.stdcall = util.deprecate((...args2) => lib.func("__stdcall", ...args2), 'The koffi.stdcall() function was deprecated in Koffi 2.7, use koffi.func("__stdcall", ...) instead', "KOFFI004");
1317
+ lib.fastcall = util.deprecate((...args2) => lib.func("__fastcall", ...args2), 'The koffi.fastcall() function was deprecated in Koffi 2.7, use koffi.func("__fastcall", ...) instead', "KOFFI005");
1318
+ lib.thiscall = util.deprecate((...args2) => lib.func("__thiscall", ...args2), 'The koffi.thiscall() function was deprecated in Koffi 2.7, use koffi.func("__thiscall", ...) instead', "KOFFI006");
1319
+ return lib;
1320
+ };
1321
+ return obj;
1322
+ }
1323
+ module.exports = {
1324
+ detect,
1325
+ init
1261
1326
  };
1262
1327
  }
1263
- clientCreateTask(requestJson) {
1264
- const lib = this.ensureLoaded();
1265
- const ptr = lib.client_create_task(requestJson);
1266
- return this.parseClientResult(ptr);
1267
- }
1268
- clientGetTask(taskUuid) {
1269
- const lib = this.ensureLoaded();
1270
- const ptr = lib.client_get_task(taskUuid);
1271
- return this.parseClientResult(ptr);
1272
- }
1273
- clientListTasks(paramsJson) {
1274
- const lib = this.ensureLoaded();
1275
- const ptr = lib.client_list_tasks(paramsJson);
1276
- return this.parseClientResult(ptr);
1277
- }
1278
- clientCancelTask(taskUuid) {
1279
- const lib = this.ensureLoaded();
1280
- const ptr = lib.client_cancel_task(taskUuid);
1281
- return this.parseClientResult(ptr);
1282
- }
1283
- clientListTaskSteps(taskUuid) {
1284
- const lib = this.ensureLoaded();
1285
- const ptr = lib.client_list_task_steps(taskUuid);
1286
- return this.parseClientResult(ptr);
1287
- }
1288
- clientGetStep(taskUuid, stepUuid) {
1289
- const lib = this.ensureLoaded();
1290
- const ptr = lib.client_get_step(taskUuid, stepUuid);
1291
- return this.parseClientResult(ptr);
1292
- }
1293
- clientGetStepAuditHistory(taskUuid, stepUuid) {
1294
- const lib = this.ensureLoaded();
1295
- const ptr = lib.client_get_step_audit_history(taskUuid, stepUuid);
1296
- return this.parseClientResult(ptr);
1328
+ });
1329
+ var { detect: detect2, init: init2 } = require_init();
1330
+ var triplet2 = detect2();
1331
+ var native2 = null;
1332
+ try {
1333
+ switch (triplet2) {
1334
+ case "darwin_arm64":
1335
+ {
1336
+ native2 = require_koffi();
1337
+ }
1338
+ break;
1339
+ case "darwin_x64":
1340
+ {
1341
+ native2 = require_koffi2();
1342
+ }
1343
+ break;
1344
+ case "freebsd_arm64":
1345
+ {
1346
+ native2 = require_koffi3();
1347
+ }
1348
+ break;
1349
+ case "freebsd_ia32":
1350
+ {
1351
+ native2 = require_koffi4();
1352
+ }
1353
+ break;
1354
+ case "freebsd_x64":
1355
+ {
1356
+ native2 = require_koffi5();
1357
+ }
1358
+ break;
1359
+ case "linux_armhf":
1360
+ {
1361
+ native2 = require_koffi6();
1362
+ }
1363
+ break;
1364
+ case "linux_arm64":
1365
+ {
1366
+ native2 = require_koffi7();
1367
+ }
1368
+ break;
1369
+ case "linux_ia32":
1370
+ {
1371
+ native2 = require_koffi8();
1372
+ }
1373
+ break;
1374
+ case "linux_loong64":
1375
+ {
1376
+ native2 = require_koffi9();
1377
+ }
1378
+ break;
1379
+ case "linux_riscv64d":
1380
+ {
1381
+ native2 = require_koffi10();
1382
+ }
1383
+ break;
1384
+ case "linux_x64":
1385
+ {
1386
+ native2 = require_koffi11();
1387
+ }
1388
+ break;
1389
+ case "openbsd_ia32":
1390
+ {
1391
+ native2 = require_koffi12();
1392
+ }
1393
+ break;
1394
+ case "openbsd_x64":
1395
+ {
1396
+ native2 = require_koffi13();
1397
+ }
1398
+ break;
1399
+ case "win32_arm64":
1400
+ {
1401
+ native2 = require_koffi14();
1402
+ }
1403
+ break;
1404
+ case "win32_ia32":
1405
+ {
1406
+ native2 = require_koffi15();
1407
+ }
1408
+ break;
1409
+ case "win32_x64":
1410
+ {
1411
+ native2 = require_koffi16();
1412
+ }
1413
+ break;
1297
1414
  }
1298
- clientHealthCheck() {
1299
- const lib = this.ensureLoaded();
1300
- const ptr = lib.client_health_check();
1301
- return this.parseClientResult(ptr);
1415
+ } catch {
1416
+ try {
1417
+ switch (triplet2) {
1418
+ case "linux_arm64":
1419
+ {
1420
+ native2 = require_koffi17();
1421
+ }
1422
+ break;
1423
+ case "linux_x64":
1424
+ {
1425
+ native2 = require_koffi18();
1426
+ }
1427
+ break;
1428
+ }
1429
+ } catch {
1302
1430
  }
1303
- };
1431
+ }
1432
+ var mod2 = init2(triplet2, native2);
1433
+ module.exports = mod2;
1304
1434
  }
1305
1435
  });
1306
1436
 
1307
- // src/ffi/deno-runtime.ts
1308
- var deno_runtime_exports = {};
1309
- __export(deno_runtime_exports, {
1310
- DenoRuntime: () => DenoRuntime
1437
+ // src/ffi/node-runtime.ts
1438
+ var node_runtime_exports = {};
1439
+ __export(node_runtime_exports, {
1440
+ NodeRuntime: () => NodeRuntime
1311
1441
  });
1312
- var DenoRuntime;
1313
- var init_deno_runtime = __esm({
1314
- "src/ffi/deno-runtime.ts"() {
1442
+ var NodeRuntime;
1443
+ var init_node_runtime = __esm({
1444
+ "src/ffi/node-runtime.ts"() {
1315
1445
  init_runtime_interface();
1316
- DenoRuntime = class extends BaseTaskerRuntime {
1317
- name = "deno";
1446
+ NodeRuntime = class extends BaseTaskerRuntime {
1447
+ name = "node";
1318
1448
  lib = null;
1319
- encoder = new TextEncoder();
1449
+ // biome-ignore lint/suspicious/noExplicitAny: koffi module type
1450
+ koffi = null;
1320
1451
  get isLoaded() {
1321
1452
  return this.lib !== null;
1322
1453
  }
@@ -1324,180 +1455,83 @@ var init_deno_runtime = __esm({
1324
1455
  if (this.lib !== null) {
1325
1456
  return;
1326
1457
  }
1327
- if (typeof Deno === "undefined") {
1328
- throw new Error("Deno runtime not detected");
1329
- }
1330
- this.lib = Deno.dlopen(libraryPath, {
1331
- get_version: {
1332
- parameters: [],
1333
- result: "pointer"
1334
- },
1335
- get_rust_version: {
1336
- parameters: [],
1337
- result: "pointer"
1338
- },
1339
- health_check: {
1340
- parameters: [],
1341
- result: "i32"
1342
- },
1343
- is_worker_running: {
1344
- parameters: [],
1345
- result: "i32"
1346
- },
1347
- bootstrap_worker: {
1348
- parameters: ["buffer"],
1349
- result: "pointer"
1350
- },
1351
- get_worker_status: {
1352
- parameters: [],
1353
- result: "pointer"
1354
- },
1355
- stop_worker: {
1356
- parameters: [],
1357
- result: "pointer"
1358
- },
1359
- transition_to_graceful_shutdown: {
1360
- parameters: [],
1361
- result: "pointer"
1362
- },
1363
- poll_step_events: {
1364
- parameters: [],
1365
- result: "pointer"
1366
- },
1367
- poll_in_process_events: {
1368
- parameters: [],
1369
- result: "pointer"
1370
- },
1371
- complete_step_event: {
1372
- parameters: ["buffer", "buffer"],
1373
- result: "i32"
1374
- },
1375
- checkpoint_yield_step_event: {
1376
- parameters: ["buffer", "buffer"],
1377
- result: "i32"
1378
- },
1379
- get_ffi_dispatch_metrics: {
1380
- parameters: [],
1381
- result: "pointer"
1382
- },
1383
- check_starvation_warnings: {
1384
- parameters: [],
1385
- result: "void"
1386
- },
1387
- cleanup_timeouts: {
1388
- parameters: [],
1389
- result: "void"
1390
- },
1391
- log_error: {
1392
- parameters: ["buffer", "buffer"],
1393
- result: "void"
1394
- },
1395
- log_warn: {
1396
- parameters: ["buffer", "buffer"],
1397
- result: "void"
1398
- },
1399
- log_info: {
1400
- parameters: ["buffer", "buffer"],
1401
- result: "void"
1402
- },
1403
- log_debug: {
1404
- parameters: ["buffer", "buffer"],
1405
- result: "void"
1406
- },
1407
- log_trace: {
1408
- parameters: ["buffer", "buffer"],
1409
- result: "void"
1410
- },
1411
- free_rust_string: {
1412
- parameters: ["pointer"],
1413
- result: "void"
1414
- },
1415
- // Client API functions (TAS-231)
1416
- client_create_task: {
1417
- parameters: ["buffer"],
1418
- result: "pointer"
1419
- },
1420
- client_get_task: {
1421
- parameters: ["buffer"],
1422
- result: "pointer"
1423
- },
1424
- client_list_tasks: {
1425
- parameters: ["buffer"],
1426
- result: "pointer"
1427
- },
1428
- client_cancel_task: {
1429
- parameters: ["buffer"],
1430
- result: "pointer"
1431
- },
1432
- client_list_task_steps: {
1433
- parameters: ["buffer"],
1434
- result: "pointer"
1435
- },
1436
- client_get_step: {
1437
- parameters: ["buffer", "buffer"],
1438
- result: "pointer"
1439
- },
1440
- client_get_step_audit_history: {
1441
- parameters: ["buffer", "buffer"],
1442
- result: "pointer"
1443
- },
1444
- client_health_check: {
1445
- parameters: [],
1446
- result: "pointer"
1447
- }
1448
- });
1458
+ const koffiModule = await Promise.resolve().then(() => __toESM(require_koffi19()));
1459
+ this.koffi = koffiModule.default ?? koffiModule;
1460
+ const lib = this.koffi.load(libraryPath);
1461
+ this.lib = {
1462
+ get_version: lib.func("void* get_version()"),
1463
+ get_rust_version: lib.func("void* get_rust_version()"),
1464
+ health_check: lib.func("int health_check()"),
1465
+ is_worker_running: lib.func("int is_worker_running()"),
1466
+ bootstrap_worker: lib.func("void* bootstrap_worker(str)"),
1467
+ get_worker_status: lib.func("void* get_worker_status()"),
1468
+ stop_worker: lib.func("void* stop_worker()"),
1469
+ transition_to_graceful_shutdown: lib.func("void* transition_to_graceful_shutdown()"),
1470
+ poll_step_events: lib.func("void* poll_step_events()"),
1471
+ poll_in_process_events: lib.func("void* poll_in_process_events()"),
1472
+ complete_step_event: lib.func("int complete_step_event(str, str)"),
1473
+ checkpoint_yield_step_event: lib.func("int checkpoint_yield_step_event(str, str)"),
1474
+ get_ffi_dispatch_metrics: lib.func("void* get_ffi_dispatch_metrics()"),
1475
+ check_starvation_warnings: lib.func("void check_starvation_warnings()"),
1476
+ cleanup_timeouts: lib.func("void cleanup_timeouts()"),
1477
+ log_error: lib.func("void log_error(str, str)"),
1478
+ log_warn: lib.func("void log_warn(str, str)"),
1479
+ log_info: lib.func("void log_info(str, str)"),
1480
+ log_debug: lib.func("void log_debug(str, str)"),
1481
+ log_trace: lib.func("void log_trace(str, str)"),
1482
+ free_rust_string: lib.func("void free_rust_string(void*)"),
1483
+ // Client API functions (TAS-231)
1484
+ client_create_task: lib.func("void* client_create_task(str)"),
1485
+ client_get_task: lib.func("void* client_get_task(str)"),
1486
+ client_list_tasks: lib.func("void* client_list_tasks(str)"),
1487
+ client_cancel_task: lib.func("void* client_cancel_task(str)"),
1488
+ client_list_task_steps: lib.func("void* client_list_task_steps(str)"),
1489
+ client_get_step: lib.func("void* client_get_step(str, str)"),
1490
+ client_get_step_audit_history: lib.func("void* client_get_step_audit_history(str, str)"),
1491
+ client_health_check: lib.func("void* client_health_check()")
1492
+ };
1449
1493
  }
1450
1494
  unload() {
1451
- if (this.lib) {
1452
- this.lib.close();
1453
- this.lib = null;
1454
- }
1495
+ this.lib = null;
1496
+ this.koffi = null;
1455
1497
  }
1456
1498
  ensureLoaded() {
1457
1499
  if (!this.lib) {
1458
1500
  throw new Error("Native library not loaded. Call load() first.");
1459
1501
  }
1460
- return this.lib.symbols;
1502
+ return this.lib;
1461
1503
  }
1462
1504
  /**
1463
- * Creates a null-terminated C string buffer.
1464
- * With 'buffer' FFI type, we return Uint8Array directly.
1505
+ * Read a C string from a pointer and free the Rust-allocated memory.
1506
+ *
1507
+ * Uses koffi.decode with 'char' type and -1 length for null-terminated strings.
1465
1508
  */
1466
- toCString(str) {
1467
- return this.encoder.encode(`${str}\0`);
1468
- }
1469
- // biome-ignore lint/suspicious/noExplicitAny: Deno PointerValue type
1470
- fromCString(ptr) {
1471
- if (ptr === null || Deno.UnsafePointer.equals(ptr, null)) {
1472
- return null;
1473
- }
1474
- const view = new Deno.UnsafePointerView(ptr);
1475
- return view.getCString();
1509
+ readAndFreeRustString(ptr) {
1510
+ if (!ptr) return null;
1511
+ const lib = this.ensureLoaded();
1512
+ const str = this.koffi.decode(ptr, "char", -1);
1513
+ lib.free_rust_string(ptr);
1514
+ return str;
1476
1515
  }
1477
1516
  getVersion() {
1478
- const symbols = this.ensureLoaded();
1479
- const result = symbols.get_version();
1480
- const version = this.fromCString(result) ?? "unknown";
1481
- if (result !== null) symbols.free_rust_string(result);
1482
- return version;
1517
+ const lib = this.ensureLoaded();
1518
+ const ptr = lib.get_version();
1519
+ return this.readAndFreeRustString(ptr) ?? "unknown";
1483
1520
  }
1484
1521
  getRustVersion() {
1485
- const symbols = this.ensureLoaded();
1486
- const result = symbols.get_rust_version();
1487
- const version = this.fromCString(result) ?? "unknown";
1488
- if (result !== null) symbols.free_rust_string(result);
1489
- return version;
1522
+ const lib = this.ensureLoaded();
1523
+ const ptr = lib.get_rust_version();
1524
+ return this.readAndFreeRustString(ptr) ?? "unknown";
1490
1525
  }
1491
1526
  healthCheck() {
1492
- const symbols = this.ensureLoaded();
1493
- return symbols.health_check() === 1;
1527
+ const lib = this.ensureLoaded();
1528
+ return lib.health_check() === 1;
1494
1529
  }
1495
1530
  bootstrapWorker(config) {
1496
- const symbols = this.ensureLoaded();
1497
- const configBuf = config ? this.toCString(this.toJson(config)) : null;
1498
- const result = symbols.bootstrap_worker(configBuf);
1499
- const jsonStr = this.fromCString(result);
1500
- if (result !== null) symbols.free_rust_string(result);
1531
+ const lib = this.ensureLoaded();
1532
+ const configJson = config ? this.toJson(config) : null;
1533
+ const ptr = lib.bootstrap_worker(configJson);
1534
+ const jsonStr = this.readAndFreeRustString(ptr);
1501
1535
  const parsed = this.parseJson(jsonStr);
1502
1536
  return parsed ?? {
1503
1537
  success: false,
@@ -1507,22 +1541,20 @@ var init_deno_runtime = __esm({
1507
1541
  };
1508
1542
  }
1509
1543
  isWorkerRunning() {
1510
- const symbols = this.ensureLoaded();
1511
- return symbols.is_worker_running() === 1;
1544
+ const lib = this.ensureLoaded();
1545
+ return lib.is_worker_running() === 1;
1512
1546
  }
1513
1547
  getWorkerStatus() {
1514
- const symbols = this.ensureLoaded();
1515
- const result = symbols.get_worker_status();
1516
- const jsonStr = this.fromCString(result);
1517
- if (result !== null) symbols.free_rust_string(result);
1548
+ const lib = this.ensureLoaded();
1549
+ const ptr = lib.get_worker_status();
1550
+ const jsonStr = this.readAndFreeRustString(ptr);
1518
1551
  const parsed = this.parseJson(jsonStr);
1519
1552
  return parsed ?? { success: false, running: false };
1520
1553
  }
1521
1554
  stopWorker() {
1522
- const symbols = this.ensureLoaded();
1523
- const result = symbols.stop_worker();
1524
- const jsonStr = this.fromCString(result);
1525
- if (result !== null) symbols.free_rust_string(result);
1555
+ const lib = this.ensureLoaded();
1556
+ const ptr = lib.stop_worker();
1557
+ const jsonStr = this.readAndFreeRustString(ptr);
1526
1558
  const parsed = this.parseJson(jsonStr);
1527
1559
  return parsed ?? {
1528
1560
  success: false,
@@ -1532,10 +1564,9 @@ var init_deno_runtime = __esm({
1532
1564
  };
1533
1565
  }
1534
1566
  transitionToGracefulShutdown() {
1535
- const symbols = this.ensureLoaded();
1536
- const result = symbols.transition_to_graceful_shutdown();
1537
- const jsonStr = this.fromCString(result);
1538
- if (result !== null) symbols.free_rust_string(result);
1567
+ const lib = this.ensureLoaded();
1568
+ const ptr = lib.transition_to_graceful_shutdown();
1569
+ const jsonStr = this.readAndFreeRustString(ptr);
1539
1570
  const parsed = this.parseJson(jsonStr);
1540
1571
  return parsed ?? {
1541
1572
  success: false,
@@ -1545,42 +1576,31 @@ var init_deno_runtime = __esm({
1545
1576
  };
1546
1577
  }
1547
1578
  pollStepEvents() {
1548
- const symbols = this.ensureLoaded();
1549
- const result = symbols.poll_step_events();
1550
- if (result === null || Deno.UnsafePointer.equals(result, null)) {
1551
- return null;
1552
- }
1553
- const jsonStr = this.fromCString(result);
1554
- symbols.free_rust_string(result);
1579
+ const lib = this.ensureLoaded();
1580
+ const ptr = lib.poll_step_events();
1581
+ if (!ptr) return null;
1582
+ const jsonStr = this.readAndFreeRustString(ptr);
1555
1583
  return this.parseJson(jsonStr);
1556
1584
  }
1557
1585
  pollInProcessEvents() {
1558
- const symbols = this.ensureLoaded();
1559
- const result = symbols.poll_in_process_events();
1560
- if (result === null || Deno.UnsafePointer.equals(result, null)) {
1561
- return null;
1562
- }
1563
- const jsonStr = this.fromCString(result);
1564
- symbols.free_rust_string(result);
1586
+ const lib = this.ensureLoaded();
1587
+ const ptr = lib.poll_in_process_events();
1588
+ if (!ptr) return null;
1589
+ const jsonStr = this.readAndFreeRustString(ptr);
1565
1590
  return this.parseJson(jsonStr);
1566
1591
  }
1567
1592
  completeStepEvent(eventId, result) {
1568
- const symbols = this.ensureLoaded();
1569
- const eventIdBuf = this.toCString(eventId);
1570
- const resultJsonBuf = this.toCString(this.toJson(result));
1571
- return symbols.complete_step_event(eventIdBuf, resultJsonBuf) === 1;
1593
+ const lib = this.ensureLoaded();
1594
+ return lib.complete_step_event(eventId, this.toJson(result)) === 1;
1572
1595
  }
1573
1596
  checkpointYieldStepEvent(eventId, checkpointData) {
1574
- const symbols = this.ensureLoaded();
1575
- const eventIdBuf = this.toCString(eventId);
1576
- const checkpointJsonBuf = this.toCString(this.toJson(checkpointData));
1577
- return symbols.checkpoint_yield_step_event(eventIdBuf, checkpointJsonBuf) === 1;
1597
+ const lib = this.ensureLoaded();
1598
+ return lib.checkpoint_yield_step_event(eventId, this.toJson(checkpointData)) === 1;
1578
1599
  }
1579
1600
  getFfiDispatchMetrics() {
1580
- const symbols = this.ensureLoaded();
1581
- const result = symbols.get_ffi_dispatch_metrics();
1582
- const jsonStr = this.fromCString(result);
1583
- if (result !== null) symbols.free_rust_string(result);
1601
+ const lib = this.ensureLoaded();
1602
+ const ptr = lib.get_ffi_dispatch_metrics();
1603
+ const jsonStr = this.readAndFreeRustString(ptr);
1584
1604
  const parsed = this.parseJson(jsonStr);
1585
1605
  if (parsed && typeof parsed.pending_count === "number") {
1586
1606
  return parsed;
@@ -1595,49 +1615,38 @@ var init_deno_runtime = __esm({
1595
1615
  };
1596
1616
  }
1597
1617
  checkStarvationWarnings() {
1598
- const symbols = this.ensureLoaded();
1599
- symbols.check_starvation_warnings();
1618
+ const lib = this.ensureLoaded();
1619
+ lib.check_starvation_warnings();
1600
1620
  }
1601
1621
  cleanupTimeouts() {
1602
- const symbols = this.ensureLoaded();
1603
- symbols.cleanup_timeouts();
1622
+ const lib = this.ensureLoaded();
1623
+ lib.cleanup_timeouts();
1604
1624
  }
1605
1625
  logError(message, fields) {
1606
- const symbols = this.ensureLoaded();
1607
- const msgBuf = this.toCString(message);
1608
- const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
1609
- symbols.log_error(msgBuf, fieldsBuf);
1626
+ const lib = this.ensureLoaded();
1627
+ lib.log_error(message, fields ? this.toJson(fields) : null);
1610
1628
  }
1611
1629
  logWarn(message, fields) {
1612
- const symbols = this.ensureLoaded();
1613
- const msgBuf = this.toCString(message);
1614
- const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
1615
- symbols.log_warn(msgBuf, fieldsBuf);
1630
+ const lib = this.ensureLoaded();
1631
+ lib.log_warn(message, fields ? this.toJson(fields) : null);
1616
1632
  }
1617
1633
  logInfo(message, fields) {
1618
- const symbols = this.ensureLoaded();
1619
- const msgBuf = this.toCString(message);
1620
- const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
1621
- symbols.log_info(msgBuf, fieldsBuf);
1634
+ const lib = this.ensureLoaded();
1635
+ lib.log_info(message, fields ? this.toJson(fields) : null);
1622
1636
  }
1623
1637
  logDebug(message, fields) {
1624
- const symbols = this.ensureLoaded();
1625
- const msgBuf = this.toCString(message);
1626
- const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
1627
- symbols.log_debug(msgBuf, fieldsBuf);
1638
+ const lib = this.ensureLoaded();
1639
+ lib.log_debug(message, fields ? this.toJson(fields) : null);
1628
1640
  }
1629
1641
  logTrace(message, fields) {
1630
- const symbols = this.ensureLoaded();
1631
- const msgBuf = this.toCString(message);
1632
- const fieldsBuf = fields ? this.toCString(this.toJson(fields)) : null;
1633
- symbols.log_trace(msgBuf, fieldsBuf);
1642
+ const lib = this.ensureLoaded();
1643
+ lib.log_trace(message, fields ? this.toJson(fields) : null);
1634
1644
  }
1635
1645
  // ==========================================================================
1636
1646
  // Client API Operations (TAS-231)
1637
1647
  // ==========================================================================
1638
- parseClientResult(result) {
1639
- const jsonStr = this.fromCString(result);
1640
- if (result !== null) this.ensureLoaded().free_rust_string(result);
1648
+ parseClientResult(ptr) {
1649
+ const jsonStr = this.readAndFreeRustString(ptr);
1641
1650
  const parsed = this.parseJson(jsonStr);
1642
1651
  return parsed ?? {
1643
1652
  success: false,
@@ -1647,64 +1656,49 @@ var init_deno_runtime = __esm({
1647
1656
  };
1648
1657
  }
1649
1658
  clientCreateTask(requestJson) {
1650
- const symbols = this.ensureLoaded();
1651
- const buf = this.toCString(requestJson);
1652
- const result = symbols.client_create_task(buf);
1653
- return this.parseClientResult(result);
1659
+ const lib = this.ensureLoaded();
1660
+ const ptr = lib.client_create_task(requestJson);
1661
+ return this.parseClientResult(ptr);
1654
1662
  }
1655
1663
  clientGetTask(taskUuid) {
1656
- const symbols = this.ensureLoaded();
1657
- const buf = this.toCString(taskUuid);
1658
- const result = symbols.client_get_task(buf);
1659
- return this.parseClientResult(result);
1664
+ const lib = this.ensureLoaded();
1665
+ const ptr = lib.client_get_task(taskUuid);
1666
+ return this.parseClientResult(ptr);
1660
1667
  }
1661
1668
  clientListTasks(paramsJson) {
1662
- const symbols = this.ensureLoaded();
1663
- const buf = this.toCString(paramsJson);
1664
- const result = symbols.client_list_tasks(buf);
1665
- return this.parseClientResult(result);
1669
+ const lib = this.ensureLoaded();
1670
+ const ptr = lib.client_list_tasks(paramsJson);
1671
+ return this.parseClientResult(ptr);
1666
1672
  }
1667
1673
  clientCancelTask(taskUuid) {
1668
- const symbols = this.ensureLoaded();
1669
- const buf = this.toCString(taskUuid);
1670
- const result = symbols.client_cancel_task(buf);
1671
- return this.parseClientResult(result);
1674
+ const lib = this.ensureLoaded();
1675
+ const ptr = lib.client_cancel_task(taskUuid);
1676
+ return this.parseClientResult(ptr);
1672
1677
  }
1673
1678
  clientListTaskSteps(taskUuid) {
1674
- const symbols = this.ensureLoaded();
1675
- const buf = this.toCString(taskUuid);
1676
- const result = symbols.client_list_task_steps(buf);
1677
- return this.parseClientResult(result);
1679
+ const lib = this.ensureLoaded();
1680
+ const ptr = lib.client_list_task_steps(taskUuid);
1681
+ return this.parseClientResult(ptr);
1678
1682
  }
1679
1683
  clientGetStep(taskUuid, stepUuid) {
1680
- const symbols = this.ensureLoaded();
1681
- const tBuf = this.toCString(taskUuid);
1682
- const sBuf = this.toCString(stepUuid);
1683
- const result = symbols.client_get_step(tBuf, sBuf);
1684
- return this.parseClientResult(result);
1684
+ const lib = this.ensureLoaded();
1685
+ const ptr = lib.client_get_step(taskUuid, stepUuid);
1686
+ return this.parseClientResult(ptr);
1685
1687
  }
1686
1688
  clientGetStepAuditHistory(taskUuid, stepUuid) {
1687
- const symbols = this.ensureLoaded();
1688
- const tBuf = this.toCString(taskUuid);
1689
- const sBuf = this.toCString(stepUuid);
1690
- const result = symbols.client_get_step_audit_history(tBuf, sBuf);
1691
- return this.parseClientResult(result);
1689
+ const lib = this.ensureLoaded();
1690
+ const ptr = lib.client_get_step_audit_history(taskUuid, stepUuid);
1691
+ return this.parseClientResult(ptr);
1692
1692
  }
1693
1693
  clientHealthCheck() {
1694
- const symbols = this.ensureLoaded();
1695
- const result = symbols.client_health_check();
1696
- return this.parseClientResult(result);
1694
+ const lib = this.ensureLoaded();
1695
+ const ptr = lib.client_health_check();
1696
+ return this.parseClientResult(ptr);
1697
1697
  }
1698
1698
  };
1699
1699
  }
1700
1700
  });
1701
1701
 
1702
- // src/ffi/bun-runtime.ts
1703
- init_node_runtime();
1704
- var BunRuntime = class extends NodeRuntime {
1705
- name = "bun";
1706
- };
1707
-
1708
1702
  // src/ffi/index.ts
1709
1703
  init_deno_runtime();
1710
1704
 
@@ -1921,10 +1915,9 @@ Override: export TASKER_FFI_LIBRARY_PATH=/path/to/libtasker_ts.dylib`
1921
1915
  /**
1922
1916
  * Create a runtime adapter for the configured runtime type.
1923
1917
  *
1924
- * NOTE: We use koffi (NodeRuntime) for both Node.js and Bun because:
1925
- * - bun:ffi is experimental with known bugs (per Bun docs)
1926
- * - koffi is stable and works with both Node.js and Bun via Node-API
1927
- * - See: https://bun.sh/docs/runtime/node-api
1918
+ * NOTE: We use koffi (NodeRuntime) for both Node.js and Bun.
1919
+ * koffi is stable and works with both runtimes via Node-API.
1920
+ * See: https://bun.sh/docs/runtime/node-api
1928
1921
  */
1929
1922
  async createRuntime() {
1930
1923
  switch (this.runtimeType) {
@@ -1955,15 +1948,21 @@ function findBundledNativeLibrary() {
1955
1948
  if (!filename2) {
1956
1949
  return null;
1957
1950
  }
1958
- const thisDir = dirname(fileURLToPath(import.meta.url));
1959
- const packageRoot = join(thisDir, "..", "..");
1960
- return join(packageRoot, "native", filename2);
1951
+ let dir = dirname(fileURLToPath(import.meta.url));
1952
+ for (let i = 0; i < 5; i++) {
1953
+ const candidate = join(dir, "native", filename2);
1954
+ if (existsSync(candidate)) return candidate;
1955
+ const parent = dirname(dir);
1956
+ if (parent === dir) break;
1957
+ dir = parent;
1958
+ }
1959
+ return null;
1961
1960
  }
1962
1961
 
1963
1962
  // src/ffi/index.ts
1964
1963
  init_node_runtime();
1965
1964
  init_runtime_interface();
1966
1965
 
1967
- export { BaseTaskerRuntime, BunRuntime, DenoRuntime, FfiLayer, NodeRuntime, detectRuntime, getLibraryPath, getRuntimeInfo, isBun, isDeno, isNode };
1966
+ export { BaseTaskerRuntime, DenoRuntime, FfiLayer, NodeRuntime, detectRuntime, getLibraryPath, getRuntimeInfo, isBun, isDeno, isNode };
1968
1967
  //# sourceMappingURL=index.js.map
1969
1968
  //# sourceMappingURL=index.js.map