@blockrun/clawrouter 0.11.14 → 0.12.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/cli.js CHANGED
@@ -53,7 +53,8 @@ function createPayFetchWithPreAuth(baseFetch, client, ttlMs = DEFAULT_TTL_MS, op
53
53
  cache.set(urlPath, { paymentRequired, cachedAt: Date.now() });
54
54
  } catch (error) {
55
55
  throw new Error(
56
- `Failed to parse payment requirements: ${error instanceof Error ? error.message : "Unknown error"}`
56
+ `Failed to parse payment requirements: ${error instanceof Error ? error.message : "Unknown error"}`,
57
+ { cause: error }
57
58
  );
58
59
  }
59
60
  const payload = await client.createPaymentPayload(paymentRequired);
@@ -2982,7 +2983,10 @@ var SolanaBalanceMonitor = class {
2982
2983
  }
2983
2984
  return total;
2984
2985
  } catch (err) {
2985
- throw new Error(`Failed to fetch Solana USDC balance: ${err instanceof Error ? err.message : String(err)}`);
2986
+ throw new Error(
2987
+ `Failed to fetch Solana USDC balance: ${err instanceof Error ? err.message : String(err)}`,
2988
+ { cause: err }
2989
+ );
2986
2990
  } finally {
2987
2991
  clearTimeout(timer);
2988
2992
  }
@@ -3009,9 +3013,507 @@ import { privateKeyToAccount as privateKeyToAccount2 } from "viem/accounts";
3009
3013
  import { HDKey } from "@scure/bip32";
3010
3014
  import { generateMnemonic, mnemonicToSeedSync, validateMnemonic } from "@scure/bip39";
3011
3015
  import { wordlist as english } from "@scure/bip39/wordlists/english";
