@antseed/node 0.2.93 → 0.2.95
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/buyer-request-handler.d.ts +4 -1
- package/dist/buyer-request-handler.d.ts.map +1 -1
- package/dist/buyer-request-handler.js +83 -4
- package/dist/buyer-request-handler.js.map +1 -1
- package/dist/discovery/http-metadata-resolver.d.ts +7 -0
- package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
- package/dist/discovery/http-metadata-resolver.js +16 -3
- package/dist/discovery/http-metadata-resolver.js.map +1 -1
- package/dist/discovery/index.d.ts +1 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -0
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/verification-links.d.ts +16 -0
- package/dist/discovery/verification-links.d.ts.map +1 -0
- package/dist/discovery/verification-links.js +71 -0
- package/dist/discovery/verification-links.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +25 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +247 -21
- package/dist/node.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +9 -1
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +67 -0
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +13 -1
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +44 -0
- package/dist/p2p/payment-mux.js.map +1 -1
- package/dist/payments/buyer-free-usage-manager.d.ts +39 -0
- package/dist/payments/buyer-free-usage-manager.d.ts.map +1 -0
- package/dist/payments/buyer-free-usage-manager.js +280 -0
- package/dist/payments/buyer-free-usage-manager.js.map +1 -0
- package/dist/payments/buyer-payment-manager.d.ts +2 -4
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +34 -110
- package/dist/payments/buyer-payment-manager.js.map +1 -1
- package/dist/payments/buyer-payment-negotiator.d.ts +6 -2
- package/dist/payments/buyer-payment-negotiator.d.ts.map +1 -1
- package/dist/payments/buyer-payment-negotiator.js +41 -13
- package/dist/payments/buyer-payment-negotiator.js.map +1 -1
- package/dist/payments/chain-config.d.ts +3 -2
- package/dist/payments/chain-config.d.ts.map +1 -1
- package/dist/payments/chain-config.js +4 -4
- package/dist/payments/chain-config.js.map +1 -1
- package/dist/payments/channel-session-state.d.ts +2 -1
- package/dist/payments/channel-session-state.d.ts.map +1 -1
- package/dist/payments/channel-session-state.js +4 -3
- package/dist/payments/channel-session-state.js.map +1 -1
- package/dist/payments/channel-store.d.ts +31 -15
- package/dist/payments/channel-store.d.ts.map +1 -1
- package/dist/payments/channel-store.js +74 -35
- package/dist/payments/channel-store.js.map +1 -1
- package/dist/payments/channel-usage-accounting.d.ts +18 -0
- package/dist/payments/channel-usage-accounting.d.ts.map +1 -0
- package/dist/payments/channel-usage-accounting.js +66 -0
- package/dist/payments/channel-usage-accounting.js.map +1 -0
- package/dist/payments/evm/free-usage-client.d.ts +34 -0
- package/dist/payments/evm/free-usage-client.d.ts.map +1 -0
- package/dist/payments/evm/free-usage-client.js +61 -0
- package/dist/payments/evm/free-usage-client.js.map +1 -0
- package/dist/payments/evm/signatures.d.ts +70 -0
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +89 -0
- package/dist/payments/evm/signatures.js.map +1 -1
- package/dist/payments/index.d.ts +10 -6
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +7 -4
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/seller-free-usage-manager.d.ts +44 -0
- package/dist/payments/seller-free-usage-manager.d.ts.map +1 -0
- package/dist/payments/seller-free-usage-manager.js +350 -0
- package/dist/payments/seller-free-usage-manager.js.map +1 -0
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +21 -20
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/types.d.ts +2 -0
- package/dist/payments/types.d.ts.map +1 -1
- package/dist/reputation/on-chain-reputation.d.ts +35 -3
- package/dist/reputation/on-chain-reputation.d.ts.map +1 -1
- package/dist/reputation/on-chain-reputation.js +87 -7
- package/dist/reputation/on-chain-reputation.js.map +1 -1
- package/dist/seller-request-handler.d.ts +2 -0
- package/dist/seller-request-handler.d.ts.map +1 -1
- package/dist/seller-request-handler.js +8 -0
- package/dist/seller-request-handler.js.map +1 -1
- package/dist/storage/migrations/channels/004_add_channel_kind.d.ts +3 -0
- package/dist/storage/migrations/channels/004_add_channel_kind.d.ts.map +1 -0
- package/dist/storage/migrations/channels/004_add_channel_kind.js +16 -0
- package/dist/storage/migrations/channels/004_add_channel_kind.js.map +1 -0
- package/dist/storage/migrations/channels/index.d.ts.map +1 -1
- package/dist/storage/migrations/channels/index.js +2 -1
- package/dist/storage/migrations/channels/index.js.map +1 -1
- package/dist/types/peer.d.ts +15 -1
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/peer.js.map +1 -1
- package/dist/types/protocol.d.ts +47 -0
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +4 -0
- package/dist/types/protocol.js.map +1 -1
- package/dist/verification/samples.js +1 -1
- package/dist/verification/samples.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { AbiCoder, keccak256, verifyTypedData } from 'ethers';
|
|
2
|
+
import { peerIdToAddress } from '../types/peer.js';
|
|
3
|
+
import { debugLog, debugWarn } from '../utils/debug.js';
|
|
4
|
+
import { FreeUsageClient } from './evm/free-usage-client.js';
|
|
5
|
+
import { computeFreeUsageChannelId, FREE_USAGE_AUTH_TYPES, FREE_USAGE_METADATA_VERSION, FREE_USAGE_OPEN_TYPES, makeFreeUsageDomain, } from './evm/signatures.js';
|
|
6
|
+
const FREE_USAGE_METADATA_ABI = [
|
|
7
|
+
'uint256',
|
|
8
|
+
'uint256',
|
|
9
|
+
'uint256',
|
|
10
|
+
'uint256',
|
|
11
|
+
'tuple(bytes32 serviceId,uint256 cumulativeAmount,uint256 cumulativeInputTokens,uint256 cumulativeCachedInputTokens,uint256 cumulativeOutputTokens,uint256 cumulativeRequestCount)[]',
|
|
12
|
+
];
|
|
13
|
+
const DEFAULT_RECORD_BATCH_SIZE = 16;
|
|
14
|
+
const DEFAULT_RECORD_FLUSH_INTERVAL_MS = 10_000;
|
|
15
|
+
function normalizeTokenCount(value) {
|
|
16
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
17
|
+
return 0n;
|
|
18
|
+
return BigInt(Math.trunc(value));
|
|
19
|
+
}
|
|
20
|
+
export class SellerFreeUsageManager {
|
|
21
|
+
_signer;
|
|
22
|
+
_client;
|
|
23
|
+
_domain;
|
|
24
|
+
_sellerEvmAddr;
|
|
25
|
+
_recordBatchSize;
|
|
26
|
+
_recordFlushIntervalMs;
|
|
27
|
+
_sessions = new Map();
|
|
28
|
+
_buyerLocks = new Map();
|
|
29
|
+
constructor(identity, config) {
|
|
30
|
+
this._signer = identity.wallet;
|
|
31
|
+
this._sellerEvmAddr = identity.wallet.address;
|
|
32
|
+
this._domain = makeFreeUsageDomain(config.chainId, config.freeUsageContractAddress);
|
|
33
|
+
this._recordBatchSize = Math.max(1, Math.trunc(config.recordBatchSize ?? DEFAULT_RECORD_BATCH_SIZE));
|
|
34
|
+
this._recordFlushIntervalMs = Math.max(1, Math.trunc(config.recordFlushIntervalMs ?? DEFAULT_RECORD_FLUSH_INTERVAL_MS));
|
|
35
|
+
this._client = new FreeUsageClient({
|
|
36
|
+
rpcUrl: config.rpcUrl,
|
|
37
|
+
...(config.fallbackRpcUrls ? { fallbackRpcUrls: config.fallbackRpcUrls } : {}),
|
|
38
|
+
contractAddress: config.freeUsageContractAddress,
|
|
39
|
+
evmChainId: config.chainId,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
get client() {
|
|
43
|
+
return this._client;
|
|
44
|
+
}
|
|
45
|
+
handleOpen(buyerPeerId, payload, paymentMux) {
|
|
46
|
+
const lock = (this._buyerLocks.get(buyerPeerId) ?? Promise.resolve()).then(async () => {
|
|
47
|
+
await this._handleOpenInner(buyerPeerId, payload, paymentMux);
|
|
48
|
+
});
|
|
49
|
+
this._buyerLocks.set(buyerPeerId, lock.catch(() => { }));
|
|
50
|
+
void lock.catch((err) => {
|
|
51
|
+
debugWarn(`[SellerFreeUsage] Open failed for ${buyerPeerId.slice(0, 12)}...: ${err instanceof Error ? err.message : err}`);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
handleAuth(buyerPeerId, payload, paymentMux) {
|
|
55
|
+
const lock = (this._buyerLocks.get(buyerPeerId) ?? Promise.resolve()).then(async () => {
|
|
56
|
+
await this._handleAuthInner(buyerPeerId, payload, paymentMux);
|
|
57
|
+
});
|
|
58
|
+
this._buyerLocks.set(buyerPeerId, lock.catch(() => { }));
|
|
59
|
+
void lock.catch((err) => {
|
|
60
|
+
debugWarn(`[SellerFreeUsage] UsageAuth failed for ${buyerPeerId.slice(0, 12)}...: ${err instanceof Error ? err.message : err}`);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
onPeerDisconnect(buyerPeerId) {
|
|
64
|
+
const session = this._sessions.get(buyerPeerId);
|
|
65
|
+
if (session) {
|
|
66
|
+
this._clearFlushTimer(session);
|
|
67
|
+
session.closeRequested = true;
|
|
68
|
+
if (session.pendingRecord || session.flushPromise) {
|
|
69
|
+
void this._flushPendingRecord(buyerPeerId, session).finally(() => {
|
|
70
|
+
if (this._sessions.get(buyerPeerId) === session) {
|
|
71
|
+
this._sessions.delete(buyerPeerId);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this._sessions.delete(buyerPeerId);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this._sessions.delete(buyerPeerId);
|
|
81
|
+
}
|
|
82
|
+
this._buyerLocks.delete(buyerPeerId);
|
|
83
|
+
}
|
|
84
|
+
async flushAllPendingRecords() {
|
|
85
|
+
await Promise.all([...this._sessions.entries()].map(([buyerPeerId, session]) => {
|
|
86
|
+
this._clearFlushTimer(session);
|
|
87
|
+
return this._flushPendingRecord(buyerPeerId, session);
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
reportUsageRequest(buyerPeerId, paymentMux, usage) {
|
|
91
|
+
const session = this._sessions.get(buyerPeerId);
|
|
92
|
+
if (!session) {
|
|
93
|
+
debugWarn(`[SellerFreeUsage] Cannot request usage auth for ${buyerPeerId.slice(0, 12)}...: no free usage channel`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const nextSequence = (session.requestedSequence > session.acceptedSequence
|
|
97
|
+
? session.requestedSequence
|
|
98
|
+
: session.acceptedSequence) + 1n;
|
|
99
|
+
const payload = {
|
|
100
|
+
channelId: session.channelId,
|
|
101
|
+
requiredSequence: nextSequence.toString(),
|
|
102
|
+
currentAcceptedSequence: session.acceptedSequence.toString(),
|
|
103
|
+
...(usage.requestId ? { requestId: usage.requestId } : {}),
|
|
104
|
+
inputTokens: normalizeTokenCount(usage.inputTokens).toString(),
|
|
105
|
+
outputTokens: normalizeTokenCount(usage.outputTokens).toString(),
|
|
106
|
+
...(usage.service ? { service: usage.service } : {}),
|
|
107
|
+
};
|
|
108
|
+
try {
|
|
109
|
+
paymentMux.sendNeedFreeUsageAuth(payload);
|
|
110
|
+
const inputTokens = normalizeTokenCount(usage.inputTokens);
|
|
111
|
+
const outputTokens = normalizeTokenCount(usage.outputTokens);
|
|
112
|
+
session.requestedSequence = nextSequence;
|
|
113
|
+
session.requestedInputTokens += inputTokens;
|
|
114
|
+
session.requestedOutputTokens += outputTokens;
|
|
115
|
+
session.requestedRequestCount += 1n;
|
|
116
|
+
session.expectedUsageBySequence.set(nextSequence.toString(), {
|
|
117
|
+
cumulativeInputTokens: session.requestedInputTokens,
|
|
118
|
+
cumulativeOutputTokens: session.requestedOutputTokens,
|
|
119
|
+
cumulativeRequestCount: session.requestedRequestCount,
|
|
120
|
+
});
|
|
121
|
+
debugLog(`[SellerFreeUsage] NeedFreeUsageAuth sent to ${buyerPeerId.slice(0, 12)}... ` +
|
|
122
|
+
`channel=${session.channelId.slice(0, 18)}... sequence=${nextSequence}`);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
debugWarn(`[SellerFreeUsage] NeedFreeUsageAuth send failed: ${err instanceof Error ? err.message : err}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async _handleOpenInner(buyerPeerId, payload, paymentMux) {
|
|
129
|
+
const buyerEvmAddr = peerIdToAddress(buyerPeerId);
|
|
130
|
+
const expectedChannelId = computeFreeUsageChannelId(buyerEvmAddr, this._sellerEvmAddr, payload.salt);
|
|
131
|
+
if (expectedChannelId.toLowerCase() !== payload.channelId.toLowerCase()) {
|
|
132
|
+
throw new Error(`channelId mismatch expected=${expectedChannelId} got=${payload.channelId}`);
|
|
133
|
+
}
|
|
134
|
+
if (payload.deadline <= Math.floor(Date.now() / 1000)) {
|
|
135
|
+
throw new Error('free usage open expired');
|
|
136
|
+
}
|
|
137
|
+
const recovered = verifyTypedData(this._domain, FREE_USAGE_OPEN_TYPES, { channelId: payload.channelId, deadline: BigInt(payload.deadline) }, payload.openSig);
|
|
138
|
+
if (recovered.toLowerCase() !== buyerEvmAddr.toLowerCase()) {
|
|
139
|
+
throw new Error(`invalid FreeUsageOpen signer recovered=${recovered} expected=${buyerEvmAddr}`);
|
|
140
|
+
}
|
|
141
|
+
const openPromise = this._openOnChain(buyerEvmAddr, payload);
|
|
142
|
+
const session = {
|
|
143
|
+
channelId: payload.channelId,
|
|
144
|
+
buyerEvmAddr,
|
|
145
|
+
salt: payload.salt,
|
|
146
|
+
deadline: payload.deadline,
|
|
147
|
+
acceptedSequence: 0n,
|
|
148
|
+
requestedSequence: 0n,
|
|
149
|
+
requestedInputTokens: 0n,
|
|
150
|
+
requestedOutputTokens: 0n,
|
|
151
|
+
requestedRequestCount: 0n,
|
|
152
|
+
expectedUsageBySequence: new Map(),
|
|
153
|
+
openPromise,
|
|
154
|
+
pendingRecord: null,
|
|
155
|
+
recordsSinceFlush: 0,
|
|
156
|
+
flushTimer: null,
|
|
157
|
+
flushPromise: null,
|
|
158
|
+
closeRequested: false,
|
|
159
|
+
};
|
|
160
|
+
this._sessions.set(buyerPeerId, session);
|
|
161
|
+
try {
|
|
162
|
+
await openPromise;
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
if (this._sessions.get(buyerPeerId) === session) {
|
|
166
|
+
this._sessions.delete(buyerPeerId);
|
|
167
|
+
}
|
|
168
|
+
throw err;
|
|
169
|
+
}
|
|
170
|
+
paymentMux.sendFreeUsageAck({ channelId: payload.channelId, acceptedSequence: '0' });
|
|
171
|
+
debugLog(`[SellerFreeUsage] Open reported on-chain channel=${payload.channelId.slice(0, 18)}...`);
|
|
172
|
+
}
|
|
173
|
+
async _openOnChain(buyerEvmAddr, payload) {
|
|
174
|
+
try {
|
|
175
|
+
await this._client.open(this._signer, buyerEvmAddr, payload.salt, BigInt(payload.deadline), payload.openSig);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const existing = await this._tryGetExistingSession(payload.channelId);
|
|
179
|
+
if (existing
|
|
180
|
+
&& existing.status === 1
|
|
181
|
+
&& existing.buyer.toLowerCase() === buyerEvmAddr.toLowerCase()
|
|
182
|
+
&& existing.seller.toLowerCase() === this._sellerEvmAddr.toLowerCase()) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async _handleAuthInner(buyerPeerId, payload, paymentMux) {
|
|
189
|
+
const session = this._sessions.get(buyerPeerId);
|
|
190
|
+
if (!session || session.channelId.toLowerCase() !== payload.channelId.toLowerCase()) {
|
|
191
|
+
throw new Error(`unknown free usage channel ${payload.channelId}`);
|
|
192
|
+
}
|
|
193
|
+
const sequence = BigInt(payload.sequence);
|
|
194
|
+
if (sequence <= session.acceptedSequence) {
|
|
195
|
+
paymentMux.sendFreeUsageAck({
|
|
196
|
+
channelId: payload.channelId,
|
|
197
|
+
acceptedSequence: session.acceptedSequence.toString(),
|
|
198
|
+
});
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const metadataHash = keccak256(payload.metadata);
|
|
202
|
+
if (metadataHash.toLowerCase() !== payload.metadataHash.toLowerCase()) {
|
|
203
|
+
throw new Error('metadataHash mismatch');
|
|
204
|
+
}
|
|
205
|
+
const sequenceKey = sequence.toString();
|
|
206
|
+
const expectedUsage = session.expectedUsageBySequence.get(sequenceKey);
|
|
207
|
+
if (!expectedUsage) {
|
|
208
|
+
throw new Error(`unexpected free usage sequence ${sequence}`);
|
|
209
|
+
}
|
|
210
|
+
// The seller enforces aggregate counters it measured; per-service tuples
|
|
211
|
+
// remain buyer-attributed audit metadata.
|
|
212
|
+
const signedUsage = this._decodeFreeUsageMetadata(payload.metadata);
|
|
213
|
+
const payloadInputTokens = BigInt(payload.cumulativeInputTokens);
|
|
214
|
+
const payloadOutputTokens = BigInt(payload.cumulativeOutputTokens);
|
|
215
|
+
if (payloadInputTokens !== signedUsage.cumulativeInputTokens
|
|
216
|
+
|| payloadOutputTokens !== signedUsage.cumulativeOutputTokens
|
|
217
|
+
|| signedUsage.cumulativeInputTokens !== expectedUsage.cumulativeInputTokens
|
|
218
|
+
|| signedUsage.cumulativeOutputTokens !== expectedUsage.cumulativeOutputTokens
|
|
219
|
+
|| signedUsage.cumulativeRequestCount !== expectedUsage.cumulativeRequestCount) {
|
|
220
|
+
throw new Error(`free usage totals mismatch sequence=${sequence} ` +
|
|
221
|
+
`expected(in=${expectedUsage.cumulativeInputTokens},out=${expectedUsage.cumulativeOutputTokens},requests=${expectedUsage.cumulativeRequestCount}) ` +
|
|
222
|
+
`got(in=${signedUsage.cumulativeInputTokens},out=${signedUsage.cumulativeOutputTokens},requests=${signedUsage.cumulativeRequestCount})`);
|
|
223
|
+
}
|
|
224
|
+
const recovered = verifyTypedData(this._domain, FREE_USAGE_AUTH_TYPES, {
|
|
225
|
+
channelId: payload.channelId,
|
|
226
|
+
sequence,
|
|
227
|
+
metadataHash: payload.metadataHash,
|
|
228
|
+
deadline: BigInt(payload.deadline),
|
|
229
|
+
}, payload.usageSig);
|
|
230
|
+
if (recovered.toLowerCase() !== session.buyerEvmAddr.toLowerCase()) {
|
|
231
|
+
throw new Error(`invalid FreeUsageAuth signer recovered=${recovered} expected=${session.buyerEvmAddr}`);
|
|
232
|
+
}
|
|
233
|
+
session.pendingRecord = {
|
|
234
|
+
sequence,
|
|
235
|
+
metadata: payload.metadata,
|
|
236
|
+
deadline: BigInt(payload.deadline),
|
|
237
|
+
usageSig: payload.usageSig,
|
|
238
|
+
};
|
|
239
|
+
session.recordsSinceFlush += 1;
|
|
240
|
+
session.acceptedSequence = sequence;
|
|
241
|
+
for (const key of session.expectedUsageBySequence.keys()) {
|
|
242
|
+
if (BigInt(key) <= sequence)
|
|
243
|
+
session.expectedUsageBySequence.delete(key);
|
|
244
|
+
}
|
|
245
|
+
paymentMux.sendFreeUsageAck({
|
|
246
|
+
channelId: payload.channelId,
|
|
247
|
+
acceptedSequence: sequence.toString(),
|
|
248
|
+
});
|
|
249
|
+
this._scheduleRecordFlush(buyerPeerId, session);
|
|
250
|
+
debugLog(`[SellerFreeUsage] Usage auth accepted channel=${payload.channelId.slice(0, 18)}... ` +
|
|
251
|
+
`sequence=${sequence}`);
|
|
252
|
+
}
|
|
253
|
+
_scheduleRecordFlush(buyerPeerId, session, opts = {}) {
|
|
254
|
+
if (!session.pendingRecord || session.flushPromise)
|
|
255
|
+
return;
|
|
256
|
+
if (!opts.retry && session.recordsSinceFlush >= this._recordBatchSize) {
|
|
257
|
+
this._clearFlushTimer(session);
|
|
258
|
+
void this._flushPendingRecord(buyerPeerId, session);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (session.flushTimer)
|
|
262
|
+
return;
|
|
263
|
+
session.flushTimer = setTimeout(() => {
|
|
264
|
+
session.flushTimer = null;
|
|
265
|
+
void this._flushPendingRecord(buyerPeerId, session);
|
|
266
|
+
}, this._recordFlushIntervalMs);
|
|
267
|
+
session.flushTimer.unref?.();
|
|
268
|
+
}
|
|
269
|
+
_clearFlushTimer(session) {
|
|
270
|
+
if (!session.flushTimer)
|
|
271
|
+
return;
|
|
272
|
+
clearTimeout(session.flushTimer);
|
|
273
|
+
session.flushTimer = null;
|
|
274
|
+
}
|
|
275
|
+
_flushPendingRecord(buyerPeerId, session) {
|
|
276
|
+
if (!session.pendingRecord)
|
|
277
|
+
return Promise.resolve();
|
|
278
|
+
if (session.flushPromise)
|
|
279
|
+
return session.flushPromise;
|
|
280
|
+
let promise;
|
|
281
|
+
promise = (async () => {
|
|
282
|
+
const flushed = await this._doFlushPendingRecord(buyerPeerId, session);
|
|
283
|
+
if (session.flushPromise === promise) {
|
|
284
|
+
session.flushPromise = null;
|
|
285
|
+
}
|
|
286
|
+
if (session.pendingRecord && !session.closeRequested) {
|
|
287
|
+
this._scheduleRecordFlush(buyerPeerId, session, flushed ? {} : { retry: true });
|
|
288
|
+
}
|
|
289
|
+
})();
|
|
290
|
+
session.flushPromise = promise;
|
|
291
|
+
return promise;
|
|
292
|
+
}
|
|
293
|
+
async _doFlushPendingRecord(buyerPeerId, session) {
|
|
294
|
+
const record = session.pendingRecord;
|
|
295
|
+
if (!record)
|
|
296
|
+
return true;
|
|
297
|
+
this._clearFlushTimer(session);
|
|
298
|
+
try {
|
|
299
|
+
await session.openPromise;
|
|
300
|
+
const closeRequested = session.closeRequested;
|
|
301
|
+
if (closeRequested) {
|
|
302
|
+
await this._client.close(this._signer, session.channelId, record.sequence, record.metadata, record.deadline, record.usageSig);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
await this._client.record(this._signer, session.channelId, record.sequence, record.metadata, record.deadline, record.usageSig);
|
|
306
|
+
}
|
|
307
|
+
if (!closeRequested && session.closeRequested) {
|
|
308
|
+
await this._client.close(this._signer, session.channelId, record.sequence, record.metadata, record.deadline, record.usageSig);
|
|
309
|
+
}
|
|
310
|
+
const pending = session.pendingRecord;
|
|
311
|
+
if (!pending || pending.sequence <= record.sequence) {
|
|
312
|
+
session.pendingRecord = null;
|
|
313
|
+
session.recordsSinceFlush = 0;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const delta = pending.sequence - record.sequence;
|
|
317
|
+
session.recordsSinceFlush = Number(delta > BigInt(Number.MAX_SAFE_INTEGER) ? BigInt(Number.MAX_SAFE_INTEGER) : delta);
|
|
318
|
+
}
|
|
319
|
+
debugLog(`[SellerFreeUsage] Usage ${session.closeRequested ? 'closed' : 'reported'} on-chain channel=${session.channelId.slice(0, 18)}... ` +
|
|
320
|
+
`sequence=${record.sequence}`);
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
debugWarn(`[SellerFreeUsage] Deferred record failed for ${buyerPeerId.slice(0, 12)}... ` +
|
|
325
|
+
`channel=${session.channelId.slice(0, 18)}... sequence=${record.sequence}: ` +
|
|
326
|
+
`${err instanceof Error ? err.message : err}`);
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async _tryGetExistingSession(channelId) {
|
|
331
|
+
try {
|
|
332
|
+
return await this._client.getSession(channelId);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
_decodeFreeUsageMetadata(metadata) {
|
|
339
|
+
const [version, inputTokens, outputTokens, requestCount] = AbiCoder.defaultAbiCoder().decode(FREE_USAGE_METADATA_ABI, metadata);
|
|
340
|
+
if (BigInt(version) !== FREE_USAGE_METADATA_VERSION) {
|
|
341
|
+
throw new Error(`unsupported free usage metadata version ${version}`);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
cumulativeInputTokens: BigInt(inputTokens),
|
|
345
|
+
cumulativeOutputTokens: BigInt(outputTokens),
|
|
346
|
+
cumulativeRequestCount: BigInt(requestCount),
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=seller-free-usage-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seller-free-usage-manager.js","sourceRoot":"","sources":["../../src/payments/seller-free-usage-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seller-payment-manager.d.ts","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAU1D,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"seller-payment-manager.d.ts","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { ChannelsClient } from './evm/channels-client.js';
|
|
|
3
3
|
import { SPENDING_AUTH_TYPES, RESERVE_AUTH_TYPES, makeChannelsDomain, encodeMetadata, ZERO_METADATA, } from './evm/signatures.js';
|
|
4
4
|
import { debugLog, debugWarn } from '../utils/debug.js';
|
|
5
5
|
import { peerIdToAddress } from '../types/peer.js';
|
|
6
|
+
import { CHANNEL_ROLE, CHANNEL_STATUS } from './channel-store.js';
|
|
6
7
|
import { classifyOnChainChannel, matchesChannelParties } from './channel-session-state.js';
|
|
7
8
|
/** Default minimum budget per request: $0.50 USDC (base units). */
|
|
8
9
|
const DEFAULT_MIN_BUDGET_PER_REQUEST = '500000';
|
|
@@ -101,7 +102,7 @@ export class SellerPaymentManager {
|
|
|
101
102
|
? BigInt(config.minSettleDelta)
|
|
102
103
|
: DEFAULT_MIN_SETTLE_DELTA;
|
|
103
104
|
// Hydrate from persisted channels
|
|
104
|
-
const activeChannels = this._channelStore.getActiveChannels(
|
|
105
|
+
const activeChannels = this._channelStore.getActiveChannels(CHANNEL_ROLE.SELLER);
|
|
105
106
|
for (const channel of activeChannels) {
|
|
106
107
|
this._activeBuyers.add(channel.peerId);
|
|
107
108
|
this._hydratedChannelIds.add(channel.sessionId);
|
|
@@ -129,7 +130,7 @@ export class SellerPaymentManager {
|
|
|
129
130
|
* Must be called after construction (async, cannot run in constructor).
|
|
130
131
|
*/
|
|
131
132
|
async validateHydratedChannels() {
|
|
132
|
-
const activeChannels = this._channelStore.getActiveChannels(
|
|
133
|
+
const activeChannels = this._channelStore.getActiveChannels(CHANNEL_ROLE.SELLER);
|
|
133
134
|
if (activeChannels.length === 0)
|
|
134
135
|
return;
|
|
135
136
|
const { seller: sellerEvmAddr } = await this._resolvedAddresses;
|
|
@@ -174,7 +175,7 @@ export class SellerPaymentManager {
|
|
|
174
175
|
debugLog(`[SellerPayment] Startup validation: evicted ${evicted}/${activeChannels.length} stale channel(s)`);
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
|
-
_evictStaleChannel(channelId, peerId, reason, status =
|
|
178
|
+
_evictStaleChannel(channelId, peerId, reason, status = CHANNEL_STATUS.SETTLED) {
|
|
178
179
|
this._channelStore.updateChannelStatus(channelId, status);
|
|
179
180
|
this._acceptedCumulative.delete(channelId);
|
|
180
181
|
this._spent.delete(channelId);
|
|
@@ -361,7 +362,7 @@ export class SellerPaymentManager {
|
|
|
361
362
|
const session = {
|
|
362
363
|
sessionId: channelId,
|
|
363
364
|
peerId: buyerPeerId,
|
|
364
|
-
role:
|
|
365
|
+
role: CHANNEL_ROLE.SELLER,
|
|
365
366
|
sellerEvmAddr,
|
|
366
367
|
buyerEvmAddr,
|
|
367
368
|
nonce: 0,
|
|
@@ -374,7 +375,7 @@ export class SellerPaymentManager {
|
|
|
374
375
|
reservedAt: now,
|
|
375
376
|
settledAt: null,
|
|
376
377
|
settledAmount: null,
|
|
377
|
-
status:
|
|
378
|
+
status: CHANNEL_STATUS.ACTIVE,
|
|
378
379
|
latestBuyerSig: payload.spendingAuthSig,
|
|
379
380
|
latestSpendingAuthSig: payload.spendingAuthSig,
|
|
380
381
|
latestMetadata: payload.metadata,
|
|
@@ -697,7 +698,7 @@ export class SellerPaymentManager {
|
|
|
697
698
|
const session = {
|
|
698
699
|
sessionId: channelId,
|
|
699
700
|
peerId: buyerPeerId,
|
|
700
|
-
role:
|
|
701
|
+
role: CHANNEL_ROLE.SELLER,
|
|
701
702
|
sellerEvmAddr,
|
|
702
703
|
buyerEvmAddr,
|
|
703
704
|
nonce: 0,
|
|
@@ -710,7 +711,7 @@ export class SellerPaymentManager {
|
|
|
710
711
|
reservedAt: now,
|
|
711
712
|
settledAt: null,
|
|
712
713
|
settledAmount: onChain.settled > 0n ? onChain.settled.toString() : null,
|
|
713
|
-
status:
|
|
714
|
+
status: CHANNEL_STATUS.ACTIVE,
|
|
714
715
|
latestBuyerSig: payload.spendingAuthSig,
|
|
715
716
|
latestSpendingAuthSig: payload.spendingAuthSig,
|
|
716
717
|
latestMetadata: payload.metadata,
|
|
@@ -743,7 +744,7 @@ export class SellerPaymentManager {
|
|
|
743
744
|
*/
|
|
744
745
|
async validateAndAcceptAuth(buyerPeerId, auth) {
|
|
745
746
|
// Look up active session for this buyer
|
|
746
|
-
const session = this._channelStore.getActiveChannelByPeer(buyerPeerId,
|
|
747
|
+
const session = this._channelStore.getActiveChannelByPeer(buyerPeerId, CHANNEL_ROLE.SELLER);
|
|
747
748
|
if (!session) {
|
|
748
749
|
debugWarn(`[SellerPayment] validateAndAcceptAuth: no active session for buyer ${buyerPeerId.slice(0, 12)}...`);
|
|
749
750
|
return false;
|
|
@@ -853,7 +854,7 @@ export class SellerPaymentManager {
|
|
|
853
854
|
* for future requests. No cleanup is performed so the session can resume.
|
|
854
855
|
*/
|
|
855
856
|
async settleSession(buyerPeerId, { cleanupOnFailure = false, settleOnly = false } = {}) {
|
|
856
|
-
const session = this._channelStore.getActiveChannelByPeer(buyerPeerId,
|
|
857
|
+
const session = this._channelStore.getActiveChannelByPeer(buyerPeerId, CHANNEL_ROLE.SELLER);
|
|
857
858
|
if (!session) {
|
|
858
859
|
debugWarn(`[SellerPayment] settleSession: no active session for buyer ${buyerPeerId.slice(0, 12)}...`);
|
|
859
860
|
return;
|
|
@@ -884,7 +885,7 @@ export class SellerPaymentManager {
|
|
|
884
885
|
this._closingChannels.add(channelId);
|
|
885
886
|
try {
|
|
886
887
|
await this._channelsClient.close(this._signer, channelId, amount, metadata, sig);
|
|
887
|
-
this._channelStore.updateChannelStatus(channelId,
|
|
888
|
+
this._channelStore.updateChannelStatus(channelId, CHANNEL_STATUS.SETTLED, amount.toString());
|
|
888
889
|
this._closeRetryCount.delete(channelId);
|
|
889
890
|
}
|
|
890
891
|
catch (err) {
|
|
@@ -914,7 +915,7 @@ export class SellerPaymentManager {
|
|
|
914
915
|
}
|
|
915
916
|
// ── Disconnect handling ───────────────────────────────────────
|
|
916
917
|
onBuyerDisconnect(buyerPeerId) {
|
|
917
|
-
const session = this._channelStore.getActiveChannelByPeer(buyerPeerId,
|
|
918
|
+
const session = this._channelStore.getActiveChannelByPeer(buyerPeerId, CHANNEL_ROLE.SELLER);
|
|
918
919
|
if (!session)
|
|
919
920
|
return;
|
|
920
921
|
const settleOnDisconnect = this._config.settleOnDisconnect ?? true;
|
|
@@ -946,7 +947,7 @@ export class SellerPaymentManager {
|
|
|
946
947
|
*/
|
|
947
948
|
async checkTimeouts() {
|
|
948
949
|
const nowSecs = Math.floor(Date.now() / 1000);
|
|
949
|
-
const activeChannels = this._channelStore.getActiveChannels(
|
|
950
|
+
const activeChannels = this._channelStore.getActiveChannels(CHANNEL_ROLE.SELLER);
|
|
950
951
|
for (const channel of activeChannels) {
|
|
951
952
|
let accepted = this._acceptedCumulative.get(channel.sessionId) ?? 0n;
|
|
952
953
|
if (accepted === 0n) {
|
|
@@ -977,7 +978,7 @@ export class SellerPaymentManager {
|
|
|
977
978
|
if (onChainState.status !== 'active') {
|
|
978
979
|
// 'unknown' means the RPC returned partial data. Evict locally
|
|
979
980
|
// rather than risking a close() against an ambiguous channel.
|
|
980
|
-
this._evictStaleChannel(channel.sessionId, channel.peerId, 'no auths, past deadline, on-chain status unknown',
|
|
981
|
+
this._evictStaleChannel(channel.sessionId, channel.peerId, 'no auths, past deadline, on-chain status unknown', CHANNEL_STATUS.TIMEOUT);
|
|
981
982
|
continue;
|
|
982
983
|
}
|
|
983
984
|
await this._closeWithoutAuth(channel.sessionId, channel.peerId, onChainState.channel.settled);
|
|
@@ -1002,7 +1003,7 @@ export class SellerPaymentManager {
|
|
|
1002
1003
|
const retries = this._closeRetryCount.get(channelId) ?? 0;
|
|
1003
1004
|
if (retries >= SellerPaymentManager.MAX_CLOSE_RETRIES) {
|
|
1004
1005
|
debugWarn(`[SellerPayment] Zombie close failed ${retries} times for ${channelId.slice(0, 18)}... — falling back to local eviction`);
|
|
1005
|
-
this._evictStaleChannel(channelId, peerId, 'no auths, past deadline, close retries exhausted',
|
|
1006
|
+
this._evictStaleChannel(channelId, peerId, 'no auths, past deadline, close retries exhausted', CHANNEL_STATUS.TIMEOUT);
|
|
1006
1007
|
return;
|
|
1007
1008
|
}
|
|
1008
1009
|
this._closingChannels.add(channelId);
|
|
@@ -1010,7 +1011,7 @@ export class SellerPaymentManager {
|
|
|
1010
1011
|
try {
|
|
1011
1012
|
await this._channelsClient.close(this._signer, channelId, onChainSettled, '0x', '0x');
|
|
1012
1013
|
this._closeRetryCount.delete(channelId);
|
|
1013
|
-
this._evictStaleChannel(channelId, peerId, 'zombie closed on-chain',
|
|
1014
|
+
this._evictStaleChannel(channelId, peerId, 'zombie closed on-chain', CHANNEL_STATUS.SETTLED);
|
|
1014
1015
|
}
|
|
1015
1016
|
catch (err) {
|
|
1016
1017
|
this._closeRetryCount.set(channelId, retries + 1);
|
|
@@ -1026,7 +1027,7 @@ export class SellerPaymentManager {
|
|
|
1026
1027
|
}
|
|
1027
1028
|
/** Get the active session for a buyer peer, or null. */
|
|
1028
1029
|
getChannelByPeer(buyerPeerId) {
|
|
1029
|
-
return this._channelStore.getActiveChannelByPeer(buyerPeerId,
|
|
1030
|
+
return this._channelStore.getActiveChannelByPeer(buyerPeerId, CHANNEL_ROLE.SELLER);
|
|
1030
1031
|
}
|
|
1031
1032
|
/** Get total USDC spent for a session (sum of recordSpend calls). */
|
|
1032
1033
|
getCumulativeSpend(sessionId) {
|
|
@@ -1061,7 +1062,7 @@ export class SellerPaymentManager {
|
|
|
1061
1062
|
let suggestedAmount = SellerPaymentManager.DEFAULT_SUGGESTED_AMOUNT;
|
|
1062
1063
|
if (buyerPeerId) {
|
|
1063
1064
|
const priorSession = this._channelStore.getLatestChannel(buyerPeerId, 'seller');
|
|
1064
|
-
if (priorSession && priorSession.status ===
|
|
1065
|
+
if (priorSession && priorSession.status === CHANNEL_STATUS.SETTLED) {
|
|
1065
1066
|
// Returning buyer with proven history — could use a different amount
|
|
1066
1067
|
// For now, use the same default; config can override later
|
|
1067
1068
|
suggestedAmount = SellerPaymentManager.DEFAULT_SUGGESTED_AMOUNT;
|
|
@@ -1089,7 +1090,7 @@ export class SellerPaymentManager {
|
|
|
1089
1090
|
debugLog(`[SellerPayment] CloseRequested for channel ${channelId.slice(0, 18)}... — closing with cumulative=${amount}`);
|
|
1090
1091
|
try {
|
|
1091
1092
|
await this._channelsClient.close(this._signer, channelId, amount, metadata, sig);
|
|
1092
|
-
this._channelStore.updateChannelStatus(channelId,
|
|
1093
|
+
this._channelStore.updateChannelStatus(channelId, CHANNEL_STATUS.SETTLED, amount.toString());
|
|
1093
1094
|
debugLog(`[SellerPayment] Channel ${channelId.slice(0, 18)}... closed successfully after CloseRequested`);
|
|
1094
1095
|
}
|
|
1095
1096
|
catch (err) {
|
|
@@ -1101,7 +1102,7 @@ export class SellerPaymentManager {
|
|
|
1101
1102
|
// No voucher — seller can't claim anything. Clean up locally;
|
|
1102
1103
|
// buyer will withdraw after grace period.
|
|
1103
1104
|
debugLog(`[SellerPayment] CloseRequested for channel ${channelId.slice(0, 18)}... — no SpendingAuth, cleaning up locally`);
|
|
1104
|
-
this._channelStore.updateChannelStatus(channelId,
|
|
1105
|
+
this._channelStore.updateChannelStatus(channelId, CHANNEL_STATUS.TIMEOUT);
|
|
1105
1106
|
}
|
|
1106
1107
|
// Clean up in-memory state
|
|
1107
1108
|
this._acceptedCumulative.delete(channelId);
|
|
@@ -1133,7 +1134,7 @@ export class SellerPaymentManager {
|
|
|
1133
1134
|
const events = await this._channelsClient.getCloseRequestedEvents(fromBlock, latestBlock);
|
|
1134
1135
|
for (const event of events) {
|
|
1135
1136
|
// Only handle channels this seller is actively tracking
|
|
1136
|
-
if (this._acceptedCumulative.has(event.channelId) || this._channelStore.getChannel(event.channelId)?.status ===
|
|
1137
|
+
if (this._acceptedCumulative.has(event.channelId) || this._channelStore.getChannel(event.channelId)?.status === CHANNEL_STATUS.ACTIVE) {
|
|
1137
1138
|
await this.handleCloseRequested(event.channelId);
|
|
1138
1139
|
}
|
|
1139
1140
|
}
|