@antseed/node 0.2.26 → 0.2.27
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/README.md +74 -1
- package/dist/discovery/announcer.d.ts +2 -0
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +10 -6
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/index.d.ts +0 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +0 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/reputation-verifier.d.ts +7 -4
- package/dist/discovery/reputation-verifier.d.ts.map +1 -1
- package/dist/discovery/reputation-verifier.js +33 -9
- package/dist/discovery/reputation-verifier.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +60 -33
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +640 -324
- package/dist/node.js.map +1 -1
- package/dist/p2p/connection-manager.d.ts.map +1 -1
- package/dist/p2p/connection-manager.js +6 -0
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/p2p/identity.d.ts +27 -3
- package/dist/p2p/identity.d.ts.map +1 -1
- package/dist/p2p/identity.js +52 -13
- package/dist/p2p/identity.js.map +1 -1
- package/dist/p2p/index.d.ts +0 -2
- package/dist/p2p/index.d.ts.map +1 -1
- package/dist/p2p/index.js +0 -2
- package/dist/p2p/index.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +7 -13
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +32 -50
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +11 -20
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +36 -52
- package/dist/p2p/payment-mux.js.map +1 -1
- package/dist/payments/buyer-payment-manager.d.ts +34 -93
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +184 -189
- package/dist/payments/buyer-payment-manager.js.map +1 -1
- package/dist/payments/chain-config.d.ts +38 -0
- package/dist/payments/chain-config.d.ts.map +1 -0
- package/dist/payments/chain-config.js +60 -0
- package/dist/payments/chain-config.js.map +1 -0
- package/dist/payments/evm/ants-token-client.d.ts +16 -0
- package/dist/payments/evm/ants-token-client.d.ts.map +1 -0
- package/dist/payments/evm/ants-token-client.js +66 -0
- package/dist/payments/evm/ants-token-client.js.map +1 -0
- package/dist/payments/evm/base-evm-client.d.ts +13 -0
- package/dist/payments/evm/base-evm-client.d.ts.map +1 -0
- package/dist/payments/evm/base-evm-client.js +38 -0
- package/dist/payments/evm/base-evm-client.js.map +1 -0
- package/dist/payments/evm/emissions-client.d.ts +23 -0
- package/dist/payments/evm/emissions-client.d.ts.map +1 -0
- package/dist/payments/evm/emissions-client.js +84 -0
- package/dist/payments/evm/emissions-client.js.map +1 -0
- package/dist/payments/evm/escrow-client.d.ts +57 -36
- package/dist/payments/evm/escrow-client.d.ts.map +1 -1
- package/dist/payments/evm/escrow-client.js +200 -93
- package/dist/payments/evm/escrow-client.js.map +1 -1
- package/dist/payments/evm/identity-client.d.ts +34 -0
- package/dist/payments/evm/identity-client.d.ts.map +1 -0
- package/dist/payments/evm/identity-client.js +125 -0
- package/dist/payments/evm/identity-client.js.map +1 -0
- package/dist/payments/evm/signatures.d.ts +18 -5
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +21 -12
- package/dist/payments/evm/signatures.js.map +1 -1
- package/dist/payments/evm/subpool-client.d.ts +30 -0
- package/dist/payments/evm/subpool-client.d.ts.map +1 -0
- package/dist/payments/evm/subpool-client.js +158 -0
- package/dist/payments/evm/subpool-client.js.map +1 -0
- package/dist/payments/index.d.ts +20 -7
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +17 -6
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/readiness.d.ts +12 -0
- package/dist/payments/readiness.d.ts.map +1 -0
- package/dist/payments/readiness.js +64 -0
- package/dist/payments/readiness.js.map +1 -0
- package/dist/payments/seller-payment-manager.d.ts +74 -34
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +327 -118
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/session-store.d.ts +65 -0
- package/dist/payments/session-store.d.ts.map +1 -0
- package/dist/payments/session-store.js +243 -0
- package/dist/payments/session-store.js.map +1 -0
- package/dist/payments/usdc-utils.d.ts +9 -0
- package/dist/payments/usdc-utils.d.ts.map +1 -0
- package/dist/payments/usdc-utils.js +17 -0
- package/dist/payments/usdc-utils.js.map +1 -0
- package/dist/types/http.d.ts +2 -0
- package/dist/types/http.d.ts.map +1 -1
- package/dist/types/http.js +2 -0
- package/dist/types/http.js.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/dist/types/metering.d.ts +1 -1
- package/dist/types/metering.d.ts.map +1 -1
- package/dist/types/protocol.d.ts +43 -60
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +5 -8
- package/dist/types/protocol.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,161 +1,370 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
import { verifyTypedData } from 'ethers';
|
|
2
|
-
import {
|
|
3
|
-
import { identityToEvmWallet } from './evm/keypair.js';
|
|
4
|
-
import { makeEscrowDomain,
|
|
3
|
+
import { BaseEscrowClient } from './evm/escrow-client.js';
|
|
4
|
+
import { identityToEvmWallet, identityToEvmAddress } from './evm/keypair.js';
|
|
5
|
+
import { SPENDING_AUTH_TYPES, makeEscrowDomain, buildReceiptMessage, buildAckMessage, signMessageEd25519, verifyMessageEd25519, } from './evm/signatures.js';
|
|
6
|
+
import { bytesToHex, hexToBytes } from '../utils/hex.js';
|
|
5
7
|
import { debugLog, debugWarn } from '../utils/debug.js';
|
|
8
|
+
/** Default settle timeout: 24 hours. */
|
|
9
|
+
const DEFAULT_SETTLE_TIMEOUT_SECS = 86400;
|
|
10
|
+
/**
|
|
11
|
+
* Manages seller-side payment sessions using the settle-then-reserve
|
|
12
|
+
* atomic flow with persistent session storage.
|
|
13
|
+
*/
|
|
6
14
|
export class SellerPaymentManager {
|
|
15
|
+
_identity;
|
|
7
16
|
_signer;
|
|
8
|
-
|
|
17
|
+
_escrowClient;
|
|
9
18
|
_config;
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
_sessionStore;
|
|
20
|
+
/** In-memory cache of active buyer peerIds for fast has-session checks. */
|
|
21
|
+
_activeBuyers = new Set();
|
|
22
|
+
/** Debounce: track sessions that already sent a top-up request. */
|
|
23
|
+
_topUpRequested = new Set();
|
|
24
|
+
/** Cached seller tokenRate (fetched once from escrow, used for top-up threshold). */
|
|
25
|
+
_tokenRate = null;
|
|
26
|
+
/** Cached FIRST_SIGN_CAP from escrow contract. */
|
|
27
|
+
_firstSignCap = null;
|
|
28
|
+
/** Per-buyer mutex to prevent concurrent handleSpendingAuth for the same buyer. */
|
|
29
|
+
_buyerLocks = new Map();
|
|
30
|
+
constructor(identity, config, sessionStore) {
|
|
31
|
+
this._identity = identity;
|
|
12
32
|
this._config = config;
|
|
13
33
|
this._signer = identityToEvmWallet(identity);
|
|
14
|
-
this.
|
|
34
|
+
this._escrowClient = new BaseEscrowClient({
|
|
15
35
|
rpcUrl: config.rpcUrl,
|
|
16
36
|
contractAddress: config.contractAddress,
|
|
17
37
|
usdcAddress: config.usdcAddress,
|
|
18
|
-
chainId: config.chainId,
|
|
19
38
|
});
|
|
39
|
+
this._sessionStore = sessionStore;
|
|
40
|
+
// Hydrate _activeBuyers from persisted sessions so hasSession() works after restart
|
|
41
|
+
const activeSessions = this._sessionStore.getActiveSessions('seller');
|
|
42
|
+
for (const session of activeSessions) {
|
|
43
|
+
this._activeBuyers.add(session.peerId);
|
|
44
|
+
}
|
|
20
45
|
}
|
|
21
|
-
get
|
|
22
|
-
|
|
23
|
-
hasSession(buyerPeerId) {
|
|
24
|
-
const s = this._sessions.get(buyerPeerId);
|
|
25
|
-
return !!s && !s.settled;
|
|
46
|
+
get escrowClient() {
|
|
47
|
+
return this._escrowClient;
|
|
26
48
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
49
|
+
// ── SpendingAuth handler (settle-then-reserve) ────────────────
|
|
50
|
+
/**
|
|
51
|
+
* Handle incoming SpendingAuth from a buyer.
|
|
52
|
+
* 1. Verify EIP-712 signature
|
|
53
|
+
* 2. Settle prior session if one exists
|
|
54
|
+
* 3. Reserve new session on-chain
|
|
55
|
+
* 4. Store and send AuthAck
|
|
56
|
+
*/
|
|
57
|
+
async handleSpendingAuth(buyerPeerId, buyerEvmAddr, payload, paymentMux) {
|
|
58
|
+
// Per-buyer mutex: serialize concurrent auths for the same buyer
|
|
59
|
+
const existing = this._buyerLocks.get(buyerPeerId);
|
|
60
|
+
const lock = (existing ?? Promise.resolve()).then(() => this._handleSpendingAuthInner(buyerPeerId, buyerEvmAddr, payload, paymentMux));
|
|
61
|
+
this._buyerLocks.set(buyerPeerId, lock.catch(() => { }));
|
|
62
|
+
return lock;
|
|
31
63
|
}
|
|
32
|
-
async
|
|
33
|
-
const now = Math.floor(Date.now() / 1000);
|
|
34
|
-
if (!payload.deadline || payload.deadline <= now) {
|
|
35
|
-
debugWarn(`[SellerPayment] Expired SpendingAuthV2 from ${buyerPeerId.slice(0, 12)}... deadline=${payload.deadline}`);
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
let maxAmount;
|
|
39
|
-
let previousConsumption;
|
|
64
|
+
async _handleSpendingAuthInner(buyerPeerId, buyerEvmAddr, payload, paymentMux) {
|
|
40
65
|
try {
|
|
41
|
-
|
|
42
|
-
|
|
66
|
+
// 1. Verify EIP-712 signature
|
|
67
|
+
const domain = makeEscrowDomain(this._config.chainId, this._config.contractAddress);
|
|
68
|
+
const msg = {
|
|
69
|
+
seller: identityToEvmAddress(this._identity),
|
|
70
|
+
sessionId: payload.sessionId,
|
|
71
|
+
maxAmount: BigInt(payload.maxAmountUsdc),
|
|
72
|
+
nonce: payload.nonce,
|
|
73
|
+
deadline: payload.deadline,
|
|
74
|
+
previousConsumption: BigInt(payload.previousConsumption),
|
|
75
|
+
previousSessionId: payload.previousSessionId,
|
|
76
|
+
};
|
|
77
|
+
const recoveredAddr = verifyTypedData(domain, SPENDING_AUTH_TYPES, msg, payload.buyerSig);
|
|
78
|
+
if (recoveredAddr.toLowerCase() !== buyerEvmAddr.toLowerCase()) {
|
|
79
|
+
debugWarn(`[SellerPayment] Invalid SpendingAuth signature: recovered=${recoveredAddr} expected=${buyerEvmAddr}`);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
debugLog(`[SellerPayment] SpendingAuth verified for buyer ${buyerPeerId.slice(0, 12)}...`);
|
|
83
|
+
// 2. Settle prior session if exists
|
|
84
|
+
const priorSession = this._sessionStore.getActiveSessionByPeer(buyerPeerId, 'seller');
|
|
85
|
+
if (priorSession && priorSession.status === 'active') {
|
|
86
|
+
const buyerClaimed = BigInt(payload.previousConsumption);
|
|
87
|
+
const sellerDelivered = BigInt(priorSession.tokensDelivered);
|
|
88
|
+
// Settle with buyer's claimed value — proof chain requires
|
|
89
|
+
// previousConsumption == settledTokenCount on-chain.
|
|
90
|
+
// We do NOT use max(seller, buyer) because that would let the seller
|
|
91
|
+
// overcharge the buyer for tokens the buyer may not have received.
|
|
92
|
+
try {
|
|
93
|
+
debugLog(`[SellerPayment] Settling prior session ${priorSession.sessionId.slice(0, 18)}... tokens=${buyerClaimed} (seller delivered=${sellerDelivered})`);
|
|
94
|
+
await this._escrowClient.settle(this._signer, priorSession.sessionId, buyerClaimed);
|
|
95
|
+
this._sessionStore.updateSessionStatus(priorSession.sessionId, 'settled', buyerClaimed.toString());
|
|
96
|
+
this._topUpRequested.delete(priorSession.sessionId);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
debugWarn(`[SellerPayment] Failed to settle prior session: ${err instanceof Error ? err.message : err}`);
|
|
100
|
+
// Do NOT proceed to reserve — proof chain is broken. Buyer will timeout and retry.
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// If buyer significantly understated consumption (> 20% gap), reject the
|
|
104
|
+
// new SpendingAuth. Seller accepts the loss on this session but refuses to
|
|
105
|
+
// continue serving a dishonest buyer. The 20% tolerance accounts for receipt
|
|
106
|
+
// delivery timing (buyer may not have received the final receipt).
|
|
107
|
+
if (sellerDelivered > 0n && buyerClaimed < sellerDelivered * 80n / 100n) {
|
|
108
|
+
debugWarn(`[SellerPayment] Rejecting SpendingAuth — buyer under-reports consumption: ` +
|
|
109
|
+
`claimed=${buyerClaimed} delivered=${sellerDelivered}`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// 3. Fetch tokenRate BEFORE reserve so a failure here doesn't orphan
|
|
114
|
+
// an on-chain reservation the seller can't serve.
|
|
115
|
+
const sellerEvmAddr = identityToEvmAddress(this._identity);
|
|
116
|
+
const account = await this._escrowClient.getSellerAccount(sellerEvmAddr);
|
|
117
|
+
this._tokenRate = account.tokenRate;
|
|
118
|
+
if (this._tokenRate === 0n) {
|
|
119
|
+
throw new Error('Token rate is 0 — set rate with antseed setTokenRate before serving');
|
|
120
|
+
}
|
|
121
|
+
// 4. Reserve new session on-chain
|
|
122
|
+
debugLog(`[SellerPayment] Reserving session ${payload.sessionId.slice(0, 18)}... on-chain`);
|
|
123
|
+
await this._escrowClient.reserve(this._signer, buyerEvmAddr, payload.sessionId, BigInt(payload.maxAmountUsdc), BigInt(payload.nonce), BigInt(payload.deadline), BigInt(payload.previousConsumption), payload.previousSessionId, payload.buyerSig);
|
|
124
|
+
// 5. Store new session
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
const session = {
|
|
127
|
+
sessionId: payload.sessionId,
|
|
128
|
+
peerId: buyerPeerId,
|
|
129
|
+
role: 'seller',
|
|
130
|
+
sellerEvmAddr,
|
|
131
|
+
buyerEvmAddr,
|
|
132
|
+
nonce: payload.nonce,
|
|
133
|
+
authMax: payload.maxAmountUsdc,
|
|
134
|
+
deadline: payload.deadline,
|
|
135
|
+
previousSessionId: payload.previousSessionId,
|
|
136
|
+
previousConsumption: payload.previousConsumption,
|
|
137
|
+
tokensDelivered: '0',
|
|
138
|
+
requestCount: 0,
|
|
139
|
+
reservedAt: now,
|
|
140
|
+
settledAt: null,
|
|
141
|
+
settledAmount: null,
|
|
142
|
+
status: 'active',
|
|
143
|
+
createdAt: now,
|
|
144
|
+
updatedAt: now,
|
|
145
|
+
};
|
|
146
|
+
this._sessionStore.upsertSession(session);
|
|
147
|
+
this._activeBuyers.add(buyerPeerId);
|
|
148
|
+
// 6. Send AuthAck
|
|
149
|
+
paymentMux.sendAuthAck({
|
|
150
|
+
sessionId: payload.sessionId,
|
|
151
|
+
nonce: payload.nonce,
|
|
152
|
+
});
|
|
153
|
+
debugLog(`[SellerPayment] AuthAck sent for session ${payload.sessionId.slice(0, 18)}...`);
|
|
43
154
|
}
|
|
44
|
-
catch {
|
|
45
|
-
debugWarn(`[SellerPayment]
|
|
46
|
-
return;
|
|
155
|
+
catch (err) {
|
|
156
|
+
debugWarn(`[SellerPayment] Failed to process SpendingAuth: ${err instanceof Error ? err.message : err}`);
|
|
47
157
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
previousSessionId,
|
|
59
|
-
}, payload.buyerSig);
|
|
60
|
-
if (recovered.toLowerCase() !== buyerEvmAddr.toLowerCase()) {
|
|
61
|
-
debugWarn(`[SellerPayment] Invalid V2 sig from ${buyerPeerId.slice(0, 12)}... recovered=${recovered.slice(0, 10)}... expected=${buyerEvmAddr.slice(0, 10)}...`);
|
|
158
|
+
}
|
|
159
|
+
// ── Receipt sending ───────────────────────────────────────────
|
|
160
|
+
/**
|
|
161
|
+
* Send a bilateral receipt to the buyer after processing a request.
|
|
162
|
+
* Also triggers TopUpRequest if consumption exceeds 80% of authMax.
|
|
163
|
+
*/
|
|
164
|
+
async sendReceipt(buyerPeerId, paymentMux, responseBody, tokensDelivered) {
|
|
165
|
+
const session = this._sessionStore.getActiveSessionByPeer(buyerPeerId, 'seller');
|
|
166
|
+
if (!session) {
|
|
167
|
+
debugWarn(`[SellerPayment] No active session for buyer ${buyerPeerId.slice(0, 12)}... — skipping receipt`);
|
|
62
168
|
return;
|
|
63
169
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
170
|
+
// Update tokens — cap at the effective token limit so the receipt total
|
|
171
|
+
// always matches what settle() will store as settledTokenCount on-chain.
|
|
172
|
+
// Without this cap, the buyer's previousConsumption (from tokensDelivered)
|
|
173
|
+
// would exceed settledTokenCount (= maxAmount / tokenRate), breaking the
|
|
174
|
+
// proof chain with InvalidProofChain on the next reserve().
|
|
175
|
+
const authMax = BigInt(session.authMax);
|
|
176
|
+
const tokenRate = this._tokenRate;
|
|
177
|
+
if (tokenRate === null || tokenRate === 0n) {
|
|
178
|
+
throw new Error('Token rate unavailable — cannot send receipt without on-chain rate');
|
|
179
|
+
}
|
|
180
|
+
const effectiveTokenCap = authMax / tokenRate;
|
|
181
|
+
let newTotal = BigInt(session.tokensDelivered) + tokensDelivered;
|
|
182
|
+
if (newTotal > effectiveTokenCap) {
|
|
183
|
+
newTotal = effectiveTokenCap;
|
|
184
|
+
}
|
|
185
|
+
const newRequestCount = session.requestCount + 1;
|
|
186
|
+
this._sessionStore.updateTokensDelivered(session.sessionId, newTotal.toString(), newRequestCount);
|
|
187
|
+
// SHA-256 hash of response body
|
|
188
|
+
const responseHash = createHash('sha256').update(responseBody).digest();
|
|
189
|
+
// Build receipt message and sign with Ed25519
|
|
190
|
+
const sessionIdBytes = hexToBytes(session.sessionId.replace(/^0x/, ''));
|
|
191
|
+
const receiptMsg = buildReceiptMessage(sessionIdBytes, newTotal, newRequestCount, new Uint8Array(responseHash));
|
|
192
|
+
const sellerSig = await signMessageEd25519(this._identity, receiptMsg);
|
|
193
|
+
paymentMux.sendSellerReceipt({
|
|
194
|
+
sessionId: session.sessionId,
|
|
195
|
+
runningTotal: newTotal.toString(),
|
|
196
|
+
requestCount: newRequestCount,
|
|
197
|
+
responseHash: bytesToHex(new Uint8Array(responseHash)),
|
|
198
|
+
sellerSig: bytesToHex(sellerSig),
|
|
199
|
+
});
|
|
200
|
+
// Store receipt
|
|
201
|
+
this._sessionStore.insertReceipt({
|
|
202
|
+
sessionId: session.sessionId,
|
|
203
|
+
runningTotal: newTotal.toString(),
|
|
204
|
+
requestCount: newRequestCount,
|
|
205
|
+
responseHash: bytesToHex(new Uint8Array(responseHash)),
|
|
206
|
+
sellerSig: bytesToHex(sellerSig),
|
|
207
|
+
buyerAckSig: null,
|
|
208
|
+
createdAt: Date.now(),
|
|
209
|
+
});
|
|
210
|
+
debugLog(`[SellerPayment] Receipt sent: session=${session.sessionId.slice(0, 18)}... total=${newTotal} count=${newRequestCount}`);
|
|
211
|
+
// TopUpRequest if > 80% of USDC cap consumed (send at most once per session)
|
|
212
|
+
const usdcConsumed = newTotal * tokenRate;
|
|
213
|
+
if (authMax > 0n && usdcConsumed * 100n > authMax * 80n && !this._topUpRequested.has(session.sessionId)) {
|
|
214
|
+
this._topUpRequested.add(session.sessionId);
|
|
215
|
+
const additionalAmount = authMax; // Request same amount again
|
|
216
|
+
paymentMux.sendTopUpRequest({
|
|
217
|
+
sessionId: session.sessionId,
|
|
218
|
+
currentUsed: newTotal.toString(),
|
|
219
|
+
currentMax: authMax.toString(),
|
|
220
|
+
requestedAdditional: additionalAmount.toString(),
|
|
221
|
+
});
|
|
222
|
+
debugLog(`[SellerPayment] TopUpRequest sent: session=${session.sessionId.slice(0, 18)}... (${newTotal}/${authMax})`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// ── BuyerAck handler ──────────────────────────────────────────
|
|
226
|
+
async handleBuyerAck(buyerPeerId, payload) {
|
|
227
|
+
const session = this._sessionStore.getActiveSessionByPeer(buyerPeerId, 'seller');
|
|
228
|
+
if (!session) {
|
|
229
|
+
debugWarn(`[SellerPayment] BuyerAck for unknown buyer: ${buyerPeerId.slice(0, 12)}...`);
|
|
230
|
+
return;
|
|
75
231
|
}
|
|
76
232
|
try {
|
|
77
|
-
|
|
233
|
+
// Verify buyer's Ed25519 ack signature
|
|
234
|
+
const buyerPublicKey = hexToBytes(buyerPeerId);
|
|
235
|
+
const sessionIdBytes = hexToBytes(session.sessionId.replace(/^0x/, ''));
|
|
236
|
+
const ackMsg = buildAckMessage(sessionIdBytes, BigInt(payload.runningTotal), payload.requestCount);
|
|
237
|
+
const sigBytes = hexToBytes(payload.buyerSig);
|
|
238
|
+
const valid = await verifyMessageEd25519(buyerPublicKey, sigBytes, ackMsg);
|
|
239
|
+
if (!valid) {
|
|
240
|
+
debugWarn(`[SellerPayment] Invalid BuyerAck signature from ${buyerPeerId.slice(0, 12)}...`);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
// Store the ack directly via targeted UPDATE (no-op if no matching receipt)
|
|
244
|
+
this._sessionStore.updateReceiptAck(session.sessionId, payload.runningTotal, payload.requestCount, payload.buyerSig);
|
|
245
|
+
debugLog(`[SellerPayment] BuyerAck received: session=${session.sessionId.slice(0, 18)}... count=${payload.requestCount} total=${payload.runningTotal}`);
|
|
78
246
|
}
|
|
79
247
|
catch (err) {
|
|
80
|
-
debugWarn(`[SellerPayment]
|
|
81
|
-
return;
|
|
248
|
+
debugWarn(`[SellerPayment] Failed to process BuyerAck: ${err instanceof Error ? err.message : err}`);
|
|
82
249
|
}
|
|
83
|
-
this._sessions.set(buyerPeerId, {
|
|
84
|
-
sessionId: payload.sessionId,
|
|
85
|
-
buyerPeerId,
|
|
86
|
-
buyerEvmAddr,
|
|
87
|
-
nonce: payload.nonce,
|
|
88
|
-
authMax: maxAmount,
|
|
89
|
-
deadline: payload.deadline,
|
|
90
|
-
buyerSig: payload.buyerSig,
|
|
91
|
-
previousConsumption,
|
|
92
|
-
previousSessionId,
|
|
93
|
-
tokensDelivered: 0n,
|
|
94
|
-
reservedAt: Date.now(),
|
|
95
|
-
settled: false,
|
|
96
|
-
});
|
|
97
|
-
paymentMux.sendAuthAck({ sessionId: payload.sessionId, nonce: payload.nonce });
|
|
98
|
-
debugLog(`[SellerPayment] AuthAck sent for session=${payload.sessionId.slice(0, 18)}...`);
|
|
99
250
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
251
|
+
// ── Disconnect handling ───────────────────────────────────────
|
|
252
|
+
onBuyerDisconnect(buyerPeerId) {
|
|
253
|
+
const session = this._sessionStore.getActiveSessionByPeer(buyerPeerId, 'seller');
|
|
254
|
+
if (!session)
|
|
103
255
|
return;
|
|
104
|
-
|
|
105
|
-
|
|
256
|
+
// Don't settle immediately — wait for buyer to return with next auth.
|
|
257
|
+
// Session persists in store; timeout checker will handle ghost scenarios.
|
|
258
|
+
this._activeBuyers.delete(buyerPeerId);
|
|
259
|
+
debugLog(`[SellerPayment] Buyer ${buyerPeerId.slice(0, 12)}... disconnected — session ${session.sessionId.slice(0, 18)}... preserved for reconnect`);
|
|
106
260
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
261
|
+
// ── Timeout management ────────────────────────────────────────
|
|
262
|
+
/**
|
|
263
|
+
* Check for and settle timed-out sessions.
|
|
264
|
+
* Called periodically and on startup for recovery.
|
|
265
|
+
*/
|
|
266
|
+
async checkTimeouts() {
|
|
267
|
+
const timeoutSecs = this._config.settleTimeoutSecs ?? DEFAULT_SETTLE_TIMEOUT_SECS;
|
|
268
|
+
const timedOut = this._sessionStore.getTimedOutSessions(timeoutSecs);
|
|
269
|
+
for (const session of timedOut) {
|
|
270
|
+
if (session.status !== 'active')
|
|
271
|
+
continue;
|
|
117
272
|
try {
|
|
118
|
-
|
|
119
|
-
|
|
273
|
+
const delivered = BigInt(session.tokensDelivered);
|
|
274
|
+
if (delivered > 0n) {
|
|
275
|
+
// Seller delivered tokens — settle normally to get paid and avoid ghost penalty
|
|
276
|
+
debugLog(`[SellerPayment] Settling timed-out session ${session.sessionId.slice(0, 18)}... with ${delivered} tokens delivered`);
|
|
277
|
+
await this._escrowClient.settle(this._signer, session.sessionId, delivered);
|
|
278
|
+
this._sessionStore.updateSessionStatus(session.sessionId, 'settled', delivered.toString());
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// No delivery — use settleTimeout (records ghost, releases buyer funds)
|
|
282
|
+
debugLog(`[SellerPayment] Settling timed-out session ${session.sessionId.slice(0, 18)}... (no delivery)`);
|
|
283
|
+
await this._escrowClient.settleTimeout(this._signer, session.sessionId);
|
|
284
|
+
this._sessionStore.updateSessionStatus(session.sessionId, 'timeout');
|
|
285
|
+
}
|
|
286
|
+
this._activeBuyers.delete(session.peerId);
|
|
287
|
+
this._topUpRequested.delete(session.sessionId);
|
|
120
288
|
}
|
|
121
289
|
catch (err) {
|
|
122
|
-
debugWarn(`[SellerPayment]
|
|
290
|
+
debugWarn(`[SellerPayment] Failed to settle timeout for ${session.sessionId.slice(0, 18)}...: ${err instanceof Error ? err.message : err}`);
|
|
123
291
|
}
|
|
124
292
|
}
|
|
125
|
-
else {
|
|
126
|
-
debugLog('[SellerPayment] Buyer disconnected, session not yet timeout-eligible. Will settle on next SpendingAuthV2.');
|
|
127
|
-
}
|
|
128
|
-
this._sessions.delete(buyerPeerId);
|
|
129
293
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
294
|
+
// ── Queries ───────────────────────────────────────────────────
|
|
295
|
+
hasSession(buyerPeerId) {
|
|
296
|
+
return this._activeBuyers.has(buyerPeerId);
|
|
297
|
+
}
|
|
298
|
+
/** Minimum interval between init retry attempts. */
|
|
299
|
+
_lastInitAttemptMs = 0;
|
|
300
|
+
static INIT_RETRY_INTERVAL_MS = 30_000;
|
|
301
|
+
/**
|
|
302
|
+
* Pre-fetch on-chain data (tokenRate, FIRST_SIGN_CAP) so PaymentRequired
|
|
303
|
+
* messages can be sent without blocking on RPC calls.
|
|
304
|
+
*/
|
|
305
|
+
async init() {
|
|
306
|
+
this._lastInitAttemptMs = Date.now();
|
|
134
307
|
try {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
308
|
+
const sellerEvmAddr = identityToEvmAddress(this._identity);
|
|
309
|
+
const [account, firstSignCap] = await Promise.all([
|
|
310
|
+
this._escrowClient.getSellerAccount(sellerEvmAddr),
|
|
311
|
+
this._escrowClient.getFirstSignCap(),
|
|
312
|
+
]);
|
|
313
|
+
this._tokenRate = account.tokenRate;
|
|
314
|
+
this._firstSignCap = firstSignCap;
|
|
315
|
+
debugLog(`[SellerPayment] Cached on-chain data: tokenRate=${this._tokenRate} firstSignCap=${this._firstSignCap}`);
|
|
138
316
|
}
|
|
139
317
|
catch (err) {
|
|
140
|
-
debugWarn(`[SellerPayment]
|
|
141
|
-
throw err;
|
|
318
|
+
debugWarn(`[SellerPayment] Failed to pre-fetch on-chain data: ${err instanceof Error ? err.message : err}`);
|
|
142
319
|
}
|
|
143
320
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return this._escrow.unstake(this._signer, amount);
|
|
321
|
+
/** Retry init if on-chain data is missing and enough time has passed. */
|
|
322
|
+
async ensureInitialized() {
|
|
323
|
+
if (this._tokenRate !== null && this._firstSignCap !== null)
|
|
324
|
+
return;
|
|
325
|
+
if (Date.now() - this._lastInitAttemptMs < SellerPaymentManager.INIT_RETRY_INTERVAL_MS)
|
|
326
|
+
return;
|
|
327
|
+
await this.init();
|
|
152
328
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
329
|
+
static DEFAULT_SUGGESTED_AMOUNT = 100000n; // $0.10
|
|
330
|
+
/**
|
|
331
|
+
* Build the PaymentRequired payload for a buyer that doesn't have a session.
|
|
332
|
+
* Returns null if on-chain data isn't available yet.
|
|
333
|
+
* For returning buyers (proven-sign eligible), uses the configured proven-sign
|
|
334
|
+
* amount instead of the first-sign amount (both default to $0.10).
|
|
335
|
+
*/
|
|
336
|
+
getPaymentRequirements(requestId, buyerPeerId, pricing) {
|
|
337
|
+
const sellerEvmAddr = identityToEvmAddress(this._identity);
|
|
338
|
+
const tokenRate = this._tokenRate;
|
|
339
|
+
const firstSignCap = this._firstSignCap;
|
|
340
|
+
if (tokenRate === null || firstSignCap === null) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
const defaultAmount = SellerPaymentManager.DEFAULT_SUGGESTED_AMOUNT;
|
|
344
|
+
const firstSignAmount = this._config.firstSignAmountUsdc
|
|
345
|
+
? BigInt(this._config.firstSignAmountUsdc) : defaultAmount;
|
|
346
|
+
const provenSignAmount = this._config.provenSignAmountUsdc
|
|
347
|
+
? BigInt(this._config.provenSignAmountUsdc) : defaultAmount;
|
|
348
|
+
let suggestedAmount = firstSignAmount;
|
|
349
|
+
if (buyerPeerId) {
|
|
350
|
+
const priorSession = this._sessionStore.getLatestSession(buyerPeerId, 'seller');
|
|
351
|
+
if (priorSession && BigInt(priorSession.tokensDelivered) > 0n) {
|
|
352
|
+
suggestedAmount = provenSignAmount;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
sellerEvmAddr,
|
|
357
|
+
tokenRate: tokenRate.toString(),
|
|
358
|
+
firstSignCap: firstSignCap.toString(),
|
|
359
|
+
suggestedAmount: suggestedAmount.toString(),
|
|
360
|
+
requestId,
|
|
361
|
+
...(pricing?.inputUsdPerMillion != null ? { inputUsdPerMillion: pricing.inputUsdPerMillion } : {}),
|
|
362
|
+
...(pricing?.outputUsdPerMillion != null ? { outputUsdPerMillion: pricing.outputUsdPerMillion } : {}),
|
|
363
|
+
};
|
|
156
364
|
}
|
|
157
|
-
|
|
158
|
-
|
|
365
|
+
// ── Lifecycle ─────────────────────────────────────────────────
|
|
366
|
+
close() {
|
|
367
|
+
// SessionStore is shared with BuyerPaymentManager, closed from node.ts
|
|
159
368
|
}
|
|
160
369
|
}
|
|
161
370
|
//# sourceMappingURL=seller-payment-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seller-payment-manager.js","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seller-payment-manager.js","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export declare const SESSION_STATUS: {
|
|
2
|
+
readonly ACTIVE: "active";
|
|
3
|
+
readonly SETTLED: "settled";
|
|
4
|
+
readonly TIMEOUT: "timeout";
|
|
5
|
+
readonly GHOST: "ghost";
|
|
6
|
+
};
|
|
7
|
+
export interface StoredSession {
|
|
8
|
+
sessionId: string;
|
|
9
|
+
peerId: string;
|
|
10
|
+
role: 'buyer' | 'seller';
|
|
11
|
+
sellerEvmAddr: string;
|
|
12
|
+
buyerEvmAddr: string;
|
|
13
|
+
nonce: number;
|
|
14
|
+
authMax: string;
|
|
15
|
+
deadline: number;
|
|
16
|
+
previousSessionId: string;
|
|
17
|
+
previousConsumption: string;
|
|
18
|
+
tokensDelivered: string;
|
|
19
|
+
requestCount: number;
|
|
20
|
+
reservedAt: number;
|
|
21
|
+
settledAt: number | null;
|
|
22
|
+
settledAmount: string | null;
|
|
23
|
+
status: 'active' | 'settled' | 'timeout' | 'ghost';
|
|
24
|
+
createdAt: number;
|
|
25
|
+
updatedAt: number;
|
|
26
|
+
}
|
|
27
|
+
export interface StoredReceipt {
|
|
28
|
+
id?: number;
|
|
29
|
+
sessionId: string;
|
|
30
|
+
runningTotal: string;
|
|
31
|
+
requestCount: number;
|
|
32
|
+
responseHash: string;
|
|
33
|
+
sellerSig: string;
|
|
34
|
+
buyerAckSig: string | null;
|
|
35
|
+
createdAt: number;
|
|
36
|
+
}
|
|
37
|
+
export declare class SessionStore {
|
|
38
|
+
private _db;
|
|
39
|
+
/** Cached transaction function for updateDeliveredAndInsertReceipt (compiled once). */
|
|
40
|
+
private readonly _updateDeliveredAndInsertReceiptTxn;
|
|
41
|
+
private readonly _stmts;
|
|
42
|
+
constructor(dataDir: string);
|
|
43
|
+
private _createTables;
|
|
44
|
+
private _prepareStatements;
|
|
45
|
+
upsertSession(session: StoredSession): void;
|
|
46
|
+
getSession(sessionId: string): StoredSession | null;
|
|
47
|
+
getActiveSessionByPeer(peerId: string, role: string): StoredSession | null;
|
|
48
|
+
getLatestSession(peerId: string, role: string): StoredSession | null;
|
|
49
|
+
updateSessionStatus(sessionId: string, status: string, settledAmount?: string): void;
|
|
50
|
+
updateTokensDelivered(sessionId: string, tokens: string, requestCount: number): void;
|
|
51
|
+
getMaxNonce(role: string): number;
|
|
52
|
+
/** List all sessions ordered by most recent first. */
|
|
53
|
+
listAllSessions(limit?: number): StoredSession[];
|
|
54
|
+
/** Get all active sessions for a given role (buyer or seller). */
|
|
55
|
+
getActiveSessions(role: string): StoredSession[];
|
|
56
|
+
getTimedOutSessions(timeoutSeconds: number): StoredSession[];
|
|
57
|
+
insertReceipt(receipt: Omit<StoredReceipt, 'id'>): void;
|
|
58
|
+
getReceipts(sessionId: string): StoredReceipt[];
|
|
59
|
+
/** Atomically update tokens delivered and insert receipt in a single transaction. */
|
|
60
|
+
updateDeliveredAndInsertReceipt(sessionId: string, tokens: string, requestCount: number, receipt: Omit<StoredReceipt, 'id'>): void;
|
|
61
|
+
/** Update receipt ack directly by composite key (no load-all-then-filter). */
|
|
62
|
+
updateReceiptAck(sessionId: string, runningTotal: string, requestCount: number, buyerAckSig: string): void;
|
|
63
|
+
close(): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/payments/session-store.ts"],"names":[],"mappings":"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"}
|