@mitralab.io/functions-sdk 0.2.0 → 0.2.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ {
2
+ "contract": "SDK-PARITY-001",
3
+ "version": "0.2.2",
4
+ "dependency": {
5
+ "package": "@mitralab.io/sdk-core",
6
+ "version": "0.2.2",
7
+ "contractPath": "contracts/v0.2.2/sdk-parity.json"
8
+ },
9
+ "sha256": "8466d8f5169d2de93d1f99b1262af9c72316dd8348eff92fd6e3d729d8f3a800",
10
+ "source": {
11
+ "repository": "https://github.com/mitralab-dev/mitra-core-sdk",
12
+ "commit": "b212f3733e0a0f1be7edcb80796e597b7a464065",
13
+ "path": "contracts/v0.2.2/sdk-parity.json"
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "contract": "SDK-PARITY-001",
3
+ "version": "0.2.6-beta.0",
4
+ "dependency": {
5
+ "package": "@mitralab.io/sdk-core",
6
+ "version": "0.2.6-beta.0",
7
+ "contractPath": "contracts/v0.2.6-beta.0/sdk-parity.json"
8
+ },
9
+ "sha256": "777daf74e49b6bd41f2b7eca573712c275f4278588232c4fc9976326fbd6eea4",
10
+ "source": {
11
+ "repository": "https://github.com/mitralab-dev/mitra-core-sdk",
12
+ "commit": "326f05af5c253b08b42115b77c006bc02a173229",
13
+ "path": "contracts/v0.2.6-beta.0/sdk-parity.json"
14
+ }
15
+ }
package/dist/index.cjs CHANGED
@@ -301,6 +301,14 @@ var HttpClient = class {
301
301
  };
302
302
 
303
303
  // src/agent-task-sse.ts
304
+ var SILENCE_TIMEOUT_MS = 6e4;
305
+ function silenceError() {
306
+ return new MitraApiError(
307
+ `The Mitra Agent event stream went silent for ${SILENCE_TIMEOUT_MS / 1e3}s`,
308
+ 0,
309
+ { code: "NETWORK_ERROR", retryable: true }
310
+ );
311
+ }
304
312
  function invalidResponse(message) {
305
313
  return new MitraApiError(message, 200, {
306
314
  code: "INVALID_RESPONSE",
@@ -424,10 +432,25 @@ var AgentTaskSseEventSource = class {
424
432
  const reader = response.body.getReader();
425
433
  const decoder = new TextDecoder();
426
434
  let buffer = "";
435
+ let breakSilence;
436
+ const silence = new Promise((_, reject) => {
437
+ breakSilence = reject;
438
+ });
439
+ let silenceTimer = null;
440
+ const armSilence = () => {
441
+ if (silenceTimer !== null) clearTimeout(silenceTimer);
442
+ silenceTimer = setTimeout(() => breakSilence(silenceError()), SILENCE_TIMEOUT_MS);
443
+ };
444
+ const disarmSilence = () => {
445
+ if (silenceTimer !== null) clearTimeout(silenceTimer);
446
+ silenceTimer = null;
447
+ };
427
448
  void (async () => {
428
449
  try {
450
+ armSilence();
429
451
  while (true) {
430
- const { done, value } = await reader.read();
452
+ const { done, value } = await Promise.race([reader.read(), silence]);
453
+ armSilence();
431
454
  if (done) break;
432
455
  buffer += decoder.decode(value, { stream: true });
433
456
  let boundary = /\r?\n\r?\n/.exec(buffer);
@@ -447,6 +470,7 @@ var AgentTaskSseEventSource = class {
447
470
  disconnect(error);
448
471
  }
449
472
  } finally {
473
+ disarmSilence();
450
474
  cleanup();
451
475
  reader.releaseLock();
452
476
  }
@@ -455,6 +479,7 @@ var AgentTaskSseEventSource = class {
455
479
  close() {
456
480
  if (intentionallyClosed) return;
457
481
  intentionallyClosed = true;
482
+ disarmSilence();
458
483
  cleanup();
459
484
  controller.abort();
460
485
  void reader.cancel().catch(() => void 0);
package/dist/index.js CHANGED
@@ -207,6 +207,14 @@ var HttpClient = class {
207
207
  };
208
208
 
209
209
  // src/agent-task-sse.ts
210
+ var SILENCE_TIMEOUT_MS = 6e4;
211
+ function silenceError() {
212
+ return new MitraApiError(
213
+ `The Mitra Agent event stream went silent for ${SILENCE_TIMEOUT_MS / 1e3}s`,
214
+ 0,
215
+ { code: "NETWORK_ERROR", retryable: true }
216
+ );
217
+ }
210
218
  function invalidResponse(message) {
211
219
  return new MitraApiError(message, 200, {
212
220
  code: "INVALID_RESPONSE",
@@ -330,10 +338,25 @@ var AgentTaskSseEventSource = class {
330
338
  const reader = response.body.getReader();
331
339
  const decoder = new TextDecoder();
332
340
  let buffer = "";
341
+ let breakSilence;
342
+ const silence = new Promise((_, reject) => {
343
+ breakSilence = reject;
344
+ });
345
+ let silenceTimer = null;
346
+ const armSilence = () => {
347
+ if (silenceTimer !== null) clearTimeout(silenceTimer);
348
+ silenceTimer = setTimeout(() => breakSilence(silenceError()), SILENCE_TIMEOUT_MS);
349
+ };
350
+ const disarmSilence = () => {
351
+ if (silenceTimer !== null) clearTimeout(silenceTimer);
352
+ silenceTimer = null;
353
+ };
333
354
  void (async () => {
334
355
  try {
356
+ armSilence();
335
357
  while (true) {
336
- const { done, value } = await reader.read();
358
+ const { done, value } = await Promise.race([reader.read(), silence]);
359
+ armSilence();
337
360
  if (done) break;
338
361
  buffer += decoder.decode(value, { stream: true });
339
362
  let boundary = /\r?\n\r?\n/.exec(buffer);
@@ -353,6 +376,7 @@ var AgentTaskSseEventSource = class {
353
376
  disconnect(error);
354
377
  }
355
378
  } finally {
379
+ disarmSilence();
356
380
  cleanup();
357
381
  reader.releaseLock();
358
382
  }
@@ -361,6 +385,7 @@ var AgentTaskSseEventSource = class {
361
385
  close() {
362
386
  if (intentionallyClosed) return;
363
387
  intentionallyClosed = true;
388
+ disarmSilence();
364
389
  cleanup();
365
390
  controller.abort();
366
391
  void reader.cancel().catch(() => void 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mitralab.io/functions-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.2-beta.0",
4
4
  "description": "JavaScript and TypeScript SDK for Mitra Server Functions",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -67,7 +67,7 @@
67
67
  "node": ">=18.0.0"
68
68
  },
69
69
  "dependencies": {
70
- "@mitralab.io/sdk-core": "0.2.0",
70
+ "@mitralab.io/sdk-core": "0.2.6-beta.0",
71
71
  "mitra-sdk": "1.0.63-beta.42"
72
72
  },
73
73
  "devDependencies": {