3016
+
3017
+ // node_modules/@noble/hashes/esm/utils.js
3018
+ function isBytes(a) {
3019
+ return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array";
3020
+ }
3021
+ function anumber(n) {
3022
+ if (!Number.isSafeInteger(n) || n < 0)
3023
+ throw new Error("positive integer expected, got " + n);
3024
+ }
3025
+ function abytes(b, ...lengths) {
3026
+ if (!isBytes(b))
3027
+ throw new Error("Uint8Array expected");
3028
+ if (lengths.length > 0 && !lengths.includes(b.length))
3029
+ throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length);
3030
+ }
3031
+ function ahash(h) {
3032
+ if (typeof h !== "function" || typeof h.create !== "function")
3033
+ throw new Error("Hash should be wrapped by utils.createHasher");
3034
+ anumber(h.outputLen);
3035
+ anumber(h.blockLen);
3036
+ }
3037
+ function aexists(instance, checkFinished = true) {
3038
+ if (instance.destroyed)
3039
+ throw new Error("Hash instance has been destroyed");
3040
+ if (checkFinished && instance.finished)
3041
+ throw new Error("Hash#digest() has already been called");
3042
+ }
3043
+ function aoutput(out, instance) {
3044
+ abytes(out);
3045
+ const min = instance.outputLen;
3046
+ if (out.length < min) {
3047
+ throw new Error("digestInto() expects output buffer of length at least " + min);
3048
+ }
3049
+ }
3050
+ function clean(...arrays) {
3051
+ for (let i = 0; i < arrays.length; i++) {
3052
+ arrays[i].fill(0);
3053
+ }
3054
+ }
3055
+ function createView(arr) {
3056
+ return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
3057
+ }
3058
+ function utf8ToBytes(str) {
3059
+ if (typeof str !== "string")
3060
+ throw new Error("string expected");
3061
+ return new Uint8Array(new TextEncoder().encode(str));
3062
+ }
3063
+ function toBytes(data) {
3064
+ if (typeof data === "string")
3065
+ data = utf8ToBytes(data);
3066
+ abytes(data);
3067
+ return data;
3068
+ }
3069
+ var Hash = class {
3070
+ };
3071
+ function createHasher(hashCons) {
3072
+ const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
3073
+ const tmp = hashCons();
3074
+ hashC.outputLen = tmp.outputLen;
3075
+ hashC.blockLen = tmp.blockLen;
3076
+ hashC.create = () => hashCons();
3077
+ return hashC;
3078
+ }
3079
+
3080
+ // node_modules/@noble/hashes/esm/hmac.js
3081
+ var HMAC = class extends Hash {
3082
+ constructor(hash, _key) {
3083
+ super();
3084
+ this.finished = false;
3085
+ this.destroyed = false;
3086
+ ahash(hash);
3087
+ const key = toBytes(_key);
3088
+ this.iHash = hash.create();
3089
+ if (typeof this.iHash.update !== "function")
3090
+ throw new Error("Expected instance of class which extends utils.Hash");
3091
+ this.blockLen = this.iHash.blockLen;
3092
+ this.outputLen = this.iHash.outputLen;
3093
+ const blockLen = this.blockLen;
3094
+ const pad = new Uint8Array(blockLen);
3095
+ pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
3096
+ for (let i = 0; i < pad.length; i++)
3097
+ pad[i] ^= 54;
3098
+ this.iHash.update(pad);
3099
+ this.oHash = hash.create();
3100
+ for (let i = 0; i < pad.length; i++)
3101
+ pad[i] ^= 54 ^ 92;
3102
+ this.oHash.update(pad);
3103
+ clean(pad);
3104
+ }
3105
+ update(buf) {
3106
+ aexists(this);
3107
+ this.iHash.update(buf);
3108
+ return this;
3109
+ }
3110
+ digestInto(out) {
3111
+ aexists(this);
3112
+ abytes(out, this.outputLen);
3113
+ this.finished = true;
3114
+ this.iHash.digestInto(out);
3115
+ this.oHash.update(out);
3116
+ this.oHash.digestInto(out);
3117
+ this.destroy();
3118
+ }
3119
+ digest() {
3120
+ const out = new Uint8Array(this.oHash.outputLen);
3121
+ this.digestInto(out);
3122
+ return out;
3123
+ }
3124
+ _cloneInto(to) {
3125
+ to || (to = Object.create(Object.getPrototypeOf(this), {}));
3126
+ const { oHash, iHash, finished: finished2, destroyed, blockLen, outputLen } = this;
3127
+ to = to;
3128
+ to.finished = finished2;
3129
+ to.destroyed = destroyed;
3130
+ to.blockLen = blockLen;
3131
+ to.outputLen = outputLen;
3132
+ to.oHash = oHash._cloneInto(to.oHash);
3133
+ to.iHash = iHash._cloneInto(to.iHash);
3134
+ return to;
3135
+ }
3136
+ clone() {
3137
+ return this._cloneInto();
3138
+ }
3139
+ destroy() {
3140
+ this.destroyed = true;
3141
+ this.oHash.destroy();
3142
+ this.iHash.destroy();
3143
+ }
3144
+ };
3145
+ var hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();
3146
+ hmac.create = (hash, key) => new HMAC(hash, key);
3147
+
3148
+ // node_modules/@noble/hashes/esm/_md.js
3149
+ function setBigUint64(view, byteOffset, value, isLE) {
3150
+ if (typeof view.setBigUint64 === "function")
3151
+ return view.setBigUint64(byteOffset, value, isLE);
3152
+ const _32n2 = BigInt(32);
3153
+ const _u32_max = BigInt(4294967295);
3154
+ const wh = Number(value >> _32n2 & _u32_max);
3155
+ const wl = Number(value & _u32_max);
3156
+ const h = isLE ? 4 : 0;
3157
+ const l = isLE ? 0 : 4;
3158
+ view.setUint32(byteOffset + h, wh, isLE);
3159
+ view.setUint32(byteOffset + l, wl, isLE);
3160
+ }
3161
+ var HashMD = class extends Hash {
3162
+ constructor(blockLen, outputLen, padOffset, isLE) {
3163
+ super();
3164
+ this.finished = false;
3165
+ this.length = 0;
3166
+ this.pos = 0;
3167
+ this.destroyed = false;
3168
+ this.blockLen = blockLen;
3169
+ this.outputLen = outputLen;
3170
+ this.padOffset = padOffset;
3171
+ this.isLE = isLE;
3172
+ this.buffer = new Uint8Array(blockLen);
3173
+ this.view = createView(this.buffer);
3174
+ }
3175
+ update(data) {
3176
+ aexists(this);
3177
+ data = toBytes(data);
3178
+ abytes(data);
3179
+ const { view, buffer, blockLen } = this;
3180
+ const len = data.length;
3181
+ for (let pos = 0; pos < len; ) {
3182
+ const take = Math.min(blockLen - this.pos, len - pos);
3183
+ if (take === blockLen) {
3184
+ const dataView = createView(data);
3185
+ for (; blockLen <= len - pos; pos += blockLen)
3186
+ this.process(dataView, pos);
3187
+ continue;
3188
+ }
3189
+ buffer.set(data.subarray(pos, pos + take), this.pos);
3190
+ this.pos += take;
3191
+ pos += take;
3192
+ if (this.pos === blockLen) {
3193
+ this.process(view, 0);
3194
+ this.pos = 0;
3195
+ }
3196
+ }
3197
+ this.length += data.length;
3198
+ this.roundClean();
3199
+ return this;
3200
+ }
3201
+ digestInto(out) {
3202
+ aexists(this);
3203
+ aoutput(out, this);
3204
+ this.finished = true;
3205
+ const { buffer, view, blockLen, isLE } = this;
3206
+ let { pos } = this;
3207
+ buffer[pos++] = 128;
3208
+ clean(this.buffer.subarray(pos));
3209
+ if (this.padOffset > blockLen - pos) {
3210
+ this.process(view, 0);
3211
+ pos = 0;
3212
+ }
3213
+ for (let i = pos; i < blockLen; i++)
3214
+ buffer[i] = 0;
3215
+ setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);
3216
+ this.process(view, 0);
3217
+ const oview = createView(out);
3218
+ const len = this.outputLen;
3219
+ if (len % 4)
3220
+ throw new Error("_sha2: outputLen should be aligned to 32bit");
3221
+ const outLen = len / 4;
3222
+ const state = this.get();
3223
+ if (outLen > state.length)
3224
+ throw new Error("_sha2: outputLen bigger than state");
3225
+ for (let i = 0; i < outLen; i++)
3226
+ oview.setUint32(4 * i, state[i], isLE);
3227
+ }
3228
+ digest() {
3229
+ const { buffer, outputLen } = this;
3230
+ this.digestInto(buffer);
3231
+ const res = buffer.slice(0, outputLen);
3232
+ this.destroy();
3233
+ return res;
3234
+ }
3235
+ _cloneInto(to) {
3236
+ to || (to = new this.constructor());
3237
+ to.set(...this.get());
3238
+ const { blockLen, buffer, length, finished: finished2, destroyed, pos } = this;
3239
+ to.destroyed = destroyed;
3240
+ to.finished = finished2;
3241
+ to.length = length;
3242
+ to.pos = pos;
3243
+ if (length % blockLen)
3244
+ to.buffer.set(buffer);
3245
+ return to;
3246
+ }
3247
+ clone() {
3248
+ return this._cloneInto();
3249
+ }
3250
+ };
3251
+ var SHA512_IV = /* @__PURE__ */ Uint32Array.from([
3252
+ 1779033703,
3253
+ 4089235720,
3254
+ 3144134277,
3255
+ 2227873595,
3256
+ 1013904242,
3257
+ 4271175723,
3258
+ 2773480762,
3259
+ 1595750129,
3260
+ 1359893119,
3261
+ 2917565137,
3262
+ 2600822924,
3263
+ 725511199,
3264
+ 528734635,
3265
+ 4215389547,
3266
+ 1541459225,
3267
+ 327033209
3268
+ ]);
3269
+
3270
+ // node_modules/@noble/hashes/esm/_u64.js
3271
+ var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
3272
+ var _32n = /* @__PURE__ */ BigInt(32);
3273
+ function fromBig(n, le = false) {
3274
+ if (le)
3275
+ return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) };
3276
+ return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
3277
+ }
3278
+ function split(lst, le = false) {
3279
+ const len = lst.length;
3280
+ let Ah = new Uint32Array(len);
3281
+ let Al = new Uint32Array(len);
3282
+ for (let i = 0; i < len; i++) {
3283
+ const { h, l } = fromBig(lst[i], le);
3284
+ [Ah[i], Al[i]] = [h, l];
3285
+ }
3286
+ return [Ah, Al];
3287
+ }
3288
+ var shrSH = (h, _l, s) => h >>> s;
3289
+ var shrSL = (h, l, s) => h << 32 - s | l >>> s;
3290
+ var rotrSH = (h, l, s) => h >>> s | l << 32 - s;
3291
+ var rotrSL = (h, l, s) => h << 32 - s | l >>> s;
3292
+ var rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32;
3293
+ var rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s;
3294
+ function add(Ah, Al, Bh, Bl) {
3295
+ const l = (Al >>> 0) + (Bl >>> 0);
3296
+ return { h: Ah + Bh + (l / 2 ** 32 | 0) | 0, l: l | 0 };
3297
+ }
3298
+ var add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
3299
+ var add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;
3300
+ var add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
3301
+ var add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;
3302
+ var add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
3303
+ var add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;
3304
+
3305
+ // node_modules/@noble/hashes/esm/sha2.js
3306
+ var K512 = /* @__PURE__ */ (() => split([
3307
+ "0x428a2f98d728ae22",
3308
+ "0x7137449123ef65cd",
3309
+ "0xb5c0fbcfec4d3b2f",
3310
+ "0xe9b5dba58189dbbc",
3311
+ "0x3956c25bf348b538",
3312
+ "0x59f111f1b605d019",
3313
+ "0x923f82a4af194f9b",
3314
+ "0xab1c5ed5da6d8118",
3315
+ "0xd807aa98a3030242",
3316
+ "0x12835b0145706fbe",
3317
+ "0x243185be4ee4b28c",
3318
+ "0x550c7dc3d5ffb4e2",
3319
+ "0x72be5d74f27b896f",
3320
+ "0x80deb1fe3b1696b1",
3321
+ "0x9bdc06a725c71235",
3322
+ "0xc19bf174cf692694",
3323
+ "0xe49b69c19ef14ad2",
3324
+ "0xefbe4786384f25e3",
3325
+ "0x0fc19dc68b8cd5b5",
3326
+ "0x240ca1cc77ac9c65",
3327
+ "0x2de92c6f592b0275",
3328
+ "0x4a7484aa6ea6e483",
3329
+ "0x5cb0a9dcbd41fbd4",
3330
+ "0x76f988da831153b5",
3331
+ "0x983e5152ee66dfab",
3332
+ "0xa831c66d2db43210",
3333
+ "0xb00327c898fb213f",
3334
+ "0xbf597fc7beef0ee4",
3335
+ "0xc6e00bf33da88fc2",
3336
+ "0xd5a79147930aa725",
3337
+ "0x06ca6351e003826f",
3338
+ "0x142929670a0e6e70",
3339
+ "0x27b70a8546d22ffc",
3340
+ "0x2e1b21385c26c926",
3341
+ "0x4d2c6dfc5ac42aed",
3342
+ "0x53380d139d95b3df",
3343
+ "0x650a73548baf63de",
3344
+ "0x766a0abb3c77b2a8",
3345
+ "0x81c2c92e47edaee6",
3346
+ "0x92722c851482353b",
3347
+ "0xa2bfe8a14cf10364",
3348
+ "0xa81a664bbc423001",
3349
+ "0xc24b8b70d0f89791",
3350
+ "0xc76c51a30654be30",
3351
+ "0xd192e819d6ef5218",
3352
+ "0xd69906245565a910",
3353
+ "0xf40e35855771202a",
3354
+ "0x106aa07032bbd1b8",
3355
+ "0x19a4c116b8d2d0c8",
3356
+ "0x1e376c085141ab53",
3357
+ "0x2748774cdf8eeb99",
3358
+ "0x34b0bcb5e19b48a8",
3359
+ "0x391c0cb3c5c95a63",
3360
+ "0x4ed8aa4ae3418acb",
3361
+ "0x5b9cca4f7763e373",
3362
+ "0x682e6ff3d6b2b8a3",
3363
+ "0x748f82ee5defb2fc",
3364
+ "0x78a5636f43172f60",
3365
+ "0x84c87814a1f0ab72",
3366
+ "0x8cc702081a6439ec",
3367
+ "0x90befffa23631e28",
3368
+ "0xa4506cebde82bde9",
3369
+ "0xbef9a3f7b2c67915",
3370
+ "0xc67178f2e372532b",
3371
+ "0xca273eceea26619c",
3372
+ "0xd186b8c721c0c207",
3373
+ "0xeada7dd6cde0eb1e",
3374
+ "0xf57d4f7fee6ed178",
3375
+ "0x06f067aa72176fba",
3376
+ "0x0a637dc5a2c898a6",
3377
+ "0x113f9804bef90dae",
3378
+ "0x1b710b35131c471b",
3379
+ "0x28db77f523047d84",
3380
+ "0x32caab7b40c72493",
3381
+ "0x3c9ebe0a15c9bebc",
3382
+ "0x431d67c49c100d4c",
3383
+ "0x4cc5d4becb3e42b6",
3384
+ "0x597f299cfc657e2a",
3385
+ "0x5fcb6fab3ad6faec",
3386
+ "0x6c44198c4a475817"
3387
+ ].map((n) => BigInt(n))))();
3388
+ var SHA512_Kh = /* @__PURE__ */ (() => K512[0])();
3389
+ var SHA512_Kl = /* @__PURE__ */ (() => K512[1])();
3390
+ var SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);
3391
+ var SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);
3392
+ var SHA512 = class extends HashMD {
3393
+ constructor(outputLen = 64) {
3394
+ super(128, outputLen, 16, false);
3395
+ this.Ah = SHA512_IV[0] | 0;
3396
+ this.Al = SHA512_IV[1] | 0;
3397
+ this.Bh = SHA512_IV[2] | 0;
3398
+ this.Bl = SHA512_IV[3] | 0;
3399
+ this.Ch = SHA512_IV[4] | 0;
3400
+ this.Cl = SHA512_IV[5] | 0;
3401
+ this.Dh = SHA512_IV[6] | 0;
3402
+ this.Dl = SHA512_IV[7] | 0;
3403
+ this.Eh = SHA512_IV[8] | 0;
3404
+ this.El = SHA512_IV[9] | 0;
3405
+ this.Fh = SHA512_IV[10] | 0;
3406
+ this.Fl = SHA512_IV[11] | 0;
3407
+ this.Gh = SHA512_IV[12] | 0;
3408
+ this.Gl = SHA512_IV[13] | 0;
3409
+ this.Hh = SHA512_IV[14] | 0;
3410
+ this.Hl = SHA512_IV[15] | 0;
3411
+ }
3412
+ // prettier-ignore
3413
+ get() {
3414
+ const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
3415
+ return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];
3416
+ }
3417
+ // prettier-ignore
3418
+ set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {
3419
+ this.Ah = Ah | 0;
3420
+ this.Al = Al | 0;
3421
+ this.Bh = Bh | 0;
3422
+ this.Bl = Bl | 0;
3423
+ this.Ch = Ch | 0;
3424
+ this.Cl = Cl | 0;
3425
+ this.Dh = Dh | 0;
3426
+ this.Dl = Dl | 0;
3427
+ this.Eh = Eh | 0;
3428
+ this.El = El | 0;
3429
+ this.Fh = Fh | 0;
3430
+ this.Fl = Fl | 0;
3431
+ this.Gh = Gh | 0;
3432
+ this.Gl = Gl | 0;
3433
+ this.Hh = Hh | 0;
3434
+ this.Hl = Hl | 0;
3435
+ }
3436
+ process(view, offset) {
3437
+ for (let i = 0; i < 16; i++, offset += 4) {
3438
+ SHA512_W_H[i] = view.getUint32(offset);
3439
+ SHA512_W_L[i] = view.getUint32(offset += 4);
3440
+ }
3441
+ for (let i = 16; i < 80; i++) {
3442
+ const W15h = SHA512_W_H[i - 15] | 0;
3443
+ const W15l = SHA512_W_L[i - 15] | 0;
3444
+ const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);
3445
+ const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);
3446
+ const W2h = SHA512_W_H[i - 2] | 0;
3447
+ const W2l = SHA512_W_L[i - 2] | 0;
3448
+ const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);
3449
+ const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);
3450
+ const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);
3451
+ const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);
3452
+ SHA512_W_H[i] = SUMh | 0;
3453
+ SHA512_W_L[i] = SUMl | 0;
3454
+ }
3455
+ let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
3456
+ for (let i = 0; i < 80; i++) {
3457
+ const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);
3458
+ const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);
3459
+ const CHIh = Eh & Fh ^ ~Eh & Gh;
3460
+ const CHIl = El & Fl ^ ~El & Gl;
3461
+ const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);
3462
+ const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);
3463
+ const T1l = T1ll | 0;
3464
+ const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);
3465
+ const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39);
3466
+ const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch;
3467
+ const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl;
3468
+ Hh = Gh | 0;
3469
+ Hl = Gl | 0;
3470
+ Gh = Fh | 0;
3471
+ Gl = Fl | 0;
3472
+ Fh = Eh | 0;
3473
+ Fl = El | 0;
3474
+ ({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));
3475
+ Dh = Ch | 0;
3476
+ Dl = Cl | 0;
3477
+ Ch = Bh | 0;
3478
+ Cl = Bl | 0;
3479
+ Bh = Ah | 0;
3480
+ Bl = Al | 0;
3481
+ const All = add3L(T1l, sigma0l, MAJl);
3482
+ Ah = add3H(All, T1h, sigma0h, MAJh);
3483
+ Al = All | 0;
3484
+ }
3485
+ ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));
3486
+ ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));
3487
+ ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));
3488
+ ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));
3489
+ ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));
3490
+ ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));
3491
+ ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));
3492
+ ({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));
3493
+ this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);
3494
+ }
3495
+ roundClean() {
3496
+ clean(SHA512_W_H, SHA512_W_L);
3497
+ }
3498
+ destroy() {
3499
+ clean(this.buffer);
3500
+ this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
3501
+ }
3502
+ };
3503
+ var sha512 = /* @__PURE__ */ createHasher(() => new SHA512());
3504
+
3505
+ // node_modules/@noble/hashes/esm/sha512.js
3506
+ var sha5122 = sha512;
3507
+
3508
+ // src/wallet.ts
3012
3509
  import { privateKeyToAccount } from "viem/accounts";
