@antseed/node 0.2.26 → 0.2.28
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 +85 -11
- package/dist/buyer-request-handler.d.ts +41 -0
- package/dist/buyer-request-handler.d.ts.map +1 -0
- package/dist/buyer-request-handler.js +254 -0
- package/dist/buyer-request-handler.js.map +1 -0
- package/dist/discovery/announcer.d.ts +5 -2
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +11 -14
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/index.d.ts +0 -2
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +0 -2
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +2 -2
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +47 -72
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.js +6 -6
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +1 -2
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +3 -5
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +1 -1
- package/dist/discovery/reputation-verifier.d.ts +2 -22
- package/dist/discovery/reputation-verifier.d.ts.map +1 -1
- package/dist/discovery/reputation-verifier.js +2 -24
- package/dist/discovery/reputation-verifier.js.map +1 -1
- package/dist/discovery/stats-verifier.d.ts +27 -0
- package/dist/discovery/stats-verifier.d.ts.map +1 -0
- package/dist/discovery/stats-verifier.js +38 -0
- package/dist/discovery/stats-verifier.js.map +1 -0
- package/dist/index.d.ts +17 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/metering/index.d.ts +1 -0
- package/dist/metering/index.d.ts.map +1 -1
- package/dist/metering/index.js +1 -0
- package/dist/metering/index.js.map +1 -1
- package/dist/metering/receipt-generator.d.ts +4 -4
- package/dist/metering/receipt-generator.d.ts.map +1 -1
- package/dist/metering/receipt-verifier.d.ts +6 -6
- package/dist/metering/receipt-verifier.d.ts.map +1 -1
- package/dist/metering/receipt-verifier.js +1 -1
- package/dist/metering/seller-session-tracker.d.ts +91 -0
- package/dist/metering/seller-session-tracker.d.ts.map +1 -0
- package/dist/metering/seller-session-tracker.js +261 -0
- package/dist/metering/seller-session-tracker.js.map +1 -0
- package/dist/metering/storage.d.ts +11 -5
- package/dist/metering/storage.d.ts.map +1 -1
- package/dist/metering/storage.js +28 -80
- package/dist/metering/storage.js.map +1 -1
- package/dist/node.d.ts +83 -104
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +313 -1026
- package/dist/node.js.map +1 -1
- package/dist/p2p/connection-auth.d.ts +2 -1
- package/dist/p2p/connection-auth.d.ts.map +1 -1
- package/dist/p2p/connection-auth.js +6 -6
- package/dist/p2p/connection-auth.js.map +1 -1
- package/dist/p2p/connection-manager.d.ts +3 -2
- package/dist/p2p/connection-manager.d.ts.map +1 -1
- package/dist/p2p/connection-manager.js +12 -6
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/p2p/identity.d.ts +44 -13
- package/dist/p2p/identity.d.ts.map +1 -1
- package/dist/p2p/identity.js +103 -49
- package/dist/p2p/identity.js.map +1 -1
- package/dist/p2p/index.d.ts +1 -3
- package/dist/p2p/index.d.ts.map +1 -1
- package/dist/p2p/index.js +1 -3
- package/dist/p2p/index.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +9 -19
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +41 -89
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +14 -29
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +41 -79
- package/dist/p2p/payment-mux.js.map +1 -1
- package/dist/payments/balance-manager.d.ts +2 -2
- package/dist/payments/balance-manager.d.ts.map +1 -1
- package/dist/payments/balance-manager.js +5 -5
- package/dist/payments/balance-manager.js.map +1 -1
- package/dist/payments/buyer-payment-manager.d.ts +157 -83
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +573 -204
- package/dist/payments/buyer-payment-manager.js.map +1 -1
- package/dist/payments/buyer-payment-negotiator.d.ts +84 -0
- package/dist/payments/buyer-payment-negotiator.d.ts.map +1 -0
- package/dist/payments/buyer-payment-negotiator.js +624 -0
- package/dist/payments/buyer-payment-negotiator.js.map +1 -0
- package/dist/payments/chain-config.d.ts +44 -0
- package/dist/payments/chain-config.d.ts.map +1 -0
- package/dist/payments/chain-config.js +70 -0
- package/dist/payments/chain-config.js.map +1 -0
- package/dist/payments/channel-session-state.d.ts +13 -0
- package/dist/payments/channel-session-state.d.ts.map +1 -0
- package/dist/payments/channel-session-state.js +25 -0
- package/dist/payments/channel-session-state.js.map +1 -0
- package/dist/payments/channel-store.d.ts +87 -0
- package/dist/payments/channel-store.d.ts.map +1 -0
- package/dist/payments/channel-store.js +276 -0
- package/dist/payments/channel-store.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 +65 -0
- package/dist/payments/evm/ants-token-client.js.map +1 -0
- package/dist/payments/evm/base-evm-client.d.ts +22 -0
- package/dist/payments/evm/base-evm-client.d.ts.map +1 -0
- package/dist/payments/evm/base-evm-client.js +71 -0
- package/dist/payments/evm/base-evm-client.js.map +1 -0
- package/dist/payments/evm/channels-client.d.ts +51 -0
- package/dist/payments/evm/channels-client.d.ts.map +1 -0
- package/dist/payments/evm/channels-client.js +101 -0
- package/dist/payments/evm/channels-client.js.map +1 -0
- package/dist/payments/evm/deposits-client.d.ts +30 -0
- package/dist/payments/evm/deposits-client.d.ts.map +1 -0
- package/dist/payments/evm/deposits-client.js +78 -0
- package/dist/payments/evm/deposits-client.js.map +1 -0
- package/dist/payments/evm/emissions-client.d.ts +22 -0
- package/dist/payments/evm/emissions-client.d.ts.map +1 -0
- package/dist/payments/evm/emissions-client.js +65 -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 +21 -0
- package/dist/payments/evm/identity-client.d.ts.map +1 -0
- package/dist/payments/evm/identity-client.js +68 -0
- package/dist/payments/evm/identity-client.js.map +1 -0
- package/dist/payments/evm/keypair.d.ts +3 -14
- package/dist/payments/evm/keypair.d.ts.map +1 -1
- package/dist/payments/evm/keypair.js +4 -20
- package/dist/payments/evm/keypair.js.map +1 -1
- package/dist/payments/evm/sessions-client.d.ts +30 -0
- package/dist/payments/evm/sessions-client.d.ts.map +1 -0
- package/dist/payments/evm/sessions-client.js +61 -0
- package/dist/payments/evm/sessions-client.js.map +1 -0
- package/dist/payments/evm/signatures.d.ts +54 -10
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +80 -54
- package/dist/payments/evm/signatures.js.map +1 -1
- package/dist/payments/evm/staking-client.d.ts +24 -0
- package/dist/payments/evm/staking-client.d.ts.map +1 -0
- package/dist/payments/evm/staking-client.js +54 -0
- package/dist/payments/evm/staking-client.js.map +1 -0
- package/dist/payments/evm/stats-client.d.ts +20 -0
- package/dist/payments/evm/stats-client.d.ts.map +1 -0
- package/dist/payments/evm/stats-client.js +25 -0
- package/dist/payments/evm/stats-client.js.map +1 -0
- 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 +29 -9
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +27 -9
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/pricing.d.ts +25 -0
- package/dist/payments/pricing.d.ts.map +1 -0
- package/dist/payments/pricing.js +33 -0
- package/dist/payments/pricing.js.map +1 -0
- package/dist/payments/readiness.d.ts +13 -0
- package/dist/payments/readiness.d.ts.map +1 -0
- package/dist/payments/readiness.js +57 -0
- package/dist/payments/readiness.js.map +1 -0
- package/dist/payments/seller-payment-manager.d.ts +101 -36
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +612 -120
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/session-store.d.ts +68 -0
- package/dist/payments/session-store.d.ts.map +1 -0
- package/dist/payments/session-store.js +272 -0
- package/dist/payments/session-store.js.map +1 -0
- package/dist/payments/types.d.ts +5 -3
- package/dist/payments/types.d.ts.map +1 -1
- 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/proxy/proxy-mux.d.ts.map +1 -1
- package/dist/proxy/proxy-mux.js +3 -2
- package/dist/proxy/proxy-mux.js.map +1 -1
- package/dist/proxy/request-codec.d.ts.map +1 -1
- package/dist/proxy/request-codec.js +3 -0
- package/dist/proxy/request-codec.js.map +1 -1
- package/dist/reputation/rating-manager.d.ts.map +1 -1
- package/dist/reputation/rating-manager.js +2 -4
- package/dist/reputation/rating-manager.js.map +1 -1
- package/dist/reputation/report-manager.d.ts.map +1 -1
- package/dist/reputation/report-manager.js +2 -4
- package/dist/reputation/report-manager.js.map +1 -1
- package/dist/routing/default-router.d.ts.map +1 -1
- package/dist/routing/default-router.js +4 -9
- package/dist/routing/default-router.js.map +1 -1
- package/dist/seller-request-handler.d.ts +54 -0
- package/dist/seller-request-handler.d.ts.map +1 -0
- package/dist/seller-request-handler.js +359 -0
- package/dist/seller-request-handler.js.map +1 -0
- package/dist/storage/migrate.d.ts +13 -0
- package/dist/storage/migrate.d.ts.map +1 -0
- package/dist/storage/migrate.js +28 -0
- package/dist/storage/migrate.js.map +1 -0
- package/dist/storage/migrations/channels/001_create_tables.d.ts +3 -0
- package/dist/storage/migrations/channels/001_create_tables.d.ts.map +1 -0
- package/dist/storage/migrations/channels/001_create_tables.js +45 -0
- package/dist/storage/migrations/channels/001_create_tables.js.map +1 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.d.ts +3 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.d.ts.map +1 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.js +19 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.js.map +1 -0
- package/dist/storage/migrations/channels/index.d.ts +3 -0
- package/dist/storage/migrations/channels/index.d.ts.map +1 -0
- package/dist/storage/migrations/channels/index.js +4 -0
- package/dist/storage/migrations/channels/index.js.map +1 -0
- package/dist/storage/migrations/metering/001_create_tables.d.ts +3 -0
- package/dist/storage/migrations/metering/001_create_tables.d.ts.map +1 -0
- package/dist/storage/migrations/metering/001_create_tables.js +80 -0
- package/dist/storage/migrations/metering/001_create_tables.js.map +1 -0
- package/dist/storage/migrations/metering/index.d.ts +3 -0
- package/dist/storage/migrations/metering/index.d.ts.map +1 -0
- package/dist/storage/migrations/metering/index.js +3 -0
- package/dist/storage/migrations/metering/index.js.map +1 -0
- package/dist/types/capability.d.ts +1 -1
- 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 +2 -2
- package/dist/types/metering.d.ts.map +1 -1
- package/dist/types/peer.d.ts +10 -11
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/peer.js +7 -3
- package/dist/types/peer.js.map +1 -1
- package/dist/types/protocol.d.ts +32 -97
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +5 -10
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/rating.d.ts +1 -1
- package/dist/types/rating.d.ts.map +1 -1
- package/dist/types/report.d.ts +1 -1
- package/dist/types/report.d.ts.map +1 -1
- package/dist/utils/response-usage.d.ts +10 -0
- package/dist/utils/response-usage.d.ts.map +1 -0
- package/dist/utils/response-usage.js +34 -0
- package/dist/utils/response-usage.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
const ERC20_ABI = [
|
|
4
|
+
'function approve(address spender, uint256 amount) external returns (bool)',
|
|
5
|
+
];
|
|
6
|
+
const SUBPOOL_ABI = [
|
|
7
|
+
'function subscribe(uint256 tierId) external',
|
|
8
|
+
'function renewSubscription() external',
|
|
9
|
+
'function cancelSubscription() external',
|
|
10
|
+
'function isSubscriptionActive(address buyer) external view returns (bool)',
|
|
11
|
+
'function getRemainingDailyBudget(address buyer) external view returns (uint256)',
|
|
12
|
+
'function recordTokenUsage(address buyer, uint256 tokens) external',
|
|
13
|
+
'function optIn(uint256 tokenId) external',
|
|
14
|
+
'function optOut(uint256 tokenId) external',
|
|
15
|
+
'function claimRevenue() external',
|
|
16
|
+
'function distributeRevenue() external',
|
|
17
|
+
'function getProjectedRevenue(address seller) external view returns (uint256)',
|
|
18
|
+
'function getTier(uint256 tierId) external view returns (uint256 monthlyFee, uint256 dailyTokenBudget, bool active)',
|
|
19
|
+
'function getOptedInPeerCount() external view returns (uint256)',
|
|
20
|
+
'function currentEpoch() external view returns (uint256)',
|
|
21
|
+
'function currentEpochRevenue() external view returns (uint256)',
|
|
22
|
+
'function epochDuration() external view returns (uint256)',
|
|
23
|
+
'function epochStart() external view returns (uint256)',
|
|
24
|
+
'function tierCount() external view returns (uint256)',
|
|
25
|
+
];
|
|
26
|
+
export class SubPoolClient extends BaseEvmClient {
|
|
27
|
+
_usdcAddress;
|
|
28
|
+
constructor(config) {
|
|
29
|
+
super(config.rpcUrl, config.contractAddress);
|
|
30
|
+
this._usdcAddress = config.usdcAddress;
|
|
31
|
+
}
|
|
32
|
+
// ─── Subscription Methods ──────────────────────────────────────────
|
|
33
|
+
async subscribe(signer, tierId) {
|
|
34
|
+
const connected = this._ensureConnected(signer);
|
|
35
|
+
const signerAddress = await connected.getAddress();
|
|
36
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
37
|
+
// Fetch tier fee and approve USDC
|
|
38
|
+
const [monthlyFee] = await contract.getFunction('getTier')(tierId);
|
|
39
|
+
const usdc = new Contract(this._usdcAddress, ERC20_ABI, connected);
|
|
40
|
+
const approveNonce = await this._reserveNonce(signerAddress);
|
|
41
|
+
const approveTx = await usdc.getFunction('approve')(this._contractAddress, monthlyFee, { nonce: approveNonce });
|
|
42
|
+
const approveReceipt = await approveTx.wait();
|
|
43
|
+
if (!approveReceipt)
|
|
44
|
+
throw new Error('Transaction was dropped or replaced');
|
|
45
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
46
|
+
const tx = await contract.getFunction('subscribe')(tierId, { nonce });
|
|
47
|
+
const receipt = await tx.wait();
|
|
48
|
+
if (!receipt)
|
|
49
|
+
throw new Error('Transaction was dropped or replaced');
|
|
50
|
+
return receipt.hash;
|
|
51
|
+
}
|
|
52
|
+
async renewSubscription(signer, monthlyFee) {
|
|
53
|
+
const connected = this._ensureConnected(signer);
|
|
54
|
+
const signerAddress = await connected.getAddress();
|
|
55
|
+
// Approve USDC for renewal
|
|
56
|
+
const usdc = new Contract(this._usdcAddress, ERC20_ABI, connected);
|
|
57
|
+
const approveNonce = await this._reserveNonce(signerAddress);
|
|
58
|
+
const approveTx = await usdc.getFunction('approve')(this._contractAddress, monthlyFee, { nonce: approveNonce });
|
|
59
|
+
const approveReceipt = await approveTx.wait();
|
|
60
|
+
if (!approveReceipt)
|
|
61
|
+
throw new Error('Transaction was dropped or replaced');
|
|
62
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
63
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
64
|
+
const tx = await contract.getFunction('renewSubscription')({ nonce });
|
|
65
|
+
const receipt = await tx.wait();
|
|
66
|
+
if (!receipt)
|
|
67
|
+
throw new Error('Transaction was dropped or replaced');
|
|
68
|
+
return receipt.hash;
|
|
69
|
+
}
|
|
70
|
+
async cancelSubscription(signer) {
|
|
71
|
+
const connected = this._ensureConnected(signer);
|
|
72
|
+
const signerAddress = await connected.getAddress();
|
|
73
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
74
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
75
|
+
const tx = await contract.getFunction('cancelSubscription')({ nonce });
|
|
76
|
+
const receipt = await tx.wait();
|
|
77
|
+
if (!receipt)
|
|
78
|
+
throw new Error('Transaction was dropped or replaced');
|
|
79
|
+
return receipt.hash;
|
|
80
|
+
}
|
|
81
|
+
async isSubscriptionActive(buyer) {
|
|
82
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
83
|
+
return contract.getFunction('isSubscriptionActive')(buyer);
|
|
84
|
+
}
|
|
85
|
+
async getRemainingDailyBudget(buyer) {
|
|
86
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
87
|
+
return contract.getFunction('getRemainingDailyBudget')(buyer);
|
|
88
|
+
}
|
|
89
|
+
async recordTokenUsage(signer, buyer, tokens) {
|
|
90
|
+
const connected = this._ensureConnected(signer);
|
|
91
|
+
const signerAddress = await connected.getAddress();
|
|
92
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
93
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
94
|
+
const tx = await contract.getFunction('recordTokenUsage')(buyer, tokens, { nonce });
|
|
95
|
+
const receipt = await tx.wait();
|
|
96
|
+
if (!receipt)
|
|
97
|
+
throw new Error('Transaction was dropped or replaced');
|
|
98
|
+
return receipt.hash;
|
|
99
|
+
}
|
|
100
|
+
// ─── Peer Methods ──────────────────────────────────────────────────
|
|
101
|
+
async optIn(signer, tokenId) {
|
|
102
|
+
const connected = this._ensureConnected(signer);
|
|
103
|
+
const signerAddress = await connected.getAddress();
|
|
104
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
105
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
106
|
+
const tx = await contract.getFunction('optIn')(tokenId, { nonce });
|
|
107
|
+
const receipt = await tx.wait();
|
|
108
|
+
if (!receipt)
|
|
109
|
+
throw new Error('Transaction was dropped or replaced');
|
|
110
|
+
return receipt.hash;
|
|
111
|
+
}
|
|
112
|
+
async optOut(signer, tokenId) {
|
|
113
|
+
const connected = this._ensureConnected(signer);
|
|
114
|
+
const signerAddress = await connected.getAddress();
|
|
115
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
116
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
117
|
+
const tx = await contract.getFunction('optOut')(tokenId, { nonce });
|
|
118
|
+
const receipt = await tx.wait();
|
|
119
|
+
if (!receipt)
|
|
120
|
+
throw new Error('Transaction was dropped or replaced');
|
|
121
|
+
return receipt.hash;
|
|
122
|
+
}
|
|
123
|
+
// ─── Revenue Methods ───────────────────────────────────────────────
|
|
124
|
+
async claimRevenue(signer) {
|
|
125
|
+
const connected = this._ensureConnected(signer);
|
|
126
|
+
const signerAddress = await connected.getAddress();
|
|
127
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, connected);
|
|
128
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
129
|
+
const tx = await contract.getFunction('claimRevenue')({ nonce });
|
|
130
|
+
const receipt = await tx.wait();
|
|
131
|
+
if (!receipt)
|
|
132
|
+
throw new Error('Transaction was dropped or replaced');
|
|
133
|
+
return receipt.hash;
|
|
134
|
+
}
|
|
135
|
+
async getProjectedRevenue(seller) {
|
|
136
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
137
|
+
return contract.getFunction('getProjectedRevenue')(seller);
|
|
138
|
+
}
|
|
139
|
+
// ─── View Methods ──────────────────────────────────────────────────
|
|
140
|
+
async getTier(tierId) {
|
|
141
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
142
|
+
const [monthlyFee, dailyTokenBudget, active] = await contract.getFunction('getTier')(tierId);
|
|
143
|
+
return { monthlyFee, dailyTokenBudget, active };
|
|
144
|
+
}
|
|
145
|
+
async getOptedInPeerCount() {
|
|
146
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
147
|
+
return contract.getFunction('getOptedInPeerCount')();
|
|
148
|
+
}
|
|
149
|
+
async currentEpoch() {
|
|
150
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
151
|
+
return contract.getFunction('currentEpoch')();
|
|
152
|
+
}
|
|
153
|
+
async currentEpochRevenue() {
|
|
154
|
+
const contract = new Contract(this._contractAddress, SUBPOOL_ABI, this._provider);
|
|
155
|
+
return contract.getFunction('currentEpochRevenue')();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=subpool-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subpool-client.js","sourceRoot":"","sources":["../../../src/payments/evm/subpool-client.ts"],"names":[],"mappings":"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"}
|
package/dist/payments/index.d.ts
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
|
-
export type { PaymentMethod, ChainId, WalletInfo, TransactionType, Transaction, PaymentConfig, CryptoPaymentConfig,
|
|
1
|
+
export type { PaymentMethod, ChainId, WalletInfo, TransactionType, Transaction, PaymentConfig, CryptoPaymentConfig, } from './types.js';
|
|
2
2
|
export { BalanceManager } from './balance-manager.js';
|
|
3
3
|
export type { UnifiedBalance } from './balance-manager.js';
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
4
|
+
export { BaseEvmClient } from './evm/base-evm-client.js';
|
|
5
|
+
export { DepositsClient } from './evm/deposits-client.js';
|
|
6
|
+
export type { DepositsClientConfig, BuyerBalanceInfo } from './evm/deposits-client.js';
|
|
7
|
+
export { ChannelsClient } from './evm/channels-client.js';
|
|
8
|
+
export type { ChannelsClientConfig, ChannelInfo, AgentStats, CloseRequestedEvent } from './evm/channels-client.js';
|
|
9
|
+
export { IdentityClient } from './evm/identity-client.js';
|
|
10
|
+
export type { IdentityClientConfig } from './evm/identity-client.js';
|
|
11
|
+
export { StakingClient } from './evm/staking-client.js';
|
|
12
|
+
export type { StakingClientConfig, SellerAccountInfo } from './evm/staking-client.js';
|
|
13
|
+
export { signSpendingAuth, signReserveAuth, signSetOperator, makeChannelsDomain, makeDepositsDomain, SPENDING_AUTH_TYPES, RESERVE_AUTH_TYPES, SET_OPERATOR_TYPES, computeMetadataHash, encodeMetadata, METADATA_VERSION, computeChannelId, ZERO_METADATA, ZERO_METADATA_HASH, } from './evm/signatures.js';
|
|
14
|
+
export type { SpendingAuthMessage, ReserveAuthMessage, SetOperatorMessage, SpendingAuthMetadata } from './evm/signatures.js';
|
|
15
|
+
export { ANTSTokenClient } from './evm/ants-token-client.js';
|
|
16
|
+
export type { ANTSTokenClientConfig } from './evm/ants-token-client.js';
|
|
17
|
+
export { EmissionsClient } from './evm/emissions-client.js';
|
|
18
|
+
export type { EmissionsClientConfig } from './evm/emissions-client.js';
|
|
19
|
+
export { SubPoolClient } from './evm/subpool-client.js';
|
|
20
|
+
export type { SubPoolClientConfig } from './evm/subpool-client.js';
|
|
21
|
+
export { ChannelStore, CHANNEL_STATUS } from './channel-store.js';
|
|
22
|
+
export type { StoredChannel, StoredReceipt } from './channel-store.js';
|
|
11
23
|
export { BuyerPaymentManager } from './buyer-payment-manager.js';
|
|
12
|
-
export type { BuyerPaymentConfig,
|
|
24
|
+
export type { BuyerPaymentConfig, PerRequestAuthResult } from './buyer-payment-manager.js';
|
|
25
|
+
export { BuyerPaymentNegotiator } from './buyer-payment-negotiator.js';
|
|
26
|
+
export type { BuyerNegotiatorConfig, Handle402Result, NegotiationEmitter } from './buyer-payment-negotiator.js';
|
|
27
|
+
export { SellerPaymentManager } from './seller-payment-manager.js';
|
|
28
|
+
export type { SellerPaymentConfig } from './seller-payment-manager.js';
|
|
29
|
+
export { computeCostUsdc, estimateCostFromBytes, estimateTokensFromBytes } from './pricing.js';
|
|
30
|
+
export type { ServicePricing } from './pricing.js';
|
|
31
|
+
export { checkSellerReadiness, checkBuyerReadiness } from './readiness.js';
|
|
32
|
+
export type { ReadinessCheck } from './readiness.js';
|
|
13
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,OAAO,EACP,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,OAAO,EACP,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGvF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGnH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG7H,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAG3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGhH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/payments/index.js
CHANGED
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
// Balance tracking (local transaction history)
|
|
2
2
|
export { BalanceManager } from './balance-manager.js';
|
|
3
|
-
//
|
|
4
|
-
export {
|
|
5
|
-
//
|
|
6
|
-
export {
|
|
7
|
-
//
|
|
8
|
-
export {
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
|
|
3
|
+
// Base EVM client
|
|
4
|
+
export { BaseEvmClient } from './evm/base-evm-client.js';
|
|
5
|
+
// Deposits client (buyer deposits + seller payouts)
|
|
6
|
+
export { DepositsClient } from './evm/deposits-client.js';
|
|
7
|
+
// Channels client (reserve, settle, timeout)
|
|
8
|
+
export { ChannelsClient } from './evm/channels-client.js';
|
|
9
|
+
// Identity client (ERC-8004 IdentityRegistry)
|
|
10
|
+
export { IdentityClient } from './evm/identity-client.js';
|
|
11
|
+
// Staking client (seller staking, token rate, slashing)
|
|
12
|
+
export { StakingClient } from './evm/staking-client.js';
|
|
13
|
+
export { signSpendingAuth, signReserveAuth, signSetOperator, makeChannelsDomain, makeDepositsDomain, SPENDING_AUTH_TYPES, RESERVE_AUTH_TYPES, SET_OPERATOR_TYPES, computeMetadataHash, encodeMetadata, METADATA_VERSION, computeChannelId, ZERO_METADATA, ZERO_METADATA_HASH, } from './evm/signatures.js';
|
|
14
|
+
// ANTS token
|
|
15
|
+
export { ANTSTokenClient } from './evm/ants-token-client.js';
|
|
16
|
+
// Emissions
|
|
17
|
+
export { EmissionsClient } from './evm/emissions-client.js';
|
|
18
|
+
// Subscription Pool
|
|
19
|
+
export { SubPoolClient } from './evm/subpool-client.js';
|
|
20
|
+
// Channel persistence
|
|
21
|
+
export { ChannelStore, CHANNEL_STATUS } from './channel-store.js';
|
|
12
22
|
// Buyer payment manager
|
|
13
23
|
export { BuyerPaymentManager } from './buyer-payment-manager.js';
|
|
24
|
+
// Buyer payment negotiator (402 handling, SpendingAuth flow, cost tracking)
|
|
25
|
+
export { BuyerPaymentNegotiator } from './buyer-payment-negotiator.js';
|
|
26
|
+
// Seller payment manager
|
|
27
|
+
export { SellerPaymentManager } from './seller-payment-manager.js';
|
|
28
|
+
// Pricing utilities
|
|
29
|
+
export { computeCostUsdc, estimateCostFromBytes, estimateTokensFromBytes } from './pricing.js';
|
|
30
|
+
// Readiness checks
|
|
31
|
+
export { checkSellerReadiness, checkBuyerReadiness } from './readiness.js';
|
|
14
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"AAWA,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,6CAA6C;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGlE,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,4EAA4E;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG/F,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Token pricing for a service (USDC per million tokens). */
|
|
2
|
+
export interface ServicePricing {
|
|
3
|
+
inputUsdPerMillion: number;
|
|
4
|
+
outputUsdPerMillion: number;
|
|
5
|
+
}
|
|
6
|
+
/** Estimate token count from raw bytes using tokenx (~95-98% accuracy). */
|
|
7
|
+
export declare function estimateTokensFromBytes(bytes: Uint8Array): number;
|
|
8
|
+
/** Estimate token count from a string using tokenx. */
|
|
9
|
+
export declare function estimateTokensFromText(text: string): number;
|
|
10
|
+
/**
|
|
11
|
+
* Compute USDC cost in base units (6 decimals) from token counts and pricing.
|
|
12
|
+
*
|
|
13
|
+
* Formula: baseUnits = tokens * usdPerMillion / 1_000_000 * 1_000_000
|
|
14
|
+
* = tokens * usdPerMillion (but usdPerMillion is float, so round).
|
|
15
|
+
*/
|
|
16
|
+
export declare function computeCostUsdc(inputTokens: number, outputTokens: number, pricing: ServicePricing): bigint;
|
|
17
|
+
/**
|
|
18
|
+
* Estimate USDC cost from raw content bytes using tokenx token estimation.
|
|
19
|
+
*/
|
|
20
|
+
export declare function estimateCostFromBytes(inputBytes: Uint8Array, outputBytes: Uint8Array, pricing: ServicePricing): {
|
|
21
|
+
cost: bigint;
|
|
22
|
+
inputTokens: number;
|
|
23
|
+
outputTokens: number;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/payments/pricing.ts"],"names":[],"mappings":"AAIA,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAID,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGjE;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,cAAc,GACtB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,UAAU,EACvB,OAAO,EAAE,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAK7D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// ── Buyer-side cost estimation using tokenx ──────────────────────────
|
|
2
|
+
import { estimateTokenCount } from 'tokenx';
|
|
3
|
+
const textDecoder = new TextDecoder();
|
|
4
|
+
/** Estimate token count from raw bytes using tokenx (~95-98% accuracy). */
|
|
5
|
+
export function estimateTokensFromBytes(bytes) {
|
|
6
|
+
const text = textDecoder.decode(bytes);
|
|
7
|
+
return estimateTokenCount(text);
|
|
8
|
+
}
|
|
9
|
+
/** Estimate token count from a string using tokenx. */
|
|
10
|
+
export function estimateTokensFromText(text) {
|
|
11
|
+
return estimateTokenCount(text);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Compute USDC cost in base units (6 decimals) from token counts and pricing.
|
|
15
|
+
*
|
|
16
|
+
* Formula: baseUnits = tokens * usdPerMillion / 1_000_000 * 1_000_000
|
|
17
|
+
* = tokens * usdPerMillion (but usdPerMillion is float, so round).
|
|
18
|
+
*/
|
|
19
|
+
export function computeCostUsdc(inputTokens, outputTokens, pricing) {
|
|
20
|
+
const costUsd = (inputTokens * pricing.inputUsdPerMillion + outputTokens * pricing.outputUsdPerMillion) / 1_000_000;
|
|
21
|
+
const costBaseUnits = Math.max(0, Math.round(costUsd * 1_000_000));
|
|
22
|
+
return BigInt(costBaseUnits);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Estimate USDC cost from raw content bytes using tokenx token estimation.
|
|
26
|
+
*/
|
|
27
|
+
export function estimateCostFromBytes(inputBytes, outputBytes, pricing) {
|
|
28
|
+
const inputTokens = estimateTokensFromBytes(inputBytes);
|
|
29
|
+
const outputTokens = estimateTokensFromBytes(outputBytes);
|
|
30
|
+
const cost = computeCostUsdc(inputTokens, outputTokens, pricing);
|
|
31
|
+
return { cost, inputTokens, outputTokens };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/payments/pricing.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAQ5C,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,2EAA2E;AAC3E,MAAM,UAAU,uBAAuB,CAAC,KAAiB;IACvD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,YAAoB,EACpB,OAAuB;IAEvB,MAAM,OAAO,GACX,CAAC,WAAW,GAAG,OAAO,CAAC,kBAAkB,GAAG,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IACtG,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAsB,EACtB,WAAuB,EACvB,OAAuB;IAEvB,MAAM,WAAW,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Identity } from '../p2p/identity.js';
|
|
2
|
+
import { type DepositsClient } from './evm/deposits-client.js';
|
|
3
|
+
import { type IdentityClient } from './evm/identity-client.js';
|
|
4
|
+
import { type StakingClient } from './evm/staking-client.js';
|
|
5
|
+
export interface ReadinessCheck {
|
|
6
|
+
name: string;
|
|
7
|
+
passed: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
command?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function checkSellerReadiness(identity: Identity, identityClient: IdentityClient, stakingClient: StakingClient): Promise<ReadinessCheck[]>;
|
|
12
|
+
export declare function checkBuyerReadiness(identity: Identity, depositsClient: DepositsClient): Promise<ReadinessCheck[]>;
|
|
13
|
+
//# sourceMappingURL=readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../src/payments/readiness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC,CAkC3B;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC,CA0B3B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { formatEther } from 'ethers';
|
|
2
|
+
export async function checkSellerReadiness(identity, identityClient, stakingClient) {
|
|
3
|
+
const checks = [];
|
|
4
|
+
const evmAddr = identity.wallet.address;
|
|
5
|
+
// 1. ETH for gas
|
|
6
|
+
const ethBalance = await stakingClient.provider.getBalance(evmAddr);
|
|
7
|
+
checks.push({
|
|
8
|
+
name: 'Gas balance',
|
|
9
|
+
passed: ethBalance > 0n,
|
|
10
|
+
message: ethBalance > 0n
|
|
11
|
+
? `ETH balance: ${formatEther(ethBalance)}`
|
|
12
|
+
: `No ETH for gas fees. Send ETH to ${evmAddr}`,
|
|
13
|
+
});
|
|
14
|
+
// 2. Registered
|
|
15
|
+
const isReg = await identityClient.isRegistered(evmAddr);
|
|
16
|
+
checks.push({
|
|
17
|
+
name: 'Peer registration',
|
|
18
|
+
passed: isReg,
|
|
19
|
+
message: isReg ? 'Registered' : 'Not registered. Run: antseed register',
|
|
20
|
+
command: isReg ? undefined : 'antseed register',
|
|
21
|
+
});
|
|
22
|
+
// 3. Staked
|
|
23
|
+
const account = await stakingClient.getSellerAccount(evmAddr);
|
|
24
|
+
const hasStake = account.stake > 0n;
|
|
25
|
+
checks.push({
|
|
26
|
+
name: 'Stake',
|
|
27
|
+
passed: hasStake,
|
|
28
|
+
message: hasStake ? `Staked: ${account.stake}` : 'No stake. Run: antseed stake <amount>',
|
|
29
|
+
command: hasStake ? undefined : 'antseed stake 10',
|
|
30
|
+
});
|
|
31
|
+
return checks;
|
|
32
|
+
}
|
|
33
|
+
export async function checkBuyerReadiness(identity, depositsClient) {
|
|
34
|
+
const checks = [];
|
|
35
|
+
const evmAddr = identity.wallet.address;
|
|
36
|
+
// 1. ETH for gas
|
|
37
|
+
const ethBalance = await depositsClient.provider.getBalance(evmAddr);
|
|
38
|
+
checks.push({
|
|
39
|
+
name: 'Gas balance',
|
|
40
|
+
passed: ethBalance > 0n,
|
|
41
|
+
message: ethBalance > 0n
|
|
42
|
+
? `ETH balance: ${formatEther(ethBalance)}`
|
|
43
|
+
: `No ETH for gas. Send ETH to ${evmAddr}`,
|
|
44
|
+
});
|
|
45
|
+
// 2. USDC in deposits
|
|
46
|
+
const balance = await depositsClient.getBuyerBalance(evmAddr);
|
|
47
|
+
checks.push({
|
|
48
|
+
name: 'Deposit balance',
|
|
49
|
+
passed: balance.available > 0n,
|
|
50
|
+
message: balance.available > 0n
|
|
51
|
+
? `Available: ${balance.available}`
|
|
52
|
+
: 'No USDC deposited. Run: antseed deposit <amount>',
|
|
53
|
+
command: balance.available > 0n ? undefined : 'antseed deposit 10',
|
|
54
|
+
});
|
|
55
|
+
return checks;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src/payments/readiness.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AASrC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAkB,EAClB,cAA8B,EAC9B,aAA4B;IAE5B,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IAExC,iBAAiB;IACjB,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,UAAU,GAAG,EAAE;QACvB,OAAO,EAAE,UAAU,GAAG,EAAE;YACtB,CAAC,CAAC,gBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE;YAC3C,CAAC,CAAC,oCAAoC,OAAO,EAAE;KAClD,CAAC,CAAC;IAEH,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,uCAAuC;QACvE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;KAChD,CAAC,CAAC;IAEH,YAAY;IACZ,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,uCAAuC;QACxF,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;KACnD,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAkB,EAClB,cAA8B;IAE9B,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IAExC,iBAAiB;IACjB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,UAAU,GAAG,EAAE;QACvB,OAAO,EAAE,UAAU,GAAG,EAAE;YACtB,CAAC,CAAC,gBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE;YAC3C,CAAC,CAAC,+BAA+B,OAAO,EAAE;KAC7C,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,OAAO,CAAC,SAAS,GAAG,EAAE;QAC9B,OAAO,EAAE,OAAO,CAAC,SAAS,GAAG,EAAE;YAC7B,CAAC,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE;YACnC,CAAC,CAAC,kDAAkD;QACtD,OAAO,EAAE,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB;KACnE,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,46 +1,111 @@
|
|
|
1
|
-
import { type AbstractSigner } from 'ethers';
|
|
2
1
|
import type { Identity } from '../p2p/identity.js';
|
|
3
2
|
import type { PaymentMux } from '../p2p/payment-mux.js';
|
|
4
|
-
import type { SpendingAuthPayload } from '../types/protocol.js';
|
|
5
|
-
import {
|
|
3
|
+
import type { SpendingAuthPayload, PaymentRequiredPayload } from '../types/protocol.js';
|
|
4
|
+
import { ChannelsClient } from './evm/channels-client.js';
|
|
5
|
+
import { ChannelStore, type StoredChannel } from './channel-store.js';
|
|
6
6
|
export interface SellerPaymentConfig {
|
|
7
|
-
chainId: number;
|
|
8
7
|
rpcUrl: string;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
nonce: number;
|
|
17
|
-
authMax: bigint;
|
|
18
|
-
deadline: number;
|
|
19
|
-
buyerSig: string;
|
|
20
|
-
previousConsumption: bigint;
|
|
21
|
-
previousSessionId: string;
|
|
22
|
-
tokensDelivered: bigint;
|
|
23
|
-
reservedAt: number;
|
|
24
|
-
settled: boolean;
|
|
8
|
+
channelsContractAddress: string;
|
|
9
|
+
chainId: number;
|
|
10
|
+
dataDir: string;
|
|
11
|
+
/** Minimum USDC per request (base units). Default: "10000" ($0.01). */
|
|
12
|
+
minBudgetPerRequest?: string;
|
|
13
|
+
/** Whether to immediately settle when buyer disconnects. Default: true. */
|
|
14
|
+
settleOnDisconnect?: boolean;
|
|
25
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Manages seller-side payment sessions.
|
|
18
|
+
* The buyer sends a single SpendingAuth signature with a monotonically
|
|
19
|
+
* increasing cumulativeAmount on every request.
|
|
20
|
+
* The seller tracks spending locally and settles/closes via the contract at session end.
|
|
21
|
+
*/
|
|
26
22
|
export declare class SellerPaymentManager {
|
|
27
|
-
private
|
|
28
|
-
private readonly
|
|
23
|
+
private readonly _identity;
|
|
24
|
+
private readonly _signer;
|
|
25
|
+
private readonly _channelsClient;
|
|
29
26
|
private readonly _config;
|
|
30
|
-
private readonly
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
private readonly _channelStore;
|
|
28
|
+
/** In-memory cache of active buyer peerIds for fast has-session checks. */
|
|
29
|
+
private readonly _activeBuyers;
|
|
30
|
+
/** Per-buyer mutex to prevent concurrent handleSpendingAuth for the same buyer. */
|
|
31
|
+
private readonly _buyerLocks;
|
|
32
|
+
/** channelId -> highest accepted cumulativeAmount from buyer's SpendingAuth */
|
|
33
|
+
private readonly _acceptedCumulative;
|
|
34
|
+
/** channelId -> total USDC spent so far (sum of recordSpend calls) */
|
|
35
|
+
private readonly _spent;
|
|
36
|
+
/** channelId -> on-chain reserveMaxAmount (budget ceiling from ReserveAuth) */
|
|
37
|
+
private readonly _reserveMax;
|
|
38
|
+
/** channelId -> latest buyer-signed auth (both sigs + cumulative values + metadata) for settle/close */
|
|
39
|
+
private readonly _latestAuth;
|
|
40
|
+
/** channelId -> number of failed close() attempts. In-memory only; resets on node restart. */
|
|
41
|
+
private readonly _closeRetryCount;
|
|
42
|
+
/** Max close() retries before giving up (buyer must requestClose on-chain) */
|
|
43
|
+
private static readonly MAX_CLOSE_RETRIES;
|
|
44
|
+
constructor(identity: Identity, config: SellerPaymentConfig, channelStore: ChannelStore);
|
|
45
|
+
get channelsClient(): ChannelsClient;
|
|
46
|
+
/**
|
|
47
|
+
* Handle incoming SpendingAuth from a buyer.
|
|
48
|
+
* First auth: verify SpendingAuth, reserve on-chain, send AuthAck.
|
|
49
|
+
* Subsequent: verify SpendingAuth signature, validate monotonic increase, persist.
|
|
50
|
+
*/
|
|
51
|
+
handleSpendingAuth(buyerPeerId: string, payload: SpendingAuthPayload, paymentMux: PaymentMux): Promise<'accepted' | 'reserved' | 'rejected'>;
|
|
52
|
+
private _handleSpendingAuthInner;
|
|
53
|
+
private _recoverOnChainSession;
|
|
54
|
+
private _activateSession;
|
|
55
|
+
/**
|
|
56
|
+
* Validate and accept a SpendingAuth attached to an incoming request.
|
|
57
|
+
* Returns true if the buyer has sufficient budget to serve this request.
|
|
58
|
+
*/
|
|
59
|
+
validateAndAcceptAuth(buyerPeerId: string, auth: SpendingAuthPayload): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Record USDC consumption after serving a request.
|
|
62
|
+
*/
|
|
63
|
+
recordSpend(sessionId: string, costUsdc: bigint): void;
|
|
64
|
+
/**
|
|
65
|
+
* Close a completed session on-chain using the latest buyer-signed dual signatures.
|
|
66
|
+
* Uses close() for final settlement (releases remaining deposit to buyer).
|
|
67
|
+
*/
|
|
68
|
+
settleSession(buyerPeerId: string, { cleanupOnFailure }?: {
|
|
69
|
+
cleanupOnFailure?: boolean | undefined;
|
|
70
|
+
}): Promise<void>;
|
|
71
|
+
onBuyerDisconnect(buyerPeerId: string): void;
|
|
72
|
+
/**
|
|
73
|
+
* Check for stale sessions and attempt to close them.
|
|
74
|
+
* The seller can only close() with a valid SpendingAuth — it cannot
|
|
75
|
+
* requestClose or withdraw (those are buyer-only on-chain).
|
|
76
|
+
* If the seller has no auths, the session remains open until the buyer
|
|
77
|
+
* calls requestClose → withdraw on-chain.
|
|
78
|
+
* Called periodically and on startup for recovery.
|
|
79
|
+
*/
|
|
80
|
+
checkTimeouts(): Promise<void>;
|
|
34
81
|
hasSession(buyerPeerId: string): boolean;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
82
|
+
/** Get the active session for a buyer peer, or null. */
|
|
83
|
+
getChannelByPeer(buyerPeerId: string): StoredChannel | null;
|
|
84
|
+
/** Get total USDC spent for a session (sum of recordSpend calls). */
|
|
85
|
+
getCumulativeSpend(sessionId: string): bigint;
|
|
86
|
+
/** Get the highest accepted cumulative amount for a session. */
|
|
87
|
+
getAcceptedCumulative(sessionId: string): bigint;
|
|
88
|
+
/** Get the on-chain reserve budget ceiling for a session. */
|
|
89
|
+
getReserveMax(sessionId: string): bigint;
|
|
90
|
+
private static readonly DEFAULT_SUGGESTED_AMOUNT;
|
|
91
|
+
/**
|
|
92
|
+
* Build the PaymentRequired payload for a buyer that doesn't have a session.
|
|
93
|
+
*/
|
|
94
|
+
getPaymentRequirements(requestId: string, buyerPeerId?: string, pricing?: {
|
|
95
|
+
inputUsdPerMillion?: number;
|
|
96
|
+
outputUsdPerMillion?: number;
|
|
97
|
+
}): PaymentRequiredPayload;
|
|
98
|
+
/**
|
|
99
|
+
* Handle a CloseRequested event for a channel this seller manages.
|
|
100
|
+
* If the seller has a stored SpendingAuth, immediately close the channel
|
|
101
|
+
* on-chain to claim earnings before the grace period expires.
|
|
102
|
+
*/
|
|
103
|
+
handleCloseRequested(channelId: string): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Poll for CloseRequested events and handle any that match active channels.
|
|
106
|
+
* Returns the block number to use as the next fromBlock cursor.
|
|
107
|
+
*/
|
|
108
|
+
pollCloseRequested(fromBlock: number): Promise<number>;
|
|
109
|
+
close(): void;
|
|
45
110
|
}
|
|
46
111
|
//# sourceMappingURL=seller-payment-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seller-payment-manager.d.ts","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"seller-payment-manager.d.ts","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
|