@t2000/sdk 10.38.2 → 10.39.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 +264 -8
- package/dist/browser.d.cts +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +255 -9
- package/dist/{commerce-D14qzqAV.d.cts → commerce-C_1GwUoT.d.cts} +95 -5
- package/dist/{commerce-D14qzqAV.d.ts → commerce-C_1GwUoT.d.ts} +95 -5
- package/dist/index.cjs +215 -1
- package/dist/index.d.cts +43 -4
- package/dist/index.d.ts +43 -4
- package/dist/index.js +201 -2
- package/package.json +2 -2
package/dist/browser.js
CHANGED
|
@@ -1349,19 +1349,87 @@ init_coinSelection();
|
|
|
1349
1349
|
init_errors();
|
|
1350
1350
|
init_token_registry();
|
|
1351
1351
|
init_coinSelection();
|
|
1352
|
-
var MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID = "
|
|
1352
|
+
var MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID = "0x2a928916c859a159e6d6f4841073a31397d01336c1ea689ce74344e456463c8d";
|
|
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
|
+
var SHA256_HEX_RE = /^(0x)?[0-9a-fA-F]{64}$/;
|
|
1357
1360
|
var OPENING_CLAIM_POLICY_ANY_ACTIVE = 0;
|
|
1358
1361
|
var OPENING_CLAIM_POLICY_PROVEN = 1;
|
|
1359
1362
|
var OPENING_CLAIM_POLICY_PROVEN_4STAR = 2;
|
|
1363
|
+
var MAX_OPEN_WINDOW_MS = 2592e6;
|
|
1364
|
+
function feeConfigArg(tx) {
|
|
1365
|
+
return tx.sharedObjectRef({
|
|
1366
|
+
objectId: A2A_ESCROW_FEE_CONFIG_ID,
|
|
1367
|
+
initialSharedVersion: A2A_ESCROW_FEE_CONFIG_VERSION,
|
|
1368
|
+
mutable: false
|
|
1369
|
+
});
|
|
1370
|
+
}
|
|
1360
1371
|
var OPENING_CLAIM_POLICIES = [
|
|
1361
1372
|
OPENING_CLAIM_POLICY_ANY_ACTIVE,
|
|
1362
1373
|
OPENING_CLAIM_POLICY_PROVEN,
|
|
1363
1374
|
OPENING_CLAIM_POLICY_PROVEN_4STAR
|
|
1364
1375
|
];
|
|
1376
|
+
var OPEN_REJECT_SPLIT_BPS = 1e4;
|
|
1377
|
+
function preflightCreateOpening(terms) {
|
|
1378
|
+
if (!Number.isFinite(terms.amountUsdc) || terms.amountUsdc <= 0) {
|
|
1379
|
+
return { valid: false, code: "INVALID_AMOUNT", error: "Budget must be positive." };
|
|
1380
|
+
}
|
|
1381
|
+
if (terms.amountUsdc < MIN_JOB_USDC) {
|
|
1382
|
+
return {
|
|
1383
|
+
valid: false,
|
|
1384
|
+
code: "INVALID_AMOUNT",
|
|
1385
|
+
error: `Open jobs start at ${MIN_JOB_USDC} USDC (contract-enforced minimum). Got ${terms.amountUsdc}.`
|
|
1386
|
+
};
|
|
1387
|
+
}
|
|
1388
|
+
if (terms.amountUsdc > MAX_JOB_USDC) {
|
|
1389
|
+
return {
|
|
1390
|
+
valid: false,
|
|
1391
|
+
code: "INVALID_AMOUNT",
|
|
1392
|
+
error: `Open jobs cap at ${MAX_JOB_USDC} USDC (v1).`
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1395
|
+
if (!SHA256_HEX_RE.test(terms.specHash)) {
|
|
1396
|
+
return { valid: false, code: "INVALID_INPUT", error: "specHash must be a sha256 hex string." };
|
|
1397
|
+
}
|
|
1398
|
+
const now = Date.now();
|
|
1399
|
+
if (terms.openUntilMs <= now) {
|
|
1400
|
+
return { valid: false, code: "INVALID_INPUT", error: "openUntil must be in the future." };
|
|
1401
|
+
}
|
|
1402
|
+
if (terms.openUntilMs > now + MAX_OPEN_WINDOW_MS) {
|
|
1403
|
+
return { valid: false, code: "INVALID_INPUT", error: "Openings can stay claimable at most 30 days." };
|
|
1404
|
+
}
|
|
1405
|
+
if (terms.slaMs <= 0) {
|
|
1406
|
+
return { valid: false, code: "INVALID_INPUT", error: "Delivery window must be positive." };
|
|
1407
|
+
}
|
|
1408
|
+
if (terms.rejectSplitBps !== OPEN_REJECT_SPLIT_BPS) {
|
|
1409
|
+
return {
|
|
1410
|
+
valid: false,
|
|
1411
|
+
code: "INVALID_INPUT",
|
|
1412
|
+
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."
|
|
1413
|
+
};
|
|
1414
|
+
}
|
|
1415
|
+
const policy = terms.claimPolicy ?? OPENING_CLAIM_POLICY_ANY_ACTIVE;
|
|
1416
|
+
if (!OPENING_CLAIM_POLICIES.includes(policy)) {
|
|
1417
|
+
return {
|
|
1418
|
+
valid: false,
|
|
1419
|
+
code: "INVALID_INPUT",
|
|
1420
|
+
error: "claimPolicy must be 0 (Anyone), 1 (Proven) or 2 (Proven \xB7 4\u2605+) \u2014 anything else aborts on-chain."
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
const minLevel = terms.minSellerLevel ?? 0;
|
|
1424
|
+
if (!Number.isInteger(minLevel) || minLevel < 0 || minLevel > 4) {
|
|
1425
|
+
return {
|
|
1426
|
+
valid: false,
|
|
1427
|
+
code: "INVALID_INPUT",
|
|
1428
|
+
error: "minSellerLevel must be 0 (no floor) or 1\u20134 (Level 1\u20134) \u2014 anything else aborts on-chain (S.1192)."
|
|
1429
|
+
};
|
|
1430
|
+
}
|
|
1431
|
+
return { valid: true };
|
|
1432
|
+
}
|
|
1365
1433
|
|
|
1366
1434
|
// src/wallet/job.ts
|
|
1367
1435
|
var MAINNET_A2A_ESCROW_PACKAGE_ID = "0x358a819c1c016e2cc84ef5fbea81cba90c31f7f8a62bf45cb5e5276acf198bdd";
|
|
@@ -1372,7 +1440,7 @@ var A2A_ESCROW_FEE_CONFIG_VERSION = Number(
|
|
|
1372
1440
|
);
|
|
1373
1441
|
var CLOCK_ID2 = "0x6";
|
|
1374
1442
|
var MODULE = "escrow";
|
|
1375
|
-
function
|
|
1443
|
+
function feeConfigArg2(tx) {
|
|
1376
1444
|
return tx.sharedObjectRef({
|
|
1377
1445
|
objectId: A2A_ESCROW_FEE_CONFIG_ID,
|
|
1378
1446
|
initialSharedVersion: A2A_ESCROW_FEE_CONFIG_VERSION,
|
|
@@ -1473,7 +1541,7 @@ async function buildCreateJobTx({
|
|
|
1473
1541
|
tx.pure.u64(terms.deliverByMs),
|
|
1474
1542
|
tx.pure.u64(terms.reviewWindowMs),
|
|
1475
1543
|
tx.pure.u64(terms.rejectSplitBps),
|
|
1476
|
-
|
|
1544
|
+
feeConfigArg2(tx),
|
|
1477
1545
|
tx.object(CLOCK_ID2)
|
|
1478
1546
|
]
|
|
1479
1547
|
});
|
|
@@ -1489,13 +1557,13 @@ function buildRejectJobTx(jobId, v2) {
|
|
|
1489
1557
|
tx.object(v2.sellerScoreId),
|
|
1490
1558
|
tx.object(v2.buyerScoreId),
|
|
1491
1559
|
tx.object(v2.registryId),
|
|
1492
|
-
|
|
1560
|
+
feeConfigArg2(tx),
|
|
1493
1561
|
tx.object(CLOCK_ID2)
|
|
1494
1562
|
] : [
|
|
1495
1563
|
tx.object(jobId),
|
|
1496
1564
|
tx.object(v2.sellerScoreId),
|
|
1497
1565
|
tx.object(v2.registryId),
|
|
1498
|
-
|
|
1566
|
+
feeConfigArg2(tx),
|
|
1499
1567
|
tx.object(CLOCK_ID2)
|
|
1500
1568
|
]
|
|
1501
1569
|
});
|
|
@@ -1509,7 +1577,7 @@ function buildRefundJobTx(jobId, v2) {
|
|
|
1509
1577
|
arguments: [
|
|
1510
1578
|
tx.object(jobId),
|
|
1511
1579
|
tx.object(v2.sellerScoreId),
|
|
1512
|
-
|
|
1580
|
+
feeConfigArg2(tx),
|
|
1513
1581
|
tx.object(CLOCK_ID2)
|
|
1514
1582
|
]
|
|
1515
1583
|
});
|
|
@@ -1523,7 +1591,7 @@ function buildDeliverJobTx(jobId, deliveryHash) {
|
|
|
1523
1591
|
arguments: [
|
|
1524
1592
|
tx.object(jobId),
|
|
1525
1593
|
tx.pure.vector("u8", hexToBytes(deliveryHash)),
|
|
1526
|
-
|
|
1594
|
+
feeConfigArg2(tx),
|
|
1527
1595
|
tx.object(CLOCK_ID2)
|
|
1528
1596
|
]
|
|
1529
1597
|
});
|
|
@@ -1537,7 +1605,7 @@ function buildReleaseJobTx(jobId, v2) {
|
|
|
1537
1605
|
arguments: [
|
|
1538
1606
|
tx.object(jobId),
|
|
1539
1607
|
tx.object(v2.sellerScoreId),
|
|
1540
|
-
|
|
1608
|
+
feeConfigArg2(tx),
|
|
1541
1609
|
tx.object(CLOCK_ID2)
|
|
1542
1610
|
]
|
|
1543
1611
|
});
|
|
@@ -1769,6 +1837,184 @@ function preflightClaimOpening(score, opening) {
|
|
|
1769
1837
|
return { valid: true };
|
|
1770
1838
|
}
|
|
1771
1839
|
|
|
1840
|
+
// src/wallet/batch.ts
|
|
1841
|
+
init_errors();
|
|
1842
|
+
init_token_registry();
|
|
1843
|
+
init_coinSelection();
|
|
1844
|
+
var MODULE3 = "batch";
|
|
1845
|
+
var CLOCK_ID3 = "0x6";
|
|
1846
|
+
var MAX_BATCH_SLOTS_DEFAULT = 250;
|
|
1847
|
+
var BATCH_OPENING_TYPE_MARKER = "::batch::BatchOpening<";
|
|
1848
|
+
function preflightCreateBatchOpening(terms) {
|
|
1849
|
+
const single = preflightCreateOpening(terms);
|
|
1850
|
+
if (!single.valid) return single;
|
|
1851
|
+
if (!Number.isInteger(terms.slots) || terms.slots < 1 || terms.slots > MAX_BATCH_SLOTS_DEFAULT) {
|
|
1852
|
+
return {
|
|
1853
|
+
valid: false,
|
|
1854
|
+
code: "INVALID_INPUT",
|
|
1855
|
+
error: `slots must be an integer 1\u2013${MAX_BATCH_SLOTS_DEFAULT} (the live max is AdminCap-tunable on-chain).`
|
|
1856
|
+
};
|
|
1857
|
+
}
|
|
1858
|
+
const maxClaims = terms.maxClaimsPerAgent ?? 1;
|
|
1859
|
+
if (!Number.isInteger(maxClaims) || maxClaims < 1 || maxClaims > terms.slots) {
|
|
1860
|
+
return {
|
|
1861
|
+
valid: false,
|
|
1862
|
+
code: "INVALID_INPUT",
|
|
1863
|
+
error: "maxClaimsPerAgent must be an integer \u22651 and \u2264 slots."
|
|
1864
|
+
};
|
|
1865
|
+
}
|
|
1866
|
+
return { valid: true };
|
|
1867
|
+
}
|
|
1868
|
+
async function buildCreateBatchOpeningTx({
|
|
1869
|
+
client,
|
|
1870
|
+
buyer,
|
|
1871
|
+
terms
|
|
1872
|
+
}) {
|
|
1873
|
+
const pf = preflightCreateBatchOpening(terms);
|
|
1874
|
+
if (!pf.valid) throw new T2000Error(pf.code ?? "INVALID_INPUT", pf.error ?? "Invalid batch.");
|
|
1875
|
+
const perSlotRaw = BigInt(Math.floor(terms.amountUsdc * 10 ** USDC_DECIMALS));
|
|
1876
|
+
const totalRaw = perSlotRaw * BigInt(terms.slots);
|
|
1877
|
+
const tx = new Transaction();
|
|
1878
|
+
const { coin } = await selectAndSplitCoin(
|
|
1879
|
+
tx,
|
|
1880
|
+
client,
|
|
1881
|
+
validateAddress(buyer),
|
|
1882
|
+
USDC_TYPE,
|
|
1883
|
+
totalRaw,
|
|
1884
|
+
{ allowSwapAll: false }
|
|
1885
|
+
);
|
|
1886
|
+
tx.moveCall({
|
|
1887
|
+
target: `${A2A_ESCROW_OPENING_PACKAGE_ID}::${MODULE3}::create_batch_open`,
|
|
1888
|
+
typeArguments: [USDC_TYPE],
|
|
1889
|
+
arguments: [
|
|
1890
|
+
coin,
|
|
1891
|
+
tx.pure.u64(terms.slots),
|
|
1892
|
+
tx.pure.vector("u8", hexToBytes2(terms.specHash)),
|
|
1893
|
+
tx.pure.u64(terms.openUntilMs),
|
|
1894
|
+
tx.pure.u64(terms.slaMs),
|
|
1895
|
+
tx.pure.u64(terms.reviewWindowMs),
|
|
1896
|
+
tx.pure.u64(terms.rejectSplitBps),
|
|
1897
|
+
tx.pure.u8(terms.claimPolicy ?? OPENING_CLAIM_POLICY_ANY_ACTIVE),
|
|
1898
|
+
tx.pure.u8(terms.minSellerLevel ?? 0),
|
|
1899
|
+
tx.pure.u8(terms.maxClaimsPerAgent ?? 1),
|
|
1900
|
+
feeConfigArg(tx),
|
|
1901
|
+
tx.object(CLOCK_ID3)
|
|
1902
|
+
]
|
|
1903
|
+
});
|
|
1904
|
+
return tx;
|
|
1905
|
+
}
|
|
1906
|
+
function buildBatchClaimTx({
|
|
1907
|
+
batchId,
|
|
1908
|
+
registryId,
|
|
1909
|
+
scoreId
|
|
1910
|
+
}) {
|
|
1911
|
+
if (!scoreId) {
|
|
1912
|
+
throw new T2000Error(
|
|
1913
|
+
"INVALID_INPUT",
|
|
1914
|
+
"Claiming needs the claimer's own AgentScore id (derive with deriveAgentScoreId; create it first with buildCreateEmptyScoreTx when missing)."
|
|
1915
|
+
);
|
|
1916
|
+
}
|
|
1917
|
+
const tx = new Transaction();
|
|
1918
|
+
tx.moveCall({
|
|
1919
|
+
target: `${A2A_ESCROW_OPENING_PACKAGE_ID}::${MODULE3}::batch_claim`,
|
|
1920
|
+
typeArguments: [USDC_TYPE],
|
|
1921
|
+
arguments: [
|
|
1922
|
+
tx.object(batchId),
|
|
1923
|
+
tx.object(registryId),
|
|
1924
|
+
tx.object(scoreId),
|
|
1925
|
+
feeConfigArg(tx),
|
|
1926
|
+
tx.object(CLOCK_ID3)
|
|
1927
|
+
]
|
|
1928
|
+
});
|
|
1929
|
+
return tx;
|
|
1930
|
+
}
|
|
1931
|
+
function batchCall(batchId, fn) {
|
|
1932
|
+
const tx = new Transaction();
|
|
1933
|
+
tx.moveCall({
|
|
1934
|
+
target: `${A2A_ESCROW_OPENING_PACKAGE_ID}::${MODULE3}::${fn}`,
|
|
1935
|
+
typeArguments: [USDC_TYPE],
|
|
1936
|
+
arguments: [tx.object(batchId), feeConfigArg(tx), tx.object(CLOCK_ID3)]
|
|
1937
|
+
});
|
|
1938
|
+
return tx;
|
|
1939
|
+
}
|
|
1940
|
+
function buildCancelBatchOpeningTx(batchId) {
|
|
1941
|
+
return batchCall(batchId, "cancel_batch_open");
|
|
1942
|
+
}
|
|
1943
|
+
function buildRefundBatchExpiredTx(batchId) {
|
|
1944
|
+
return batchCall(batchId, "refund_batch_expired");
|
|
1945
|
+
}
|
|
1946
|
+
function bytesToHex2(bytes) {
|
|
1947
|
+
return `0x${Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
1948
|
+
}
|
|
1949
|
+
function hexToBytes2(hex) {
|
|
1950
|
+
const clean = hex.replace(/^0x/, "");
|
|
1951
|
+
const bytes = [];
|
|
1952
|
+
for (let i = 0; i < clean.length; i += 2) {
|
|
1953
|
+
bytes.push(Number.parseInt(clean.slice(i, i + 2), 16));
|
|
1954
|
+
}
|
|
1955
|
+
return bytes;
|
|
1956
|
+
}
|
|
1957
|
+
async function getBatchOpening(client, batchId) {
|
|
1958
|
+
const resp = await client.core.getObject({ objectId: batchId, include: { json: true } }).catch(() => null);
|
|
1959
|
+
const objType = resp?.object?.type ?? "";
|
|
1960
|
+
const json = resp?.object?.json;
|
|
1961
|
+
if (!json || !objType.includes(BATCH_OPENING_TYPE_MARKER)) {
|
|
1962
|
+
return null;
|
|
1963
|
+
}
|
|
1964
|
+
const table = json.claims_by_agent;
|
|
1965
|
+
return {
|
|
1966
|
+
id: batchId,
|
|
1967
|
+
buyer: String(json.buyer),
|
|
1968
|
+
amountUsdc: Number(json.amount) / 10 ** USDC_DECIMALS,
|
|
1969
|
+
slotsTotal: Number(json.slots_total),
|
|
1970
|
+
slotsRemaining: Number(json.slots_remaining),
|
|
1971
|
+
feeBps: Number(json.fee_bps ?? 0),
|
|
1972
|
+
specHash: bytesToHex2(json.spec_hash ?? []),
|
|
1973
|
+
openUntilMs: Number(json.open_until_ms),
|
|
1974
|
+
slaMs: Number(json.sla_ms),
|
|
1975
|
+
reviewWindowMs: Number(json.review_window_ms),
|
|
1976
|
+
rejectSplitBps: Number(json.reject_split_bps),
|
|
1977
|
+
claimPolicy: Number(json.claim_policy ?? 0),
|
|
1978
|
+
minSellerLevel: Number(json.min_seller_level ?? 0),
|
|
1979
|
+
maxClaimsPerAgent: Number(json.max_claims_per_agent ?? 1),
|
|
1980
|
+
claimsTableId: table?.id ? String(table.id) : null,
|
|
1981
|
+
createdAtMs: Number(json.created_at_ms ?? 0)
|
|
1982
|
+
};
|
|
1983
|
+
}
|
|
1984
|
+
async function getBatchClaimsByAgent(client, batch, agent) {
|
|
1985
|
+
if (!batch.claimsTableId) return 0;
|
|
1986
|
+
try {
|
|
1987
|
+
const fieldId = deriveDynamicFieldID(
|
|
1988
|
+
batch.claimsTableId,
|
|
1989
|
+
"address",
|
|
1990
|
+
bcs.Address.serialize(validateAddress(agent)).toBytes()
|
|
1991
|
+
);
|
|
1992
|
+
const resp = await client.core.getObject({
|
|
1993
|
+
objectId: fieldId,
|
|
1994
|
+
include: { json: true }
|
|
1995
|
+
});
|
|
1996
|
+
const json = resp?.object?.json;
|
|
1997
|
+
return Number(json?.value ?? 0);
|
|
1998
|
+
} catch {
|
|
1999
|
+
return 0;
|
|
2000
|
+
}
|
|
2001
|
+
}
|
|
2002
|
+
function preflightBatchClaim(score, batch, myClaims) {
|
|
2003
|
+
if (batch.slotsRemaining <= 0) {
|
|
2004
|
+
return {
|
|
2005
|
+
valid: false,
|
|
2006
|
+
error: "No slots left on this batch \u2014 every slot is claimed. Find open waves on the board."
|
|
2007
|
+
};
|
|
2008
|
+
}
|
|
2009
|
+
if (myClaims >= batch.maxClaimsPerAgent) {
|
|
2010
|
+
return {
|
|
2011
|
+
valid: false,
|
|
2012
|
+
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.`
|
|
2013
|
+
};
|
|
2014
|
+
}
|
|
2015
|
+
return preflightClaimOpening(score, batch);
|
|
2016
|
+
}
|
|
2017
|
+
|
|
1772
2018
|
// src/commerce.ts
|
|
1773
2019
|
var DEFAULT_COMMERCE_API_BASE = "https://api.t2000.ai/v1";
|
|
1774
2020
|
async function commerceFetchJson(url, init) {
|
|
@@ -1859,4 +2105,4 @@ async function getJobSpec(base, hash) {
|
|
|
1859
2105
|
// src/browser.ts
|
|
1860
2106
|
init_token_registry();
|
|
1861
2107
|
|
|
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 };
|
|
2108
|
+
export { A2A_ESCROW_FEE_CONFIG_ID, A2A_ESCROW_PACKAGE_ID, BATCH_OPENING_TYPE_MARKER, 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_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, 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, 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 };
|
|
@@ -1641,8 +1641,10 @@ declare function verifyJobForSeller({ client, jobId, seller, minAmountUsdc, minR
|
|
|
1641
1641
|
* target the LATEST published id — the original id (types, Job verbs) is
|
|
1642
1642
|
* unchanged.
|
|
1643
1643
|
*/
|
|
1644
|
-
/** The LATEST published `a2a_escrow` package id on MAINNET (
|
|
1645
|
-
* 2026-08-
|
|
1644
|
+
/** The LATEST published `a2a_escrow` package id on MAINNET (v11 upgrade
|
|
1645
|
+
* 2026-08-25, S.1193 — batch openings, additive, NO migrate:
|
|
1646
|
+
* `batch` module + `set_max_batch_slots`;
|
|
1647
|
+
* v10 = S.1192 seller levels + active caps, VERSION 6 cutover:
|
|
1646
1648
|
* claim_v2/claim_proven_v2/create_open_v2/release_v2;
|
|
1647
1649
|
* v9 = S.1064 review on REJECTED, additive; v8 = outcome
|
|
1648
1650
|
* counters (S.1063); v7 = distinct buyers (S.1062);
|
|
@@ -1657,9 +1659,9 @@ declare function verifyJobForSeller({ client, jobId, seller, minAmountUsdc, minR
|
|
|
1657
1659
|
* upgrade + `migrate` cutover is a ONE-VALUE change here. The original id
|
|
1658
1660
|
* (`MAINNET_A2A_ESCROW_PACKAGE_ID` in job.ts) remains the anchor for type
|
|
1659
1661
|
* strings, event filters, and object-type queries — those never move. */
|
|
1660
|
-
declare const MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID = "
|
|
1662
|
+
declare const MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID = "0x2a928916c859a159e6d6f4841073a31397d01336c1ea689ce74344e456463c8d";
|
|
1661
1663
|
/** Back-compat name for the latest id (pre-S.981 consumers import this). */
|
|
1662
|
-
declare const MAINNET_A2A_ESCROW_OPENING_PACKAGE_ID = "
|
|
1664
|
+
declare const MAINNET_A2A_ESCROW_OPENING_PACKAGE_ID = "0x2a928916c859a159e6d6f4841073a31397d01336c1ea689ce74344e456463c8d";
|
|
1663
1665
|
/** Env-overridable latest id for testnet/dev (NOT a trust anchor). A fresh
|
|
1664
1666
|
* dev publish has original == latest, so `A2A_ESCROW_PACKAGE_ID` alone is
|
|
1665
1667
|
* honored as the fallback override. */
|
|
@@ -1702,6 +1704,12 @@ declare const A2A_ESCROW_PACKAGE_V8_ID = "0x1595b80bc05a03607f3908702c866ca63cf9
|
|
|
1702
1704
|
* ClaimedJobKey DF key types. A DEFINING-id anchor like V2/V3/V6/V7/V8 —
|
|
1703
1705
|
* never moves again, even when LATEST does. */
|
|
1704
1706
|
declare const A2A_ESCROW_PACKAGE_V10_ID: string;
|
|
1707
|
+
/** v11 (S.1193, upgrade 2y3g17rv… 2026-08-25) — defining id for the batch
|
|
1708
|
+
* surface: the BatchOpeningCreated/BatchSlotClaimed/BatchOpeningCancelled/
|
|
1709
|
+
* BatchOpeningRefunded events and the BatchOpening object type. A
|
|
1710
|
+
* DEFINING-id anchor like V2/V3/V6/V7/V8/V10 — never moves again, even
|
|
1711
|
+
* when LATEST does. */
|
|
1712
|
+
declare const A2A_ESCROW_PACKAGE_V11_ID: string;
|
|
1705
1713
|
/** Default claim policy: any ACTIVE registered Agent ID ($0 claim, FCFS). */
|
|
1706
1714
|
declare const OPENING_CLAIM_POLICY_ANY_ACTIVE = 0;
|
|
1707
1715
|
/** S.1054 — Proven: claimer needs ≥ PROVEN_MIN_REVIEWS on-chain reviews
|
|
@@ -1939,6 +1947,88 @@ declare function buildSubmitFirstReviewTx({ jobId, stars, boardId, }: {
|
|
|
1939
1947
|
boardId?: string;
|
|
1940
1948
|
}): Transaction;
|
|
1941
1949
|
|
|
1950
|
+
/** Mirror of the Move package default for slots per wave. The LIVE value
|
|
1951
|
+
* is an AdminCap FeeConfig DF (`config_max_batch_slots`) — the chain is
|
|
1952
|
+
* the SSOT and may be retuned between npm releases (same class as
|
|
1953
|
+
* `MAX_JOB_USDC`); this mirror feeds the preflight's English only. */
|
|
1954
|
+
declare const MAX_BATCH_SLOTS_DEFAULT = 250;
|
|
1955
|
+
/** Object-type marker for `resolveCreatedObjectId` digest walks. */
|
|
1956
|
+
declare const BATCH_OPENING_TYPE_MARKER: "::batch::BatchOpening<";
|
|
1957
|
+
interface BatchOpeningTerms extends OpeningTerms {
|
|
1958
|
+
/** Slots in the wave (1..live max; default live max 250). `amountUsdc`
|
|
1959
|
+
* is PER SLOT — total escrow = `slots × amountUsdc`. */
|
|
1960
|
+
slots: number;
|
|
1961
|
+
/** Slots one agent may claim of THIS wave (≥1; default 1). */
|
|
1962
|
+
maxClaimsPerAgent?: number;
|
|
1963
|
+
}
|
|
1964
|
+
/** Client-side preflight — the single-opening rules on the PER-SLOT terms
|
|
1965
|
+
* plus the wave bounds. */
|
|
1966
|
+
declare function preflightCreateBatchOpening(terms: BatchOpeningTerms): {
|
|
1967
|
+
valid: boolean;
|
|
1968
|
+
code?: 'INVALID_AMOUNT' | 'INVALID_INPUT';
|
|
1969
|
+
error?: string;
|
|
1970
|
+
};
|
|
1971
|
+
/** Build the wave post: split `slots × amount` USDC → `create_batch_open`. */
|
|
1972
|
+
declare function buildCreateBatchOpeningTx({ client, buyer, terms, }: {
|
|
1973
|
+
client: SuiCoreClient;
|
|
1974
|
+
buyer: string;
|
|
1975
|
+
terms: BatchOpeningTerms;
|
|
1976
|
+
}): Promise<Transaction>;
|
|
1977
|
+
/** Claim ONE slot — same score plumbing as `buildClaimOpeningTx`
|
|
1978
|
+
* (claimer's own AgentScore always; `create_empty_score` precursor when
|
|
1979
|
+
* it doesn't exist yet). Unlike singles there is no policy-based entry
|
|
1980
|
+
* split: `batch_claim` handles every policy internally. */
|
|
1981
|
+
declare function buildBatchClaimTx({ batchId, registryId, scoreId, }: {
|
|
1982
|
+
batchId: string;
|
|
1983
|
+
registryId: string;
|
|
1984
|
+
scoreId: string;
|
|
1985
|
+
}): Transaction;
|
|
1986
|
+
/** Buyer withdraws the unclaimed remainder — fee-free, any time. */
|
|
1987
|
+
declare function buildCancelBatchOpeningTx(batchId: string): Transaction;
|
|
1988
|
+
/** Permissionless remainder refund once `open_until` lapses. */
|
|
1989
|
+
declare function buildRefundBatchExpiredTx(batchId: string): Transaction;
|
|
1990
|
+
/** On-chain view of one BatchOpening. */
|
|
1991
|
+
interface BatchOpening {
|
|
1992
|
+
id: string;
|
|
1993
|
+
buyer: string;
|
|
1994
|
+
/** PER-SLOT escrow in display USDC. */
|
|
1995
|
+
amountUsdc: number;
|
|
1996
|
+
slotsTotal: number;
|
|
1997
|
+
slotsRemaining: number;
|
|
1998
|
+
feeBps: number;
|
|
1999
|
+
specHash: string;
|
|
2000
|
+
openUntilMs: number;
|
|
2001
|
+
slaMs: number;
|
|
2002
|
+
reviewWindowMs: number;
|
|
2003
|
+
rejectSplitBps: number;
|
|
2004
|
+
claimPolicy: number;
|
|
2005
|
+
minSellerLevel: number;
|
|
2006
|
+
maxClaimsPerAgent: number;
|
|
2007
|
+
/** Object id of the on-chain `claims_by_agent` Table (per-agent counts
|
|
2008
|
+
* live as its dynamic fields — see `getBatchClaimsByAgent`). */
|
|
2009
|
+
claimsTableId: string | null;
|
|
2010
|
+
createdAtMs: number;
|
|
2011
|
+
}
|
|
2012
|
+
/** Read one BatchOpening by object id (null = not a batch / gone). A
|
|
2013
|
+
* drained or cancelled batch still resolves (`slotsRemaining: 0`) — the
|
|
2014
|
+
* object persists in v1; existence is NOT the state. */
|
|
2015
|
+
declare function getBatchOpening(client: SuiCoreClient, batchId: string): Promise<BatchOpening | null>;
|
|
2016
|
+
/** Slots `agent` already claimed of this batch — best-effort read of the
|
|
2017
|
+
* on-chain Table entry (0 on miss/hiccup; Move enforces the real limit). */
|
|
2018
|
+
declare function getBatchClaimsByAgent(client: SuiCoreClient, batch: BatchOpening, agent: string): Promise<number>;
|
|
2019
|
+
/** English preflight for a batch claim — the wave gates first (slots,
|
|
2020
|
+
* per-agent limit), then the exact single-claim stack (policy → active
|
|
2021
|
+
* cap → level floor via `preflightClaimOpening`). */
|
|
2022
|
+
declare function preflightBatchClaim(score: AgentScore | null, batch: {
|
|
2023
|
+
claimPolicy: number;
|
|
2024
|
+
minSellerLevel?: number;
|
|
2025
|
+
slotsRemaining: number;
|
|
2026
|
+
maxClaimsPerAgent: number;
|
|
2027
|
+
}, myClaims: number): {
|
|
2028
|
+
valid: boolean;
|
|
2029
|
+
error?: string;
|
|
2030
|
+
};
|
|
2031
|
+
|
|
1942
2032
|
declare const DEFAULT_COMMERCE_API_BASE = "https://api.t2000.ai/v1";
|
|
1943
2033
|
/** The shape the API returns from GET /v1/services. */
|
|
1944
2034
|
interface ServiceListing {
|
|
@@ -2037,4 +2127,4 @@ declare function putJobSpec(base: string, content: string): Promise<string>;
|
|
|
2037
2127
|
* the store is untrusted; the chain hash is the authority). */
|
|
2038
2128
|
declare function getJobSpec(base: string, hash: string): Promise<string>;
|
|
2039
2129
|
|
|
2040
|
-
export {
|
|
2130
|
+
export { type PreflightResult as $, A2A_ESCROW_FEE_CONFIG_ID as A, BATCH_OPENING_TYPE_MARKER as B, CLOCK_ID as C, DEFAULT_ACTIVITY_REPORT_URL as D, ETH_TYPE as E, MIN_JOB_USDC as F, GAS_RESERVE_MIN as G, MIST_PER_SUI as H, IKA_TYPE as I, JOB_STATES as J, KNOWN_TARGETS as K, LABEL_PATTERNS as L, MANIFEST_TYPE as M, NAVX_TYPE as N, NO_DELIVERY_REGRESSION_FLOOR as O, OPENING_CLAIM_POLICIES as P, OPENING_CLAIM_POLICY_ANY_ACTIVE as Q, OPENING_CLAIM_POLICY_PROVEN as R, OPENING_CLAIM_POLICY_PROVEN_4STAR as S, OVERLAY_FEE_RATE as T, type OverlayFeeConfig as U, PREFLIGHT_MAX_AMOUNT as V, PREFLIGHT_OK as W, PROVEN_MIN_AVG_STARS_X10 as X, PROVEN_MIN_REVIEWS as Y, type PayOptions as Z, type PayResult as _, A2A_ESCROW_PACKAGE_ID as a, fallbackLabel as a$, REVIEW_MAX_STARS as a0, REVIEW_MIN_STARS as a1, SELLER_LEVEL_ACTIVE_CAPS as a2, STABLE_ASSETS as a3, SUI_DECIMALS as a4, SUI_TYPE as a5, SUPPORTED_ASSETS as a6, type SellerLevel as a7, type SendAssetClass as a8, type SendResult as a9, activeCapForLevel as aA, buildBatchClaimTx as aB, buildCancelBatchOpeningTx as aC, buildCreateBatchOpeningTx as aD, buildCreateJobTx as aE, buildDeliverJobTx as aF, buildRefundBatchExpiredTx as aG, buildRefundJobTx as aH, buildRejectJobTx as aI, buildReleaseJobTx as aJ, buildSendTx as aK, buildSwapTx as aL, checkPositiveAmount as aM, checkSuiAddress as aN, claimPolicyLabel as aO, claimPolicyRequirement as aP, classifyAction as aQ, classifyLabel as aR, classifySendAsset as aS, classifyTransaction as aT, deriveAgentScoreId as aU, effectiveSellerLevel as aV, executeTx as aW, extractAllUserLegs as aX, extractTransferDetails as aY, extractTxCommands as aZ, extractTxSender as a_, type ServiceListing as aa, type SimulationResult as ab, type StableAsset as ac, type SuiHolding as ad, type SuiRpcTxBlock as ae, type SupportedAsset as af, type SwapRouteResult as ag, T2000Error as ah, type T2000ErrorCode as ai, type T2000ErrorData as aj, T2000_OVERLAY_FEE_WALLET as ak, TOKEN_MAP as al, type TransactionLeg as am, type TransactionRecord as an, type TransactionSigner as ao, type TxDirection as ap, USDC_DECIMALS as aq, USDC_TYPE as ar, USDE_TYPE as as, USDSUI_TYPE as at, USDT_TYPE as au, WAL_TYPE as av, WBTC_TYPE as aw, type X402ActivityPayload as ax, type ZkLoginProof as ay, ZkLoginSigner as az, type ActivityReportConfig as b, A2A_SCORE_BOARD_ID as b$, fetchService as b0, findSwapRoute as b1, formatAssetAmount as b2, formatSui as b3, formatUsd as b4, getAgentScore as b5, getBatchClaimsByAgent as b6, getBatchOpening as b7, getDecimals as b8, getDecimalsForCoinType as b9, resolveTokenType as bA, sellerLevel as bB, sellerLevelLabel as bC, stableToRaw as bD, suiToMist as bE, truncateAddress as bF, usdcToRaw as bG, validateAddress as bH, verifyJobForSeller as bI, type T2000Options as bJ, type X402Probe as bK, type SerializedCetusRoute as bL, type SwapResult as bM, type SwapQuoteResult as bN, type PaymentRequest as bO, type SuiCoreClient as bP, type SponsoredCoinMergeCache as bQ, type SendableAsset as bR, A2A_ESCROW_LATEST_PACKAGE_ID as bS, A2A_ESCROW_OPENING_PACKAGE_ID as bT, A2A_ESCROW_PACKAGE_V10_ID as bU, A2A_ESCROW_PACKAGE_V11_ID as bV, A2A_ESCROW_PACKAGE_V2_ID as bW, A2A_ESCROW_PACKAGE_V3_ID as bX, A2A_ESCROW_PACKAGE_V6_ID as bY, A2A_ESCROW_PACKAGE_V7_ID as bZ, A2A_ESCROW_PACKAGE_V8_ID as b_, getJob as ba, getJobSpec as bb, invalidSendAssetMessage as bc, jobActionsFor as bd, listServices as be, mapMoveAbortCode as bf, mapWalletError as bg, meetsClaimPolicy as bh, meetsMinSellerLevel as bi, mistToSui as bj, parseSuiRpcTx as bk, payWithX402 as bl, preflightBatchClaim as bm, preflightClaimOpening as bn, preflightCreateBatchOpening as bo, preflightCreateJob as bp, preflightFail as bq, preflightPay as br, preflightSend as bs, preflightSwap as bt, putJobSpec as bu, rawToStable as bv, rawToUsdc as bw, refineLendingLabel as bx, reportX402Activity as by, resolveSymbol as bz, type AgentScore as c, type ApiRouteListing as c0, CETUS_USDC_SUI_POOL as c1, type CoinPage as c2, DEFAULT_GRPC_URL as c3, GASLESS_MIN_STABLE_AMOUNT as c4, GASLESS_STABLE_TYPES as c5, MAINNET_A2A_ESCROW_LATEST_PACKAGE_ID as c6, MAINNET_A2A_ESCROW_OPENING_PACKAGE_ID as c7, MAINNET_A2A_ESCROW_PACKAGE_ID as c8, MAINNET_A2A_SCORE_BOARD_ID as c9, getOpening as cA, getSuiClient as cB, getSuiGrpcClient as cC, isAllowedAsset as cD, isCetusRouteFresh as cE, isInRegistry as cF, normalizeAsset as cG, normalizeCoinType as cH, preflightCreateOpening as cI, probeX402 as cJ, queryHistory as cK, queryTransaction as cL, selectAndSplitCoin as cM, selectSuiCoin as cN, serializeCetusRoute as cO, simulateTransaction as cP, throwIfSimulationFailed as cQ, verifyCetusRouteCoinMatch as cR, MAX_OPEN_WINDOW_MS as ca, OPERATION_ASSETS as cb, type Opening as cc, type OpeningTerms as cd, type Operation as ce, SENDABLE_ASSETS as cf, type SelectAndSplitResult as cg, type SerializedCetusRoutePath as ch, type SerializedRouterDataV3 as ci, type ServicesRail as cj, type ServicesRow as ck, addSendToTx as cl, addSwapToTx as cm, assertAllowedAsset as cn, assertBuyerRequirements as co, buildCancelOpeningTx as cp, buildClaimOpeningTx as cq, buildCreateEmptyScoreTx as cr, buildCreateOpeningTx as cs, buildDeclineJobTx as ct, buildRefundUnclaimedTx as cu, buildSubmitFirstReviewTx as cv, buildSubmitReviewTx as cw, deserializeCetusRoute as cx, fetchAllCoins as cy, getCoinMeta as cz, type BalanceResponse as d, type BatchOpening as e, type BatchOpeningTerms as f, COIN_REGISTRY as g, type ClassifyBalanceChange as h, type ClassifyResult as i, type CoinMeta as j, DEFAULT_COMMERCE_API_BASE as k, DEFAULT_NETWORK as l, type DepositInfo as m, type ExtractedTransfer as n, type Job as o, type JobState as p, type JobTerms as q, type JobVerification as r, KeypairSigner as s, LEVEL4_MAX_NO_DELIVERY as t, LEVEL4_MIN_REVIEWS as u, LOFI_TYPE as v, MAX_BATCH_SLOTS_DEFAULT as w, MAX_DELIVER_HORIZON_MS as x, MAX_JOB_USDC as y, MAX_REVIEW_WINDOW_MS as z };
|