@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/README.md +7 -7
- package/dist/ffi/index.d.ts +30 -51
- package/dist/ffi/index.js +1468 -1469
- package/dist/ffi/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1468 -1469
- package/dist/index.js.map +1 -1
- package/native/libtasker_ts-darwin-arm64.dylib +0 -0
- package/native/libtasker_ts-linux-x64.so +0 -0
- package/package.json +1 -1
package/dist/ffi/index.js
CHANGED
|
@@ -69,1254 +69,1385 @@ var init_runtime_interface = __esm({
|
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
//
|
|
73
|
-
var
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
-
|
|
481
|
-
|
|
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
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
{
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
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
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
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
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
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
|
-
|
|
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
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
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
|
-
|
|
762
|
-
|
|
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
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
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
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
let
|
|
876
|
-
|
|
877
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
902
|
-
|
|
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
|
-
|
|
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
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
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
|
-
|
|
929
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
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
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
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
|
-
|
|
1009
|
-
|
|
1010
|
-
{
|
|
1011
|
-
|
|
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
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
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
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
{
|
|
1025
|
-
|
|
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
|
-
|
|
1155
|
+
} catch (err) {
|
|
1156
|
+
if (err.code !== "ENOENT")
|
|
1157
|
+
throw err;
|
|
1158
|
+
}
|
|
1033
1159
|
}
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
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
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
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
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
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
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
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
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
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
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
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
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
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
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
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/
|
|
1308
|
-
var
|
|
1309
|
-
__export(
|
|
1310
|
-
|
|
1437
|
+
// src/ffi/node-runtime.ts
|
|
1438
|
+
var node_runtime_exports = {};
|
|
1439
|
+
__export(node_runtime_exports, {
|
|
1440
|
+
NodeRuntime: () => NodeRuntime
|
|
1311
1441
|
});
|
|
1312
|
-
var
|
|
1313
|
-
var
|
|
1314
|
-
"src/ffi/
|
|
1442
|
+
var NodeRuntime;
|
|
1443
|
+
var init_node_runtime = __esm({
|
|
1444
|
+
"src/ffi/node-runtime.ts"() {
|
|
1315
1445
|
init_runtime_interface();
|
|
1316
|
-
|
|
1317
|
-
name = "
|
|
1446
|
+
NodeRuntime = class extends BaseTaskerRuntime {
|
|
1447
|
+
name = "node";
|
|
1318
1448
|
lib = null;
|
|
1319
|
-
|
|
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
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
this.lib =
|
|
1331
|
-
get_version:
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
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
|
-
|
|
1452
|
-
|
|
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
|
|
1502
|
+
return this.lib;
|
|
1461
1503
|
}
|
|
1462
1504
|
/**
|
|
1463
|
-
*
|
|
1464
|
-
*
|
|
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
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
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
|
|
1479
|
-
const
|
|
1480
|
-
|
|
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
|
|
1486
|
-
const
|
|
1487
|
-
|
|
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
|
|
1493
|
-
return
|
|
1527
|
+
const lib = this.ensureLoaded();
|
|
1528
|
+
return lib.health_check() === 1;
|
|
1494
1529
|
}
|
|
1495
1530
|
bootstrapWorker(config) {
|
|
1496
|
-
const
|
|
1497
|
-
const
|
|
1498
|
-
const
|
|
1499
|
-
const jsonStr = this.
|
|
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
|
|
1511
|
-
return
|
|
1544
|
+
const lib = this.ensureLoaded();
|
|
1545
|
+
return lib.is_worker_running() === 1;
|
|
1512
1546
|
}
|
|
1513
1547
|
getWorkerStatus() {
|
|
1514
|
-
const
|
|
1515
|
-
const
|
|
1516
|
-
const jsonStr = this.
|
|
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
|
|
1523
|
-
const
|
|
1524
|
-
const jsonStr = this.
|
|
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
|
|
1536
|
-
const
|
|
1537
|
-
const jsonStr = this.
|
|
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
|
|
1549
|
-
const
|
|
1550
|
-
if (
|
|
1551
|
-
|
|
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
|
|
1559
|
-
const
|
|
1560
|
-
if (
|
|
1561
|
-
|
|
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
|
|
1569
|
-
|
|
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
|
|
1575
|
-
|
|
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
|
|
1581
|
-
const
|
|
1582
|
-
const jsonStr = this.
|
|
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
|
|
1599
|
-
|
|
1618
|
+
const lib = this.ensureLoaded();
|
|
1619
|
+
lib.check_starvation_warnings();
|
|
1600
1620
|
}
|
|
1601
1621
|
cleanupTimeouts() {
|
|
1602
|
-
const
|
|
1603
|
-
|
|
1622
|
+
const lib = this.ensureLoaded();
|
|
1623
|
+
lib.cleanup_timeouts();
|
|
1604
1624
|
}
|
|
1605
1625
|
logError(message, fields) {
|
|
1606
|
-
const
|
|
1607
|
-
|
|
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
|
|
1613
|
-
|
|
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
|
|
1619
|
-
|
|
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
|
|
1625
|
-
|
|
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
|
|
1631
|
-
|
|
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(
|
|
1639
|
-
const jsonStr = this.
|
|
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
|
|
1651
|
-
const
|
|
1652
|
-
|
|
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
|
|
1657
|
-
const
|
|
1658
|
-
|
|
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
|
|
1663
|
-
const
|
|
1664
|
-
|
|
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
|
|
1669
|
-
const
|
|
1670
|
-
|
|
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
|
|
1675
|
-
const
|
|
1676
|
-
|
|
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
|
|
1681
|
-
const
|
|
1682
|
-
|
|
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
|
|
1688
|
-
const
|
|
1689
|
-
|
|
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
|
|
1695
|
-
const
|
|
1696
|
-
return this.parseClientResult(
|
|
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
|
|
1925
|
-
*
|
|
1926
|
-
*
|
|
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
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
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,
|
|
1966
|
+
export { BaseTaskerRuntime, DenoRuntime, FfiLayer, NodeRuntime, detectRuntime, getLibraryPath, getRuntimeInfo, isBun, isDeno, isNode };
|
|
1968
1967
|
//# sourceMappingURL=index.js.map
|
|
1969
1968
|
//# sourceMappingURL=index.js.map
|