@antseed/node 0.1.6 → 0.1.7
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/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +13 -1
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/dht-node.d.ts +1 -0
- package/dist/discovery/dht-node.d.ts.map +1 -1
- package/dist/discovery/dht-node.js +3 -0
- package/dist/discovery/dht-node.js.map +1 -1
- package/dist/discovery/index.d.ts +1 -3
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -3
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +7 -25
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts +1 -0
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +17 -3
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/index.d.ts +1 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +0 -31
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts +2 -4
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +11 -128
- package/dist/node.js.map +1 -1
- package/dist/payments/seller-payment-manager.d.ts +76 -0
- package/dist/payments/seller-payment-manager.d.ts.map +1 -0
- package/dist/payments/seller-payment-manager.js +205 -0
- package/dist/payments/seller-payment-manager.js.map +1 -0
- package/dist/types/capability.d.ts +3 -2
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { EscrowClient } from './evm/escrow-client.js';
|
|
2
|
+
import { identityToEvmWallet } from './evm/keypair.js';
|
|
3
|
+
import { makeEscrowDomain, SPENDING_AUTH_TYPES } from './evm/signatures.js';
|
|
4
|
+
import { debugLog, debugWarn } from '../utils/debug.js';
|
|
5
|
+
import { verifyTypedData } from 'ethers';
|
|
6
|
+
/**
|
|
7
|
+
* Manages seller-side charge submission under the pull-payment model.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle:
|
|
10
|
+
* 1. handleSpendingAuth() — validate EIP-712 sig, send AuthAck (0x51)
|
|
11
|
+
* 2. chargeForRequest() — accumulate cost; submit on-chain when threshold hit
|
|
12
|
+
* 3. checkAndRequestTopUp() — send TopUpRequest (0x55) when near cap
|
|
13
|
+
* 4. onBuyerDisconnect() — flush any pending charge on-chain
|
|
14
|
+
*/
|
|
15
|
+
export class SellerPaymentManager {
|
|
16
|
+
_signer;
|
|
17
|
+
_escrow;
|
|
18
|
+
_config;
|
|
19
|
+
_auths = new Map(); // keyed by buyerPeerId
|
|
20
|
+
_chargeThreshold;
|
|
21
|
+
_topUpThreshold;
|
|
22
|
+
constructor(identity, config) {
|
|
23
|
+
this._config = config;
|
|
24
|
+
this._signer = identityToEvmWallet(identity);
|
|
25
|
+
this._escrow = new EscrowClient({
|
|
26
|
+
rpcUrl: config.rpcUrl,
|
|
27
|
+
contractAddress: config.contractAddress,
|
|
28
|
+
usdcAddress: config.usdcAddress,
|
|
29
|
+
chainId: config.chainId,
|
|
30
|
+
});
|
|
31
|
+
this._chargeThreshold = config.chargeThresholdUsdc ?? 100000n;
|
|
32
|
+
this._topUpThreshold = config.topUpThreshold ?? 0.80;
|
|
33
|
+
}
|
|
34
|
+
get signer() { return this._signer; }
|
|
35
|
+
get escrowClient() { return this._escrow; }
|
|
36
|
+
hasAuth(buyerPeerId) {
|
|
37
|
+
return this._auths.has(buyerPeerId);
|
|
38
|
+
}
|
|
39
|
+
setBuyerEvmAddress(buyerPeerId, evmAddress) {
|
|
40
|
+
const auth = this._auths.get(buyerPeerId);
|
|
41
|
+
if (auth)
|
|
42
|
+
auth.buyerEvmAddr = evmAddress;
|
|
43
|
+
}
|
|
44
|
+
async handleSpendingAuth(buyerPeerId, buyerEvmAddr, payload, paymentMux) {
|
|
45
|
+
const sellerAddr = await this._signer.getAddress();
|
|
46
|
+
const domain = makeEscrowDomain(this._config.chainId, this._config.contractAddress);
|
|
47
|
+
const maxAmount = BigInt(payload.maxAmountUsdc);
|
|
48
|
+
const recovered = verifyTypedData(domain, SPENDING_AUTH_TYPES, {
|
|
49
|
+
seller: sellerAddr,
|
|
50
|
+
sessionId: payload.sessionId,
|
|
51
|
+
maxAmount,
|
|
52
|
+
nonce: payload.nonce,
|
|
53
|
+
deadline: payload.deadline,
|
|
54
|
+
}, payload.buyerSig);
|
|
55
|
+
if (recovered.toLowerCase() !== buyerEvmAddr.toLowerCase()) {
|
|
56
|
+
debugWarn(`[SellerPayment] Invalid SpendingAuth sig from ${buyerPeerId.slice(0, 12)}...` +
|
|
57
|
+
` recovered=${recovered.slice(0, 10)}... expected=${buyerEvmAddr.slice(0, 10)}...`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Soft balance check — warn if buyer's on-chain balance is below the requested cap.
|
|
61
|
+
// Hard rejection is not used: the contract enforces balance at charge() time, and a
|
|
62
|
+
// TOCTOU race makes a hard check unreliable. This catches obviously underfunded auths.
|
|
63
|
+
try {
|
|
64
|
+
const bal = await this._escrow.getBuyerBalance(buyerEvmAddr);
|
|
65
|
+
if (bal.available < maxAmount) {
|
|
66
|
+
debugWarn(`[SellerPayment] Buyer ${buyerEvmAddr.slice(0, 10)}... balance ${bal.available} < authMax ${maxAmount} — proceeding, contract will enforce`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
debugWarn(`[SellerPayment] Could not fetch buyer balance for auth check: ${err}`);
|
|
71
|
+
}
|
|
72
|
+
const existing = this._auths.get(buyerPeerId);
|
|
73
|
+
if (existing && payload.nonce === existing.nonce + 1) {
|
|
74
|
+
// Flush any sub-threshold pending charges under the old auth before advancing nonce.
|
|
75
|
+
// Without this, charges that haven't yet reached the batch threshold are permanently lost.
|
|
76
|
+
if (existing.pendingCharge > 0n && !existing.chargeInFlight) {
|
|
77
|
+
try {
|
|
78
|
+
await this._submitCharge(existing);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
debugWarn(`[SellerPayment] Failed to flush pending charges before top-up: ${err}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Top-up: advance nonce and reset authUsed
|
|
85
|
+
existing.nonce = payload.nonce;
|
|
86
|
+
existing.authMax = maxAmount;
|
|
87
|
+
existing.authUsed = 0n;
|
|
88
|
+
existing.deadline = payload.deadline;
|
|
89
|
+
existing.buyerSig = payload.buyerSig;
|
|
90
|
+
existing.pendingCharge = 0n; // clear any unflushed remainder after attempted flush
|
|
91
|
+
existing.chargeInFlight = false;
|
|
92
|
+
debugLog(`[SellerPayment] Top-up auth accepted: nonce=${payload.nonce} max=${maxAmount}`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Initial auth
|
|
96
|
+
this._auths.set(buyerPeerId, {
|
|
97
|
+
sessionId: payload.sessionId,
|
|
98
|
+
buyerPeerId,
|
|
99
|
+
buyerEvmAddr,
|
|
100
|
+
nonce: payload.nonce,
|
|
101
|
+
authMax: maxAmount,
|
|
102
|
+
authUsed: 0n,
|
|
103
|
+
deadline: payload.deadline,
|
|
104
|
+
buyerSig: payload.buyerSig,
|
|
105
|
+
pendingCharge: 0n,
|
|
106
|
+
requestCount: 0,
|
|
107
|
+
chargeInFlight: false,
|
|
108
|
+
});
|
|
109
|
+
debugLog(`[SellerPayment] Auth accepted: session=${payload.sessionId.slice(0, 18)}... nonce=${payload.nonce} max=${maxAmount}`);
|
|
110
|
+
}
|
|
111
|
+
const ack = { sessionId: payload.sessionId, nonce: payload.nonce };
|
|
112
|
+
paymentMux.sendAuthAck(ack);
|
|
113
|
+
}
|
|
114
|
+
async chargeForRequest(buyerPeerId, costUsdc, paymentMux) {
|
|
115
|
+
if (costUsdc === 0n)
|
|
116
|
+
return;
|
|
117
|
+
const auth = this._auths.get(buyerPeerId);
|
|
118
|
+
if (!auth) {
|
|
119
|
+
debugWarn(`[SellerPayment] No auth for buyer ${buyerPeerId.slice(0, 12)}... — cannot charge`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
auth.authUsed += costUsdc;
|
|
123
|
+
auth.pendingCharge += costUsdc;
|
|
124
|
+
auth.requestCount += 1;
|
|
125
|
+
debugLog(`[SellerPayment] Accrued ${costUsdc} for ${buyerPeerId.slice(0, 12)}... pending=${auth.pendingCharge}`);
|
|
126
|
+
if (!auth.chargeInFlight && auth.pendingCharge >= this._chargeThreshold) {
|
|
127
|
+
await this._submitCharge(auth);
|
|
128
|
+
}
|
|
129
|
+
this._maybeRequestTopUp(auth, paymentMux);
|
|
130
|
+
}
|
|
131
|
+
checkAndRequestTopUp(buyerPeerId, paymentMux) {
|
|
132
|
+
const auth = this._auths.get(buyerPeerId);
|
|
133
|
+
if (auth)
|
|
134
|
+
this._maybeRequestTopUp(auth, paymentMux);
|
|
135
|
+
}
|
|
136
|
+
async onBuyerDisconnect(buyerPeerId) {
|
|
137
|
+
const auth = this._auths.get(buyerPeerId);
|
|
138
|
+
if (!auth)
|
|
139
|
+
return;
|
|
140
|
+
if (auth.pendingCharge > 0n) {
|
|
141
|
+
debugLog(`[SellerPayment] Flushing ${auth.pendingCharge} on disconnect for ${buyerPeerId.slice(0, 12)}...`);
|
|
142
|
+
try {
|
|
143
|
+
await this._submitCharge(auth);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
debugWarn(`[SellerPayment] Flush failed for ${buyerPeerId.slice(0, 12)}...: ${err}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
this._auths.delete(buyerPeerId);
|
|
150
|
+
}
|
|
151
|
+
async claimEarnings() {
|
|
152
|
+
debugLog(`[SellerPayment] Claiming earnings`);
|
|
153
|
+
return this._escrow.claimEarnings(this._signer);
|
|
154
|
+
}
|
|
155
|
+
async stake(amount) {
|
|
156
|
+
debugLog(`[SellerPayment] Staking ${amount}`);
|
|
157
|
+
return this._escrow.stake(this._signer, amount);
|
|
158
|
+
}
|
|
159
|
+
async unstake(amount) {
|
|
160
|
+
debugLog(`[SellerPayment] Unstaking ${amount}`);
|
|
161
|
+
return this._escrow.unstake(this._signer, amount);
|
|
162
|
+
}
|
|
163
|
+
async getPendingEarnings() {
|
|
164
|
+
const addr = await this._signer.getAddress();
|
|
165
|
+
return this._escrow.getSellerPendingEarnings(addr);
|
|
166
|
+
}
|
|
167
|
+
_maybeRequestTopUp(auth, paymentMux) {
|
|
168
|
+
if (auth.authMax === 0n)
|
|
169
|
+
return;
|
|
170
|
+
const ratio = Number(auth.authUsed) / Number(auth.authMax);
|
|
171
|
+
if (ratio < this._topUpThreshold)
|
|
172
|
+
return;
|
|
173
|
+
const requested = (this._config.topUpAmountUsdc ?? auth.authMax).toString();
|
|
174
|
+
debugLog(`[SellerPayment] Requesting top-up: used=${auth.authUsed} max=${auth.authMax} ratio=${ratio.toFixed(2)}`);
|
|
175
|
+
const topUp = {
|
|
176
|
+
sessionId: auth.sessionId,
|
|
177
|
+
currentUsed: auth.authUsed.toString(),
|
|
178
|
+
currentMax: auth.authMax.toString(),
|
|
179
|
+
requestedAdditional: requested,
|
|
180
|
+
};
|
|
181
|
+
paymentMux.sendTopUpRequest(topUp);
|
|
182
|
+
}
|
|
183
|
+
async _submitCharge(auth) {
|
|
184
|
+
const amount = auth.pendingCharge;
|
|
185
|
+
if (amount === 0n)
|
|
186
|
+
return;
|
|
187
|
+
// Optimistically reset and mark in-flight before the async call to prevent
|
|
188
|
+
// concurrent callers from double-submitting the same pending balance.
|
|
189
|
+
auth.pendingCharge = 0n;
|
|
190
|
+
auth.chargeInFlight = true;
|
|
191
|
+
try {
|
|
192
|
+
const txHash = await this._escrow.charge(this._signer, auth.buyerEvmAddr, amount, auth.sessionId, auth.authMax, auth.nonce, auth.deadline, auth.buyerSig);
|
|
193
|
+
debugLog(`[SellerPayment] Charged ${amount} on-chain: tx=${txHash.slice(0, 12)}...`);
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
// Restore pending on failure so the next call can retry.
|
|
197
|
+
auth.pendingCharge += amount;
|
|
198
|
+
throw err;
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
auth.chargeInFlight = false;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=seller-payment-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seller-payment-manager.js","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provider capability types — what a peer can offer beyond inference.
|
|
3
3
|
*/
|
|
4
|
-
export type ProviderCapability = 'inference' | 'agent' | '
|
|
4
|
+
export type ProviderCapability = 'inference' | 'agent' | 'embedding' | 'image-gen' | 'tts' | 'stt';
|
|
5
5
|
/**
|
|
6
6
|
* Pricing tier for an offering.
|
|
7
7
|
*/
|
|
@@ -11,7 +11,8 @@ export interface PricingTier {
|
|
|
11
11
|
currency: 'USD';
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* A discrete offering that a peer advertises.
|
|
14
|
+
* A discrete offering that a peer advertises via DHT capability topics.
|
|
15
|
+
* Skills and tasks are handled as provider-node middlewares, not here.
|
|
15
16
|
*/
|
|
16
17
|
export interface PeerOffering {
|
|
17
18
|
capability: ProviderCapability;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/types/capability.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,OAAO,GACP,
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/types/capability.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,OAAO,GACP,WAAW,GACX,WAAW,GACX,KAAK,GACL,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;CACtB"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
package/dist/types/index.js
CHANGED
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|