@miosa/sdk 3.4.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -9644,6 +9644,12 @@ declare class Http2Transport implements RunnerTransport {
9644
9644
  private readonly insecure;
9645
9645
  private readonly dial;
9646
9646
  private readonly pools;
9647
+ /**
9648
+ * Requests in flight per session. A pooled session is unref'd while idle so
9649
+ * a process that only imported the client (or finished its last request)
9650
+ * still exits; it is ref'd again for exactly as long as it carries a request.
9651
+ */
9652
+ private readonly inFlight;
9647
9653
  constructor(options?: Http2TransportOptions);
9648
9654
  prewarm(regionHostname: string, sessionsPerAddress?: number): void;
9649
9655
  addressCount(regionHostname: string): Promise<number>;
@@ -9687,6 +9693,8 @@ declare class Http2Transport implements RunnerTransport {
9687
9693
  */
9688
9694
  private rebuildPool;
9689
9695
  private connectSession;
9696
+ private retain;
9697
+ private release;
9690
9698
  private sendRequest;
9691
9699
  private sendStreamRequest;
9692
9700
  }
package/dist/index.js CHANGED
@@ -185,7 +185,7 @@ var TokenRefreshFailedError = class extends MiosaError {
185
185
  };
186
186
 
187
187
  // src/version.ts
188
- var SDK_VERSION = "3.4.0";
188
+ var SDK_VERSION = "3.4.1";
189
189
  var SDK_USER_AGENT = `@miosa/sdk/${SDK_VERSION}`;
190
190
 
191
191
  // src/http.ts
@@ -214,7 +214,11 @@ async function ensureHttp2Agent() {
214
214
  _h2Available = false;
215
215
  }
216
216
  }
217
- ensureHttp2Agent();
217
+ var _h2Bootstrap;
218
+ function startHttp2Agent() {
219
+ _h2Bootstrap ??= ensureHttp2Agent();
220
+ return _h2Bootstrap;
221
+ }
218
222
  var DEFAULT_TIMEOUT = 3e4;
219
223
  var DEFAULT_MAX_RETRIES = 3;
220
224
  var BASE_DELAY_MS = 500;
