@t2000/sdk 9.2.0 → 9.3.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.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { EventEmitter } from 'eventemitter3';
2
2
  import { SuiGrpcClient } from '@mysten/sui/grpc';
3
3
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
4
- import { T as T2000Error, aD as T2000Options, Q as TransactionSigner, l as PayOptions, m as PayResult, aE as SwapResult, aF as SwapQuoteResult, w as SupportedAsset, r as SendResult, B as BalanceResponse, J as TransactionRecord, e as DepositInfo, aG as PaymentRequest, $ as ZkLoginProof, aH as SuiCoreClient, j as OverlayFeeConfig, aI as SponsoredCoinMergeCache, x as SwapRouteResult, aJ as SendableAsset } from './send-CUUOLK_H.cjs';
5
- export { aK as CETUS_USDC_SUI_POOL, C as CLOCK_ID, a as COIN_REGISTRY, b as ClassifyBalanceChange, c as ClassifyResult, d as CoinMeta, aL as CoinPage, aM as DEFAULT_GRPC_URL, D as DEFAULT_NETWORK, E as ETH_TYPE, f as ExtractedTransfer, aN as GASLESS_MIN_STABLE_AMOUNT, aO as GASLESS_STABLE_TYPES, G as GAS_RESERVE_MIN, I as IKA_TYPE, K as KNOWN_TARGETS, g as KeypairSigner, L as LABEL_PATTERNS, h as LOFI_TYPE, M as MANIFEST_TYPE, i as MIST_PER_SUI, N as NAVX_TYPE, aP as OPERATION_ASSETS, O as OVERLAY_FEE_RATE, aQ as Operation, P as PREFLIGHT_MAX_AMOUNT, k as PREFLIGHT_OK, n as PreflightResult, aR as SENDABLE_ASSETS, S as STABLE_ASSETS, o as SUI_DECIMALS, p as SUI_TYPE, q as SUPPORTED_ASSETS, aS as SelectAndSplitResult, aT as SerializedCetusRoute, aU as SerializedCetusRoutePath, aV as SerializedRouterDataV3, s as SimulationResult, t as StableAsset, u as SuiHolding, v as SuiRpcTxBlock, y as T2000ErrorCode, z as T2000ErrorData, A as T2000_OVERLAY_FEE_WALLET, F as TOKEN_MAP, H as TransactionLeg, R as TxDirection, U as USDC_DECIMALS, V as USDC_TYPE, W as USDE_TYPE, X as USDSUI_TYPE, Y as USDT_TYPE, Z as WAL_TYPE, _ as WBTC_TYPE, a0 as ZkLoginSigner, aW as addSendToTx, aX as addSwapToTx, aY as assertAllowedAsset, a1 as buildSendTx, a2 as buildSwapTx, a3 as checkPositiveAmount, a4 as checkSuiAddress, a5 as classifyAction, a6 as classifyLabel, a7 as classifyTransaction, aZ as deserializeCetusRoute, a8 as executeTx, a9 as extractAllUserLegs, aa as extractTransferDetails, ab as extractTxCommands, ac as extractTxSender, ad as fallbackLabel, a_ as fetchAllCoins, ae as findSwapRoute, af as formatAssetAmount, ag as formatSui, ah as formatUsd, a$ as getCoinMeta, ai as getDecimals, aj as getDecimalsForCoinType, b0 as getSuiClient, b1 as getSuiGrpcClient, b2 as isAllowedAsset, b3 as isCetusRouteFresh, b4 as isInRegistry, ak as mapMoveAbortCode, al as mapWalletError, am as mistToSui, b5 as normalizeAsset, b6 as normalizeCoinType, an as parseSuiRpcTx, ao as payWithMpp, ap as preflightFail, aq as preflightPay, ar as preflightSend, as as preflightSwap, b7 as queryHistory, b8 as queryTransaction, at as rawToStable, au as rawToUsdc, av as refineLendingLabel, aw as resolveSymbol, ax as resolveTokenType, b9 as selectAndSplitCoin, ba as selectSuiCoin, bb as serializeCetusRoute, bc as simulateTransaction, ay as stableToRaw, az as suiToMist, bd as throwIfSimulationFailed, aA as truncateAddress, aB as usdcToRaw, aC as validateAddress, be as verifyCetusRouteCoinMatch } from './send-CUUOLK_H.cjs';
4
+ import { T as T2000Error, aE as T2000Options, Q as TransactionSigner, l as PayOptions, m as PayResult, aF as SwapResult, aG as SwapQuoteResult, w as SupportedAsset, r as SendResult, B as BalanceResponse, J as TransactionRecord, e as DepositInfo, aH as PaymentRequest, $ as ZkLoginProof, aI as SuiCoreClient, j as OverlayFeeConfig, aJ as SponsoredCoinMergeCache, x as SwapRouteResult, aK as SendableAsset } from './send-DEK6aOGe.cjs';
5
+ export { aL as CETUS_USDC_SUI_POOL, C as CLOCK_ID, a as COIN_REGISTRY, b as ClassifyBalanceChange, c as ClassifyResult, d as CoinMeta, aM as CoinPage, aN as DEFAULT_GRPC_URL, D as DEFAULT_NETWORK, E as ETH_TYPE, f as ExtractedTransfer, aO as GASLESS_MIN_STABLE_AMOUNT, aP as GASLESS_STABLE_TYPES, G as GAS_RESERVE_MIN, I as IKA_TYPE, K as KNOWN_TARGETS, g as KeypairSigner, L as LABEL_PATTERNS, h as LOFI_TYPE, M as MANIFEST_TYPE, i as MIST_PER_SUI, N as NAVX_TYPE, aQ as OPERATION_ASSETS, O as OVERLAY_FEE_RATE, aR as Operation, P as PREFLIGHT_MAX_AMOUNT, k as PREFLIGHT_OK, n as PreflightResult, aS as SENDABLE_ASSETS, S as STABLE_ASSETS, o as SUI_DECIMALS, p as SUI_TYPE, q as SUPPORTED_ASSETS, aT as SelectAndSplitResult, aU as SerializedCetusRoute, aV as SerializedCetusRoutePath, aW as SerializedRouterDataV3, s as SimulationResult, t as StableAsset, u as SuiHolding, v as SuiRpcTxBlock, y as T2000ErrorCode, z as T2000ErrorData, A as T2000_OVERLAY_FEE_WALLET, F as TOKEN_MAP, H as TransactionLeg, R as TxDirection, U as USDC_DECIMALS, V as USDC_TYPE, W as USDE_TYPE, X as USDSUI_TYPE, Y as USDT_TYPE, Z as WAL_TYPE, _ as WBTC_TYPE, a0 as ZkLoginSigner, aX as addSendToTx, aY as addSwapToTx, aZ as assertAllowedAsset, a1 as buildSendTx, a2 as buildSwapTx, a3 as checkPositiveAmount, a4 as checkSuiAddress, a5 as classifyAction, a6 as classifyLabel, a7 as classifyTransaction, a_ as deserializeCetusRoute, a8 as executeTx, a9 as extractAllUserLegs, aa as extractTransferDetails, ab as extractTxCommands, ac as extractTxSender, ad as fallbackLabel, a$ as fetchAllCoins, ae as findSwapRoute, af as formatAssetAmount, ag as formatSui, ah as formatUsd, b0 as getCoinMeta, ai as getDecimals, aj as getDecimalsForCoinType, b1 as getSuiClient, b2 as getSuiGrpcClient, b3 as isAllowedAsset, b4 as isCetusRouteFresh, b5 as isInRegistry, ak as mapMoveAbortCode, al as mapWalletError, am as mistToSui, b6 as normalizeAsset, b7 as normalizeCoinType, an as parseMppSuiChallenge, ao as parseSuiRpcTx, ap as payWithMpp, aq as preflightFail, ar as preflightPay, as as preflightSend, at as preflightSwap, b8 as queryHistory, b9 as queryTransaction, au as rawToStable, av as rawToUsdc, aw as refineLendingLabel, ax as resolveSymbol, ay as resolveTokenType, ba as selectAndSplitCoin, bb as selectSuiCoin, bc as serializeCetusRoute, bd as simulateTransaction, az as stableToRaw, aA as suiToMist, be as throwIfSimulationFailed, aB as truncateAddress, aC as usdcToRaw, aD as validateAddress, bf as verifyCetusRouteCoinMatch } from './send-DEK6aOGe.cjs';
6
6
  import { TransactionObjectArgument, Transaction } from '@mysten/sui/transactions';
