@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,44 @@
|
|
|
1
|
+
import type { ChainId } from './types.js';
|
|
2
|
+
export interface ChainConfig {
|
|
3
|
+
chainId: ChainId;
|
|
4
|
+
evmChainId: number;
|
|
5
|
+
rpcUrl: string;
|
|
6
|
+
depositsContractAddress: string;
|
|
7
|
+
channelsContractAddress: string;
|
|
8
|
+
stakingContractAddress?: string;
|
|
9
|
+
usdcContractAddress: string;
|
|
10
|
+
identityRegistryAddress?: string;
|
|
11
|
+
emissionsContractAddress?: string;
|
|
12
|
+
subPoolContractAddress?: string;
|
|
13
|
+
/** Block when Channels contract was deployed. Floor for event log scans. */
|
|
14
|
+
channelsDeployBlock?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Official contract addresses per chain.
|
|
18
|
+
* These are the protocol defaults — users only need to override
|
|
19
|
+
* if they want to point at a different chain (e.g. testnet).
|
|
20
|
+
*/
|
|
21
|
+
declare const CHAIN_CONFIGS: Record<ChainId, ChainConfig>;
|
|
22
|
+
declare const DEFAULT_CHAIN_ID: ChainId;
|
|
23
|
+
/**
|
|
24
|
+
* Get the chain config for a given chain ID.
|
|
25
|
+
* Falls back to base-mainnet if not found.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getChainConfig(chainId?: ChainId | string): ChainConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a full chain config from user overrides.
|
|
30
|
+
* User config values take precedence over protocol defaults.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveChainConfig(overrides?: {
|
|
33
|
+
chainId?: ChainId | string;
|
|
34
|
+
rpcUrl?: string;
|
|
35
|
+
depositsContractAddress?: string;
|
|
36
|
+
channelsContractAddress?: string;
|
|
37
|
+
stakingContractAddress?: string;
|
|
38
|
+
usdcContractAddress?: string;
|
|
39
|
+
identityRegistryAddress?: string;
|
|
40
|
+
emissionsContractAddress?: string;
|
|
41
|
+
subPoolContractAddress?: string;
|
|
42
|
+
}): ChainConfig;
|
|
43
|
+
export { DEFAULT_CHAIN_ID, CHAIN_CONFIGS };
|
|
44
|
+
//# sourceMappingURL=chain-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-config.d.ts","sourceRoot":"","sources":["../../src/payments/chain-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAiC/C,CAAC;AAEF,QAAA,MAAM,gBAAgB,EAAE,OAAwB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAItE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,GAAG,WAAW,CAad;AAED,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Official contract addresses per chain.
|
|
3
|
+
* These are the protocol defaults — users only need to override
|
|
4
|
+
* if they want to point at a different chain (e.g. testnet).
|
|
5
|
+
*/
|
|
6
|
+
const CHAIN_CONFIGS = {
|
|
7
|
+
'base-mainnet': {
|
|
8
|
+
chainId: 'base-mainnet',
|
|
9
|
+
evmChainId: 8453,
|
|
10
|
+
rpcUrl: 'https://mainnet.base.org',
|
|
11
|
+
depositsContractAddress: '0x0000000000000000000000000000000000000000', // TODO: deploy and fill
|
|
12
|
+
channelsContractAddress: '0x0000000000000000000000000000000000000000', // TODO: deploy and fill
|
|
13
|
+
usdcContractAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC on Base
|
|
14
|
+
},
|
|
15
|
+
'base-sepolia': {
|
|
16
|
+
chainId: 'base-sepolia',
|
|
17
|
+
evmChainId: 84532,
|
|
18
|
+
rpcUrl: 'https://sepolia.base.org',
|
|
19
|
+
usdcContractAddress: '0xcA04797CaB6B412Cee6798B7314a05AdFDc3Cf23',
|
|
20
|
+
depositsContractAddress: '0x5d36214DdD0A1f5e0aCE335Dd6EEaB60B252AEe7',
|
|
21
|
+
channelsContractAddress: '0xd173161b6428a64e132F742b6bE3cc91C8C5B678',
|
|
22
|
+
stakingContractAddress: '0x1CB76B197a20E41f9AA01806B41C59e16Cad46a7',
|
|
23
|
+
emissionsContractAddress: '0x9B30DAcfC20F0927fFD49fB0B84cf3EB83976a33',
|
|
24
|
+
identityRegistryAddress: '0x8004A818BFB912233c491871b3d84c89A494BD9e',
|
|
25
|
+
},
|
|
26
|
+
'base-local': {
|
|
27
|
+
chainId: 'base-local',
|
|
28
|
+
evmChainId: 31337,
|
|
29
|
+
rpcUrl: 'http://127.0.0.1:8545',
|
|
30
|
+
// Nonce sequence: 0=USDC, 1=Registry, 2=ANTSToken, 3=AntseedRegistry, 4=Staking, 5=Deposits, 6=Channels, 7=Emissions, 8=SubPool
|
|
31
|
+
usdcContractAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
|
|
32
|
+
identityRegistryAddress: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512',
|
|
33
|
+
stakingContractAddress: '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9',
|
|
34
|
+
depositsContractAddress: '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707',
|
|
35
|
+
channelsContractAddress: '0x0165878A594ca255338adfa4d48449f69242Eb8F',
|
|
36
|
+
emissionsContractAddress: '0xa513E6E4b8f2a923D98304ec87F64353C4D5C853',
|
|
37
|
+
subPoolContractAddress: '0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const DEFAULT_CHAIN_ID = 'base-mainnet';
|
|
41
|
+
/**
|
|
42
|
+
* Get the chain config for a given chain ID.
|
|
43
|
+
* Falls back to base-mainnet if not found.
|
|
44
|
+
*/
|
|
45
|
+
export function getChainConfig(chainId) {
|
|
46
|
+
if (!chainId)
|
|
47
|
+
return CHAIN_CONFIGS[DEFAULT_CHAIN_ID];
|
|
48
|
+
const config = CHAIN_CONFIGS[chainId];
|
|
49
|
+
return config ?? CHAIN_CONFIGS[DEFAULT_CHAIN_ID];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a full chain config from user overrides.
|
|
53
|
+
* User config values take precedence over protocol defaults.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveChainConfig(overrides) {
|
|
56
|
+
const base = getChainConfig(overrides?.chainId);
|
|
57
|
+
return {
|
|
58
|
+
...base,
|
|
59
|
+
...(overrides?.rpcUrl ? { rpcUrl: overrides.rpcUrl } : {}),
|
|
60
|
+
...(overrides?.depositsContractAddress ? { depositsContractAddress: overrides.depositsContractAddress } : {}),
|
|
61
|
+
...(overrides?.channelsContractAddress ? { channelsContractAddress: overrides.channelsContractAddress } : {}),
|
|
62
|
+
...(overrides?.stakingContractAddress ? { stakingContractAddress: overrides.stakingContractAddress } : {}),
|
|
63
|
+
...(overrides?.usdcContractAddress ? { usdcContractAddress: overrides.usdcContractAddress } : {}),
|
|
64
|
+
...(overrides?.identityRegistryAddress ? { identityRegistryAddress: overrides.identityRegistryAddress } : {}),
|
|
65
|
+
...(overrides?.emissionsContractAddress ? { emissionsContractAddress: overrides.emissionsContractAddress } : {}),
|
|
66
|
+
...(overrides?.subPoolContractAddress ? { subPoolContractAddress: overrides.subPoolContractAddress } : {}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export { DEFAULT_CHAIN_ID, CHAIN_CONFIGS };
|
|
70
|
+
//# sourceMappingURL=chain-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-config.js","sourceRoot":"","sources":["../../src/payments/chain-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ChannelInfo } from './evm/channels-client.js';
|
|
2
|
+
export type OnChainChannelStatus = 'missing' | 'active' | 'settled' | 'timeout' | 'unknown';
|
|
3
|
+
export type OnChainChannelState = {
|
|
4
|
+
exists: false;
|
|
5
|
+
status: 'missing';
|
|
6
|
+
} | {
|
|
7
|
+
exists: true;
|
|
8
|
+
status: Exclude<OnChainChannelStatus, 'missing'>;
|
|
9
|
+
channel: ChannelInfo;
|
|
10
|
+
};
|
|
11
|
+
export declare function classifyOnChainChannel(channel: ChannelInfo): OnChainChannelState;
|
|
12
|
+
export declare function matchesChannelParties(channel: ChannelInfo, buyerEvmAddr: string, sellerEvmAddr: string): boolean;
|
|
13
|
+
//# sourceMappingURL=channel-session-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-session-state.d.ts","sourceRoot":"","sources":["../../src/payments/channel-session-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5F,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAI7F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,mBAAmB,CAqBhF;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAGT"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
2
|
+
export function classifyOnChainChannel(channel) {
|
|
3
|
+
const exists = channel.buyer !== ZERO_ADDRESS
|
|
4
|
+
|| channel.seller !== ZERO_ADDRESS
|
|
5
|
+
|| channel.deposit > 0n
|
|
6
|
+
|| channel.status !== 0;
|
|
7
|
+
if (!exists) {
|
|
8
|
+
return { exists: false, status: 'missing' };
|
|
9
|
+
}
|
|
10
|
+
if (channel.status === 1) {
|
|
11
|
+
return { exists: true, status: 'active', channel };
|
|
12
|
+
}
|
|
13
|
+
if (channel.status === 2) {
|
|
14
|
+
return { exists: true, status: 'settled', channel };
|
|
15
|
+
}
|
|
16
|
+
if (channel.status === 3) {
|
|
17
|
+
return { exists: true, status: 'timeout', channel };
|
|
18
|
+
}
|
|
19
|
+
return { exists: true, status: 'unknown', channel };
|
|
20
|
+
}
|
|
21
|
+
export function matchesChannelParties(channel, buyerEvmAddr, sellerEvmAddr) {
|
|
22
|
+
return channel.buyer.toLowerCase() === buyerEvmAddr.toLowerCase()
|
|
23
|
+
&& channel.seller.toLowerCase() === sellerEvmAddr.toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=channel-session-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-session-state.js","sourceRoot":"","sources":["../../src/payments/channel-session-state.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAElE,MAAM,UAAU,sBAAsB,CAAC,OAAoB;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,YAAY;WACxC,OAAO,CAAC,MAAM,KAAK,YAAY;WAC/B,OAAO,CAAC,OAAO,GAAG,EAAE;WACpB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAoB,EACpB,YAAoB,EACpB,aAAqB;IAErB,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE;WAC5D,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export declare const CHANNEL_STATUS: {
|
|
2
|
+
readonly ACTIVE: "active";
|
|
3
|
+
readonly SETTLED: "settled";
|
|
4
|
+
readonly TIMEOUT: "timeout";
|
|
5
|
+
readonly GHOST: "ghost";
|
|
6
|
+
};
|
|
7
|
+
export interface StoredChannel {
|
|
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
|
+
latestBuyerSig: string | null;
|
|
25
|
+
latestSpendingAuthSig: string | null;
|
|
26
|
+
latestMetadata: string | null;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
updatedAt: number;
|
|
29
|
+
}
|
|
30
|
+
export interface StoredReceipt {
|
|
31
|
+
id?: number;
|
|
32
|
+
sessionId: string;
|
|
33
|
+
runningTotal: string;
|
|
34
|
+
requestCount: number;
|
|
35
|
+
responseHash: string;
|
|
36
|
+
sellerSig: string;
|
|
37
|
+
buyerAckSig: string | null;
|
|
38
|
+
createdAt: number;
|
|
39
|
+
}
|
|
40
|
+
export declare class ChannelStore {
|
|
41
|
+
private _db;
|
|
42
|
+
/** Cached transaction function for updateDeliveredAndInsertReceipt (compiled once). */
|
|
43
|
+
private readonly _updateDeliveredAndInsertReceiptTxn;
|
|
44
|
+
private readonly _stmts;
|
|
45
|
+
constructor(dataDir: string);
|
|
46
|
+
private _prepareStatements;
|
|
47
|
+
upsertChannel(channel: StoredChannel): void;
|
|
48
|
+
getChannel(sessionId: string): StoredChannel | null;
|
|
49
|
+
getActiveChannelByPeer(peerId: string, role: string): StoredChannel | null;
|
|
50
|
+
getActiveChannelByPeerAndBuyer(peerId: string, role: string, buyerEvmAddr: string): StoredChannel | null;
|
|
51
|
+
getLatestChannel(peerId: string, role: string): StoredChannel | null;
|
|
52
|
+
getLatestChannelByPeerAndBuyer(peerId: string, role: string, buyerEvmAddr: string): StoredChannel | null;
|
|
53
|
+
updateChannelStatus(sessionId: string, status: string, settledAmount?: string): void;
|
|
54
|
+
updateTokensDelivered(sessionId: string, tokens: string, requestCount: number): void;
|
|
55
|
+
getMaxNonce(role: string): number;
|
|
56
|
+
/** List all channels ordered by most recent first. */
|
|
57
|
+
listAllChannels(limit?: number): StoredChannel[];
|
|
58
|
+
/** Get all active channels for a given role (buyer or seller). */
|
|
59
|
+
getActiveChannels(role: string): StoredChannel[];
|
|
60
|
+
getActiveChannelsByBuyer(role: string, buyerEvmAddr: string): StoredChannel[];
|
|
61
|
+
/** Aggregate totals across all channels for a given peer and role. */
|
|
62
|
+
getTotalsByPeer(peerId: string, role: string): {
|
|
63
|
+
totalSessions: number;
|
|
64
|
+
totalRequests: number;
|
|
65
|
+
totalInputTokens: number;
|
|
66
|
+
totalOutputTokens: number;
|
|
67
|
+
totalAuthorizedUsdc: bigint;
|
|
68
|
+
firstSessionAt: number | null;
|
|
69
|
+
};
|
|
70
|
+
getTotalsByPeerAndBuyer(peerId: string, role: string, buyerEvmAddr: string): {
|
|
71
|
+
totalSessions: number;
|
|
72
|
+
totalRequests: number;
|
|
73
|
+
totalInputTokens: number;
|
|
74
|
+
totalOutputTokens: number;
|
|
75
|
+
totalAuthorizedUsdc: bigint;
|
|
76
|
+
firstSessionAt: number | null;
|
|
77
|
+
};
|
|
78
|
+
getTimedOutChannels(timeoutSeconds: number): StoredChannel[];
|
|
79
|
+
insertReceipt(receipt: Omit<StoredReceipt, 'id'>): void;
|
|
80
|
+
getReceipts(sessionId: string): StoredReceipt[];
|
|
81
|
+
/** Atomically update tokens delivered and insert receipt in a single transaction. */
|
|
82
|
+
updateDeliveredAndInsertReceipt(sessionId: string, tokens: string, requestCount: number, receipt: Omit<StoredReceipt, 'id'>): void;
|
|
83
|
+
/** Update receipt ack directly by composite key (no load-all-then-filter). */
|
|
84
|
+
updateReceiptAck(sessionId: string, runningTotal: string, requestCount: number, buyerAckSig: string): void;
|
|
85
|
+
close(): void;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=channel-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-store.d.ts","sourceRoot":"","sources":["../../src/payments/channel-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { runMigrations } from '../storage/migrate.js';
|
|
5
|
+
import { channelMigrations } from '../storage/migrations/channels/index.js';
|
|
6
|
+
export const CHANNEL_STATUS = {
|
|
7
|
+
ACTIVE: 'active',
|
|
8
|
+
SETTLED: 'settled',
|
|
9
|
+
TIMEOUT: 'timeout',
|
|
10
|
+
GHOST: 'ghost',
|
|
11
|
+
};
|
|
12
|
+
export class ChannelStore {
|
|
13
|
+
_db;
|
|
14
|
+
// ── Cached prepared statements (compiled once, reused every call) ──
|
|
15
|
+
/** Cached transaction function for updateDeliveredAndInsertReceipt (compiled once). */
|
|
16
|
+
_updateDeliveredAndInsertReceiptTxn;
|
|
17
|
+
_stmts;
|
|
18
|
+
constructor(dataDir) {
|
|
19
|
+
mkdirSync(dataDir, { recursive: true });
|
|
20
|
+
this._db = new Database(join(dataDir, 'sessions.db'));
|
|
21
|
+
this._db.pragma('journal_mode = WAL');
|
|
22
|
+
runMigrations(this._db, channelMigrations);
|
|
23
|
+
this._stmts = this._prepareStatements();
|
|
24
|
+
this._updateDeliveredAndInsertReceiptTxn = this._db.transaction((sessionId, tokens, requestCount, receipt) => {
|
|
25
|
+
this.updateTokensDelivered(sessionId, tokens, requestCount);
|
|
26
|
+
this.insertReceipt(receipt);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
_prepareStatements() {
|
|
30
|
+
return {
|
|
31
|
+
upsert: this._db.prepare(`
|
|
32
|
+
INSERT INTO payment_channels (
|
|
33
|
+
session_id, peer_id, role, seller_evm_addr, buyer_evm_addr,
|
|
34
|
+
nonce, auth_max, deadline, previous_session_id, previous_consumption,
|
|
35
|
+
tokens_delivered, request_count, reserved_at, settled_at, settled_amount,
|
|
36
|
+
status, latest_buyer_sig, latest_metadata_auth_sig, latest_metadata,
|
|
37
|
+
created_at, updated_at
|
|
38
|
+
) VALUES (
|
|
39
|
+
@sessionId, @peerId, @role, @sellerEvmAddr, @buyerEvmAddr,
|
|
40
|
+
@nonce, @authMax, @deadline, @previousSessionId, @previousConsumption,
|
|
41
|
+
@tokensDelivered, @requestCount, @reservedAt, @settledAt, @settledAmount,
|
|
42
|
+
@status, @latestBuyerSig, @latestSpendingAuthSig, @latestMetadata,
|
|
43
|
+
@createdAt, @updatedAt
|
|
44
|
+
)
|
|
45
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
46
|
+
auth_max = @authMax,
|
|
47
|
+
previous_consumption = @previousConsumption,
|
|
48
|
+
tokens_delivered = @tokensDelivered,
|
|
49
|
+
request_count = @requestCount,
|
|
50
|
+
settled_at = @settledAt,
|
|
51
|
+
settled_amount = @settledAmount,
|
|
52
|
+
status = @status,
|
|
53
|
+
latest_buyer_sig = @latestBuyerSig,
|
|
54
|
+
latest_metadata_auth_sig = @latestSpendingAuthSig,
|
|
55
|
+
latest_metadata = @latestMetadata,
|
|
56
|
+
updated_at = @updatedAt
|
|
57
|
+
`),
|
|
58
|
+
getById: this._db.prepare('SELECT * FROM payment_channels WHERE session_id = ?'),
|
|
59
|
+
getActiveByPeer: this._db.prepare('SELECT * FROM payment_channels WHERE peer_id = ? AND role = ? AND status = ? ORDER BY created_at DESC LIMIT 1'),
|
|
60
|
+
getActiveByPeerAndBuyer: this._db.prepare('SELECT * FROM payment_channels WHERE peer_id = ? AND role = ? AND buyer_evm_addr = ? AND status = ? ORDER BY created_at DESC LIMIT 1'),
|
|
61
|
+
getLatestByPeer: this._db.prepare('SELECT * FROM payment_channels WHERE peer_id = ? AND role = ? ORDER BY created_at DESC LIMIT 1'),
|
|
62
|
+
getLatestByPeerAndBuyer: this._db.prepare('SELECT * FROM payment_channels WHERE peer_id = ? AND role = ? AND buyer_evm_addr = ? ORDER BY created_at DESC LIMIT 1'),
|
|
63
|
+
updateStatusWithAmount: this._db.prepare('UPDATE payment_channels SET status = ?, settled_at = ?, settled_amount = ?, updated_at = ? WHERE session_id = ?'),
|
|
64
|
+
updateStatus: this._db.prepare('UPDATE payment_channels SET status = ?, updated_at = ? WHERE session_id = ?'),
|
|
65
|
+
updateTokens: this._db.prepare('UPDATE payment_channels SET tokens_delivered = ?, request_count = ?, updated_at = ? WHERE session_id = ?'),
|
|
66
|
+
getMaxNonce: this._db.prepare('SELECT MAX(nonce) as max_nonce FROM payment_channels WHERE role = ?'),
|
|
67
|
+
listAll: this._db.prepare('SELECT * FROM payment_channels ORDER BY updated_at DESC LIMIT ?'),
|
|
68
|
+
getTimedOut: this._db.prepare('SELECT * FROM payment_channels WHERE status = ? AND updated_at < ? ORDER BY updated_at LIMIT 100'),
|
|
69
|
+
insertReceipt: this._db.prepare(`
|
|
70
|
+
INSERT INTO payment_receipts (
|
|
71
|
+
session_id, running_total, request_count, response_hash,
|
|
72
|
+
seller_sig, buyer_ack_sig, created_at
|
|
73
|
+
) VALUES (
|
|
74
|
+
@sessionId, @runningTotal, @requestCount, @responseHash,
|
|
75
|
+
@sellerSig, @buyerAckSig, @createdAt
|
|
76
|
+
)
|
|
77
|
+
`),
|
|
78
|
+
getReceipts: this._db.prepare('SELECT * FROM payment_receipts WHERE session_id = ? ORDER BY created_at'),
|
|
79
|
+
updateReceiptAck: this._db.prepare('UPDATE payment_receipts SET buyer_ack_sig = ? WHERE session_id = ? AND running_total = ? AND request_count = ?'),
|
|
80
|
+
getActiveChannels: this._db.prepare('SELECT * FROM payment_channels WHERE role = ? AND status = ? ORDER BY created_at DESC'),
|
|
81
|
+
getActiveChannelsByBuyer: this._db.prepare('SELECT * FROM payment_channels WHERE role = ? AND buyer_evm_addr = ? AND status = ? ORDER BY created_at DESC'),
|
|
82
|
+
getTotalsByPeerAndBuyer: this._db.prepare(`
|
|
83
|
+
SELECT
|
|
84
|
+
COUNT(*) as total_sessions,
|
|
85
|
+
COALESCE(SUM(request_count), 0) as total_requests,
|
|
86
|
+
COALESCE(SUM(CAST(tokens_delivered AS INTEGER)), 0) as total_input_tokens,
|
|
87
|
+
COALESCE(SUM(CAST(previous_consumption AS INTEGER)), 0) as total_output_tokens,
|
|
88
|
+
COALESCE(SUM(CAST(auth_max AS INTEGER)), 0) as total_authorized,
|
|
89
|
+
MIN(reserved_at) as first_session_at
|
|
90
|
+
FROM payment_channels
|
|
91
|
+
WHERE peer_id = ? AND role = ? AND buyer_evm_addr = ?
|
|
92
|
+
`),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// ── Channel CRUD ──────────────────────────────────────────────
|
|
96
|
+
upsertChannel(channel) {
|
|
97
|
+
this._stmts.upsert.run({
|
|
98
|
+
sessionId: channel.sessionId,
|
|
99
|
+
peerId: channel.peerId,
|
|
100
|
+
role: channel.role,
|
|
101
|
+
sellerEvmAddr: channel.sellerEvmAddr,
|
|
102
|
+
buyerEvmAddr: channel.buyerEvmAddr,
|
|
103
|
+
nonce: channel.nonce,
|
|
104
|
+
authMax: channel.authMax,
|
|
105
|
+
deadline: channel.deadline,
|
|
106
|
+
previousSessionId: channel.previousSessionId,
|
|
107
|
+
previousConsumption: channel.previousConsumption,
|
|
108
|
+
tokensDelivered: channel.tokensDelivered,
|
|
109
|
+
requestCount: channel.requestCount,
|
|
110
|
+
reservedAt: channel.reservedAt,
|
|
111
|
+
settledAt: channel.settledAt,
|
|
112
|
+
settledAmount: channel.settledAmount,
|
|
113
|
+
status: channel.status,
|
|
114
|
+
latestBuyerSig: channel.latestBuyerSig ?? null,
|
|
115
|
+
latestSpendingAuthSig: channel.latestSpendingAuthSig ?? null,
|
|
116
|
+
latestMetadata: channel.latestMetadata ?? null,
|
|
117
|
+
createdAt: channel.createdAt,
|
|
118
|
+
updatedAt: channel.updatedAt,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
getChannel(sessionId) {
|
|
122
|
+
const row = this._stmts.getById.get(sessionId);
|
|
123
|
+
return row ? rowToChannel(row) : null;
|
|
124
|
+
}
|
|
125
|
+
getActiveChannelByPeer(peerId, role) {
|
|
126
|
+
const row = this._stmts.getActiveByPeer.get(peerId, role, CHANNEL_STATUS.ACTIVE);
|
|
127
|
+
return row ? rowToChannel(row) : null;
|
|
128
|
+
}
|
|
129
|
+
getActiveChannelByPeerAndBuyer(peerId, role, buyerEvmAddr) {
|
|
130
|
+
const row = this._stmts.getActiveByPeerAndBuyer.get(peerId, role, buyerEvmAddr, CHANNEL_STATUS.ACTIVE);
|
|
131
|
+
return row ? rowToChannel(row) : null;
|
|
132
|
+
}
|
|
133
|
+
getLatestChannel(peerId, role) {
|
|
134
|
+
const row = this._stmts.getLatestByPeer.get(peerId, role);
|
|
135
|
+
return row ? rowToChannel(row) : null;
|
|
136
|
+
}
|
|
137
|
+
getLatestChannelByPeerAndBuyer(peerId, role, buyerEvmAddr) {
|
|
138
|
+
const row = this._stmts.getLatestByPeerAndBuyer.get(peerId, role, buyerEvmAddr);
|
|
139
|
+
return row ? rowToChannel(row) : null;
|
|
140
|
+
}
|
|
141
|
+
updateChannelStatus(sessionId, status, settledAmount) {
|
|
142
|
+
const now = Date.now();
|
|
143
|
+
if (settledAmount !== undefined) {
|
|
144
|
+
this._stmts.updateStatusWithAmount.run(status, now, settledAmount, now, sessionId);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this._stmts.updateStatus.run(status, now, sessionId);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
updateTokensDelivered(sessionId, tokens, requestCount) {
|
|
151
|
+
this._stmts.updateTokens.run(tokens, requestCount, Date.now(), sessionId);
|
|
152
|
+
}
|
|
153
|
+
getMaxNonce(role) {
|
|
154
|
+
const row = this._stmts.getMaxNonce.get(role);
|
|
155
|
+
return row?.max_nonce ?? 0;
|
|
156
|
+
}
|
|
157
|
+
/** List all channels ordered by most recent first. */
|
|
158
|
+
listAllChannels(limit = 100) {
|
|
159
|
+
const rows = this._stmts.listAll.all(limit);
|
|
160
|
+
return rows.map(rowToChannel);
|
|
161
|
+
}
|
|
162
|
+
/** Get all active channels for a given role (buyer or seller). */
|
|
163
|
+
getActiveChannels(role) {
|
|
164
|
+
const rows = this._stmts.getActiveChannels.all(role, CHANNEL_STATUS.ACTIVE);
|
|
165
|
+
return rows.map(rowToChannel);
|
|
166
|
+
}
|
|
167
|
+
getActiveChannelsByBuyer(role, buyerEvmAddr) {
|
|
168
|
+
const rows = this._stmts.getActiveChannelsByBuyer.all(role, buyerEvmAddr, CHANNEL_STATUS.ACTIVE);
|
|
169
|
+
return rows.map(rowToChannel);
|
|
170
|
+
}
|
|
171
|
+
/** Aggregate totals across all channels for a given peer and role. */
|
|
172
|
+
getTotalsByPeer(peerId, role) {
|
|
173
|
+
const row = this._db.prepare(`
|
|
174
|
+
SELECT
|
|
175
|
+
COUNT(*) as total_sessions,
|
|
176
|
+
COALESCE(SUM(request_count), 0) as total_requests,
|
|
177
|
+
COALESCE(SUM(CAST(tokens_delivered AS INTEGER)), 0) as total_input_tokens,
|
|
178
|
+
COALESCE(SUM(CAST(previous_consumption AS INTEGER)), 0) as total_output_tokens,
|
|
179
|
+
COALESCE(SUM(CAST(auth_max AS INTEGER)), 0) as total_authorized,
|
|
180
|
+
MIN(reserved_at) as first_session_at
|
|
181
|
+
FROM payment_channels
|
|
182
|
+
WHERE peer_id = ? AND role = ?
|
|
183
|
+
`).get(peerId, role);
|
|
184
|
+
return {
|
|
185
|
+
totalSessions: row.total_sessions,
|
|
186
|
+
totalRequests: row.total_requests,
|
|
187
|
+
totalInputTokens: row.total_input_tokens,
|
|
188
|
+
totalOutputTokens: row.total_output_tokens,
|
|
189
|
+
totalAuthorizedUsdc: BigInt(row.total_authorized),
|
|
190
|
+
firstSessionAt: row.first_session_at,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
getTotalsByPeerAndBuyer(peerId, role, buyerEvmAddr) {
|
|
194
|
+
const row = this._stmts.getTotalsByPeerAndBuyer.get(peerId, role, buyerEvmAddr);
|
|
195
|
+
return {
|
|
196
|
+
totalSessions: row.total_sessions,
|
|
197
|
+
totalRequests: row.total_requests,
|
|
198
|
+
totalInputTokens: row.total_input_tokens,
|
|
199
|
+
totalOutputTokens: row.total_output_tokens,
|
|
200
|
+
totalAuthorizedUsdc: BigInt(row.total_authorized),
|
|
201
|
+
firstSessionAt: row.first_session_at,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// ── Timeout queries ───────────────────────────────────────────
|
|
205
|
+
getTimedOutChannels(timeoutSeconds) {
|
|
206
|
+
const cutoff = Date.now() - timeoutSeconds * 1000;
|
|
207
|
+
const rows = this._stmts.getTimedOut.all(CHANNEL_STATUS.ACTIVE, cutoff);
|
|
208
|
+
return rows.map(rowToChannel);
|
|
209
|
+
}
|
|
210
|
+
// ── Receipt CRUD ──────────────────────────────────────────────
|
|
211
|
+
insertReceipt(receipt) {
|
|
212
|
+
this._stmts.insertReceipt.run({
|
|
213
|
+
sessionId: receipt.sessionId,
|
|
214
|
+
runningTotal: receipt.runningTotal,
|
|
215
|
+
requestCount: receipt.requestCount,
|
|
216
|
+
responseHash: receipt.responseHash,
|
|
217
|
+
sellerSig: receipt.sellerSig,
|
|
218
|
+
buyerAckSig: receipt.buyerAckSig,
|
|
219
|
+
createdAt: receipt.createdAt,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
getReceipts(sessionId) {
|
|
223
|
+
const rows = this._stmts.getReceipts.all(sessionId);
|
|
224
|
+
return rows.map(rowToReceipt);
|
|
225
|
+
}
|
|
226
|
+
/** Atomically update tokens delivered and insert receipt in a single transaction. */
|
|
227
|
+
updateDeliveredAndInsertReceipt(sessionId, tokens, requestCount, receipt) {
|
|
228
|
+
this._updateDeliveredAndInsertReceiptTxn(sessionId, tokens, requestCount, receipt);
|
|
229
|
+
}
|
|
230
|
+
/** Update receipt ack directly by composite key (no load-all-then-filter). */
|
|
231
|
+
updateReceiptAck(sessionId, runningTotal, requestCount, buyerAckSig) {
|
|
232
|
+
this._stmts.updateReceiptAck.run(buyerAckSig, sessionId, runningTotal, requestCount);
|
|
233
|
+
}
|
|
234
|
+
// ── Lifecycle ─────────────────────────────────────────────────
|
|
235
|
+
close() {
|
|
236
|
+
this._db.close();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function rowToChannel(row) {
|
|
240
|
+
return {
|
|
241
|
+
sessionId: row.session_id,
|
|
242
|
+
peerId: row.peer_id,
|
|
243
|
+
role: row.role,
|
|
244
|
+
sellerEvmAddr: row.seller_evm_addr,
|
|
245
|
+
buyerEvmAddr: row.buyer_evm_addr,
|
|
246
|
+
nonce: row.nonce,
|
|
247
|
+
authMax: row.auth_max,
|
|
248
|
+
deadline: row.deadline,
|
|
249
|
+
previousSessionId: row.previous_session_id,
|
|
250
|
+
previousConsumption: row.previous_consumption,
|
|
251
|
+
tokensDelivered: row.tokens_delivered,
|
|
252
|
+
requestCount: row.request_count,
|
|
253
|
+
reservedAt: row.reserved_at,
|
|
254
|
+
settledAt: row.settled_at,
|
|
255
|
+
settledAmount: row.settled_amount,
|
|
256
|
+
status: row.status,
|
|
257
|
+
latestBuyerSig: row.latest_buyer_sig,
|
|
258
|
+
latestSpendingAuthSig: row.latest_metadata_auth_sig,
|
|
259
|
+
latestMetadata: row.latest_metadata,
|
|
260
|
+
createdAt: row.created_at,
|
|
261
|
+
updatedAt: row.updated_at,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function rowToReceipt(row) {
|
|
265
|
+
return {
|
|
266
|
+
id: row.id,
|
|
267
|
+
sessionId: row.session_id,
|
|
268
|
+
runningTotal: row.running_total,
|
|
269
|
+
requestCount: row.request_count,
|
|
270
|
+
responseHash: row.response_hash,
|
|
271
|
+
sellerSig: row.seller_sig,
|
|
272
|
+
buyerAckSig: row.buyer_ack_sig,
|
|
273
|
+
createdAt: row.created_at,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=channel-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-store.js","sourceRoot":"","sources":["../../src/payments/channel-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type AbstractSigner } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
export interface ANTSTokenClientConfig {
|
|
4
|
+
rpcUrl: string;
|
|
5
|
+
contractAddress: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ANTSTokenClient extends BaseEvmClient {
|
|
8
|
+
constructor(config: ANTSTokenClientConfig);
|
|
9
|
+
balanceOf(address: string): Promise<bigint>;
|
|
10
|
+
totalSupply(): Promise<bigint>;
|
|
11
|
+
transfersEnabled(): Promise<boolean>;
|
|
12
|
+
setRegistry(signer: AbstractSigner, registryAddress: string): Promise<string>;
|
|
13
|
+
enableTransfers(signer: AbstractSigner): Promise<string>;
|
|
14
|
+
transferOwnership(signer: AbstractSigner, newOwner: string): Promise<string>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ants-token-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ants-token-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/ants-token-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;CACzB;AAeD,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,MAAM,EAAE,qBAAqB;IAInC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7E,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAUnF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Contract } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
const ANTS_TOKEN_ABI = [
|
|
4
|
+
'function balanceOf(address account) external view returns (uint256)',
|
|
5
|
+
'function totalSupply() external view returns (uint256)',
|
|
6
|
+
'function name() external view returns (string)',
|
|
7
|
+
'function symbol() external view returns (string)',
|
|
8
|
+
'function decimals() external view returns (uint8)',
|
|
9
|
+
'function transfersEnabled() external view returns (bool)',
|
|
10
|
+
'function owner() external view returns (address)',
|
|
11
|
+
'function setRegistry(address _registry) external',
|
|
12
|
+
'function enableTransfers() external',
|
|
13
|
+
'function transferOwnership(address newOwner) external',
|
|
14
|
+
];
|
|
15
|
+
export class ANTSTokenClient extends BaseEvmClient {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
super(config.rpcUrl, config.contractAddress);
|
|
18
|
+
}
|
|
19
|
+
async balanceOf(address) {
|
|
20
|
+
const contract = new Contract(this._contractAddress, ANTS_TOKEN_ABI, this._provider);
|
|
21
|
+
return contract.getFunction('balanceOf')(address);
|
|
22
|
+
}
|
|
23
|
+
async totalSupply() {
|
|
24
|
+
const contract = new Contract(this._contractAddress, ANTS_TOKEN_ABI, this._provider);
|
|
25
|
+
return contract.getFunction('totalSupply')();
|
|
26
|
+
}
|
|
27
|
+
async transfersEnabled() {
|
|
28
|
+
const contract = new Contract(this._contractAddress, ANTS_TOKEN_ABI, this._provider);
|
|
29
|
+
return contract.getFunction('transfersEnabled')();
|
|
30
|
+
}
|
|
31
|
+
async setRegistry(signer, registryAddress) {
|
|
32
|
+
const connected = this._ensureConnected(signer);
|
|
33
|
+
const signerAddress = await connected.getAddress();
|
|
34
|
+
const contract = new Contract(this._contractAddress, ANTS_TOKEN_ABI, connected);
|
|
35
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
36
|
+
const tx = await contract.getFunction('setRegistry')(registryAddress, { nonce });
|
|
37
|
+
const receipt = await tx.wait();
|
|
38
|
+
if (!receipt)
|
|
39
|
+
throw new Error('Transaction was dropped or replaced');
|
|
40
|
+
return receipt.hash;
|
|
41
|
+
}
|
|
42
|
+
async enableTransfers(signer) {
|
|
43
|
+
const connected = this._ensureConnected(signer);
|
|
44
|
+
const signerAddress = await connected.getAddress();
|
|
45
|
+
const contract = new Contract(this._contractAddress, ANTS_TOKEN_ABI, connected);
|
|
46
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
47
|
+
const tx = await contract.getFunction('enableTransfers')({ nonce });
|
|
48
|
+
const receipt = await tx.wait();
|
|
49
|
+
if (!receipt)
|
|
50
|
+
throw new Error('Transaction was dropped or replaced');
|
|
51
|
+
return receipt.hash;
|
|
52
|
+
}
|
|
53
|
+
async transferOwnership(signer, newOwner) {
|
|
54
|
+
const connected = this._ensureConnected(signer);
|
|
55
|
+
const signerAddress = await connected.getAddress();
|
|
56
|
+
const contract = new Contract(this._contractAddress, ANTS_TOKEN_ABI, connected);
|
|
57
|
+
const nonce = await this._reserveNonce(signerAddress);
|
|
58
|
+
const tx = await contract.getFunction('transferOwnership')(newOwner, { nonce });
|
|
59
|
+
const receipt = await tx.wait();
|
|
60
|
+
if (!receipt)
|
|
61
|
+
throw new Error('Transaction was dropped or replaced');
|
|
62
|
+
return receipt.hash;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=ants-token-client.js.map
|