@@ -293,6 +297,7 @@ var HttpClient = class {
293
297
  options.signal?.addEventListener("abort", cancel, { once: true });
294
298
  const timer = setTimeout(() => controller.abort(), timeout);
295
299
  try {
300
+ await startHttp2Agent();
296
301
  const response = await fetch(this.buildUrl(path), {
297
302
  method,
298
303
  headers,
@@ -430,6 +435,7 @@ var HttpClient = class {
430
435
  try {
431
436
  let response;
432
437
  try {
438
+ await startHttp2Agent();
433
439
  response = await fetch(this.buildUrl(path), {
434
440
  method,
435
441
  headers,
@@ -11285,7 +11291,7 @@ function markHandled(promise) {
11285
11291
  promise.catch(() => void 0);
11286
11292
  return promise;
11287
11293
  }
11288
- var DEFAULT_SESSIONS_PER_ADDRESS = 8;
11294
+ var DEFAULT_SESSIONS_PER_ADDRESS = 2;
11289
11295
  var DEFAULT_TIMEOUT_MS = 3e4;
11290
11296
  var Http2Transport = class {
11291
11297
  protocol = "h2";
@@ -11298,6 +11304,12 @@ var Http2Transport = class {
11298
11304
  insecure;
11299
11305
  dial;
11300
11306
  pools = /* @__PURE__ */ new Map();
11307
+ /**
11308
+ * Requests in flight per session. A pooled session is unref'd while idle so
11309
+ * a process that only imported the client (or finished its last request)
11310
+ * still exits; it is ref'd again for exactly as long as it carries a request.
11311
+ */
11312
+ inFlight = /* @__PURE__ */ new Map();
11301
11313
  constructor(options = {}) {
11302
11314
  this.defaultSessionsPerAddress = options.defaultSessionsPerAddress ?? DEFAULT_SESSIONS_PER_ADDRESS;
11303
11315
  this.tls = options.tls ?? true;
@@ -11491,11 +11503,26 @@ var Http2Transport = class {
11491
11503
  session.once("error", onError);
11492
11504
  session.once("connect", () => {
11493
11505
  session.removeListener("error", onError);
11506
+ session.unref();
11494
11507
  session.on("error", () => void 0);
11495
11508
  resolve(session);
11496
11509
  });
11497
11510
  });
11498
11511
  }
11512
+ retain(session) {
11513
+ const n = this.inFlight.get(session) ?? 0;
11514
+ this.inFlight.set(session, n + 1);
11515
+ if (n === 0) session.ref();
11516
+ }
11517
+ release(session) {
11518
+ const n = (this.inFlight.get(session) ?? 1) - 1;
11519
+ if (n > 0) {
11520
+ this.inFlight.set(session, n);
11521
+ return;
11522
+ }
11523
+ this.inFlight.delete(session);
11524
+ session.unref();
11525
+ }
11499
11526
  sendRequest(regionHostname2, authority, path, session, init) {
11500
11527
  const timeoutMs = init.timeoutMs ?? this.defaultTimeoutMs;
11501
11528
  return new Promise((resolve, reject) => {
@@ -11505,6 +11532,7 @@ var Http2Transport = class {
11505
11532
  ":authority": authority,
11506
11533
  ...init.headers
11507
11534
  };
11535
+ this.retain(session);
11508
11536
  const stream = session.request(requestHeaders);
11509
11537
  let status = 0;
11510
11538
  const responseHeaders = {};
@@ -11513,12 +11541,14 @@ var Http2Transport = class {
11513
11541
  const timer = setTimeout(() => {
11514
11542
  if (settled) return;
11515
11543
  settled = true;
11544
+ this.release(session);
11516
11545
  stream.close(http2.constants.NGHTTP2_CANCEL);
11517
11546
  reject(new RunnerTimeoutError(regionHostname2, path, timeoutMs));
11518
11547
  }, timeoutMs);
11519
11548
  const onAbort = () => {
11520
11549
  if (settled) return;
11521
11550
  settled = true;
11551
+ this.release(session);
11522
11552
  clearTimeout(timer);
11523
11553
  stream.close(http2.constants.NGHTTP2_CANCEL);
11524
11554
  reject(new DOMException("runner request aborted", "AbortError"));
@@ -11535,6 +11565,7 @@ var Http2Transport = class {
11535
11565
  stream.on("end", () => {
11536
11566
  if (settled) return;
11537
11567
  settled = true;
11568
+ this.release(session);
11538
11569
  clearTimeout(timer);
11539
11570
  init.signal?.removeEventListener("abort", onAbort);
11540
11571
  resolve({ status, headers: responseHeaders, body: Buffer.concat(chunks).toString("utf8") });
@@ -11542,6 +11573,7 @@ var Http2Transport = class {
11542
11573
  stream.on("error", (error) => {
11543
11574
  if (settled) return;
11544
11575
  settled = true;
11576
+ this.release(session);
11545
11577
  clearTimeout(timer);
11546
11578
  init.signal?.removeEventListener("abort", onAbort);
11547
11579
  reject(error);
@@ -12069,7 +12101,7 @@ function unwrapSomaEnvelope(httpStatus, body5) {
12069
12101
  }
12070
12102
 
12071
12103
  // src/runner/runner-client.ts
12072
- var DEFAULT_SESSIONS_PER_ADDRESS3 = 8;
12104
+ var DEFAULT_SESSIONS_PER_ADDRESS3 = 2;
12073
12105
  function createSupportedByRunner(params) {
12074
12106
  const hasTemplate = params["template_id"] !== void 0 || params["templateId"] !== void 0 || params["image"] !== void 0;
12075
12107
  const hasSnapshot = params["snapshot_id"] !== void 0 || params["snapshotId"] !== void 0 || params["source_snapshot_path"] !== void 0 || params["sourceSnapshotPath"] !== void 0;