@t2000/sdk 10.38.2 → 10.40.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.js CHANGED
@@ -1349,19 +1349,88 @@ init_coinSelection();
1349
1349
  init_errors();
1350
1350
  init_token_registry();
1351
1351
  init_coinSelection();
1352
- var MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID = "0x5c90ec07da01bf885a4e65247ce98b75ab8a042cd965d30d7213856d579c4afa";
1352
+ var MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID = "0x1f88ca77b1980e3d0750e83d1363c6025cd677c2f420cae51a86d4a0bddf93c5";
1353
1353
  var A2A_ESCROW_LATEST_PACKAGE_ID = process.env.A2A_ESCROW_OPENING_PACKAGE_ID ?? process.env.A2A_ESCROW_PACKAGE_ID ?? MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID;
1354
+ var A2A_ESCROW_OPENING_PACKAGE_ID = A2A_ESCROW_LATEST_PACKAGE_ID;
1354
1355
  var A2A_ESCROW_PACKAGE_V7_ID = "0x4249f0b242c47c7baf0c37304365bc4bbe769bcedf11f3525e84682d59a3b23e";
1355
1356
  var A2A_ESCROW_PACKAGE_V8_ID = "0x1595b80bc05a03607f3908702c866ca63cf961025b4263b5ecbe419e07f8ff31";
1356
1357
  var A2A_ESCROW_PACKAGE_V10_ID = process.env.A2A_ESCROW_PACKAGE_V10_ID ?? "0x5c90ec07da01bf885a4e65247ce98b75ab8a042cd965d30d7213856d579c4afa";
1358
+ process.env.A2A_ESCROW_PACKAGE_V11_ID ?? "0x2a928916c859a159e6d6f4841073a31397d01336c1ea689ce74344e456463c8d";
1359
+ process.env.A2A_ESCROW_PACKAGE_V12_ID ?? "0x1f88ca77b1980e3d0750e83d1363c6025cd677c2f420cae51a86d4a0bddf93c5";
1360
+ var SHA256_HEX_RE = /^(0x)?[0-9a-fA-F]{64}$/;
1357
1361
  var OPENING_CLAIM_POLICY_ANY_ACTIVE = 0;
1358
1362
  var OPENING_CLAIM_POLICY_PROVEN = 1;
1359
1363
  var OPENING_CLAIM_POLICY_PROVEN_4STAR = 2;
1364
+ var MAX_OPEN_WINDOW_MS = 2592e6;
1365
+ function feeConfigArg(tx) {
1366
+ return tx.sharedObjectRef({
1367
+ objectId: A2A_ESCROW_FEE_CONFIG_ID,
1368
+ initialSharedVersion: A2A_ESCROW_FEE_CONFIG_VERSION,
1369
+ mutable: false
1370
+ });
1371
+ }
1360
1372
  var OPENING_CLAIM_POLICIES = [
1361
1373
  OPENING_CLAIM_POLICY_ANY_ACTIVE,
1362
1374
  OPENING_CLAIM_POLICY_PROVEN,
1363
1375
  OPENING_CLAIM_POLICY_PROVEN_4STAR
1364
1376
  ];
