@blockrun/clawrouter 0.12.93 → 0.12.95

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
@@ -924,6 +924,8 @@ type UsageEntry = {
924
924
  baselineCost: number;
925
925
  savings: number;
926
926
  latencyMs: number;
927
+ /** Whether the request completed successfully or ended in an error */
928
+ status?: "success" | "error";
927
929
  /** Input (prompt) tokens reported by the provider */
928
930
  inputTokens?: number;
929
931
  /** Output (completion) tokens reported by the provider */
package/dist/index.js CHANGED
@@ -25957,7 +25957,7 @@ var require_permessage_deflate = __commonJS({
25957
25957
  var kBuffers = /* @__PURE__ */ Symbol("buffers");
25958
25958
  var kError = /* @__PURE__ */ Symbol("error");
25959
25959
  var zlibLimiter;
25960
- var PerMessageDeflate = class {
25960
+ var PerMessageDeflate2 = class {
25961
25961
  /**
25962
25962
  * Creates a PerMessageDeflate instance.
25963
25963
  *
@@ -25968,6 +25968,9 @@ var require_permessage_deflate = __commonJS({
25968
25968
  * acknowledge disabling of client context takeover
25969
25969
  * @param {Number} [options.concurrencyLimit=10] The number of concurrent
25970
25970
  * calls to zlib
25971
+ * @param {Boolean} [options.isServer=false] Create the instance in either
25972
+ * server or client mode
25973
+ * @param {Number} [options.maxPayload=0] The maximum allowed message length
25971
25974
  * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the
25972
25975
  * use of a custom server window size
25973
25976
  * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept
@@ -25978,15 +25981,12 @@ var require_permessage_deflate = __commonJS({
25978
25981
  * deflate
25979
25982
  * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on
25980
25983
  * inflate
25981
- * @param {Boolean} [isServer=false] Create the instance in either server or
25982
- * client mode
25983
- * @param {Number} [maxPayload=0] The maximum allowed message length
25984
25984
  */
25985
- constructor(options, isServer, maxPayload) {
25986
- this._maxPayload = maxPayload | 0;
25985
+ constructor(options) {
25987
25986
  this._options = options || {};
25988
25987
  this._threshold = this._options.threshold !== void 0 ? this._options.threshold : 1024;
25989
- this._isServer = !!isServer;
25988
+ this._maxPayload = this._options.maxPayload | 0;
25989
+ this._isServer = !!this._options.isServer;
25990
25990
  this._deflate = null;
25991
25991
  this._inflate = null;
25992
25992
  this.params = null;
@@ -26295,7 +26295,7 @@ var require_permessage_deflate = __commonJS({
26295
26295
  });
26296
26296
  }
26297
26297
  };
26298
- module.exports = PerMessageDeflate;
26298
+ module.exports = PerMessageDeflate2;
26299
26299
  function deflateOnData(chunk) {
26300
26300
  this[kBuffers].push(chunk);
26301
26301
  this[kTotalLength] += chunk.length;
@@ -26530,7 +26530,7 @@ var require_receiver = __commonJS({
26530
26530
  "node_modules/ws/lib/receiver.js"(exports, module) {
26531
26531
  "use strict";
26532
26532
  var { Writable } = __require("stream");
26533
- var PerMessageDeflate = require_permessage_deflate();
26533
+ var PerMessageDeflate2 = require_permessage_deflate();
26534
26534
  var {
26535
26535
  BINARY_TYPES,
26536
26536
  EMPTY_BUFFER,
@@ -26697,7 +26697,7 @@ var require_receiver = __commonJS({
26697
26697
  return;
26698
26698
  }
26699
26699
  const compressed = (buf[0] & 64) === 64;
26700
- if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
26700
+ if (compressed && !this._extensions[PerMessageDeflate2.extensionName]) {
26701
26701
  const error = this.createError(
26702
26702
  RangeError,
26703
26703
  "RSV1 must be clear",
@@ -26941,7 +26941,7 @@ var require_receiver = __commonJS({
26941
26941
  * @private
26942
26942
  */
26943
26943
  decompress(data, cb) {
26944
- const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
26944
+ const perMessageDeflate = this._extensions[PerMessageDeflate2.extensionName];
26945
26945
  perMessageDeflate.decompress(data, this._fin, (err, buf) => {
26946
26946
  if (err) return cb(err);
26947
26947
  if (buf.length) {
@@ -27123,7 +27123,7 @@ var require_sender = __commonJS({
27123
27123
  "use strict";
27124
27124
  var { Duplex } = __require("stream");
27125
27125
  var { randomFillSync } = __require("crypto");
27126
- var PerMessageDeflate = require_permessage_deflate();
27126
+ var PerMessageDeflate2 = require_permessage_deflate();
27127
27127
  var { EMPTY_BUFFER, kWebSocket, NOOP } = require_constants();
27128
27128
  var { isBlob, isValidStatusCode } = require_validation();
27129
27129
  var { mask: applyMask, toBuffer } = require_buffer_util();
@@ -27407,7 +27407,7 @@ var require_sender = __commonJS({
27407
27407
  * @public
27408
27408
  */
27409
27409
  send(data, options, cb) {
27410
- const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
27410
+ const perMessageDeflate = this._extensions[PerMessageDeflate2.extensionName];
27411
27411
  let opcode = options.binary ? 2 : 1;
27412
27412
  let rsv1 = options.compress;
27413
27413
  let byteLength;
@@ -27531,7 +27531,7 @@ var require_sender = __commonJS({
27531
27531
  this.sendFrame(_Sender.frame(data, options), cb);
27532
27532
  return;
27533
27533
  }
27534
- const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
27534
+ const perMessageDeflate = this._extensions[PerMessageDeflate2.extensionName];
27535
27535
  this._bufferedBytes += options[kByteLength];
27536
27536
  this._state = DEFLATING;
27537
27537
  perMessageDeflate.compress(data, options.fin, (_, buf) => {
@@ -27969,11 +27969,11 @@ var require_extension = __commonJS({
27969
27969
  return offers;
27970
27970
  }
27971
27971
  function format(extensions) {
27972
- return Object.keys(extensions).map((extension) => {
27973
- let configurations = extensions[extension];
27972
+ return Object.keys(extensions).map((extension2) => {
27973
+ let configurations = extensions[extension2];
27974
27974
  if (!Array.isArray(configurations)) configurations = [configurations];
27975
27975
  return configurations.map((params) => {
27976
- return [extension].concat(
27976
+ return [extension2].concat(
27977
27977
  Object.keys(params).map((k) => {
27978
27978
  let values = params[k];
27979
27979
  if (!Array.isArray(values)) values = [values];
@@ -27999,7 +27999,7 @@ var require_websocket = __commonJS({
27999
27999
  var { randomBytes: randomBytes3, createHash: createHash4 } = __require("crypto");
28000
28000
  var { Duplex, Readable } = __require("stream");
28001
28001
  var { URL: URL2 } = __require("url");
28002
- var PerMessageDeflate = require_permessage_deflate();
28002
+ var PerMessageDeflate2 = require_permessage_deflate();
28003
28003
  var Receiver2 = require_receiver();
28004
28004
  var Sender2 = require_sender();
28005
28005
  var { isBlob } = require_validation();
@@ -28207,8 +28207,8 @@ var require_websocket = __commonJS({
28207
28207
  this.emit("close", this._closeCode, this._closeMessage);
28208
28208
  return;
28209
28209
  }
28210
- if (this._extensions[PerMessageDeflate.extensionName]) {
28211
- this._extensions[PerMessageDeflate.extensionName].cleanup();
28210
+ if (this._extensions[PerMessageDeflate2.extensionName]) {
28211
+ this._extensions[PerMessageDeflate2.extensionName].cleanup();
28212
28212
  }
28213
28213
  this._receiver.removeAllListeners();
28214
28214
  this._readyState = _WebSocket.CLOSED;
@@ -28370,7 +28370,7 @@ var require_websocket = __commonJS({
28370
28370
  fin: true,
28371
28371
  ...options
28372
28372
  };
28373
- if (!this._extensions[PerMessageDeflate.extensionName]) {
28373
+ if (!this._extensions[PerMessageDeflate2.extensionName]) {
28374
28374
  opts.compress = false;
28375
28375
  }
28376
28376
  this._sender.send(data || EMPTY_BUFFER, opts, cb);
@@ -28496,7 +28496,7 @@ var require_websocket = __commonJS({
28496
28496
  } else {
28497
28497
  try {
28498
28498
  parsedUrl = new URL2(address2);
28499
- } catch (e7) {
28499
+ } catch {
28500
28500
  throw new SyntaxError(`Invalid URL: ${address2}`);
28501
28501
  }
28502
28502
  }
@@ -28544,13 +28544,13 @@ var require_websocket = __commonJS({
28544
28544
  opts.path = parsedUrl.pathname + parsedUrl.search;
28545
28545
  opts.timeout = opts.handshakeTimeout;
28546
28546
  if (opts.perMessageDeflate) {
28547
- perMessageDeflate = new PerMessageDeflate(
28548
- opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
28549
- false,
28550
- opts.maxPayload
28551
- );
28547
+ perMessageDeflate = new PerMessageDeflate2({
28548
+ ...opts.perMessageDeflate,
28549
+ isServer: false,
28550
+ maxPayload: opts.maxPayload
28551
+ });
28552
28552
  opts.headers["Sec-WebSocket-Extensions"] = format({
28553
- [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
28553
+ [PerMessageDeflate2.extensionName]: perMessageDeflate.offer()
28554
28554
  });
28555
28555
  }
28556
28556
  if (protocols.length) {
@@ -28693,19 +28693,19 @@ var require_websocket = __commonJS({
28693
28693
  return;
28694
28694
  }
28695
28695
  const extensionNames = Object.keys(extensions);
28696
- if (extensionNames.length !== 1 || extensionNames[0] !== PerMessageDeflate.extensionName) {
28696
+ if (extensionNames.length !== 1 || extensionNames[0] !== PerMessageDeflate2.extensionName) {
28697
28697
  const message = "Server indicated an extension that was not requested";
28698
28698
  abortHandshake(websocket, socket, message);
28699
28699
  return;
28700
28700
  }
28701
28701
  try {
28702
- perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
28702
+ perMessageDeflate.accept(extensions[PerMessageDeflate2.extensionName]);
28703
28703
  } catch (err) {
28704
28704
  const message = "Invalid Sec-WebSocket-Extensions header";
28705
28705
  abortHandshake(websocket, socket, message);
28706
28706
  return;
28707
28707
  }
28708
- websocket._extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
28708
+ websocket._extensions[PerMessageDeflate2.extensionName] = perMessageDeflate;
28709
28709
  }
28710
28710
  websocket.setSocket(socket, head, {
28711
28711
  allowSynchronousEvents: opts.allowSynchronousEvents,
@@ -29024,9 +29024,9 @@ var require_websocket_server = __commonJS({
29024
29024
  var http2 = __require("http");
29025
29025
  var { Duplex } = __require("stream");
29026
29026
  var { createHash: createHash4 } = __require("crypto");
29027
- var extension = require_extension();
29028
- var PerMessageDeflate = require_permessage_deflate();
29029
- var subprotocol = require_subprotocol();
29027
+ var extension2 = require_extension();
29028
+ var PerMessageDeflate2 = require_permessage_deflate();
29029
+ var subprotocol2 = require_subprotocol();
29030
29030
  var WebSocket2 = require_websocket();
29031
29031
  var { CLOSE_TIMEOUT, GUID, kWebSocket } = require_constants();
29032
29032
  var keyRegex = /^[+/0-9A-Za-z]{22}==$/;
@@ -29249,7 +29249,7 @@ var require_websocket_server = __commonJS({
29249
29249
  let protocols = /* @__PURE__ */ new Set();
29250
29250
  if (secWebSocketProtocol !== void 0) {
29251
29251
  try {
29252
- protocols = subprotocol.parse(secWebSocketProtocol);
29252
+ protocols = subprotocol2.parse(secWebSocketProtocol);
29253
29253
  } catch (err) {
29254
29254
  const message = "Invalid Sec-WebSocket-Protocol header";
29255
29255
  abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
@@ -29259,16 +29259,16 @@ var require_websocket_server = __commonJS({
29259
29259
  const secWebSocketExtensions = req.headers["sec-websocket-extensions"];
29260
29260
  const extensions = {};
29261
29261
  if (this.options.perMessageDeflate && secWebSocketExtensions !== void 0) {
29262
- const perMessageDeflate = new PerMessageDeflate(
29263
- this.options.perMessageDeflate,
29264
- true,
29265
- this.options.maxPayload
29266
- );
29262
+ const perMessageDeflate = new PerMessageDeflate2({
29263
+ ...this.options.perMessageDeflate,
29264
+ isServer: true,
29265
+ maxPayload: this.options.maxPayload
29266
+ });
29267
29267
  try {
29268
- const offers = extension.parse(secWebSocketExtensions);
29269
- if (offers[PerMessageDeflate.extensionName]) {
29270
- perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
29271
- extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
29268
+ const offers = extension2.parse(secWebSocketExtensions);
29269
+ if (offers[PerMessageDeflate2.extensionName]) {
29270
+ perMessageDeflate.accept(offers[PerMessageDeflate2.extensionName]);
29271
+ extensions[PerMessageDeflate2.extensionName] = perMessageDeflate;
29272
29272
  }
29273
29273
  } catch (err) {
29274
29274
  const message = "Invalid or unacceptable Sec-WebSocket-Extensions header";
@@ -29339,10 +29339,10 @@ var require_websocket_server = __commonJS({
29339
29339
  ws._protocol = protocol;
29340
29340
  }
29341
29341
  }
29342
- if (extensions[PerMessageDeflate.extensionName]) {
29343
- const params = extensions[PerMessageDeflate.extensionName].params;
29344
- const value = extension.format({
29345
- [PerMessageDeflate.extensionName]: [params]
29342
+ if (extensions[PerMessageDeflate2.extensionName]) {
29343
+ const params = extensions[PerMessageDeflate2.extensionName].params;
29344
+ const value = extension2.format({
29345
+ [PerMessageDeflate2.extensionName]: [params]
29346
29346
  });
29347
29347
  headers.push(`Sec-WebSocket-Extensions: ${value}`);
29348
29348
  ws._extensions = extensions;
@@ -29410,13 +29410,16 @@ var require_websocket_server = __commonJS({
29410
29410
  });
29411
29411
 
29412
29412
  // node_modules/ws/wrapper.mjs
29413
- var import_stream, import_receiver, import_sender, import_websocket, import_websocket_server, wrapper_default;
29413
+ var import_stream, import_extension, import_permessage_deflate, import_receiver, import_sender, import_subprotocol, import_websocket, import_websocket_server, wrapper_default;
29414
29414
  var init_wrapper = __esm({
29415
29415
  "node_modules/ws/wrapper.mjs"() {
29416
29416
  "use strict";
29417
29417
  import_stream = __toESM(require_stream(), 1);
29418
+ import_extension = __toESM(require_extension(), 1);
29419
+ import_permessage_deflate = __toESM(require_permessage_deflate(), 1);
29418
29420
  import_receiver = __toESM(require_receiver(), 1);
29419
29421
  import_sender = __toESM(require_sender(), 1);
29422
+ import_subprotocol = __toESM(require_subprotocol(), 1);
29420
29423
  import_websocket = __toESM(require_websocket(), 1);
29421
29424
  import_websocket_server = __toESM(require_websocket_server(), 1);
29422
29425
  wrapper_default = import_websocket.default;
@@ -46573,8 +46576,8 @@ var x402Client = class _x402Client {
46573
46576
  * @param extension - The client extension to register
46574
46577
  * @returns The x402Client instance for chaining
46575
46578
  */
46576
- registerExtension(extension) {
46577
- this.registeredExtensions.set(extension.key, extension);
46579
+ registerExtension(extension2) {
46580
+ this.registeredExtensions.set(extension2.key, extension2);
46578
46581
  return this;
46579
46582
  }
46580
46583
  /**
@@ -46720,9 +46723,9 @@ var x402Client = class _x402Client {
46720
46723
  return paymentPayload;
46721
46724
  }
46722
46725
  let enriched = paymentPayload;
46723
- for (const [key, extension] of this.registeredExtensions) {
46724
- if (key in paymentRequired.extensions && extension.enrichPaymentPayload) {
46725
- enriched = await extension.enrichPaymentPayload(enriched, paymentRequired);
46726
+ for (const [key, extension2] of this.registeredExtensions) {
46727
+ if (key in paymentRequired.extensions && extension2.enrichPaymentPayload) {
46728
+ enriched = await extension2.enrichPaymentPayload(enriched, paymentRequired);
46726
46729
  }
46727
46730
  }
46728
46731
  return enriched;
@@ -52959,6 +52962,7 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
52959
52962
  let accumulatedContent = "";
52960
52963
  let responseInputTokens;
52961
52964
  let responseOutputTokens;
52965
+ let requestHadError = false;
52962
52966
  const isChatCompletion = req.url?.includes("/chat/completions");
52963
52967
  const sessionId = getSessionId(req.headers);
52964
52968
  let effectiveSessionId = sessionId;
@@ -54223,6 +54227,7 @@ data: [DONE]
54223
54227
  const rawErrBody = lastError?.body || structuredMessage;
54224
54228
  const errStatus = lastError?.status || 502;
54225
54229
  const transformedErr = transformPaymentError(rawErrBody);
54230
+ requestHadError = true;
54226
54231
  if (headersSentEarly) {
54227
54232
  let errPayload;
54228
54233
  try {
@@ -54266,6 +54271,21 @@ data: [DONE]
54266
54271
  completedAt: Date.now()
54267
54272
  });
54268
54273
  }
54274
+ const errModel = routingDecision?.model ?? modelId;
54275
+ if (errModel) {
54276
+ const errPayment = paymentStore.getStore()?.amountUsd ?? 0;
54277
+ logUsage({
54278
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
54279
+ model: errModel,
54280
+ tier: routingDecision?.tier ?? "DIRECT",
54281
+ cost: errPayment,
54282
+ baselineCost: errPayment,
54283
+ savings: 0,
54284
+ latencyMs: Date.now() - startTime,
54285
+ status: "error"
54286
+ }).catch(() => {
54287
+ });
54288
+ }
54269
54289
  return;
54270
54290
  }
54271
54291
  const responseChunks = [];
@@ -54600,6 +54620,7 @@ data: [DONE]
54600
54620
  baselineCost: logBaseline,
54601
54621
  savings: logSavings,
54602
54622
  latencyMs: Date.now() - startTime,
54623
+ status: requestHadError ? "error" : "success",
54603
54624
  ...responseInputTokens !== void 0 && { inputTokens: responseInputTokens },
54604
54625
  ...responseOutputTokens !== void 0 && { outputTokens: responseOutputTokens }
54605
54626
  };