3013
3510
  var ETH_DERIVATION_PATH = "m/44'/60'/0'/0/0";
3014
- var SOLANA_DERIVATION_PATH = "m/44'/501'/0'/0'";
3511
+ var SOLANA_HARDENED_INDICES = [
3512
+ 44 + 2147483648,
3513
+ 501 + 2147483648,
3514
+ 0 + 2147483648,
3515
+ 0 + 2147483648
3516
+ ];
3015
3517
  function generateWalletMnemonic() {
3016
3518
  return generateMnemonic(english, 256);
3017
3519
  }
@@ -3028,10 +3530,29 @@ function deriveEvmKey(mnemonic) {
3028
3530
  return { privateKey: hex, address: account.address };
3029
3531
  }
3030
3532
  function deriveSolanaKeyBytes(mnemonic) {
3533
+ const seed = mnemonicToSeedSync(mnemonic);
3534
+ let I = hmac(sha5122, "ed25519 seed", seed);
3535
+ let key = I.slice(0, 32);
3536
+ let chainCode = I.slice(32);
3537
+ for (const index of SOLANA_HARDENED_INDICES) {
3538
+ const data = new Uint8Array(37);
3539
+ data[0] = 0;
3540
+ data.set(key, 1);
3541
+ data[33] = index >>> 24 & 255;
3542
+ data[34] = index >>> 16 & 255;
3543
+ data[35] = index >>> 8 & 255;
3544
+ data[36] = index & 255;
3545
+ I = hmac(sha5122, chainCode, data);
3546
+ key = I.slice(0, 32);
3547
+ chainCode = I.slice(32);
3548
+ }
3549
+ return new Uint8Array(key);
3550
+ }
3551
+ function deriveSolanaKeyBytesLegacy(mnemonic) {
3031
3552
  const seed = mnemonicToSeedSync(mnemonic);
3032
3553
  const hdKey = HDKey.fromMasterSeed(seed);
3033
- const derived = hdKey.derive(SOLANA_DERIVATION_PATH);
3034
- if (!derived.privateKey) throw new Error("Failed to derive Solana private key");
3554
+ const derived = hdKey.derive("m/44'/501'/0'/0'");
3555
+ if (!derived.privateKey) throw new Error("Failed to derive legacy Solana private key");
3035
3556
  return new Uint8Array(derived.privateKey);
3036
3557
  }