7
7
  import { SuinsClient } from '@mysten/suins';
8
8
  import '@mysten/sui/client';
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { EventEmitter } from 'eventemitter3';
2
2
  import { SuiGrpcClient } from '@mysten/sui/grpc';
3
3
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
4
- import { T as T2000Error, aD as T2000Options, Q as TransactionSigner, l as PayOptions, m as PayResult, aE as SwapResult, aF as SwapQuoteResult, w as SupportedAsset, r as SendResult, B as BalanceResponse, J as TransactionRecord, e as DepositInfo, aG as PaymentRequest, $ as ZkLoginProof, aH as SuiCoreClient, j as OverlayFeeConfig, aI as SponsoredCoinMergeCache, x as SwapRouteResult, aJ as SendableAsset } from './send-CUUOLK_H.js';
5
- export { aK as CETUS_USDC_SUI_POOL, C as CLOCK_ID, a as COIN_REGISTRY, b as ClassifyBalanceChange, c as ClassifyResult, d as CoinMeta, aL as CoinPage, aM as DEFAULT_GRPC_URL, D as DEFAULT_NETWORK, E as ETH_TYPE, f as ExtractedTransfer, aN as GASLESS_MIN_STABLE_AMOUNT, aO as GASLESS_STABLE_TYPES, G as GAS_RESERVE_MIN, I as IKA_TYPE, K as KNOWN_TARGETS, g as KeypairSigner, L as LABEL_PATTERNS, h as LOFI_TYPE, M as MANIFEST_TYPE, i as MIST_PER_SUI, N as NAVX_TYPE, aP as OPERATION_ASSETS, O as OVERLAY_FEE_RATE, aQ as Operation, P as PREFLIGHT_MAX_AMOUNT, k as PREFLIGHT_OK, n as PreflightResult, aR as SENDABLE_ASSETS, S as STABLE_ASSETS, o as SUI_DECIMALS, p as SUI_TYPE, q as SUPPORTED_ASSETS, aS as SelectAndSplitResult, aT as SerializedCetusRoute, aU as SerializedCetusRoutePath, aV as SerializedRouterDataV3, s as SimulationResult, t as StableAsset, u as SuiHolding, v as SuiRpcTxBlock, y as T2000ErrorCode, z as T2000ErrorData, A as T2000_OVERLAY_FEE_WALLET, F as TOKEN_MAP, H as TransactionLeg, R as TxDirection, U as USDC_DECIMALS, V as USDC_TYPE, W as USDE_TYPE, X as USDSUI_TYPE, Y as USDT_TYPE, Z as WAL_TYPE, _ as WBTC_TYPE, a0 as ZkLoginSigner, aW as addSendToTx, aX as addSwapToTx, aY as assertAllowedAsset, a1 as buildSendTx, a2 as buildSwapTx, a3 as checkPositiveAmount, a4 as checkSuiAddress, a5 as classifyAction, a6 as classifyLabel, a7 as classifyTransaction, aZ as deserializeCetusRoute, a8 as executeTx, a9 as extractAllUserLegs, aa as extractTransferDetails, ab as extractTxCommands, ac as extractTxSender, ad as fallbackLabel, a_ as fetchAllCoins, ae as findSwapRoute, af as formatAssetAmount, ag as formatSui, ah as formatUsd, a$ as getCoinMeta, ai as getDecimals, aj as getDecimalsForCoinType, b0 as getSuiClient, b1 as getSuiGrpcClient, b2 as isAllowedAsset, b3 as isCetusRouteFresh, b4 as isInRegistry, ak as mapMoveAbortCode, al as mapWalletError, am as mistToSui, b5 as normalizeAsset, b6 as normalizeCoinType, an as parseSuiRpcTx, ao as payWithMpp, ap as preflightFail, aq as preflightPay, ar as preflightSend, as as preflightSwap, b7 as queryHistory, b8 as queryTransaction, at as rawToStable, au as rawToUsdc, av as refineLendingLabel, aw as resolveSymbol, ax as resolveTokenType, b9 as selectAndSplitCoin, ba as selectSuiCoin, bb as serializeCetusRoute, bc as simulateTransaction, ay as stableToRaw, az as suiToMist, bd as throwIfSimulationFailed, aA as truncateAddress, aB as usdcToRaw, aC as validateAddress, be as verifyCetusRouteCoinMatch } from './send-CUUOLK_H.js';
4
+ import { T as T2000Error, aE as T2000Options, Q as TransactionSigner, l as PayOptions, m as PayResult, aF as SwapResult, aG as SwapQuoteResult, w as SupportedAsset, r as SendResult, B as BalanceResponse, J as TransactionRecord, e as DepositInfo, aH as PaymentRequest, $ as ZkLoginProof, aI as SuiCoreClient, j as OverlayFeeConfig, aJ as SponsoredCoinMergeCache, x as SwapRouteResult, aK as SendableAsset } from './send-DEK6aOGe.js';
5
+ export { aL as CETUS_USDC_SUI_POOL, C as CLOCK_ID, a as COIN_REGISTRY, b as ClassifyBalanceChange, c as ClassifyResult, d as CoinMeta, aM as CoinPage, aN as DEFAULT_GRPC_URL, D as DEFAULT_NETWORK, E as ETH_TYPE, f as ExtractedTransfer, aO as GASLESS_MIN_STABLE_AMOUNT, aP as GASLESS_STABLE_TYPES, G as GAS_RESERVE_MIN, I as IKA_TYPE, K as KNOWN_TARGETS, g as KeypairSigner, L as LABEL_PATTERNS, h as LOFI_TYPE, M as MANIFEST_TYPE, i as MIST_PER_SUI, N as NAVX_TYPE, aQ as OPERATION_ASSETS, O as OVERLAY_FEE_RATE, aR as Operation, P as PREFLIGHT_MAX_AMOUNT, k as PREFLIGHT_OK, n as PreflightResult, aS as SENDABLE_ASSETS, S as STABLE_ASSETS, o as SUI_DECIMALS, p as SUI_TYPE, q as SUPPORTED_ASSETS, aT as SelectAndSplitResult, aU as SerializedCetusRoute, aV as SerializedCetusRoutePath, aW as SerializedRouterDataV3, s as SimulationResult, t as StableAsset, u as SuiHolding, v as SuiRpcTxBlock, y as T2000ErrorCode, z as T2000ErrorData, A as T2000_OVERLAY_FEE_WALLET, F as TOKEN_MAP, H as TransactionLeg, R as TxDirection, U as USDC_DECIMALS, V as USDC_TYPE, W as USDE_TYPE, X as USDSUI_TYPE, Y as USDT_TYPE, Z as WAL_TYPE, _ as WBTC_TYPE, a0 as ZkLoginSigner, aX as addSendToTx, aY as addSwapToTx, aZ as assertAllowedAsset, a1 as buildSendTx, a2 as buildSwapTx, a3 as checkPositiveAmount, a4 as checkSuiAddress, a5 as classifyAction, a6 as classifyLabel, a7 as classifyTransaction, a_ as deserializeCetusRoute, a8 as executeTx, a9 as extractAllUserLegs, aa as extractTransferDetails, ab as extractTxCommands, ac as extractTxSender, ad as fallbackLabel, a$ as fetchAllCoins, ae as findSwapRoute, af as formatAssetAmount, ag as formatSui, ah as formatUsd, b0 as getCoinMeta, ai as getDecimals, aj as getDecimalsForCoinType, b1 as getSuiClient, b2 as getSuiGrpcClient, b3 as isAllowedAsset, b4 as isCetusRouteFresh, b5 as isInRegistry, ak as mapMoveAbortCode, al as mapWalletError, am as mistToSui, b6 as normalizeAsset, b7 as normalizeCoinType, an as parseMppSuiChallenge, ao as parseSuiRpcTx, ap as payWithMpp, aq as preflightFail, ar as preflightPay, as as preflightSend, at as preflightSwap, b8 as queryHistory, b9 as queryTransaction, au as rawToStable, av as rawToUsdc, aw as refineLendingLabel, ax as resolveSymbol, ay as resolveTokenType, ba as selectAndSplitCoin, bb as selectSuiCoin, bc as serializeCetusRoute, bd as simulateTransaction, az as stableToRaw, aA as suiToMist, be as throwIfSimulationFailed, aB as truncateAddress, aC as usdcToRaw, aD as validateAddress, bf as verifyCetusRouteCoinMatch } from './send-DEK6aOGe.js';
6
6
  import { TransactionObjectArgument, Transaction } from '@mysten/sui/transactions';