1377
+ var OPEN_REJECT_SPLIT_BPS = 1e4;
1378
+ function preflightCreateOpening(terms) {
1379
+ if (!Number.isFinite(terms.amountUsdc) || terms.amountUsdc <= 0) {
1380
+ return { valid: false, code: "INVALID_AMOUNT", error: "Budget must be positive." };
1381
+ }
1382
+ if (terms.amountUsdc < MIN_JOB_USDC) {
1383
+ return {
1384
+ valid: false,
1385
+ code: "INVALID_AMOUNT",
1386
+ error: `Open jobs start at ${MIN_JOB_USDC} USDC (contract-enforced minimum). Got ${terms.amountUsdc}.`
1387
+ };
1388
+ }
1389
+ if (terms.amountUsdc > MAX_JOB_USDC) {
1390
+ return {
1391
+ valid: false,
1392
+ code: "INVALID_AMOUNT",
1393
+ error: `Open jobs cap at ${MAX_JOB_USDC} USDC (v1).`
1394
+ };
1395
+ }
1396
+ if (!SHA256_HEX_RE.test(terms.specHash)) {
1397
+ return { valid: false, code: "INVALID_INPUT", error: "specHash must be a sha256 hex string." };
1398
+ }
1399
+ const now = Date.now();
1400
+ if (terms.openUntilMs <= now) {
1401
+ return { valid: false, code: "INVALID_INPUT", error: "openUntil must be in the future." };
1402
+ }
1403
+ if (terms.openUntilMs > now + MAX_OPEN_WINDOW_MS) {
1404
+ return { valid: false, code: "INVALID_INPUT", error: "Openings can stay claimable at most 30 days." };
1405
+ }
1406
+ if (terms.slaMs <= 0) {
1407
+ return { valid: false, code: "INVALID_INPUT", error: "Delivery window must be positive." };
1408
+ }
1409
+ if (terms.rejectSplitBps !== OPEN_REJECT_SPLIT_BPS) {
1410
+ return {
1411
+ valid: false,
1412
+ code: "INVALID_INPUT",
1413
+ error: "Open postings lock reject at 100% buyer / 0% seller (rejectSplitBps must be 10000, contract-enforced since v5) \u2014 reject is economically a decline, so junk delivery has no edge."
1414
+ };
1415
+ }
1416
+ const policy = terms.claimPolicy ?? OPENING_CLAIM_POLICY_ANY_ACTIVE;
1417
+ if (!OPENING_CLAIM_POLICIES.includes(policy)) {
1418
+ return {
1419
+ valid: false,
1420
+ code: "INVALID_INPUT",
1421
+ error: "claimPolicy must be 0 (Anyone), 1 (Proven) or 2 (Proven \xB7 4\u2605+) \u2014 anything else aborts on-chain."
1422
+ };
1423
+ }
1424
+ const minLevel = terms.minSellerLevel ?? 0;
1425
+ if (!Number.isInteger(minLevel) || minLevel < 0 || minLevel > 4) {
1426
+ return {
1427
+ valid: false,
1428
+ code: "INVALID_INPUT",
1429
+ error: "minSellerLevel must be 0 (no floor) or 1\u20134 (Level 1\u20134) \u2014 anything else aborts on-chain (S.1192)."
1430
+ };
1431
+ }
1432
+ return { valid: true };
1433
+ }
1365
1434
 
1366
1435
  // src/wallet/job.ts
1367
1436
  var MAINNET_A2A_ESCROW_PACKAGE_ID = "0x358a819c1c016e2cc84ef5fbea81cba90c31f7f8a62bf45cb5e5276acf198bdd";
@@ -1372,7 +1441,7 @@ var A2A_ESCROW_FEE_CONFIG_VERSION = Number(
1372
1441
  );
1373
1442
  var CLOCK_ID2 = "0x6";
1374
1443
  var MODULE = "escrow";