3037
3558
  function deriveAllKeys(mnemonic) {
@@ -3139,6 +3660,32 @@ async function generateAndSaveWallet() {
3139
3660
  solanaPrivateKeyBytes: derived.solanaPrivateKeyBytes
3140
3661
  };
3141
3662
  }
3663
+ async function logMigrationWarning(legacyKeyBytes, newKeyBytes) {
3664
+ try {
3665
+ const { createKeyPairSignerFromPrivateKeyBytes } = await import("@solana/kit");
3666
+ const [oldSigner, newSigner] = await Promise.all([
3667
+ createKeyPairSignerFromPrivateKeyBytes(legacyKeyBytes),
3668
+ createKeyPairSignerFromPrivateKeyBytes(newKeyBytes)
3669
+ ]);
3670
+ console.log(`[ClawRouter]`);
3671
+ console.log(`[ClawRouter] \u26A0 SOLANA WALLET MIGRATION DETECTED`);
3672
+ console.log(`[ClawRouter] \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550`);
3673
+ console.log(`[ClawRouter] Old address (secp256k1): ${oldSigner.address}`);
3674
+ console.log(`[ClawRouter] New address (SLIP-10): ${newSigner.address}`);
3675
+ console.log(`[ClawRouter]`);
3676
+ console.log(`[ClawRouter] Your Solana wallet derivation has been fixed to use`);
3677
+ console.log(`[ClawRouter] SLIP-10 Ed25519 (Phantom/Solflare compatible).`);
3678
+ console.log(`[ClawRouter]`);
3679
+ console.log(`[ClawRouter] If you had funds in the old wallet, run:`);
3680
+ console.log(`[ClawRouter] /wallet migrate-solana`);
3681
+ console.log(`[ClawRouter]`);
3682
+ console.log(`[ClawRouter] The new wallet pays gas. Send ~0.005 SOL to:`);
3683
+ console.log(`[ClawRouter] ${newSigner.address}`);
3684
+ console.log(`[ClawRouter] \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550`);
3685
+ console.log(`[ClawRouter]`);
3686
+ } catch {
3687
+ }
3688
+ }
3142
3689
  async function resolveOrGenerateWalletKey() {
3143
3690
  const saved = await loadSavedWallet();
3144
3691
  if (saved) {
@@ -3146,13 +3693,19 @@ async function resolveOrGenerateWalletKey() {
3146
3693
  const mnemonic = await loadMnemonic();
3147
3694
  if (mnemonic) {
3148
3695
  const solanaKeyBytes = deriveSolanaKeyBytes(mnemonic);
3149
- return {
3696
+ const result2 = {
3150
3697
  key: saved,
3151
3698
  address: account.address,
3152
3699
  source: "saved",
3153
3700
  mnemonic,
3154
3701
  solanaPrivateKeyBytes: solanaKeyBytes
3155
3702
  };
3703
+ const legacyKeyBytes = deriveSolanaKeyBytesLegacy(mnemonic);
3704
+ if (Buffer.from(legacyKeyBytes).toString("hex") !== Buffer.from(solanaKeyBytes).toString("hex")) {
3705
+ result2.legacySolanaKeyBytes = legacyKeyBytes;
3706
+ await logMigrationWarning(legacyKeyBytes, solanaKeyBytes);
3707
+ }
3708
+ return result2;
3156
3709
  }
3157
3710
  return { key: saved, address: account.address, source: "saved" };
3158
3711
  }
@@ -3162,13 +3715,19 @@ async function resolveOrGenerateWalletKey() {
3162
3715
  const mnemonic = await loadMnemonic();
3163
3716
  if (mnemonic) {
3164
3717
  const solanaKeyBytes = deriveSolanaKeyBytes(mnemonic);
3165
- return {
3718
+ const result2 = {
3166
3719
  key: envKey,
3167
3720
  address: account.address,
3168
3721
  source: "env",
3169
3722
  mnemonic,
3170
3723
  solanaPrivateKeyBytes: solanaKeyBytes
3171
3724
  };
3725
+ const legacyKeyBytes = deriveSolanaKeyBytesLegacy(mnemonic);
3726
+ if (Buffer.from(legacyKeyBytes).toString("hex") !== Buffer.from(solanaKeyBytes).toString("hex")) {
3727
+ result2.legacySolanaKeyBytes = legacyKeyBytes;
3728
+ await logMigrationWarning(legacyKeyBytes, solanaKeyBytes);
3729
+ }
3730
+ return result2;
3172
3731
  }
3173
3732
  return { key: envKey, address: account.address, source: "env" };
3174
3733
  }
@@ -4906,7 +5465,9 @@ async function startProxy(options) {
4906
5465
  const paymentChain = options.paymentChain ?? await resolvePaymentChain();
4907
5466
  const apiBase = options.apiBase ?? (paymentChain === "solana" && solanaPrivateKeyBytes ? BLOCKRUN_SOLANA_API : BLOCKRUN_API);
4908
5467
  if (paymentChain === "solana" && !solanaPrivateKeyBytes) {
4909
- console.warn(`[ClawRouter] Payment chain is Solana but no Solana keys provided. Using Base (EVM).`);
5468
+ console.warn(
5469
+ `[ClawRouter] Payment chain is Solana but no Solana keys provided. Using Base (EVM).`
5470
+ );
4910
5471
  } else if (paymentChain === "solana") {
4911
5472
  console.log(`[ClawRouter] Payment chain: Solana (${BLOCKRUN_SOLANA_API})`);
4912
5473
  }
@@ -4927,7 +5488,9 @@ async function startProxy(options) {
4927
5488
  );
4928
5489
  }
4929
5490
  } else if (paymentChain !== "base") {
4930
- console.warn(`[ClawRouter] Existing proxy on port ${listenPort} does not report paymentChain (pre-v0.11 instance). Assuming Base.`);
5491
+ console.warn(
5492
+ `[ClawRouter] Existing proxy on port ${listenPort} does not report paymentChain (pre-v0.11 instance). Assuming Base.`
5493
+ );
4931
5494
  throw new Error(
4932
5495
  `Existing proxy on port ${listenPort} is a pre-v0.11 instance (assumed Base) but ${paymentChain} was requested. Stop the existing proxy first or use a different port.`
4933
5496
  );
@@ -5126,7 +5689,11 @@ async function startProxy(options) {
5126
5689
  const existingProxy2 = await checkExistingProxy(listenPort);
5127
5690
  if (existingProxy2) {
5128
5691
  console.log(`[ClawRouter] Existing proxy detected on port ${listenPort}, reusing`);
5129
- rejectAttempt({ code: "REUSE_EXISTING", wallet: existingProxy2.wallet, existingChain: existingProxy2.paymentChain });
5692
+ rejectAttempt({
5693
+ code: "REUSE_EXISTING",
5694
+ wallet: existingProxy2.wallet,
5695
+ existingChain: existingProxy2.paymentChain
5696
+ });
5130
5697
  return;
5131
5698
  }
5132
5699
  if (attempt < PORT_RETRY_ATTEMPTS) {
@@ -5161,7 +5728,8 @@ async function startProxy(options) {
5161
5728
  if (error.code === "REUSE_EXISTING" && error.wallet) {
5162
5729
  if (error.existingChain && error.existingChain !== paymentChain) {
5163
5730
  throw new Error(
5164
- `Existing proxy on port ${listenPort} is using ${error.existingChain} but ${paymentChain} was requested. Stop the existing proxy first or use a different port.`
5731
+ `Existing proxy on port ${listenPort} is using ${error.existingChain} but ${paymentChain} was requested. Stop the existing proxy first or use a different port.`,
5732
+ { cause: err }
5165
5733
  );
5166
5734
  }
5167
5735
  const baseUrl2 = `http://127.0.0.1:${listenPort}`;
@@ -5269,15 +5837,12 @@ async function tryModelRequest(upstreamUrl, method, headers, body, modelId, maxT
5269
5837
  } catch {
5270
5838
  }
5271
5839
  try {
5272
- const response = await payFetch(
5273
- upstreamUrl,
5274
- {
5275
- method,
5276
- headers,
5277
- body: requestBody.length > 0 ? new Uint8Array(requestBody) : void 0,
5278
- signal
5279
- }
5280
- );
5840
+ const response = await payFetch(upstreamUrl, {
5841
+ method,
5842
+ headers,
5843
+ body: requestBody.length > 0 ? new Uint8Array(requestBody) : void 0,
5844
+ signal
5845
+ });
5281
5846
  if (response.status !== 200) {
5282
5847
  const errorBody = await response.text();
5283
5848
  const isProviderErr = isProviderError(response.status, errorBody);
@@ -6228,7 +6793,14 @@ async function proxyRequest(req, res, apiBase, payFetch, options, routerOpts, de
6228
6793
  if (balanceFallbackNotice) {
6229
6794
  const noticeChunk = {
6230
6795
  ...baseChunk,
6231
- choices: [{ index, delta: { content: balanceFallbackNotice }, logprobs: null, finish_reason: null }]
6796
+ choices: [
6797
+ {
6798
+ index,
6799
+ delta: { content: balanceFallbackNotice },
6800
+ logprobs: null,
6801
+ finish_reason: null
6802
+ }
6803
+ ]
6232
6804
  };
6233
6805
  const noticeData = `data: ${JSON.stringify(noticeChunk)}
6234
6806
 
@@ -6697,28 +7269,26 @@ async function analyzeWithAI(diagnostics, userQuestion, model = "sonnet") {
6697
7269
  const x402 = new x402Client2();
6698
7270
  registerExactEvmScheme2(x402, { signer: evmSigner });
6699
7271
  const paymentFetch = wrapFetchWithPayment(fetch, x402);
6700
- const response = await paymentFetch(
6701
- "https://blockrun.ai/api/v1/chat/completions",
6702
- {
6703
- method: "POST",
6704
- headers: { "Content-Type": "application/json" },
6705
- body: JSON.stringify({
6706
- model: modelConfig.id,
6707
- stream: false,
6708
- messages: [
6709
- {
6710
- role: "system",
6711
- content: `You are a technical support expert for BlockRun and ClawRouter.
7272
+ const response = await paymentFetch("https://blockrun.ai/api/v1/chat/completions", {
7273
+ method: "POST",
7274
+ headers: { "Content-Type": "application/json" },
7275
+ body: JSON.stringify({
7276
+ model: modelConfig.id,
7277
+ stream: false,
7278
+ messages: [
7279
+ {
7280
+ role: "system",
7281
+ content: `You are a technical support expert for BlockRun and ClawRouter.
6712
7282
  Analyze the diagnostics and:
6713
7283
  1. Identify the root cause of any issues
6714
7284
  2. Provide specific, actionable fix commands (bash)
6715
7285
  3. Explain why the issue occurred briefly
6716
7286
  4. Be concise but thorough
6717
7287
  5. Format commands in code blocks`
6718
- },
6719
- {
6720
- role: "user",
6721
- content: userQuestion ? `Here are my system diagnostics:
7288
+ },
7289
+ {
7290
+ role: "user",
7291
+ content: userQuestion ? `Here are my system diagnostics:
6722
7292
 
6723
7293
  ${JSON.stringify(diagnostics, null, 2)}
6724
7294
 
@@ -6727,12 +7297,11 @@ User's question: ${userQuestion}` : `Here are my system diagnostics:
6727
7297
  ${JSON.stringify(diagnostics, null, 2)}
6728
7298
 
6729
7299
  Please analyze and help me fix any issues.`
6730
- }
6731
- ],
6732
- max_tokens: 1e3
6733
- })
6734
- }
6735
- );
7300
+ }
7301
+ ],
7302
+ max_tokens: 1e3
7303
+ })
7304
+ });
6736
7305
  if (!response.ok) {
6737
7306
  const text = await response.text();
6738
7307
  console.log(`Error: ${response.status} - ${text}`);
@@ -7000,19 +7569,20 @@ ClawRouter Partner APIs (v${VERSION})
7000
7569
  console.error(`[ClawRouter] Need help? Run: npx @blockrun/clawrouter doctor`);
7001
7570
  }
7002
7571
  });
7003
- const monitor = new BalanceMonitor(wallet.address);
7572
+ const paymentChain = await resolvePaymentChain();
7573
+ const displayAddress = paymentChain === "solana" && proxy.solanaAddress ? proxy.solanaAddress : wallet.address;
7004
7574
  try {
7005
- const balance = await monitor.checkBalance();
7575
+ const balance = await proxy.balanceMonitor.checkBalance();
7006
7576
  if (balance.isEmpty) {
7007
7577
  console.log(`[ClawRouter] Wallet balance: $0.00 (using FREE model)`);
7008
- console.log(`[ClawRouter] Fund wallet for premium models: ${wallet.address}`);
7578
+ console.log(`[ClawRouter] Fund wallet for premium models: ${displayAddress}`);
7009
7579
  } else if (balance.isLow) {
7010
7580
  console.log(`[ClawRouter] Wallet balance: ${balance.balanceUSD} (low)`);
7011
7581
  } else {
7012
7582
  console.log(`[ClawRouter] Wallet balance: ${balance.balanceUSD}`);
7013
7583
  }
7014
7584
  } catch {
7015
- console.log(`[ClawRouter] Wallet: ${wallet.address} (balance check pending)`);
7585
+ console.log(`[ClawRouter] Wallet: ${displayAddress} (balance check pending)`);
7016
7586
  }
7017
7587
  console.log(`[ClawRouter] Ready - Ctrl+C to stop`);
7018
7588
  const shutdown = async (signal) => {
@@ -7037,4 +7607,9 @@ main().catch((err) => {
7037
7607
  console.error(`[ClawRouter] Need help? Run: npx @blockrun/clawrouter doctor`);
7038
7608
  process.exit(1);
7039
7609
  });
7610
+ /*! Bundled license information:
7611
+
7612
+ @noble/hashes/esm/utils.js:
7613
+ (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
7614
+ */
7040
7615
  //# sourceMappingURL=cli.js.map