@t2000/sdk 9.7.1 → 9.9.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.
package/dist/browser.cjs CHANGED
@@ -556,6 +556,19 @@ async function payWithMpp(args) {
556
556
  }
557
557
  const requirements = await pickSuiExactRequirements(probe, client.network);
558
558
  if (requirements) {
559
+ const { isX402EscrowRequirements } = await import('@suimpp/mpp/x402');
560
+ if (isX402EscrowRequirements(requirements)) {
561
+ const escrow = requirements.extra.escrow;
562
+ const price = atomicToHuman(
563
+ BigInt(requirements.maxAmountRequired),
564
+ await assetDecimals(requirements.asset)
565
+ );
566
+ throw new exports.T2000Error(
567
+ "ESCROW_REQUIRED",
568
+ `This endpoint sells deliverable work through on-chain escrow, not an instant call. Create a job instead: t2 job create ${price} ${requirements.payTo} --spec <your-brief> \u2014 funds lock in a Job object and release on delivery. No payment was made.`,
569
+ { payTo: requirements.payTo, priceUsdc: price, escrow }
570
+ );
571
+ }
559
572
  const result = await payViaX402({ signer, client, options, reqInit, requirements });
560
573
  await reportDirectPayment(result, options.url);
561
574
  return result;
@@ -1318,10 +1331,23 @@ async function buildSendTx({
1318
1331
  init_errors();
1319
1332
  init_token_registry();
1320
1333
  init_coinSelection();
1321
- var A2A_ESCROW_PACKAGE_ID = process.env.A2A_ESCROW_PACKAGE_ID ?? "0x9e67c380fb7079d793d6d15ff916b24d82779d7119bfa4631863102ed485c0a0";
1334
+ var A2A_ESCROW_PACKAGE_ID = process.env.A2A_ESCROW_PACKAGE_ID ?? "0x88de0d2a5f36691c0b198637350b9cedfa9ba300ed322851b184bda97859508b";
1335
+ var A2A_ESCROW_FEE_CONFIG_ID = process.env.A2A_ESCROW_FEE_CONFIG_ID ?? "0x2800f55a924c408ecdebfd20bafa03257f0830426720e5ad5cb26294e82f038f";
1336
+ var A2A_ESCROW_FEE_CONFIG_VERSION = Number(
1337
+ process.env.A2A_ESCROW_FEE_CONFIG_VERSION ?? 790540335
1338
+ );
1322
1339
  var CLOCK_ID2 = "0x6";
1323
1340
  var MODULE = "escrow";
1341
+ function feeConfigArg(tx) {
1342
+ return tx.sharedObjectRef({
1343
+ objectId: A2A_ESCROW_FEE_CONFIG_ID,
1344
+ initialSharedVersion: A2A_ESCROW_FEE_CONFIG_VERSION,
1345
+ mutable: false
1346
+ });
1347
+ }
1324
1348
  var MAX_JOB_USDC = 50;
1349
+ var MAX_REVIEW_WINDOW_MS = 2592e6;
1350
+ var MAX_DELIVER_HORIZON_MS = 31536e6;
1325
1351
  var JOB_STATES = [
1326
1352
  "funded",
1327
1353
  "delivered",
@@ -1364,8 +1390,11 @@ function preflightCreateJob(terms) {
1364
1390
  if (terms.deliverByMs <= Date.now()) {
1365
1391
  return preflightFail("INVALID_AMOUNT", "deliverByMs must be in the future.");
1366
1392
  }
1367
- if (terms.reviewWindowMs < 0) {
1368
- return preflightFail("INVALID_AMOUNT", "reviewWindowMs must be \u2265 0.");
1393
+ if (terms.deliverByMs > Date.now() + MAX_DELIVER_HORIZON_MS) {
1394
+ return preflightFail("INVALID_AMOUNT", "deliverByMs is more than 365 days out.");
1395
+ }
1396
+ if (terms.reviewWindowMs < 0 || terms.reviewWindowMs > MAX_REVIEW_WINDOW_MS) {
1397
+ return preflightFail("INVALID_AMOUNT", "reviewWindowMs must be 0\u201330 days.");
1369
1398
  }
1370
1399
  if (!Number.isInteger(terms.rejectSplitBps) || terms.rejectSplitBps < 0 || terms.rejectSplitBps > 1e4) {
1371
1400
  return preflightFail("INVALID_AMOUNT", "rejectSplitBps must be an integer 0\u201310000.");
@@ -1403,6 +1432,7 @@ async function buildCreateJobTx({
1403
1432
  tx.pure.u64(terms.deliverByMs),
1404
1433
  tx.pure.u64(terms.reviewWindowMs),
1405
1434
  tx.pure.u64(terms.rejectSplitBps),
1435
+ feeConfigArg(tx),
1406
1436
  tx.object(CLOCK_ID2)
1407
1437
  ]
1408
1438
  });
@@ -1413,7 +1443,7 @@ function jobCall(jobId, fn) {
1413
1443
  tx.moveCall({
1414
1444
  target: `${A2A_ESCROW_PACKAGE_ID}::${MODULE}::${fn}`,
1415
1445
  typeArguments: [exports.USDC_TYPE],
1416
- arguments: [tx.object(jobId), tx.object(CLOCK_ID2)]
1446
+ arguments: [tx.object(jobId), feeConfigArg(tx), tx.object(CLOCK_ID2)]
1417
1447
  });
1418
1448
  return tx;
1419
1449
  }
@@ -1425,6 +1455,7 @@ function buildDeliverJobTx(jobId, deliveryHash) {
1425
1455
  arguments: [
1426
1456
  tx.object(jobId),
1427
1457
  tx.pure.vector("u8", hexToBytes(deliveryHash)),
1458
+ feeConfigArg(tx),
1428
1459
  tx.object(CLOCK_ID2)
1429
1460
  ]
1430
1461
  });
@@ -1465,6 +1496,7 @@ async function getJob(client, jobId) {
1465
1496
  seller: String(json.seller),
1466
1497
  amountUsdc: Number(json.amount) / 10 ** USDC_DECIMALS,
1467
1498
  escrowUsdc: Number(json.escrow) / 10 ** USDC_DECIMALS,
1499
+ feeBps: Number(json.fee_bps ?? 0),
1468
1500
  specHash: bytesToHex(json.spec_hash ?? []),
1469
1501
  deliverByMs: Number(json.deliver_by_ms),
1470
1502
  reviewWindowMs: Number(json.review_window_ms),
@@ -1518,6 +1550,7 @@ async function verifyJobForSeller({
1518
1550
  // src/browser.ts
1519
1551
  init_token_registry();
1520
1552
 
1553
+ exports.A2A_ESCROW_FEE_CONFIG_ID = A2A_ESCROW_FEE_CONFIG_ID;
1521
1554
  exports.A2A_ESCROW_PACKAGE_ID = A2A_ESCROW_PACKAGE_ID;
1522
1555
  exports.CLOCK_ID = CLOCK_ID;
1523
1556
  exports.DEFAULT_NETWORK = DEFAULT_NETWORK;
@@ -1526,7 +1559,9 @@ exports.JOB_STATES = JOB_STATES;
1526
1559
  exports.KNOWN_TARGETS = KNOWN_TARGETS;
1527
1560
  exports.KeypairSigner = KeypairSigner;
1528
1561
  exports.LABEL_PATTERNS = LABEL_PATTERNS;
1562
+ exports.MAX_DELIVER_HORIZON_MS = MAX_DELIVER_HORIZON_MS;
1529
1563
  exports.MAX_JOB_USDC = MAX_JOB_USDC;
1564
+ exports.MAX_REVIEW_WINDOW_MS = MAX_REVIEW_WINDOW_MS;
1530
1565
  exports.MIST_PER_SUI = MIST_PER_SUI;
1531
1566
  exports.OVERLAY_FEE_RATE = OVERLAY_FEE_RATE;
1532
1567
  exports.PREFLIGHT_MAX_AMOUNT = PREFLIGHT_MAX_AMOUNT;