7
7
  import { SuinsClient } from '@mysten/suins';
8
8
  import '@mysten/sui/client';
package/dist/index.js CHANGED
@@ -1072,7 +1072,11 @@ async function executeTx(client, signer, buildTx, options = {}) {
1072
1072
  include: { effects: true }
1073
1073
  });
1074
1074
  const txn = result.$kind === "Transaction" ? result.Transaction : result.FailedTransaction;
1075
- await client.core.waitForTransaction({ digest: txn.digest });
1075
+ try {
1076
+ await client.core.waitForTransaction({ digest: txn.digest });
1077
+ } catch (err) {
1078
+ if (!txn.effects) throw err;
1079
+ }
1076
1080
  const effects = txn.effects ?? void 0;
1077
1081
  const gasUsed = effects?.gasUsed;
1078
1082
  let gasCostSui = 0;
@@ -1085,6 +1089,15 @@ async function executeTx(client, signer, buildTx, options = {}) {
1085
1089
 
1086
1090
  // src/wallet/pay.ts
1087
1091
  init_errors();
1092
+
1093
+ // src/mpp-cost.ts
1094
+ function parseChallengeAmount(challenge) {
1095
+ const raw = challenge?.request?.amount;
1096
+ const n = typeof raw === "string" ? Number(raw) : typeof raw === "number" ? raw : Number.NaN;
1097
+ return Number.isFinite(n) ? n : void 0;
1098
+ }
1099
+
1100
+ // src/wallet/pay.ts
1088
1101
  init_preflight();
1089
1102
  function preflightPay(input) {
1090
1103
  if (typeof input.url !== "string" || input.url.trim() === "") {
@@ -1109,11 +1122,18 @@ function preflightPay(input) {
1109
1122
  return PREFLIGHT_OK;
1110
1123
  }
1111
1124
  async function payWithMpp(args) {
1112
- const { signer, client, options } = args;
1125
+ const { signer, client } = args;
1126
+ let options = args.options;
1113
1127
  const pf = preflightPay({ url: options.url, maxPrice: options.maxPrice });
1114
1128
  if (!pf.valid) throw new T2000Error(pf.code, pf.error);
1115
1129
  const method = (options.method ?? "GET").toUpperCase();
1116
1130
  const canHaveBody = method !== "GET" && method !== "HEAD";
1131
+ if (canHaveBody && typeof options.body === "string" && isJsonText(options.body) && !hasContentType(options.headers)) {
1132
+ options = {
1133
+ ...options,
1134
+ headers: { ...options.headers ?? {}, "content-type": "application/json" }
1135
+ };
1136
+ }
1117
1137
  const reqInit = {
1118
1138
  method,
1119
1139
  headers: options.headers,
@@ -1124,13 +1144,35 @@ async function payWithMpp(args) {
1124
1144
  return finalize(probe, { paid: false });
1125
1145
  }
1126
1146
  const requirements = await pickSuiExactRequirements(probe, client.network);
1127
- if (!requirements) {
1128
- throw new T2000Error(
1129
- "FACILITATOR_REJECTION",
1130
- `Endpoint returned 402 without an x402 'exact' / sui:${client.network} payment requirement. This SDK only speaks the x402 dialect.`
1131
- );
1147
+ if (requirements) {
1148
+ return payViaX402({ signer, client, options, reqInit, requirements });
1149
+ }
1150
+ const headerChallenge = await parseMppSuiChallenge(probe);
1151
+ if (headerChallenge) {
1152
+ return payViaMppHeader({ signer, client, options });
1153
+ }
1154
+ throw new T2000Error(
1155
+ "FACILITATOR_REJECTION",
1156
+ `Endpoint returned 402 without an x402 'exact' / sui:${client.network} requirement in the body or an MPP 'sui' challenge in WWW-Authenticate. Nothing this SDK can pay.`
1157
+ );
1158
+ }
1159
+ async function parseMppSuiChallenge(response) {
1160
+ try {
1161
+ const { Challenge } = await import('mppx');
1162
+ const challenges = Challenge.fromResponseList(response);
1163
+ const suiChallenge = challenges.find((c) => c.method === "sui" && c.intent === "charge");
1164
+ if (!suiChallenge) return void 0;
1165
+ const req = suiChallenge.request;
1166
+ if (typeof req?.amount !== "string" || typeof req?.recipient !== "string") return void 0;
1167
+ return {
1168
+ amount: req.amount,
1169
+ currency: typeof req.currency === "string" ? req.currency : "",
1170
+ recipient: req.recipient,
1171
+ description: suiChallenge.description
1172
+ };
1173
+ } catch {
1174
+ return void 0;
1132
1175
  }
1133
- return payViaX402({ signer, client, options, reqInit, requirements });
1134
1176
  }
1135
1177
  async function pickSuiExactRequirements(response, network) {
1136
1178
  try {
@@ -1145,6 +1187,7 @@ async function payViaX402(args) {
1145
1187
  const { signer, client, options, reqInit, requirements } = args;
1146
1188
  const { buildX402SignedPayment, X402_PAYMENT_HEADER, X402_PAYMENT_RESPONSE_HEADER } = await import('@suimpp/mpp/x402');
1147
1189
  const amountRaw = BigInt(requirements.maxAmountRequired);
1190
+ assertWithinMaxPrice(atomicToHuman(amountRaw, await assetDecimals(requirements.asset)), options.maxPrice);
1148
1191
  const migrationGasSui = await ensureAddressBalanceCovers({
1149
1192
  signer,
1150
1193
  client,
@@ -1180,6 +1223,70 @@ async function payViaX402(args) {
1180
1223
  receipt: digest ? { reference: digest, timestamp: (/* @__PURE__ */ new Date()).toISOString() } : result.receipt
1181
1224
  };
1182
1225
  }
1226
+ async function payViaMppHeader(args) {
1227
+ const { signer, client, options } = args;
1228
+ const { Mppx } = await import('mppx/client');
1229
+ const { sui, USDC, USDC_TESTNET } = await import('@suimpp/mpp/client');
1230
+ const signerAddress = signer.getAddress();
1231
+ const network = client.network === "testnet" ? "testnet" : "mainnet";
1232
+ const grpcClient = await makeGrpcBuildClient(client);
1233
+ let paymentDigest;
1234
+ let gasCostSui = 0;
1235
+ let chargedAmount;
1236
+ const mppx = Mppx.create({
1237
+ polyfill: false,
1238
+ onChallenge: async (challenge) => {
1239
+ const parsed = parseChallengeAmount(challenge);
1240
+ if (parsed !== void 0) {
1241
+ chargedAmount = parsed;
1242
+ assertWithinMaxPrice(parsed, options.maxPrice);
1243
+ }
1244
+ return void 0;
1245
+ },
1246
+ methods: [
1247
+ sui({
1248
+ client,
1249
+ currency: network === "testnet" ? USDC_TESTNET : USDC,
1250
+ signer: {
1251
+ toSuiAddress: () => signerAddress,
1252
+ signPersonalMessage: (bytes) => signer.signPersonalMessage(bytes)
1253
+ },
1254
+ execute: async (tx) => {
1255
+ const result2 = await executeTx(client, signer, () => tx, { buildClient: grpcClient });
1256
+ paymentDigest = result2.digest;
1257
+ gasCostSui = result2.gasCostSui;
1258
+ return { digest: result2.digest };
1259
+ }
1260
+ })
1261
+ ]
1262
+ });
1263
+ const method = (options.method ?? "GET").toUpperCase();
1264
+ const canHaveBody = method !== "GET" && method !== "HEAD";
1265
+ const response = await mppx.fetch(options.url, {
1266
+ method,
1267
+ headers: options.headers,
1268
+ body: canHaveBody ? options.body : void 0
1269
+ });
1270
+ const paid = !!paymentDigest;
1271
+ const result = await finalize(response, { paid });
1272
+ if (!paid) return { ...result, dialect: "legacy" };
1273
+ return {
1274
+ ...result,
1275
+ dialect: "legacy",
1276
+ cost: chargedAmount ?? options.maxPrice ?? void 0,
1277
+ gasCostSui,
1278
+ receipt: paymentDigest ? { reference: paymentDigest, timestamp: (/* @__PURE__ */ new Date()).toISOString() } : void 0
1279
+ };
1280
+ }
1281
+ function assertWithinMaxPrice(price, maxPrice) {
1282
+ if (maxPrice !== void 0 && price > maxPrice) {
1283
+ throw new T2000Error(
1284
+ "PRICE_EXCEEDS_LIMIT",
1285
+ `Service price $${price} exceeds maxPrice ceiling $${maxPrice}`,
1286
+ { price, maxPrice }
1287
+ );
1288
+ }
1289
+ }
1183
1290
  async function ensureAddressBalanceCovers(args) {
1184
1291
  const { signer, client, asset, amountRaw } = args;
1185
1292
  const owner = signer.getAddress();
@@ -1213,6 +1320,18 @@ async function ensureAddressBalanceCovers(args) {
1213
1320
  const migration = await executeTx(client, signer, () => tx, { buildClient: grpcClient });
1214
1321
  return migration.gasCostSui;
1215
1322
  }
1323
+ function isJsonText(text) {
1324
+ try {
1325
+ JSON.parse(text);
1326
+ return true;
1327
+ } catch {
1328
+ return false;
1329
+ }
1330
+ }
1331
+ function hasContentType(headers) {
1332
+ if (!headers) return false;
1333
+ return Object.keys(headers).some((k) => k.toLowerCase() === "content-type");
1334
+ }
1216
1335
  async function finalize(response, opts) {
1217
1336
  const contentType = response.headers.get("content-type") ?? "";
1218
1337
  let body2;
@@ -3401,6 +3520,6 @@ function displayHandle(label, parentName = AUDRIC_PARENT_NAME) {
3401
3520
  // src/index.ts
3402
3521
  init_preflight();
3403
3522
 
3404
- export { AGENT_ID_PARENT, AGENT_ID_PARENT_NAME, AGENT_ID_PARENT_NFT_ID, AUDRIC_PARENT, AUDRIC_PARENT_NAME, AUDRIC_PARENT_NFT_ID, CETUS_USDC_SUI_POOL, CLOCK_ID, COIN_REGISTRY, DEFAULT_API_BASE, DEFAULT_GRPC_URL, DEFAULT_NETWORK, ETH_TYPE, GASLESS_MIN_STABLE_AMOUNT, GASLESS_STABLE_TYPES, GAS_RESERVE_MIN, IKA_TYPE, InvalidAddressError, KNOWN_TARGETS, KeypairSigner, LABEL_PATTERNS, LOFI_TYPE, LimitEnforcer, LimitExceededError, MANIFEST_TYPE, MIST_PER_SUI, NAVX_TYPE, OPERATION_ASSETS, OVERLAY_FEE_RATE, PREFLIGHT_MAX_AMOUNT, PREFLIGHT_OK, SENDABLE_ASSETS, SPONSORED_PYTH_DEPENDENT_PROVIDERS, STABLE_ASSETS, SUINS_NAME_REGEX, SUI_ADDRESS_REGEX, SUI_ADDRESS_STRICT_REGEX, SUI_DECIMALS, SUI_TYPE, SUPPORTED_ASSETS, SuinsNotRegisteredError, SuinsRpcError, T2000, T2000Error, T2000_OVERLAY_FEE_WALLET, TOKEN_MAP, USDC_DECIMALS, USDC_TYPE, USDE_TYPE, USDSUI_TYPE, USDT_TYPE, WAL_TYPE, WBTC_TYPE, WRITE_APPENDER_REGISTRY, ZkLoginSigner, addSendToTx, addSwapToTx, approxUsdValue, assertAllowedAsset, assertLimitConfig, buildAddLeafTx, buildRevokeLeafTx, buildSendTx, buildSwapTx, chatCompletion, chatCompletionStream, checkPositiveAmount, checkSuiAddress, classifyAction, classifyLabel, classifyTransaction, clearLimits, composeTx, dailySpentToday, deriveAllowedAddressesFromPtb, deserializeCetusRoute, displayHandle, executeTx, exportPrivateKey, extractAllUserLegs, extractTransferDetails, extractTxCommands, extractTxSender, fallbackLabel, fetchAllCoins, findSwapRoute, formatAssetAmount, formatSui, formatUsd, fullHandle, generateKeypair, getAddress, getCoinMeta, getDecimals, getDecimalsForCoinType, getLimits, getSponsoredSwapProviders, getSuiClient, getSuiGrpcClient, getSwapQuote, hasLimits, isAllowedAsset, isCetusRouteFresh, isInRegistry, keypairFromPrivateKey, listModels, loadKey, looksLikeSuiNs, mapMoveAbortCode, mapWalletError, mistToSui, normalizeAddressInput, normalizeAsset, normalizeCoinType, parseSuiRpcTx, payWithMpp, preflightFail, preflightPay, preflightSend, preflightSwap, queryBalance, queryHistory, queryTransaction, rawToStable, rawToUsdc, readLimitsFile, recordDailySpend, refineLendingLabel, resolveAddressToSuinsViaRpc, resolveSuinsViaRpc, resolveSymbol, resolveTokenType, saveBech32, saveKey, selectAndSplitCoin, selectSuiCoin, serializeCetusRoute, setLimits, simulateTransaction, stableToRaw, suiToMist, throwIfSimulationFailed, truncateAddress, usdcToRaw, validateAddress, validateLabel, verifyCetusRouteCoinMatch, verifyReceipt, walletExists, writeLimitsFile };
3523
+ export { AGENT_ID_PARENT, AGENT_ID_PARENT_NAME, AGENT_ID_PARENT_NFT_ID, AUDRIC_PARENT, AUDRIC_PARENT_NAME, AUDRIC_PARENT_NFT_ID, CETUS_USDC_SUI_POOL, CLOCK_ID, COIN_REGISTRY, DEFAULT_API_BASE, DEFAULT_GRPC_URL, DEFAULT_NETWORK, ETH_TYPE, GASLESS_MIN_STABLE_AMOUNT, GASLESS_STABLE_TYPES, GAS_RESERVE_MIN, IKA_TYPE, InvalidAddressError, KNOWN_TARGETS, KeypairSigner, LABEL_PATTERNS, LOFI_TYPE, LimitEnforcer, LimitExceededError, MANIFEST_TYPE, MIST_PER_SUI, NAVX_TYPE, OPERATION_ASSETS, OVERLAY_FEE_RATE, PREFLIGHT_MAX_AMOUNT, PREFLIGHT_OK, SENDABLE_ASSETS, SPONSORED_PYTH_DEPENDENT_PROVIDERS, STABLE_ASSETS, SUINS_NAME_REGEX, SUI_ADDRESS_REGEX, SUI_ADDRESS_STRICT_REGEX, SUI_DECIMALS, SUI_TYPE, SUPPORTED_ASSETS, SuinsNotRegisteredError, SuinsRpcError, T2000, T2000Error, T2000_OVERLAY_FEE_WALLET, TOKEN_MAP, USDC_DECIMALS, USDC_TYPE, USDE_TYPE, USDSUI_TYPE, USDT_TYPE, WAL_TYPE, WBTC_TYPE, WRITE_APPENDER_REGISTRY, ZkLoginSigner, addSendToTx, addSwapToTx, approxUsdValue, assertAllowedAsset, assertLimitConfig, buildAddLeafTx, buildRevokeLeafTx, buildSendTx, buildSwapTx, chatCompletion, chatCompletionStream, checkPositiveAmount, checkSuiAddress, classifyAction, classifyLabel, classifyTransaction, clearLimits, composeTx, dailySpentToday, deriveAllowedAddressesFromPtb, deserializeCetusRoute, displayHandle, executeTx, exportPrivateKey, extractAllUserLegs, extractTransferDetails, extractTxCommands, extractTxSender, fallbackLabel, fetchAllCoins, findSwapRoute, formatAssetAmount, formatSui, formatUsd, fullHandle, generateKeypair, getAddress, getCoinMeta, getDecimals, getDecimalsForCoinType, getLimits, getSponsoredSwapProviders, getSuiClient, getSuiGrpcClient, getSwapQuote, hasLimits, isAllowedAsset, isCetusRouteFresh, isInRegistry, keypairFromPrivateKey, listModels, loadKey, looksLikeSuiNs, mapMoveAbortCode, mapWalletError, mistToSui, normalizeAddressInput, normalizeAsset, normalizeCoinType, parseMppSuiChallenge, parseSuiRpcTx, payWithMpp, preflightFail, preflightPay, preflightSend, preflightSwap, queryBalance, queryHistory, queryTransaction, rawToStable, rawToUsdc, readLimitsFile, recordDailySpend, refineLendingLabel, resolveAddressToSuinsViaRpc, resolveSuinsViaRpc, resolveSymbol, resolveTokenType, saveBech32, saveKey, selectAndSplitCoin, selectSuiCoin, serializeCetusRoute, setLimits, simulateTransaction, stableToRaw, suiToMist, throwIfSimulationFailed, truncateAddress, usdcToRaw, validateAddress, validateLabel, verifyCetusRouteCoinMatch, verifyReceipt, walletExists, writeLimitsFile };
3405
3524
  //# sourceMappingURL=index.js.map
3406
3525
  //# sourceMappingURL=index.js.map