1375
- function feeConfigArg(tx) {
1444
+ function feeConfigArg2(tx) {
1376
1445
  return tx.sharedObjectRef({
1377
1446
  objectId: A2A_ESCROW_FEE_CONFIG_ID,
1378
1447
  initialSharedVersion: A2A_ESCROW_FEE_CONFIG_VERSION,
@@ -1473,7 +1542,7 @@ async function buildCreateJobTx({
1473
1542
  tx.pure.u64(terms.deliverByMs),
1474
1543
  tx.pure.u64(terms.reviewWindowMs),
1475
1544
  tx.pure.u64(terms.rejectSplitBps),
1476
- feeConfigArg(tx),
1545
+ feeConfigArg2(tx),
1477
1546
  tx.object(CLOCK_ID2)
1478
1547
  ]
1479
1548
  });
@@ -1481,6 +1550,29 @@ async function buildCreateJobTx({
1481
1550
  }
1482
1551
  function buildRejectJobTx(jobId, v2) {
1483
1552
  const tx = new Transaction();
1553
+ if (v2.batchId) {
1554
+ tx.moveCall({
1555
+ target: `${A2A_ESCROW_LATEST_PACKAGE_ID}::batch::${v2.buyerScoreId ? "batch_reject_agent_buyer" : "batch_reject"}`,
1556
+ typeArguments: [USDC_TYPE],
1557
+ arguments: v2.buyerScoreId ? [
1558
+ tx.object(v2.batchId),
1559
+ tx.object(jobId),
1560
+ tx.object(v2.sellerScoreId),
1561
+ tx.object(v2.buyerScoreId),
1562
+ tx.object(v2.registryId),
1563
+ feeConfigArg2(tx),
1564
+ tx.object(CLOCK_ID2)
1565
+ ] : [
1566
+ tx.object(v2.batchId),
1567
+ tx.object(jobId),
1568
+ tx.object(v2.sellerScoreId),
1569
+ tx.object(v2.registryId),
1570
+ feeConfigArg2(tx),
1571
+ tx.object(CLOCK_ID2)
1572
+ ]
1573
+ });
1574
+ return tx;
1575
+ }
1484
1576
  tx.moveCall({
1485
1577
  target: `${A2A_ESCROW_LATEST_PACKAGE_ID}::reputation::${v2.buyerScoreId ? "reject_v2_agent_buyer" : "reject_v2"}`,
1486
1578
  typeArguments: [USDC_TYPE],
@@ -1489,13 +1581,13 @@ function buildRejectJobTx(jobId, v2) {
1489
1581
  tx.object(v2.sellerScoreId),
1490
1582
  tx.object(v2.buyerScoreId),
1491
1583
  tx.object(v2.registryId),
1492
- feeConfigArg(tx),
1584
+ feeConfigArg2(tx),
1493
1585
  tx.object(CLOCK_ID2)
1494
1586
  ] : [
1495
1587
  tx.object(jobId),
1496
1588
  tx.object(v2.sellerScoreId),
1497
1589
  tx.object(v2.registryId),
1498
- feeConfigArg(tx),
1590
+ feeConfigArg2(tx),
1499
1591
  tx.object(CLOCK_ID2)
1500
1592
  ]
1501
1593
  });
@@ -1503,13 +1595,27 @@ function buildRejectJobTx(jobId, v2) {
1503
1595
  }
1504
1596
  function buildRefundJobTx(jobId, v2) {
1505
1597
  const tx = new Transaction();
1598
+ if (v2.batchId) {
1599
+ tx.moveCall({
1600
+ target: `${A2A_ESCROW_LATEST_PACKAGE_ID}::batch::batch_refund`,
1601
+ typeArguments: [USDC_TYPE],
1602
+ arguments: [
1603
+ tx.object(v2.batchId),
1604
+ tx.object(jobId),
1605
+ tx.object(v2.sellerScoreId),
1606
+ feeConfigArg2(tx),
1607
+ tx.object(CLOCK_ID2)
1608
+ ]
1609
+ });
1610
+ return tx;
1611
+ }
1506
1612
  tx.moveCall({
1507
1613
  target: `${A2A_ESCROW_LATEST_PACKAGE_ID}::reputation::refund_v2`,
1508
1614
  typeArguments: [USDC_TYPE],
1509
1615
  arguments: [
1510
1616
  tx.object(jobId),
1511
1617
  tx.object(v2.sellerScoreId),
1512
- feeConfigArg(tx),
1618
+ feeConfigArg2(tx),
1513
1619
  tx.object(CLOCK_ID2)
1514
1620
  ]
1515
1621
  });
@@ -1523,7 +1629,7 @@ function buildDeliverJobTx(jobId, deliveryHash) {
1523
1629
  arguments: [
1524
1630
  tx.object(jobId),
1525
1631
  tx.pure.vector("u8", hexToBytes(deliveryHash)),
1526
- feeConfigArg(tx),
1632
+ feeConfigArg2(tx),
1527
1633
  tx.object(CLOCK_ID2)
1528
1634
  ]
1529
1635
  });
@@ -1531,13 +1637,27 @@ function buildDeliverJobTx(jobId, deliveryHash) {
1531
1637
  }
1532
1638
  function buildReleaseJobTx(jobId, v2) {
1533
1639
  const tx = new Transaction();
1640
+ if (v2.batchId) {
1641
+ tx.moveCall({
1642
+ target: `${A2A_ESCROW_LATEST_PACKAGE_ID}::batch::batch_release`,
1643
+ typeArguments: [USDC_TYPE],
1644
+ arguments: [
1645
+ tx.object(v2.batchId),
1646
+ tx.object(jobId),
1647
+ tx.object(v2.sellerScoreId),
1648
+ feeConfigArg2(tx),
1649
+ tx.object(CLOCK_ID2)
1650
+ ]
1651
+ });
1652
+ return tx;
1653
+ }
1534
1654
  tx.moveCall({
1535
1655
  target: `${A2A_ESCROW_LATEST_PACKAGE_ID}::reputation::release_v2`,
1536
1656
  typeArguments: [USDC_TYPE],
1537
1657
  arguments: [
1538
1658
  tx.object(jobId),
1539
1659
  tx.object(v2.sellerScoreId),
1540
- feeConfigArg(tx),
1660
+ feeConfigArg2(tx),
1541
1661
  tx.object(CLOCK_ID2)
1542
1662
  ]
1543
1663
  });
@@ -1580,6 +1700,26 @@ async function getJob(client, jobId) {
1580
1700
  createdAtMs: Number(json.created_at_ms)
1581
1701
  };
1582
1702
  }
1703
+ var BATCH_ORIGIN_KEY_TYPE_SUFFIX = "::escrow::BatchOriginKey";
1704
+ async function getJobBatchOrigin(client, jobId) {
1705
+ let cursor = null;
1706
+ do {
1707
+ const page = await client.core.listDynamicFields({
1708
+ parentId: jobId,
1709
+ cursor: cursor ?? void 0
1710
+ });
1711
+ for (const field of page.dynamicFields) {
1712
+ if (!field.name.type.endsWith(BATCH_ORIGIN_KEY_TYPE_SUFFIX)) continue;
1713
+ const resp = await client.core.getDynamicField({
1714
+ parentId: jobId,
1715
+ name: field.name
1716
+ });
1717
+ return bcs.Address.parse(resp.dynamicField.value.bcs);
1718
+ }
1719
+ cursor = page.hasNextPage ? page.cursor : null;
1720
+ } while (cursor);
1721
+ return null;
1722
+ }
1583
1723
  function jobActionsFor(job, caller, nowMs = Date.now()) {
1584
1724
  const me = validateAddress(caller);
1585
1725
  const isBuyer = me === job.buyer;
@@ -1769,6 +1909,213 @@ function preflightClaimOpening(score, opening) {
1769
1909
  return { valid: true };
1770
1910
  }
1771
1911
 
1912
+ // src/wallet/batch.ts
1913
+ init_errors();
1914
+ init_token_registry();
1915
+ init_coinSelection();
1916
+ var MODULE3 = "batch";
1917
+ var CLOCK_ID3 = "0x6";
1918
+ var MAX_BATCH_SLOTS_DEFAULT = 250;
1919
+ var BATCH_OPENING_TYPE_MARKER = "::batch::BatchOpening<";
1920
+ var BATCH_ABORT_CODES = {
1921
+ /** At your wave cap RIGHT NOW — min(buyer ceiling, level cap) active
1922
+ * holds. Settle one to reclaim; never "lifetime". */
1923
+ EMaxClaimsReached: 12,
1924
+ /** Pre-S.1202 wave — lifetime rows never free, so new claims refuse.
1925
+ * The wave's cancel / expired-refund still work. */
1926
+ ELegacyBatch: 22,
1927
+ /** The Job passed to a batch settle door has no BatchOriginKey. */
1928
+ ENotBatchJob: 23,
1929
+ /** The attached wave is not this Job's origin batch. */
1930
+ EWrongBatch: 24,
1931
+ EWrongSellerScore: 25,
1932
+ EWrongBuyerScore: 26,
1933
+ /** Registered Agent-ID buyer must reject via the agent-buyer variant. */
1934
+ EBuyerIsAgent: 27,
1935
+ EBuyerNotAgent: 28
1936
+ };
1937
+ var REPUTATION_ABORT_CODES = {
1938
+ /** A bare v2 door (release_v2 / reject_v2 variants / refund_v2) on a
1939
+ * batch-origin Job — the client must attach the batch and settle via
1940
+ * the batch doors. */
1941
+ EUseBatchSettle: 9
1942
+ };
1943
+ var ESCROW_ABORT_CODES = {
1944
+ /** Stale package flow (FeeConfig VERSION moved) — update @t2000/*. */
1945
+ EWrongVersion: 13,
1946
+ /** Second wave-hold free on one Job (unreachable via the doors). */
1947
+ EBatchHoldReleased: 23
1948
+ };
1949
+ function preflightCreateBatchOpening(terms) {
1950
+ const single = preflightCreateOpening(terms);
1951
+ if (!single.valid) return single;
1952
+ if (!Number.isInteger(terms.slots) || terms.slots < 1 || terms.slots > MAX_BATCH_SLOTS_DEFAULT) {
1953
+ return {
1954
+ valid: false,
1955
+ code: "INVALID_INPUT",
1956
+ error: `slots must be an integer 1\u2013${MAX_BATCH_SLOTS_DEFAULT} (the live max is AdminCap-tunable on-chain).`
1957
+ };
1958
+ }
1959
+ const maxClaims = terms.maxClaimsPerAgent ?? 1;
1960
+ if (!Number.isInteger(maxClaims) || maxClaims < 1 || maxClaims > terms.slots) {
1961
+ return {
1962
+ valid: false,
1963
+ code: "INVALID_INPUT",
1964
+ error: "maxClaimsPerAgent must be an integer \u22651 and \u2264 slots."
1965
+ };
1966
+ }
1967
+ return { valid: true };
1968
+ }
1969
+ async function buildCreateBatchOpeningTx({
1970
+ client,
1971
+ buyer,
1972
+ terms
1973
+ }) {
1974
+ const pf = preflightCreateBatchOpening(terms);
1975
+ if (!pf.valid) throw new T2000Error(pf.code ?? "INVALID_INPUT", pf.error ?? "Invalid batch.");
1976
+ const perSlotRaw = BigInt(Math.floor(terms.amountUsdc * 10 ** USDC_DECIMALS));
1977
+ const totalRaw = perSlotRaw * BigInt(terms.slots);
1978
+ const tx = new Transaction();
1979
+ const { coin } = await selectAndSplitCoin(
1980
+ tx,
1981
+ client,
1982
+ validateAddress(buyer),
1983
+ USDC_TYPE,
1984
+ totalRaw,
1985
+ { allowSwapAll: false }
1986
+ );
1987
+ tx.moveCall({
1988
+ target: `${A2A_ESCROW_OPENING_PACKAGE_ID}::${MODULE3}::create_batch_open`,
1989
+ typeArguments: [USDC_TYPE],
1990
+ arguments: [
1991
+ coin,
1992
+ tx.pure.u64(terms.slots),
1993
+ tx.pure.vector("u8", hexToBytes2(terms.specHash)),
1994
+ tx.pure.u64(terms.openUntilMs),
1995
+ tx.pure.u64(terms.slaMs),
1996
+ tx.pure.u64(terms.reviewWindowMs),
1997
+ tx.pure.u64(terms.rejectSplitBps),
1998
+ tx.pure.u8(terms.claimPolicy ?? OPENING_CLAIM_POLICY_ANY_ACTIVE),
1999
+ tx.pure.u8(terms.minSellerLevel ?? 0),
2000
+ tx.pure.u8(terms.maxClaimsPerAgent ?? 1),
2001
+ feeConfigArg(tx),
2002
+ tx.object(CLOCK_ID3)
2003
+ ]
2004
+ });
2005
+ return tx;
2006
+ }
2007
+ function buildBatchClaimTx({
2008
+ batchId,
2009
+ registryId,
2010
+ scoreId
2011
+ }) {
2012
+ if (!scoreId) {
2013
+ throw new T2000Error(
2014
+ "INVALID_INPUT",
2015
+ "Claiming needs the claimer's own AgentScore id (derive with deriveAgentScoreId; create it first with buildCreateEmptyScoreTx when missing)."
2016
+ );
2017
+ }
2018
+ const tx = new Transaction();
2019
+ tx.moveCall({
2020
+ target: `${A2A_ESCROW_OPENING_PACKAGE_ID}::${MODULE3}::batch_claim`,
2021
+ typeArguments: [USDC_TYPE],
2022
+ arguments: [
2023
+ tx.object(batchId),
2024
+ tx.object(registryId),
2025
+ tx.object(scoreId),
2026
+ feeConfigArg(tx),
2027
+ tx.object(CLOCK_ID3)
2028
+ ]
2029
+ });
2030
+ return tx;
2031
+ }
2032
+ function batchCall(batchId, fn) {
2033
+ const tx = new Transaction();
2034
+ tx.moveCall({
2035
+ target: `${A2A_ESCROW_OPENING_PACKAGE_ID}::${MODULE3}::${fn}`,
2036
+ typeArguments: [USDC_TYPE],
2037
+ arguments: [tx.object(batchId), feeConfigArg(tx), tx.object(CLOCK_ID3)]
2038
+ });
2039
+ return tx;
2040
+ }
2041
+ function buildCancelBatchOpeningTx(batchId) {
2042
+ return batchCall(batchId, "cancel_batch_open");
2043
+ }
2044
+ function buildRefundBatchExpiredTx(batchId) {
2045
+ return batchCall(batchId, "refund_batch_expired");
2046
+ }
2047
+ function bytesToHex2(bytes) {
2048
+ return `0x${Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("")}`;
2049
+ }
2050
+ function hexToBytes2(hex) {
2051
+ const clean = hex.replace(/^0x/, "");
2052
+ const bytes = [];
2053
+ for (let i = 0; i < clean.length; i += 2) {
2054
+ bytes.push(Number.parseInt(clean.slice(i, i + 2), 16));
2055
+ }
2056
+ return bytes;
2057
+ }
2058
+ async function getBatchOpening(client, batchId) {
2059
+ const resp = await client.core.getObject({ objectId: batchId, include: { json: true } }).catch(() => null);
2060
+ const objType = resp?.object?.type ?? "";
2061
+ const json = resp?.object?.json;
2062
+ if (!json || !objType.includes(BATCH_OPENING_TYPE_MARKER)) {
2063
+ return null;
2064
+ }
2065
+ const table = json.claims_by_agent;
2066
+ return {
2067
+ id: batchId,
2068
+ buyer: String(json.buyer),
2069
+ amountUsdc: Number(json.amount) / 10 ** USDC_DECIMALS,
2070
+ slotsTotal: Number(json.slots_total),
2071
+ slotsRemaining: Number(json.slots_remaining),
2072
+ feeBps: Number(json.fee_bps ?? 0),
2073
+ specHash: bytesToHex2(json.spec_hash ?? []),
2074
+ openUntilMs: Number(json.open_until_ms),
2075
+ slaMs: Number(json.sla_ms),
2076
+ reviewWindowMs: Number(json.review_window_ms),
2077
+ rejectSplitBps: Number(json.reject_split_bps),
2078
+ claimPolicy: Number(json.claim_policy ?? 0),
2079
+ minSellerLevel: Number(json.min_seller_level ?? 0),
2080
+ maxClaimsPerAgent: Number(json.max_claims_per_agent ?? 1),
2081
+ claimsTableId: table?.id ? String(table.id) : null,
2082
+ createdAtMs: Number(json.created_at_ms ?? 0)
2083
+ };
2084
+ }
2085
+ async function getBatchClaimsByAgent(client, batch, agent) {
2086
+ if (!batch.claimsTableId) return 0;
2087
+ try {
2088
+ const fieldId = deriveDynamicFieldID(
2089
+ batch.claimsTableId,
2090
+ "address",
2091
+ bcs.Address.serialize(validateAddress(agent)).toBytes()
2092
+ );
2093
+ const resp = await client.core.getObject({
2094
+ objectId: fieldId,
2095
+ include: { json: true }
2096
+ });
2097
+ const json = resp?.object?.json;
2098
+ return Number(json?.value ?? 0);
2099
+ } catch {
2100
+ return 0;
2101
+ }
2102
+ }
2103
+ function preflightBatchClaim(score, batch, myClaims) {
2104
+ if (batch.slotsRemaining <= 0) {
2105
+ return {
2106
+ valid: false,
2107
+ error: "No slots left on this batch \u2014 every slot is claimed. Find open waves on the board."
2108
+ };
2109
+ }
2110
+ if (myClaims >= batch.maxClaimsPerAgent) {
2111
+ return {
2112
+ valid: false,
2113
+ error: `This wave allows ${batch.maxClaimsPerAgent} slot${batch.maxClaimsPerAgent === 1 ? "" : "s"} per agent and this wallet already holds ${myClaims}. Deliver what you claimed; other waves on the board are open.`
2114
+ };
2115
+ }
2116
+ return preflightClaimOpening(score, batch);
2117
+ }
2118
+
1772
2119
  // src/commerce.ts
1773
2120
  var DEFAULT_COMMERCE_API_BASE = "https://api.t2000.ai/v1";
1774
2121
  async function commerceFetchJson(url, init) {
@@ -1859,4 +2206,4 @@ async function getJobSpec(base, hash) {
1859
2206
  // src/browser.ts
1860
2207
  init_token_registry();
1861
2208
 
1862
- export { A2A_ESCROW_FEE_CONFIG_ID, A2A_ESCROW_PACKAGE_ID, CLOCK_ID, COIN_REGISTRY, DEFAULT_ACTIVITY_REPORT_URL, DEFAULT_COMMERCE_API_BASE, DEFAULT_NETWORK, ETH_TYPE, GAS_RESERVE_MIN, IKA_TYPE, JOB_STATES, KNOWN_TARGETS, KeypairSigner, LABEL_PATTERNS, LEVEL4_MAX_NO_DELIVERY, LEVEL4_MIN_REVIEWS, LOFI_TYPE, MANIFEST_TYPE, MAX_DELIVER_HORIZON_MS, MAX_JOB_USDC, MAX_REVIEW_WINDOW_MS, MIN_JOB_USDC, MIST_PER_SUI, NAVX_TYPE, NO_DELIVERY_REGRESSION_FLOOR, OPENING_CLAIM_POLICIES, OPENING_CLAIM_POLICY_ANY_ACTIVE, OPENING_CLAIM_POLICY_PROVEN, OPENING_CLAIM_POLICY_PROVEN_4STAR, OVERLAY_FEE_RATE, PREFLIGHT_MAX_AMOUNT, PREFLIGHT_OK, PROVEN_MIN_AVG_STARS_X10, PROVEN_MIN_REVIEWS, REVIEW_MAX_STARS, REVIEW_MIN_STARS, SELLER_LEVEL_ACTIVE_CAPS, STABLE_ASSETS, SUI_DECIMALS, SUI_TYPE, SUPPORTED_ASSETS, T2000Error, T2000_OVERLAY_FEE_WALLET, TOKEN_MAP, USDC_DECIMALS, USDC_TYPE, USDE_TYPE, USDSUI_TYPE, USDT_TYPE, WAL_TYPE, WBTC_TYPE, ZkLoginSigner, activeCapForLevel, buildCreateJobTx, buildDeliverJobTx, buildRefundJobTx, buildRejectJobTx, buildReleaseJobTx, buildSendTx, buildSwapTx, checkPositiveAmount, checkSuiAddress, claimPolicyLabel, claimPolicyRequirement, classifyAction, classifyLabel, classifySendAsset, classifyTransaction, deriveAgentScoreId, effectiveSellerLevel, executeTx, extractAllUserLegs, extractTransferDetails, extractTxCommands, extractTxSender, fallbackLabel, fetchService, findSwapRoute, formatAssetAmount, formatSui, formatUsd, fromBase642 as fromBase64, getAgentScore, getDecimals, getDecimalsForCoinType, getJob, getJobSpec, invalidSendAssetMessage, jobActionsFor, listServices, mapMoveAbortCode, mapWalletError, meetsClaimPolicy, meetsMinSellerLevel, mistToSui, parseSuiRpcTx, payWithX402, preflightClaimOpening, preflightCreateJob, preflightFail, preflightPay, preflightSend, preflightSwap, putJobSpec, rawToStable, rawToUsdc, refineLendingLabel, reportX402Activity, resolveSymbol, resolveTokenType, sellerLevel, sellerLevelLabel, stableToRaw, suiToMist, toBase64, truncateAddress, usdcToRaw, validateAddress, verifyJobForSeller };
2209
+ export { A2A_ESCROW_FEE_CONFIG_ID, A2A_ESCROW_PACKAGE_ID, BATCH_ABORT_CODES, BATCH_OPENING_TYPE_MARKER, BATCH_ORIGIN_KEY_TYPE_SUFFIX, CLOCK_ID, COIN_REGISTRY, DEFAULT_ACTIVITY_REPORT_URL, DEFAULT_COMMERCE_API_BASE, DEFAULT_NETWORK, ESCROW_ABORT_CODES, ETH_TYPE, GAS_RESERVE_MIN, IKA_TYPE, JOB_STATES, KNOWN_TARGETS, KeypairSigner, LABEL_PATTERNS, LEVEL4_MAX_NO_DELIVERY, LEVEL4_MIN_REVIEWS, LOFI_TYPE, MANIFEST_TYPE, MAX_BATCH_SLOTS_DEFAULT, MAX_DELIVER_HORIZON_MS, MAX_JOB_USDC, MAX_REVIEW_WINDOW_MS, MIN_JOB_USDC, MIST_PER_SUI, NAVX_TYPE, NO_DELIVERY_REGRESSION_FLOOR, OPENING_CLAIM_POLICIES, OPENING_CLAIM_POLICY_ANY_ACTIVE, OPENING_CLAIM_POLICY_PROVEN, OPENING_CLAIM_POLICY_PROVEN_4STAR, OVERLAY_FEE_RATE, PREFLIGHT_MAX_AMOUNT, PREFLIGHT_OK, PROVEN_MIN_AVG_STARS_X10, PROVEN_MIN_REVIEWS, REPUTATION_ABORT_CODES, REVIEW_MAX_STARS, REVIEW_MIN_STARS, SELLER_LEVEL_ACTIVE_CAPS, STABLE_ASSETS, SUI_DECIMALS, SUI_TYPE, SUPPORTED_ASSETS, T2000Error, T2000_OVERLAY_FEE_WALLET, TOKEN_MAP, USDC_DECIMALS, USDC_TYPE, USDE_TYPE, USDSUI_TYPE, USDT_TYPE, WAL_TYPE, WBTC_TYPE, ZkLoginSigner, activeCapForLevel, buildBatchClaimTx, buildCancelBatchOpeningTx, buildCreateBatchOpeningTx, buildCreateJobTx, buildDeliverJobTx, buildRefundBatchExpiredTx, buildRefundJobTx, buildRejectJobTx, buildReleaseJobTx, buildSendTx, buildSwapTx, checkPositiveAmount, checkSuiAddress, claimPolicyLabel, claimPolicyRequirement, classifyAction, classifyLabel, classifySendAsset, classifyTransaction, deriveAgentScoreId, effectiveSellerLevel, executeTx, extractAllUserLegs, extractTransferDetails, extractTxCommands, extractTxSender, fallbackLabel, fetchService, findSwapRoute, formatAssetAmount, formatSui, formatUsd, fromBase642 as fromBase64, getAgentScore, getBatchClaimsByAgent, getBatchOpening, getDecimals, getDecimalsForCoinType, getJob, getJobBatchOrigin, getJobSpec, invalidSendAssetMessage, jobActionsFor, listServices, mapMoveAbortCode, mapWalletError, meetsClaimPolicy, meetsMinSellerLevel, mistToSui, parseSuiRpcTx, payWithX402, preflightBatchClaim, preflightClaimOpening, preflightCreateBatchOpening, preflightCreateJob, preflightFail, preflightPay, preflightSend, preflightSwap, putJobSpec, rawToStable, rawToUsdc, refineLendingLabel, reportX402Activity, resolveSymbol, resolveTokenType, sellerLevel, sellerLevelLabel, stableToRaw, suiToMist, toBase64, truncateAddress, usdcToRaw, validateAddress, verifyJobForSeller };