@antseed/node 0.2.105 → 0.2.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/billing/index.d.ts +2 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +2 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/unit.d.ts +3 -0
- package/dist/billing/unit.d.ts.map +1 -0
- package/dist/billing/unit.js +3 -0
- package/dist/billing/unit.js.map +1 -0
- package/dist/buyer-request-handler.d.ts +1 -54
- package/dist/buyer-request-handler.d.ts.map +1 -1
- package/dist/buyer-request-handler.js +2 -379
- package/dist/buyer-request-handler.js.map +1 -1
- package/dist/discovery/announcer.d.ts +7 -1
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +84 -33
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/http-metadata-resolver.d.ts +4 -0
- package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
- package/dist/discovery/http-metadata-resolver.js +42 -2
- package/dist/discovery/http-metadata-resolver.js.map +1 -1
- package/dist/discovery/index.d.ts +1 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +4 -4
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +339 -23
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.d.ts +7 -3
- package/dist/discovery/metadata-validator.d.ts.map +1 -1
- package/dist/discovery/metadata-validator.js +139 -8
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts +1 -0
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +23 -5
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +2 -90
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +3 -11
- package/dist/discovery/peer-metadata.js.map +1 -1
- package/dist/discovery/seller-address-resolver.d.ts +1 -49
- package/dist/discovery/seller-address-resolver.d.ts.map +1 -1
- package/dist/discovery/seller-address-resolver.js +2 -114
- package/dist/discovery/seller-address-resolver.js.map +1 -1
- package/dist/errors.d.ts +43 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +73 -0
- package/dist/errors.js.map +1 -0
- package/dist/health/model-health-checker.d.ts +6 -5
- package/dist/health/model-health-checker.d.ts.map +1 -1
- package/dist/health/model-health-checker.js +22 -10
- package/dist/health/model-health-checker.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +6 -0
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +28 -0
- package/dist/node.js.map +1 -1
- package/dist/p2p/connection-auth.d.ts +3 -8
- package/dist/p2p/connection-auth.d.ts.map +1 -1
- package/dist/p2p/connection-auth.js +4 -6
- package/dist/p2p/connection-auth.js.map +1 -1
- package/dist/p2p/connection-manager.d.ts +3 -1
- package/dist/p2p/connection-manager.d.ts.map +1 -1
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/p2p/identity.d.ts +1 -21
- package/dist/p2p/identity.d.ts.map +1 -1
- package/dist/p2p/identity.js +3 -62
- package/dist/p2p/identity.js.map +1 -1
- package/dist/p2p/message-protocol.d.ts +1 -49
- package/dist/p2p/message-protocol.d.ts.map +1 -1
- package/dist/p2p/message-protocol.js +2 -125
- package/dist/p2p/message-protocol.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +1 -21
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +2 -220
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +1 -51
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +2 -159
- package/dist/p2p/payment-mux.js.map +1 -1
- package/dist/payments/buyer-free-usage-manager.d.ts +1 -43
- package/dist/payments/buyer-free-usage-manager.d.ts.map +1 -1
- package/dist/payments/buyer-free-usage-manager.js +2 -298
- package/dist/payments/buyer-free-usage-manager.js.map +1 -1
- package/dist/payments/buyer-payment-manager.d.ts +1 -277
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +2 -1039
- package/dist/payments/buyer-payment-manager.js.map +1 -1
- package/dist/payments/buyer-payment-negotiator.d.ts +1 -130
- package/dist/payments/buyer-payment-negotiator.d.ts.map +1 -1
- package/dist/payments/buyer-payment-negotiator.js +2 -950
- package/dist/payments/buyer-payment-negotiator.js.map +1 -1
- package/dist/payments/chain-config.d.ts.map +1 -1
- package/dist/payments/chain-config.js +13 -2
- package/dist/payments/chain-config.js.map +1 -1
- package/dist/payments/channel-session-state.d.ts +1 -13
- package/dist/payments/channel-session-state.d.ts.map +1 -1
- package/dist/payments/channel-session-state.js +2 -25
- package/dist/payments/channel-session-state.js.map +1 -1
- package/dist/payments/channel-store.d.ts +2 -51
- package/dist/payments/channel-store.d.ts.map +1 -1
- package/dist/payments/channel-store.js +3 -14
- package/dist/payments/channel-store.js.map +1 -1
- package/dist/payments/channel-usage-accounting.d.ts +1 -17
- package/dist/payments/channel-usage-accounting.d.ts.map +1 -1
- package/dist/payments/channel-usage-accounting.js +2 -65
- package/dist/payments/channel-usage-accounting.js.map +1 -1
- package/dist/payments/evm/base-evm-client.d.ts +1 -26
- package/dist/payments/evm/base-evm-client.d.ts.map +1 -1
- package/dist/payments/evm/base-evm-client.js +2 -115
- package/dist/payments/evm/base-evm-client.js.map +1 -1
- package/dist/payments/evm/channels-client.d.ts +1 -85
- package/dist/payments/evm/channels-client.d.ts.map +1 -1
- package/dist/payments/evm/channels-client.js +2 -193
- package/dist/payments/evm/channels-client.js.map +1 -1
- package/dist/payments/evm/deposits-client.d.ts +1 -29
- package/dist/payments/evm/deposits-client.d.ts.map +1 -1
- package/dist/payments/evm/deposits-client.js +2 -67
- package/dist/payments/evm/deposits-client.js.map +1 -1
- package/dist/payments/evm/signatures.d.ts +1 -203
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +2 -236
- package/dist/payments/evm/signatures.js.map +1 -1
- package/dist/payments/evm/subpool-client.d.ts +32 -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 +1 -1
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +1 -1
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/pricing.d.ts +1 -26
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +2 -36
- package/dist/payments/pricing.js.map +1 -1
- package/dist/payments/seller-payment-manager.d.ts +7 -0
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +27 -2
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/usdc-utils.d.ts +1 -8
- package/dist/payments/usdc-utils.d.ts.map +1 -1
- package/dist/payments/usdc-utils.js +2 -16
- package/dist/payments/usdc-utils.js.map +1 -1
- package/dist/proxy/proxy-mux.d.ts +1 -69
- package/dist/proxy/proxy-mux.d.ts.map +1 -1
- package/dist/proxy/proxy-mux.js +2 -346
- package/dist/proxy/proxy-mux.js.map +1 -1
- package/dist/proxy/request-codec.d.ts +1 -41
- package/dist/proxy/request-codec.d.ts.map +1 -1
- package/dist/proxy/request-codec.js +2 -280
- package/dist/proxy/request-codec.js.map +1 -1
- package/dist/seller-request-handler.d.ts +10 -3
- package/dist/seller-request-handler.d.ts.map +1 -1
- package/dist/seller-request-handler.js +112 -17
- package/dist/seller-request-handler.js.map +1 -1
- package/dist/types/billing.d.ts +2 -0
- package/dist/types/billing.d.ts.map +1 -0
- package/dist/types/billing.js +2 -0
- package/dist/types/billing.js.map +1 -0
- package/dist/types/capability.d.ts +1 -25
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/capability.js +2 -1
- package/dist/types/capability.js.map +1 -1
- package/dist/types/connection.d.ts +1 -26
- package/dist/types/connection.d.ts.map +1 -1
- package/dist/types/connection.js +2 -10
- package/dist/types/connection.js.map +1 -1
- package/dist/types/http.d.ts +1 -39
- package/dist/types/http.d.ts.map +1 -1
- package/dist/types/http.js +2 -16
- package/dist/types/http.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/peer.d.ts +9 -31
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/peer.js +2 -14
- package/dist/types/peer.js.map +1 -1
- package/dist/types/protocol.d.ts +1 -306
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +2 -81
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/service-api.d.ts +1 -5
- package/dist/types/service-api.d.ts.map +1 -1
- package/dist/types/service-api.js +2 -12
- package/dist/types/service-api.js.map +1 -1
- package/dist/utils/debug.d.ts +1 -5
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +2 -52
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/hex.d.ts +1 -2
- package/dist/utils/hex.d.ts.map +1 -1
- package/dist/utils/hex.js +2 -14
- package/dist/utils/hex.js.map +1 -1
- package/dist/utils/json-codec.d.ts +1 -9
- package/dist/utils/json-codec.d.ts.map +1 -1
- package/dist/utils/json-codec.js +2 -51
- package/dist/utils/json-codec.js.map +1 -1
- package/dist/utils/response-usage.d.ts +1 -9
- package/dist/utils/response-usage.d.ts.map +1 -1
- package/dist/utils/response-usage.js +2 -39
- package/dist/utils/response-usage.js.map +1 -1
- package/dist/verification/codec.d.ts +1 -3
- package/dist/verification/codec.d.ts.map +1 -1
- package/dist/verification/codec.js +2 -37
- package/dist/verification/codec.js.map +1 -1
- package/dist/verification/response-auth.d.ts +1 -30
- package/dist/verification/response-auth.d.ts.map +1 -1
- package/dist/verification/response-auth.js +2 -110
- package/dist/verification/response-auth.js.map +1 -1
- package/dist/verification/verification-mux.d.ts +1 -19
- package/dist/verification/verification-mux.d.ts.map +1 -1
- package/dist/verification/verification-mux.js +2 -99
- package/dist/verification/verification-mux.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,204 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const SPENDING_AUTH_TYPES: {
|
|
3
|
-
SpendingAuth: {
|
|
4
|
-
name: string;
|
|
5
|
-
type: string;
|
|
6
|
-
}[];
|
|
7
|
-
};
|
|
8
|
-
export declare const RESERVE_AUTH_TYPES: {
|
|
9
|
-
ReserveAuth: {
|
|
10
|
-
name: string;
|
|
11
|
-
type: string;
|
|
12
|
-
}[];
|
|
13
|
-
};
|
|
14
|
-
export declare const SET_OPERATOR_TYPES: {
|
|
15
|
-
SetOperator: {
|
|
16
|
-
name: string;
|
|
17
|
-
type: string;
|
|
18
|
-
}[];
|
|
19
|
-
};
|
|
20
|
-
export declare const FREE_USAGE_OPEN_TYPES: {
|
|
21
|
-
FreeUsageOpen: {
|
|
22
|
-
name: string;
|
|
23
|
-
type: string;
|
|
24
|
-
}[];
|
|
25
|
-
};
|
|
26
|
-
export declare const FREE_USAGE_AUTH_TYPES: {
|
|
27
|
-
FreeUsageAuth: {
|
|
28
|
-
name: string;
|
|
29
|
-
type: string;
|
|
30
|
-
}[];
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* EIP-3009 receiveWithAuthorization typed data, as implemented by Circle's
|
|
34
|
-
* FiatToken (USDC). Must match the token's typehash exactly:
|
|
35
|
-
* ReceiveWithAuthorization(address from,address to,uint256 value,
|
|
36
|
-
* uint256 validAfter,uint256 validBefore,bytes32 nonce)
|
|
37
|
-
*
|
|
38
|
-
* For deposit sweeps this is the ONLY buyer signature: addressing the
|
|
39
|
-
* authorization to the AntseedDepositRelay contract is consent to its
|
|
40
|
-
* public, immutable fixed FEE.
|
|
41
|
-
*/
|
|
42
|
-
export declare const RECEIVE_WITH_AUTHORIZATION_TYPES: {
|
|
43
|
-
ReceiveWithAuthorization: {
|
|
44
|
-
name: string;
|
|
45
|
-
type: string;
|
|
46
|
-
}[];
|
|
47
|
-
};
|
|
48
|
-
export interface SpendingAuthMessage {
|
|
49
|
-
channelId: string;
|
|
50
|
-
cumulativeAmount: bigint;
|
|
51
|
-
metadataHash: string;
|
|
52
|
-
}
|
|
53
|
-
export interface ReserveAuthMessage {
|
|
54
|
-
channelId: string;
|
|
55
|
-
maxAmount: bigint;
|
|
56
|
-
deadline: bigint;
|
|
57
|
-
}
|
|
58
|
-
export interface SetOperatorMessage {
|
|
59
|
-
operator: string;
|
|
60
|
-
nonce: bigint;
|
|
61
|
-
}
|
|
62
|
-
export interface FreeUsageOpenMessage {
|
|
63
|
-
channelId: string;
|
|
64
|
-
deadline: bigint;
|
|
65
|
-
}
|
|
66
|
-
export interface FreeUsageAuthMessage {
|
|
67
|
-
channelId: string;
|
|
68
|
-
sequence: bigint;
|
|
69
|
-
metadataHash: string;
|
|
70
|
-
deadline: bigint;
|
|
71
|
-
}
|
|
72
|
-
export interface ReceiveAuthorizationMessage {
|
|
73
|
-
from: string;
|
|
74
|
-
to: string;
|
|
75
|
-
value: bigint;
|
|
76
|
-
validAfter: bigint;
|
|
77
|
-
validBefore: bigint;
|
|
78
|
-
nonce: string;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* SpendingAuth metadata v2.
|
|
82
|
-
*
|
|
83
|
-
* ABI layout:
|
|
84
|
-
* abi.encode(
|
|
85
|
-
* uint256 version,
|
|
86
|
-
* uint256 cumulativeInputTokens,
|
|
87
|
-
* uint256 cumulativeOutputTokens,
|
|
88
|
-
* uint256 cumulativeRequestCount,
|
|
89
|
-
* ServiceTotal[] services
|
|
90
|
-
* )
|
|
91
|
-
*
|
|
92
|
-
* The first four fields intentionally match v1 so legacy decoders can read
|
|
93
|
-
* aggregate token/request counters by decoding only those fields. Service
|
|
94
|
-
* entries are buyer-side attribution metadata for indexers: input tokens
|
|
95
|
-
* include cached input, with cached input broken out separately.
|
|
96
|
-
*
|
|
97
|
-
* Service cumulativeAmount values may be lower than the top-level
|
|
98
|
-
* cumulativeAmount because the buyer can sign reserve headroom, cap a
|
|
99
|
-
* per-request amount, or extend auth without attributing that delta to a
|
|
100
|
-
* specific service.
|
|
101
|
-
*/
|
|
102
|
-
export interface SpendingAuthMetadata {
|
|
103
|
-
cumulativeInputTokens: bigint;
|
|
104
|
-
cumulativeOutputTokens: bigint;
|
|
105
|
-
cumulativeRequestCount: bigint;
|
|
106
|
-
services?: SpendingAuthServiceMetadata[];
|
|
107
|
-
}
|
|
108
|
-
export interface SpendingAuthServiceMetadata {
|
|
109
|
-
serviceId: string;
|
|
110
|
-
cumulativeAmount: bigint;
|
|
111
|
-
cumulativeInputTokens: bigint;
|
|
112
|
-
cumulativeCachedInputTokens: bigint;
|
|
113
|
-
cumulativeOutputTokens: bigint;
|
|
114
|
-
cumulativeRequestCount: bigint;
|
|
115
|
-
}
|
|
116
|
-
export declare const METADATA_VERSION = 2n;
|
|
117
|
-
export declare function encodeMetadata(metadata: SpendingAuthMetadata): string;
|
|
118
|
-
export declare function getServiceMetadataId(service: string): string;
|
|
119
|
-
export interface ServiceMetadataDelta {
|
|
120
|
-
amount: bigint;
|
|
121
|
-
inputTokens: bigint;
|
|
122
|
-
cachedInputTokens: bigint;
|
|
123
|
-
outputTokens: bigint;
|
|
124
|
-
requests: bigint;
|
|
125
|
-
}
|
|
126
|
-
export declare function withServiceMetadata<T extends {
|
|
127
|
-
services?: SpendingAuthServiceMetadata[];
|
|
128
|
-
}>(metadata: T, service: string | undefined, delta: ServiceMetadataDelta): T;
|
|
129
|
-
export declare function computeMetadataHash(metadata: SpendingAuthMetadata): string;
|
|
130
|
-
export declare const ZERO_METADATA: SpendingAuthMetadata;
|
|
131
|
-
export declare const ZERO_METADATA_HASH: string;
|
|
132
|
-
/**
|
|
133
|
-
* FreeUsage metadata v1.
|
|
134
|
-
*
|
|
135
|
-
* ABI layout:
|
|
136
|
-
* abi.encode(
|
|
137
|
-
* uint256 version,
|
|
138
|
-
* uint256 cumulativeInputTokens,
|
|
139
|
-
* uint256 cumulativeOutputTokens,
|
|
140
|
-
* uint256 cumulativeRequestCount,
|
|
141
|
-
* ServiceTotal[] services
|
|
142
|
-
* )
|
|
143
|
-
*
|
|
144
|
-
* Uses the same service tuple as paid SpendingAuth metadata so indexers can
|
|
145
|
-
* decode per-service attribution uniformly. cumulativeAmount is always zero
|
|
146
|
-
* for free usage.
|
|
147
|
-
*/
|
|
148
|
-
export interface FreeUsageMetadata {
|
|
149
|
-
cumulativeInputTokens: bigint;
|
|
150
|
-
cumulativeOutputTokens: bigint;
|
|
151
|
-
cumulativeRequestCount: bigint;
|
|
152
|
-
services?: SpendingAuthServiceMetadata[];
|
|
153
|
-
}
|
|
154
|
-
export type FreeUsageServiceMetadata = SpendingAuthServiceMetadata;
|
|
155
|
-
export declare const FREE_USAGE_METADATA_VERSION = 1n;
|
|
156
|
-
export declare function encodeFreeUsageMetadata(metadata: FreeUsageMetadata): string;
|
|
157
|
-
export declare function computeFreeUsageMetadataHash(metadata: FreeUsageMetadata): string;
|
|
158
|
-
export declare const ZERO_FREE_USAGE_METADATA: FreeUsageMetadata;
|
|
159
|
-
export declare const ZERO_FREE_USAGE_METADATA_HASH: string;
|
|
160
|
-
/**
|
|
161
|
-
* Compute the deterministic channelId.
|
|
162
|
-
* Must match: keccak256(abi.encode(buyer, seller, salt))
|
|
163
|
-
*/
|
|
164
|
-
export declare function computeChannelId(buyer: string, seller: string, salt: string): string;
|
|
165
|
-
export declare const FREE_USAGE_CHANNEL_DOMAIN: string;
|
|
166
|
-
/**
|
|
167
|
-
* Compute the deterministic free usage channelId.
|
|
168
|
-
* Domain-separated from AntseedChannels.computeChannelId so a paid and free
|
|
169
|
-
* channel cannot share an ID even if buyer, seller, and salt are identical.
|
|
170
|
-
*/
|
|
171
|
-
export declare function computeFreeUsageChannelId(buyer: string, seller: string, salt: string): string;
|
|
172
|
-
export declare function makeChannelsDomain(chainId: number, contractAddress: string): TypedDataDomain;
|
|
173
|
-
export declare function makeDepositsDomain(chainId: number, contractAddress: string): TypedDataDomain;
|
|
174
|
-
export declare function makeFreeUsageDomain(chainId: number, contractAddress: string): TypedDataDomain;
|
|
175
|
-
/**
|
|
176
|
-
* EIP-712 domain of Circle's USDC (FiatTokenV2). Verified against the deployed
|
|
177
|
-
* Base mainnet token (0x8335...2913): name "USD Coin", version "2". MockUSDC
|
|
178
|
-
* on base-local mirrors the same params. Callers with RPC access should verify
|
|
179
|
-
* via the token's DOMAIN_SEPARATOR() before first use (the params can differ
|
|
180
|
-
* on other deployments).
|
|
181
|
-
*/
|
|
182
|
-
export declare function makeUsdcDomain(chainId: number, usdcAddress: string): TypedDataDomain;
|
|
183
|
-
export declare function signSpendingAuth(signer: AbstractSigner, domain: TypedDataDomain, msg: SpendingAuthMessage): Promise<string>;
|
|
184
|
-
export declare function signReserveAuth(signer: AbstractSigner, domain: TypedDataDomain, msg: ReserveAuthMessage): Promise<string>;
|
|
185
|
-
export declare function signSetOperator(signer: AbstractSigner, domain: TypedDataDomain, msg: SetOperatorMessage): Promise<string>;
|
|
186
|
-
export declare function signFreeUsageOpen(signer: AbstractSigner, domain: TypedDataDomain, msg: FreeUsageOpenMessage): Promise<string>;
|
|
187
|
-
export declare function signFreeUsageAuth(signer: AbstractSigner, domain: TypedDataDomain, msg: FreeUsageAuthMessage): Promise<string>;
|
|
188
|
-
export interface SignedReceiveAuthorization {
|
|
189
|
-
message: ReceiveAuthorizationMessage;
|
|
190
|
-
signature: string;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Build and sign an EIP-3009 ReceiveWithAuthorization for USDC. Works with a
|
|
194
|
-
* provider-less signer — the hot wallet never needs RPC access to sign.
|
|
195
|
-
* A random 32-byte nonce is generated when none is supplied.
|
|
196
|
-
*/
|
|
197
|
-
export declare function buildReceiveAuthorization(signer: AbstractSigner, domain: TypedDataDomain, params: {
|
|
198
|
-
to: string;
|
|
199
|
-
value: bigint;
|
|
200
|
-
validAfter: bigint;
|
|
201
|
-
validBefore: bigint;
|
|
202
|
-
nonce?: string;
|
|
203
|
-
}): Promise<SignedReceiveAuthorization>;
|
|
1
|
+
export * from '@antseed/protocol/signatures';
|
|
204
2
|
//# sourceMappingURL=signatures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/signatures.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/signatures.ts"],"names":[],"mappings":"AACA,cAAc,8BAA8B,CAAC"}
|
|
@@ -1,237 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// EIP-712 Types — AntSeed SpendingAuth (cumulative payment authorization)
|
|
4
|
-
// =========================================================================
|
|
5
|
-
export const SPENDING_AUTH_TYPES = {
|
|
6
|
-
SpendingAuth: [
|
|
7
|
-
{ name: 'channelId', type: 'bytes32' },
|
|
8
|
-
{ name: 'cumulativeAmount', type: 'uint256' },
|
|
9
|
-
{ name: 'metadataHash', type: 'bytes32' },
|
|
10
|
-
],
|
|
11
|
-
};
|
|
12
|
-
export const RESERVE_AUTH_TYPES = {
|
|
13
|
-
ReserveAuth: [
|
|
14
|
-
{ name: 'channelId', type: 'bytes32' },
|
|
15
|
-
{ name: 'maxAmount', type: 'uint128' },
|
|
16
|
-
{ name: 'deadline', type: 'uint256' },
|
|
17
|
-
],
|
|
18
|
-
};
|
|
19
|
-
export const SET_OPERATOR_TYPES = {
|
|
20
|
-
SetOperator: [
|
|
21
|
-
{ name: 'operator', type: 'address' },
|
|
22
|
-
{ name: 'nonce', type: 'uint256' },
|
|
23
|
-
],
|
|
24
|
-
};
|
|
25
|
-
export const FREE_USAGE_OPEN_TYPES = {
|
|
26
|
-
FreeUsageOpen: [
|
|
27
|
-
{ name: 'channelId', type: 'bytes32' },
|
|
28
|
-
{ name: 'deadline', type: 'uint256' },
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
|
-
export const FREE_USAGE_AUTH_TYPES = {
|
|
32
|
-
FreeUsageAuth: [
|
|
33
|
-
{ name: 'channelId', type: 'bytes32' },
|
|
34
|
-
{ name: 'sequence', type: 'uint256' },
|
|
35
|
-
{ name: 'metadataHash', type: 'bytes32' },
|
|
36
|
-
{ name: 'deadline', type: 'uint256' },
|
|
37
|
-
],
|
|
38
|
-
};
|
|
39
|
-
// =========================================================================
|
|
40
|
-
// EIP-712 Types — EIP-3009 (USDC)
|
|
41
|
-
// =========================================================================
|
|
42
|
-
/**
|
|
43
|
-
* EIP-3009 receiveWithAuthorization typed data, as implemented by Circle's
|
|
44
|
-
* FiatToken (USDC). Must match the token's typehash exactly:
|
|
45
|
-
* ReceiveWithAuthorization(address from,address to,uint256 value,
|
|
46
|
-
* uint256 validAfter,uint256 validBefore,bytes32 nonce)
|
|
47
|
-
*
|
|
48
|
-
* For deposit sweeps this is the ONLY buyer signature: addressing the
|
|
49
|
-
* authorization to the AntseedDepositRelay contract is consent to its
|
|
50
|
-
* public, immutable fixed FEE.
|
|
51
|
-
*/
|
|
52
|
-
export const RECEIVE_WITH_AUTHORIZATION_TYPES = {
|
|
53
|
-
ReceiveWithAuthorization: [
|
|
54
|
-
{ name: 'from', type: 'address' },
|
|
55
|
-
{ name: 'to', type: 'address' },
|
|
56
|
-
{ name: 'value', type: 'uint256' },
|
|
57
|
-
{ name: 'validAfter', type: 'uint256' },
|
|
58
|
-
{ name: 'validBefore', type: 'uint256' },
|
|
59
|
-
{ name: 'nonce', type: 'bytes32' },
|
|
60
|
-
],
|
|
61
|
-
};
|
|
62
|
-
export const METADATA_VERSION = 2n;
|
|
63
|
-
const SERVICE_METADATA_ABI_TYPE = 'tuple(bytes32 serviceId,uint256 cumulativeAmount,uint256 cumulativeInputTokens,uint256 cumulativeCachedInputTokens,uint256 cumulativeOutputTokens,uint256 cumulativeRequestCount)[]';
|
|
64
|
-
export function encodeMetadata(metadata) {
|
|
65
|
-
const coder = AbiCoder.defaultAbiCoder();
|
|
66
|
-
const services = [...(metadata.services ?? [])].sort((a, b) => a.serviceId < b.serviceId ? -1 : a.serviceId > b.serviceId ? 1 : 0);
|
|
67
|
-
return coder.encode(['uint256', 'uint256', 'uint256', 'uint256', SERVICE_METADATA_ABI_TYPE], [
|
|
68
|
-
METADATA_VERSION,
|
|
69
|
-
metadata.cumulativeInputTokens,
|
|
70
|
-
metadata.cumulativeOutputTokens,
|
|
71
|
-
metadata.cumulativeRequestCount,
|
|
72
|
-
services,
|
|
73
|
-
]);
|
|
74
|
-
}
|
|
75
|
-
export function getServiceMetadataId(service) {
|
|
76
|
-
return id(service.trim());
|
|
77
|
-
}
|
|
78
|
-
export function withServiceMetadata(metadata, service, delta) {
|
|
79
|
-
if (!service || service.trim().length === 0)
|
|
80
|
-
return metadata;
|
|
81
|
-
const serviceId = getServiceMetadataId(service);
|
|
82
|
-
const byServiceId = new Map();
|
|
83
|
-
for (const entry of metadata.services ?? []) {
|
|
84
|
-
byServiceId.set(entry.serviceId, { ...entry });
|
|
85
|
-
}
|
|
86
|
-
const existing = byServiceId.get(serviceId) ?? {
|
|
87
|
-
serviceId,
|
|
88
|
-
cumulativeAmount: 0n,
|
|
89
|
-
cumulativeInputTokens: 0n,
|
|
90
|
-
cumulativeCachedInputTokens: 0n,
|
|
91
|
-
cumulativeOutputTokens: 0n,
|
|
92
|
-
cumulativeRequestCount: 0n,
|
|
93
|
-
};
|
|
94
|
-
byServiceId.set(serviceId, {
|
|
95
|
-
serviceId,
|
|
96
|
-
cumulativeAmount: existing.cumulativeAmount + delta.amount,
|
|
97
|
-
cumulativeInputTokens: existing.cumulativeInputTokens + delta.inputTokens,
|
|
98
|
-
cumulativeCachedInputTokens: existing.cumulativeCachedInputTokens + delta.cachedInputTokens,
|
|
99
|
-
cumulativeOutputTokens: existing.cumulativeOutputTokens + delta.outputTokens,
|
|
100
|
-
cumulativeRequestCount: existing.cumulativeRequestCount + delta.requests,
|
|
101
|
-
});
|
|
102
|
-
return {
|
|
103
|
-
...metadata,
|
|
104
|
-
services: [...byServiceId.values()].sort((a, b) => a.serviceId < b.serviceId ? -1 : a.serviceId > b.serviceId ? 1 : 0),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
export function computeMetadataHash(metadata) {
|
|
108
|
-
return keccak256(encodeMetadata(metadata));
|
|
109
|
-
}
|
|
110
|
-
export const ZERO_METADATA = {
|
|
111
|
-
cumulativeInputTokens: 0n,
|
|
112
|
-
cumulativeOutputTokens: 0n,
|
|
113
|
-
cumulativeRequestCount: 0n,
|
|
114
|
-
services: [],
|
|
115
|
-
};
|
|
116
|
-
export const ZERO_METADATA_HASH = computeMetadataHash(ZERO_METADATA);
|
|
117
|
-
export const FREE_USAGE_METADATA_VERSION = 1n;
|
|
118
|
-
export function encodeFreeUsageMetadata(metadata) {
|
|
119
|
-
const coder = AbiCoder.defaultAbiCoder();
|
|
120
|
-
const services = [...(metadata.services ?? [])].sort((a, b) => a.serviceId < b.serviceId ? -1 : a.serviceId > b.serviceId ? 1 : 0);
|
|
121
|
-
return coder.encode(['uint256', 'uint256', 'uint256', 'uint256', SERVICE_METADATA_ABI_TYPE], [
|
|
122
|
-
FREE_USAGE_METADATA_VERSION,
|
|
123
|
-
metadata.cumulativeInputTokens,
|
|
124
|
-
metadata.cumulativeOutputTokens,
|
|
125
|
-
metadata.cumulativeRequestCount,
|
|
126
|
-
services,
|
|
127
|
-
]);
|
|
128
|
-
}
|
|
129
|
-
export function computeFreeUsageMetadataHash(metadata) {
|
|
130
|
-
return keccak256(encodeFreeUsageMetadata(metadata));
|
|
131
|
-
}
|
|
132
|
-
export const ZERO_FREE_USAGE_METADATA = {
|
|
133
|
-
cumulativeInputTokens: 0n,
|
|
134
|
-
cumulativeOutputTokens: 0n,
|
|
135
|
-
cumulativeRequestCount: 0n,
|
|
136
|
-
services: [],
|
|
137
|
-
};
|
|
138
|
-
export const ZERO_FREE_USAGE_METADATA_HASH = computeFreeUsageMetadataHash(ZERO_FREE_USAGE_METADATA);
|
|
139
|
-
// =========================================================================
|
|
140
|
-
// Channel ID computation (must match AntseedChannels.computeChannelId)
|
|
141
|
-
// =========================================================================
|
|
142
|
-
/**
|
|
143
|
-
* Compute the deterministic channelId.
|
|
144
|
-
* Must match: keccak256(abi.encode(buyer, seller, salt))
|
|
145
|
-
*/
|
|
146
|
-
export function computeChannelId(buyer, seller, salt) {
|
|
147
|
-
const coder = AbiCoder.defaultAbiCoder();
|
|
148
|
-
return keccak256(coder.encode(['address', 'address', 'bytes32'], [buyer, seller, salt]));
|
|
149
|
-
}
|
|
150
|
-
export const FREE_USAGE_CHANNEL_DOMAIN = id('ANTSEED_FREE_USAGE_CHANNEL');
|
|
151
|
-
/**
|
|
152
|
-
* Compute the deterministic free usage channelId.
|
|
153
|
-
* Domain-separated from AntseedChannels.computeChannelId so a paid and free
|
|
154
|
-
* channel cannot share an ID even if buyer, seller, and salt are identical.
|
|
155
|
-
*/
|
|
156
|
-
export function computeFreeUsageChannelId(buyer, seller, salt) {
|
|
157
|
-
const coder = AbiCoder.defaultAbiCoder();
|
|
158
|
-
return keccak256(coder.encode(['bytes32', 'address', 'address', 'bytes32'], [FREE_USAGE_CHANNEL_DOMAIN, buyer, seller, salt]));
|
|
159
|
-
}
|
|
160
|
-
// =========================================================================
|
|
161
|
-
// EIP-712 Domain helpers
|
|
162
|
-
// =========================================================================
|
|
163
|
-
export function makeChannelsDomain(chainId, contractAddress) {
|
|
164
|
-
return {
|
|
165
|
-
name: 'AntseedChannels',
|
|
166
|
-
version: '1',
|
|
167
|
-
chainId,
|
|
168
|
-
verifyingContract: contractAddress,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
export function makeDepositsDomain(chainId, contractAddress) {
|
|
172
|
-
return {
|
|
173
|
-
name: 'AntseedDeposits',
|
|
174
|
-
version: '1',
|
|
175
|
-
chainId,
|
|
176
|
-
verifyingContract: contractAddress,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
export function makeFreeUsageDomain(chainId, contractAddress) {
|
|
180
|
-
return {
|
|
181
|
-
name: 'AntseedFreeUsage',
|
|
182
|
-
version: '1',
|
|
183
|
-
chainId,
|
|
184
|
-
verifyingContract: contractAddress,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* EIP-712 domain of Circle's USDC (FiatTokenV2). Verified against the deployed
|
|
189
|
-
* Base mainnet token (0x8335...2913): name "USD Coin", version "2". MockUSDC
|
|
190
|
-
* on base-local mirrors the same params. Callers with RPC access should verify
|
|
191
|
-
* via the token's DOMAIN_SEPARATOR() before first use (the params can differ
|
|
192
|
-
* on other deployments).
|
|
193
|
-
*/
|
|
194
|
-
export function makeUsdcDomain(chainId, usdcAddress) {
|
|
195
|
-
return {
|
|
196
|
-
name: 'USD Coin',
|
|
197
|
-
version: '2',
|
|
198
|
-
chainId,
|
|
199
|
-
verifyingContract: usdcAddress,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
// =========================================================================
|
|
203
|
-
// Signing functions — EIP-712 (on-chain)
|
|
204
|
-
// =========================================================================
|
|
205
|
-
export async function signSpendingAuth(signer, domain, msg) {
|
|
206
|
-
return signer.signTypedData(domain, SPENDING_AUTH_TYPES, msg);
|
|
207
|
-
}
|
|
208
|
-
export async function signReserveAuth(signer, domain, msg) {
|
|
209
|
-
return signer.signTypedData(domain, RESERVE_AUTH_TYPES, msg);
|
|
210
|
-
}
|
|
211
|
-
export async function signSetOperator(signer, domain, msg) {
|
|
212
|
-
return signer.signTypedData(domain, SET_OPERATOR_TYPES, msg);
|
|
213
|
-
}
|
|
214
|
-
export async function signFreeUsageOpen(signer, domain, msg) {
|
|
215
|
-
return signer.signTypedData(domain, FREE_USAGE_OPEN_TYPES, msg);
|
|
216
|
-
}
|
|
217
|
-
export async function signFreeUsageAuth(signer, domain, msg) {
|
|
218
|
-
return signer.signTypedData(domain, FREE_USAGE_AUTH_TYPES, msg);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Build and sign an EIP-3009 ReceiveWithAuthorization for USDC. Works with a
|
|
222
|
-
* provider-less signer — the hot wallet never needs RPC access to sign.
|
|
223
|
-
* A random 32-byte nonce is generated when none is supplied.
|
|
224
|
-
*/
|
|
225
|
-
export async function buildReceiveAuthorization(signer, domain, params) {
|
|
226
|
-
const message = {
|
|
227
|
-
from: await signer.getAddress(),
|
|
228
|
-
to: params.to,
|
|
229
|
-
value: params.value,
|
|
230
|
-
validAfter: params.validAfter,
|
|
231
|
-
validBefore: params.validBefore,
|
|
232
|
-
nonce: params.nonce ?? hexlify(randomBytes(32)),
|
|
233
|
-
};
|
|
234
|
-
const signature = await signer.signTypedData(domain, RECEIVE_WITH_AUTHORIZATION_TYPES, message);
|
|
235
|
-
return { message, signature };
|
|
236
|
-
}
|
|
1
|
+
// Moved to @antseed/protocol; re-exported here for compatibility.
|
|
2
|
+
export * from '@antseed/protocol/signatures';
|
|
237
3
|
//# sourceMappingURL=signatures.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../../src/payments/evm/signatures.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../../src/payments/evm/signatures.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type AbstractSigner } from 'ethers';
|
|
2
|
+
import { BaseEvmClient } from './base-evm-client.js';
|
|
3
|
+
export interface SubPoolClientConfig {
|
|
4
|
+
rpcUrl: string;
|
|
5
|
+
fallbackRpcUrls?: string[];
|
|
6
|
+
contractAddress: string;
|
|
7
|
+
usdcAddress: string;
|
|
8
|
+
evmChainId?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class SubPoolClient extends BaseEvmClient {
|
|
11
|
+
private readonly _usdcAddress;
|
|
12
|
+
constructor(config: SubPoolClientConfig);
|
|
13
|
+
subscribe(signer: AbstractSigner, tierId: number): Promise<string>;
|
|
14
|
+
renewSubscription(signer: AbstractSigner, monthlyFee: bigint): Promise<string>;
|
|
15
|
+
cancelSubscription(signer: AbstractSigner): Promise<string>;
|
|
16
|
+
isSubscriptionActive(buyer: string): Promise<boolean>;
|
|
17
|
+
getRemainingDailyBudget(buyer: string): Promise<bigint>;
|
|
18
|
+
recordTokenUsage(signer: AbstractSigner, buyer: string, tokens: bigint): Promise<string>;
|
|
19
|
+
optIn(signer: AbstractSigner, tokenId: number): Promise<string>;
|
|
20
|
+
optOut(signer: AbstractSigner, tokenId: number): Promise<string>;
|
|
21
|
+
claimRevenue(signer: AbstractSigner): Promise<string>;
|
|
22
|
+
getProjectedRevenue(seller: string): Promise<bigint>;
|
|
23
|
+
getTier(tierId: number): Promise<{
|
|
24
|
+
monthlyFee: bigint;
|
|
25
|
+
dailyTokenBudget: bigint;
|
|
26
|
+
active: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
getOptedInPeerCount(): Promise<bigint>;
|
|
29
|
+
currentEpoch(): Promise<bigint>;
|
|
30
|
+
currentEpochRevenue(): Promise<bigint>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=subpool-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subpool-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/subpool-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2BD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,EAAE,mBAAmB;IAOjC,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBlE,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB9E,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAW3D,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAaxF,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW/D,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahE,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOpD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAMnG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKtC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAK/B,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;CAI7C"}
|
|
@@ -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, config.fallbackRpcUrls, config.evmChainId);
|
|
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
|