@antseed/node 0.2.117 → 0.2.118

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.
Files changed (97) hide show
  1. package/README.md +30 -0
  2. package/dist/index.d.ts +14 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +13 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/node.d.ts +2 -0
  7. package/dist/node.d.ts.map +1 -1
  8. package/dist/node.js +3 -0
  9. package/dist/node.js.map +1 -1
  10. package/dist/payments/chain-config.d.ts +53 -0
  11. package/dist/payments/chain-config.d.ts.map +1 -1
  12. package/dist/payments/chain-config.js +43 -23
  13. package/dist/payments/chain-config.js.map +1 -1
  14. package/dist/payments/contract-stack.d.ts +53 -0
  15. package/dist/payments/contract-stack.d.ts.map +1 -0
  16. package/dist/payments/contract-stack.js +97 -0
  17. package/dist/payments/contract-stack.js.map +1 -0
  18. package/dist/payments/evm/ants-token-client.d.ts +7 -0
  19. package/dist/payments/evm/ants-token-client.d.ts.map +1 -1
  20. package/dist/payments/evm/ants-token-client.js +37 -1
  21. package/dist/payments/evm/ants-token-client.js.map +1 -1
  22. package/dist/payments/evm/emissions-client.d.ts +3 -0
  23. package/dist/payments/evm/emissions-client.d.ts.map +1 -1
  24. package/dist/payments/evm/emissions-client.js +13 -0
  25. package/dist/payments/evm/emissions-client.js.map +1 -1
  26. package/dist/payments/evm/emissions-gate-client.d.ts +51 -0
  27. package/dist/payments/evm/emissions-gate-client.d.ts.map +1 -0
  28. package/dist/payments/evm/emissions-gate-client.js +55 -0
  29. package/dist/payments/evm/emissions-gate-client.js.map +1 -0
  30. package/dist/payments/evm/multicall.d.ts +21 -0
  31. package/dist/payments/evm/multicall.d.ts.map +1 -0
  32. package/dist/payments/evm/multicall.js +73 -0
  33. package/dist/payments/evm/multicall.js.map +1 -0
  34. package/dist/payments/evm/points-policy-registry-client.d.ts +21 -0
  35. package/dist/payments/evm/points-policy-registry-client.d.ts.map +1 -0
  36. package/dist/payments/evm/points-policy-registry-client.js +34 -0
  37. package/dist/payments/evm/points-policy-registry-client.js.map +1 -0
  38. package/dist/payments/evm/position-init-client.d.ts +18 -0
  39. package/dist/payments/evm/position-init-client.d.ts.map +1 -0
  40. package/dist/payments/evm/position-init-client.js +19 -0
  41. package/dist/payments/evm/position-init-client.js.map +1 -0
  42. package/dist/payments/evm/registry-client.d.ts +17 -0
  43. package/dist/payments/evm/registry-client.d.ts.map +1 -0
  44. package/dist/payments/evm/registry-client.js +24 -0
  45. package/dist/payments/evm/registry-client.js.map +1 -0
  46. package/dist/payments/evm/seller-pools-client.d.ts +95 -0
  47. package/dist/payments/evm/seller-pools-client.d.ts.map +1 -0
  48. package/dist/payments/evm/seller-pools-client.js +193 -0
  49. package/dist/payments/evm/seller-pools-client.js.map +1 -0
  50. package/dist/payments/evm/seller-pools-rewards-client.d.ts +36 -0
  51. package/dist/payments/evm/seller-pools-rewards-client.d.ts.map +1 -0
  52. package/dist/payments/evm/seller-pools-rewards-client.js +126 -0
  53. package/dist/payments/evm/seller-pools-rewards-client.js.map +1 -0
  54. package/dist/payments/evm/seller-registry-client.d.ts +28 -0
  55. package/dist/payments/evm/seller-registry-client.d.ts.map +1 -0
  56. package/dist/payments/evm/seller-registry-client.js +60 -0
  57. package/dist/payments/evm/seller-registry-client.js.map +1 -0
  58. package/dist/payments/evm/seller-rewards-pool-client.d.ts +24 -0
  59. package/dist/payments/evm/seller-rewards-pool-client.d.ts.map +1 -0
  60. package/dist/payments/evm/seller-rewards-pool-client.js +27 -0
  61. package/dist/payments/evm/seller-rewards-pool-client.js.map +1 -0
  62. package/dist/payments/evm/usage-accounting-client.d.ts +49 -0
  63. package/dist/payments/evm/usage-accounting-client.d.ts.map +1 -0
  64. package/dist/payments/evm/usage-accounting-client.js +82 -0
  65. package/dist/payments/evm/usage-accounting-client.js.map +1 -0
  66. package/dist/payments/evm/usage-rewards-client.d.ts +43 -0
  67. package/dist/payments/evm/usage-rewards-client.d.ts.map +1 -0
  68. package/dist/payments/evm/usage-rewards-client.js +62 -0
  69. package/dist/payments/evm/usage-rewards-client.js.map +1 -0
  70. package/dist/payments/evm/wash-trading-registry-client.d.ts +105 -0
  71. package/dist/payments/evm/wash-trading-registry-client.d.ts.map +1 -0
  72. package/dist/payments/evm/wash-trading-registry-client.js +170 -0
  73. package/dist/payments/evm/wash-trading-registry-client.js.map +1 -0
  74. package/dist/payments/generated-contract-addresses.d.ts +49 -0
  75. package/dist/payments/generated-contract-addresses.d.ts.map +1 -0
  76. package/dist/payments/generated-contract-addresses.js +50 -0
  77. package/dist/payments/generated-contract-addresses.js.map +1 -0
  78. package/dist/payments/index.d.ts +28 -0
  79. package/dist/payments/index.d.ts.map +1 -1
  80. package/dist/payments/index.js +14 -0
  81. package/dist/payments/index.js.map +1 -1
  82. package/dist/payments/reward-claims.d.ts +28 -0
  83. package/dist/payments/reward-claims.d.ts.map +1 -0
  84. package/dist/payments/reward-claims.js +67 -0
  85. package/dist/payments/reward-claims.js.map +1 -0
  86. package/dist/payments/reward-preview.d.ts +19 -0
  87. package/dist/payments/reward-preview.d.ts.map +1 -0
  88. package/dist/payments/reward-preview.js +36 -0
  89. package/dist/payments/reward-preview.js.map +1 -0
  90. package/dist/payments/seller-payment-manager.d.ts +9 -0
  91. package/dist/payments/seller-payment-manager.d.ts.map +1 -1
  92. package/dist/payments/seller-payment-manager.js +45 -0
  93. package/dist/payments/seller-payment-manager.js.map +1 -1
  94. package/dist/seller-request-handler.d.ts.map +1 -1
  95. package/dist/seller-request-handler.js +12 -0
  96. package/dist/seller-request-handler.js.map +1 -1
  97. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-contract-addresses.js","sourceRoot":"","sources":["../../src/payments/generated-contract-addresses.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE;QACd,UAAU,EAAE,IAAI;QAChB,uBAAuB,EAAE,4CAA4C;QACrE,mBAAmB,EAAE,4CAA4C;QACjE,uBAAuB,EAAE,4CAA4C;QACrE,uBAAuB,EAAE,4CAA4C;QACrE,wBAAwB,EAAE,4CAA4C;QACtE,sBAAsB,EAAE,4CAA4C;QACpE,wBAAwB,EAAE,4CAA4C;QACtE,8BAA8B,EAAE,4CAA4C;QAC5E,gBAAgB,EAAE,4CAA4C;QAC9D,uBAAuB,EAAE,4CAA4C;QACrE,oBAAoB,EAAE,4CAA4C;QAClE,mBAAmB,EAAE,4CAA4C;QACjE,mBAAmB,EAAE,QAAQ;QAC7B,gBAAgB,EAAE,QAAQ;QAC1B,eAAe,EAAE;YACf,QAAQ,EAAE,UAAU;YACpB,gBAAgB,EAAE,EAAE;YACpB,iBAAiB,EAAE,QAAQ;YAC3B,WAAW,EAAE;gBACX,qBAAqB,EAAE,4CAA4C;gBACnE,eAAe,EAAE,4CAA4C;gBAC7D,aAAa,EAAE,4CAA4C;gBAC3D,gBAAgB,EAAE,4CAA4C;gBAC9D,cAAc,EAAE,4CAA4C;gBAC5D,iBAAiB,EAAE,4CAA4C;gBAC/D,sBAAsB,EAAE,4CAA4C;gBACpE,yBAAyB,EAAE,4CAA4C;gBACvE,oBAAoB,EAAE,4CAA4C;gBAClE,cAAc,EAAE,4CAA4C;gBAC5D,uBAAuB,EAAE,4CAA4C;aACtE;SACF;KACF;IACD,cAAc,EAAE;QACd,UAAU,EAAE,KAAK;QACjB,uBAAuB,EAAE,4CAA4C;QACrE,mBAAmB,EAAE,4CAA4C;QACjE,uBAAuB,EAAE,4CAA4C;QACrE,uBAAuB,EAAE,4CAA4C;QACrE,sBAAsB,EAAE,4CAA4C;QACpE,wBAAwB,EAAE,4CAA4C;QACtE,gBAAgB,EAAE,4CAA4C;QAC9D,uBAAuB,EAAE,4CAA4C;KACtE;CACO,CAAC"}
@@ -18,6 +18,34 @@ export { ANTSTokenClient } from './evm/ants-token-client.js';
18
18
  export type { ANTSTokenClientConfig } from './evm/ants-token-client.js';
19
19
  export { EmissionsClient } from './evm/emissions-client.js';
20
20
  export type { EmissionsClientConfig, EmissionsEpochParams } from './evm/emissions-client.js';
21
+ export { RegistryClient } from './evm/registry-client.js';
22
+ export type { RegistryClientConfig } from './evm/registry-client.js';
23
+ export { UsageAccountingClient } from './evm/usage-accounting-client.js';
24
+ export type { UsageAccountingClientConfig, UsagePoints, UsageTotals } from './evm/usage-accounting-client.js';
25
+ export { UsageRewardsClient } from './evm/usage-rewards-client.js';
26
+ export type { UsageRewardsClientConfig, DynamicUsageConfig } from './evm/usage-rewards-client.js';
27
+ export { SellerPoolsClient, estimateEarlyExit, positionState, projectedEarlyExitSlashBps } from './evm/seller-pools-client.js';
28
+ export type { SellerPoolsClientConfig, SellerPoolPosition, EarlyExitEstimate, SellerPoolConfig, PositionPowerSegment, PositionState } from './evm/seller-pools-client.js';
29
+ export { SellerPoolsRewardsClient } from './evm/seller-pools-rewards-client.js';
30
+ export type { SellerPoolsRewardsClientConfig, DynamicStakerConfig } from './evm/seller-pools-rewards-client.js';
31
+ export { SellerRegistryClient, SellerRegistrationVerificationError } from './evm/seller-registry-client.js';
32
+ export type { SellerRegistryClientConfig } from './evm/seller-registry-client.js';
33
+ export { pendingEpochRewards, claimEpochRewards, claimBuyerEpochRewards, previewPoolRewards, claimPoolRewards } from './reward-claims.js';
34
+ export type { RewardTransactionRecorder } from './reward-claims.js';
35
+ export { PositionInitClient } from './evm/position-init-client.js';
36
+ export type { PositionInitClientConfig } from './evm/position-init-client.js';
37
+ export { EmissionsGateClient, GATE_MINTERS, gateMinterId } from './evm/emissions-gate-client.js';
38
+ export type { EmissionsGateClientConfig, GateMinter } from './evm/emissions-gate-client.js';
39
+ export { WashTradingRegistryClient, validateSellerProofArtifact, sellerProofId } from './evm/wash-trading-registry-client.js';
40
+ export type { WashTradingRegistryClientConfig, WashTradingSellerStatus, WashTradingProofStatus, WashTradingRegistryConfig, BlockReference, BlockAuthenticationChunk, SellerProofArtifact, SellerProofSubmissionStep, } from './evm/wash-trading-registry-client.js';
41
+ export { PointsPolicyRegistryClient } from './evm/points-policy-registry-client.js';
42
+ export type { PointsPolicyRegistryClientConfig } from './evm/points-policy-registry-client.js';
43
+ export { SellerRewardsPoolClient } from './evm/seller-rewards-pool-client.js';
44
+ export type { SellerRewardsPoolClientConfig } from './evm/seller-rewards-pool-client.js';
45
+ export { multicallRead, MULTICALL3_ADDRESS } from './evm/multicall.js';
46
+ export type { MulticallRequest } from './evm/multicall.js';
47
+ export { ContractStackMismatchError, legacyEpochs, newEpochs, resolveContractStack, resolveLegacyContractAddresses, } from './contract-stack.js';
48
+ export type { ContractStackAddresses, ContractStackMode, ContractStackResolution, ContractStackRpcOptions, } from './contract-stack.js';
21
49
  export { ChannelStore, CHANNEL_KIND, CHANNEL_ROLE, CHANNEL_STATUS } from './channel-store.js';
22
50
  export type { ChannelKind, ChannelRole, ChannelStatus, StoredChannel, StoredReceipt } from './channel-store.js';
23
51
  export { BuyerPaymentManager } from './buyer-payment-manager.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,20 @@ export { signSpendingAuth, signReserveAuth, signFreeUsageOpen, signFreeUsageAuth
17
17
  export { ANTSTokenClient } from './evm/ants-token-client.js';
18
18
  // Emissions
19
19
  export { EmissionsClient } from './evm/emissions-client.js';
20
+ export { RegistryClient } from './evm/registry-client.js';
21
+ export { UsageAccountingClient } from './evm/usage-accounting-client.js';
22
+ export { UsageRewardsClient } from './evm/usage-rewards-client.js';
23
+ export { SellerPoolsClient, estimateEarlyExit, positionState, projectedEarlyExitSlashBps } from './evm/seller-pools-client.js';
24
+ export { SellerPoolsRewardsClient } from './evm/seller-pools-rewards-client.js';
25
+ export { SellerRegistryClient, SellerRegistrationVerificationError } from './evm/seller-registry-client.js';
26
+ export { pendingEpochRewards, claimEpochRewards, claimBuyerEpochRewards, previewPoolRewards, claimPoolRewards } from './reward-claims.js';
27
+ export { PositionInitClient } from './evm/position-init-client.js';
28
+ export { EmissionsGateClient, GATE_MINTERS, gateMinterId } from './evm/emissions-gate-client.js';
29
+ export { WashTradingRegistryClient, validateSellerProofArtifact, sellerProofId } from './evm/wash-trading-registry-client.js';
30
+ export { PointsPolicyRegistryClient } from './evm/points-policy-registry-client.js';
31
+ export { SellerRewardsPoolClient } from './evm/seller-rewards-pool-client.js';
32
+ export { multicallRead, MULTICALL3_ADDRESS } from './evm/multicall.js';
33
+ export { ContractStackMismatchError, legacyEpochs, newEpochs, resolveContractStack, resolveLegacyContractAddresses, } from './contract-stack.js';
20
34
  // Channel persistence
21
35
  export { ChannelStore, CHANNEL_KIND, CHANNEL_ROLE, CHANNEL_STATUS } from './channel-store.js';
22
36
  // Buyer payment manager
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"AAWA,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,6CAA6C;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,8CAA8C;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAa7B,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9F,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,sBAAsB;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,4EAA4E;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAGjG,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAGtB,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG3E,yDAAyD;AACzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { SellerPoolsClient } from './evm/seller-pools-client.js';
2
+ import type { SellerPoolsRewardsClient } from './evm/seller-pools-rewards-client.js';
3
+ export type RewardTransactionRecorder = (hash: string, kind: 'claim' | 'accounting') => Promise<void>;
4
+ export declare function pendingEpochRewards(epochs: number[], readPending: (epochs: number[]) => Promise<bigint>): Promise<bigint>;
5
+ export declare function claimEpochRewards(epochs: number[], readPending: (epochs: number[]) => Promise<bigint>, claim: (epochs: number[]) => Promise<string>, record: RewardTransactionRecorder): Promise<void>;
6
+ export declare function claimBuyerEpochRewards(epochs: number[], readPending: (epoch: number) => Promise<bigint>, claim: (epoch: number) => Promise<string>, record: RewardTransactionRecorder): Promise<void>;
7
+ type PoolReader = Pick<SellerPoolsClient, 'allStakerPositionIds' | 'positionsBatch' | 'position' | 'currentEpoch'>;
8
+ type PoolRewards = Pick<SellerPoolsRewardsClient, 'previewStakerRewards' | 'pendingIndexedStakerReward' | 'poolRewardIndexNextEpoch' | 'initialIndexEpoch' | 'indexPoolRewards' | 'claimStakerRewardsBatch'>;
9
+ type RewardSigner = Parameters<SellerPoolsRewardsClient['claimStakerRewardsBatch']>[0];
10
+ /**
11
+ * Pending staker rewards for the wallet's open positions (the on-chain
12
+ * `stakerPositionIds` enumeration) plus any `includeIds` the caller knows
13
+ * about, typically positions closed by split, merge, or move that an indexer
14
+ * reported; those keep their earned rewards but leave the enumeration.
15
+ */
16
+ export declare function previewPoolRewards(pools: PoolReader, rewards: PoolRewards, address: string, positionId?: number, options?: {
17
+ includeIds?: number[];
18
+ }): Promise<{
19
+ id: number;
20
+ agentId: number;
21
+ amount: bigint;
22
+ closedAtEpoch: number;
23
+ }[]>;
24
+ export declare function claimPoolRewards(pools: PoolReader, rewards: PoolRewards, wallet: RewardSigner, address: string, recipient: string, record: RewardTransactionRecorder, preparing: () => void, positionId?: number, options?: {
25
+ includeIds?: number[];
26
+ }): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=reward-claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward-claims.d.ts","sourceRoot":"","sources":["../../src/payments/reward-claims.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAErF,MAAM,MAAM,yBAAyB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtG,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GACjD,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,EAClD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,EAC5C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAC/C,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACzC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,KAAK,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,gBAAgB,GAAG,UAAU,GAAG,cAAc,CAAC,CAAC;AACnH,KAAK,WAAW,GAAG,IAAI,CAAC,wBAAwB,EAC9C,sBAAsB,GAAG,4BAA4B,GAAG,0BAA0B,GAClF,mBAAmB,GAAG,kBAAkB,GAAG,yBAAyB,CAAC,CAAC;AACxE,KAAK,YAAY,GAAG,UAAU,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvF;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO;;;;;KAS9J;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,yBAAyB,EACjC,SAAS,EAAE,MAAM,IAAI,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACtC,OAAO,CAAC,IAAI,CAAC,CAwBf"}
@@ -0,0 +1,67 @@
1
+ export async function pendingEpochRewards(epochs, readPending) {
2
+ let amount = 0n;
3
+ for (let offset = 0; offset < epochs.length; offset += 32) {
4
+ amount += await readPending(epochs.slice(offset, offset + 32));
5
+ }
6
+ return amount;
7
+ }
8
+ export async function claimEpochRewards(epochs, readPending, claim, record) {
9
+ for (let offset = 0; offset < epochs.length; offset += 32) {
10
+ const batch = epochs.slice(offset, offset + 32);
11
+ if (await readPending(batch) > 0n)
12
+ await record(await claim(batch), 'claim');
13
+ }
14
+ }
15
+ export async function claimBuyerEpochRewards(epochs, readPending, claim, record) {
16
+ for (const epoch of epochs) {
17
+ if (await readPending(epoch) > 0n)
18
+ await record(await claim(epoch), 'claim');
19
+ }
20
+ }
21
+ /**
22
+ * Pending staker rewards for the wallet's open positions (the on-chain
23
+ * `stakerPositionIds` enumeration) plus any `includeIds` the caller knows
24
+ * about, typically positions closed by split, merge, or move that an indexer
25
+ * reported; those keep their earned rewards but leave the enumeration.
26
+ */
27
+ export async function previewPoolRewards(pools, rewards, address, positionId, options = {}) {
28
+ const positions = positionId === undefined
29
+ ? await pools.positionsBatch([...new Set([...await pools.allStakerPositionIds(address), ...(options.includeIds ?? [])])])
30
+ : [await pools.position(positionId)];
31
+ for (const position of positions) {
32
+ if (position.owner.toLowerCase() !== address.toLowerCase())
33
+ throw new Error(`Position ${position.id} is not owned by this wallet.`);
34
+ }
35
+ const amounts = await rewards.previewStakerRewards(positions.map((position) => position.id));
36
+ return positions.map((position, index) => ({ id: position.id, agentId: position.agentId, amount: amounts[index], closedAtEpoch: position.closedAtEpoch }));
37
+ }
38
+ export async function claimPoolRewards(pools, rewards, wallet, address, recipient, record, preparing, positionId, options = {}) {
39
+ const pending = await previewPoolRewards(pools, rewards, address, positionId, options);
40
+ const rewardedPositions = pending.filter((position) => position.amount > 0n);
41
+ if (rewardedPositions.length === 0)
42
+ return;
43
+ const currentEpoch = await pools.currentEpoch();
44
+ for (const agentId of new Set(rewardedPositions.map((position) => position.agentId))) {
45
+ const targetEpoch = rewardedPositions.filter((position) => position.agentId === agentId)
46
+ .reduce((latest, position) => Math.max(latest, Math.min(currentEpoch, position.closedAtEpoch || currentEpoch)), 0);
47
+ let cursor = await rewards.poolRewardIndexNextEpoch(agentId) || await rewards.initialIndexEpoch();
48
+ if (cursor < targetEpoch)
49
+ preparing();
50
+ while (cursor < targetEpoch) {
51
+ await record(await rewards.indexPoolRewards(wallet, agentId, Math.min(16, targetEpoch - cursor)), 'accounting');
52
+ const next = await rewards.poolRewardIndexNextEpoch(agentId);
53
+ if (next <= cursor)
54
+ throw new Error('Reward preparation made no progress. Retry the claim later.');
55
+ cursor = next;
56
+ }
57
+ }
58
+ const ids = [];
59
+ for (const position of rewardedPositions) {
60
+ if (await rewards.pendingIndexedStakerReward(position.id) > 0n)
61
+ ids.push(position.id);
62
+ }
63
+ for (let offset = 0; offset < ids.length; offset += 32) {
64
+ await record(await rewards.claimStakerRewardsBatch(wallet, ids.slice(offset, offset + 32), recipient), 'claim');
65
+ }
66
+ }
67
+ //# sourceMappingURL=reward-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward-claims.js","sourceRoot":"","sources":["../../src/payments/reward-claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SellerPoolPosition } from './evm/seller-pools-client.js';
2
+ export declare const REWARD_INDEX_SCALE: bigint;
3
+ export interface RewardPreviewReader {
4
+ currentEpoch(): Promise<number>;
5
+ claimCursor(positionId: number): Promise<number>;
6
+ indexCursor(agentId: number): Promise<number>;
7
+ segment(positionId: number, epoch: number): Promise<{
8
+ normalEnd: bigint;
9
+ maxLockPower: bigint;
10
+ nextChange: bigint;
11
+ }>;
12
+ cumulative(agentId: number, epoch: number): Promise<{
13
+ reward: bigint;
14
+ epochReward: bigint;
15
+ }>;
16
+ rewardPerWeight(agentId: number, epoch: number): Promise<bigint>;
17
+ }
18
+ export declare function previewPositionReward(position: SellerPoolPosition, reader: RewardPreviewReader): Promise<bigint>;
19
+ //# sourceMappingURL=reward-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward-preview.d.ts","sourceRoot":"","sources":["../../src/payments/reward-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,eAAO,MAAM,kBAAkB,QAAa,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BtH"}
@@ -0,0 +1,36 @@
1
+ export const REWARD_INDEX_SCALE = 10n ** 30n;
2
+ export async function previewPositionReward(position, reader) {
3
+ const [currentEpoch, claimedThrough, indexedThrough] = await Promise.all([
4
+ reader.currentEpoch(), reader.claimCursor(position.id), reader.indexCursor(position.agentId),
5
+ ]);
6
+ const toEpoch = position.closedAtEpoch ? Math.min(currentEpoch, position.closedAtEpoch) : currentEpoch;
7
+ let cursor = Math.max(claimedThrough, position.stakeStartEpoch);
8
+ let amount = 0n;
9
+ while (cursor < toEpoch) {
10
+ const segment = await reader.segment(position.id, cursor);
11
+ let end = Number(segment.nextChange < BigInt(toEpoch) ? segment.nextChange : BigInt(toEpoch));
12
+ if (end <= cursor)
13
+ throw new Error(`Invalid reward segment for position ${position.id}`);
14
+ const normal = segment.maxLockPower === 0n && segment.normalEnd > BigInt(cursor);
15
+ if (normal && segment.normalEnd < BigInt(end))
16
+ end = Number(segment.normalEnd);
17
+ if (normal || segment.maxLockPower > 0n) {
18
+ const [fromIndex, toIndex] = await Promise.all([
19
+ reader.cumulative(position.agentId, cursor), reader.cumulative(position.agentId, end),
20
+ ]);
21
+ let rewardDelta = toIndex.reward - fromIndex.reward;
22
+ let epochRewardDelta = toIndex.epochReward - fromIndex.epochReward;
23
+ for (let epoch = Math.max(cursor, indexedThrough); epoch < end; epoch++) {
24
+ const rewardPerWeight = await reader.rewardPerWeight(position.agentId, epoch);
25
+ rewardDelta += rewardPerWeight;
26
+ epochRewardDelta += rewardPerWeight * BigInt(epoch);
27
+ }
28
+ amount += segment.maxLockPower > 0n
29
+ ? segment.maxLockPower * rewardDelta / REWARD_INDEX_SCALE
30
+ : position.weightAmount * (segment.normalEnd * rewardDelta - epochRewardDelta) / REWARD_INDEX_SCALE;
31
+ }
32
+ cursor = end;
33
+ }
34
+ return amount;
35
+ }
36
+ //# sourceMappingURL=reward-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reward-preview.js","sourceRoot":"","sources":["../../src/payments/reward-preview.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export interface SellerPaymentConfig {
20
20
  * the full amount so no dust is left behind. Default: "2000" (~$0.002).
21
21
  */
22
22
  minSettleDelta?: string;
23
+ /** Serve channels whose buyer already requested close on-chain, risking uncollectible work. Default: false. */
24
+ serveWhileClosePending?: boolean;
23
25
  }
24
26
  /** ~200× typical Base settle gas cost at 0.006 gwei. */
25
27
  export declare const DEFAULT_MIN_SETTLE_DELTA_STR = "2000";
@@ -96,6 +98,7 @@ export declare class SellerPaymentManager {
96
98
  * local accepted cumulative hasn't moved since our last settle. */
97
99
  private readonly _lastSettledCumulative;
98
100
  private readonly _minSettleDelta;
101
+ private readonly _serveWhileClosePending;
99
102
  /** Max close() retries before giving up (buyer must requestClose on-chain) */
100
103
  private static readonly MAX_CLOSE_RETRIES;
101
104
  constructor(identity: Identity, config: SellerPaymentConfig, channelStore: ChannelStore);
@@ -194,6 +197,12 @@ export declare class SellerPaymentManager {
194
197
  endBillableRequest(buyerPeerId: string): void;
195
198
  /** Whether this buyer has requests still being served and billed. */
196
199
  hasInFlightRequests(buyerPeerId: string): boolean;
200
+ /**
201
+ * Whether a close transaction is in flight for this buyer's active channel.
202
+ * Request admission refuses new billable work while this is true: the close
203
+ * would remove the session mid-request and its spend would never be recorded.
204
+ */
205
+ hasClosingChannel(buyerPeerId: string): boolean;
197
206
  onBuyerDisconnect(buyerPeerId: string): void;
198
207
  /**
199
208
  * Check for stale sessions and attempt to close them.
@@ -1 +1 @@
1
- {"version":3,"file":"seller-payment-manager.d.ts","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seller-payment-manager.d.ts","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
@@ -97,6 +97,7 @@ export class SellerPaymentManager {
97
97
  * local accepted cumulative hasn't moved since our last settle. */
98
98
  _lastSettledCumulative = new Map();
99
99
  _minSettleDelta;
100
+ _serveWhileClosePending;
100
101
  /** Max close() retries before giving up (buyer must requestClose on-chain) */
101
102
  static MAX_CLOSE_RETRIES = 3;
102
103
  constructor(identity, config, channelStore) {
@@ -125,6 +126,7 @@ export class SellerPaymentManager {
125
126
  this._minSettleDelta = config.minSettleDelta !== undefined
126
127
  ? BigInt(config.minSettleDelta)
127
128
  : DEFAULT_MIN_SETTLE_DELTA;
129
+ this._serveWhileClosePending = config.serveWhileClosePending ?? false;
128
130
  // Hydrate from persisted channels
129
131
  const activeChannels = this._channelStore.getActiveChannels(CHANNEL_ROLE.SELLER);
130
132
  for (const channel of activeChannels) {
@@ -172,6 +174,13 @@ export class SellerPaymentManager {
172
174
  evicted++;
173
175
  continue;
174
176
  }
177
+ // Close requested while this seller was offline — the event poller
178
+ // starts at the current block and would miss it. Handle it as if live.
179
+ if (onChainState.channel.closeRequestedAt > 0n && !this._serveWhileClosePending) {
180
+ await this.handleCloseRequested(channel.sessionId);
181
+ evicted++;
182
+ continue;
183
+ }
175
184
  // Reconcile: if on-chain settled > local spent, update local to avoid double-charging
176
185
  const onChainSettled = onChainState.channel.settled;
177
186
  const localSpent = this._spent.get(channel.sessionId) ?? 0n;
@@ -789,6 +798,13 @@ export class SellerPaymentManager {
789
798
  if (!matchesChannelParties(onChainState.channel, buyerEvmAddr, sellerEvmAddr))
790
799
  return false;
791
800
  const onChain = onChainState.channel;
801
+ // Active status hides a running withdraw timer that may already have matured.
802
+ if (onChain.closeRequestedAt > 0n && !this._serveWhileClosePending) {
803
+ debugWarn(`[SellerPayment] Refusing to recover channel ${channelId.slice(0, 18)}... — ` +
804
+ `buyer requested close on-chain at ${onChain.closeRequestedAt}; funds served against it ` +
805
+ `may be unrecoverable. Set serveWhileClosePending to accept this risk.`);
806
+ return false;
807
+ }
792
808
  const metadataMsg = {
793
809
  channelId,
794
810
  cumulativeAmount,
@@ -973,6 +989,17 @@ export class SellerPaymentManager {
973
989
  hasInFlightRequests(buyerPeerId) {
974
990
  return (this._inFlightRequests.get(buyerPeerId) ?? 0) > 0;
975
991
  }
992
+ /**
993
+ * Whether a close transaction is in flight for this buyer's active channel.
994
+ * Request admission refuses new billable work while this is true: the close
995
+ * would remove the session mid-request and its spend would never be recorded.
996
+ */
997
+ hasClosingChannel(buyerPeerId) {
998
+ if (this._closingChannels.size === 0)
999
+ return false;
1000
+ const session = this._channelStore.getActiveChannelByPeer(buyerPeerId, CHANNEL_ROLE.SELLER);
1001
+ return session != null && this._closingChannels.has(session.sessionId);
1002
+ }
976
1003
  // ── Disconnect handling ───────────────────────────────────────
977
1004
  onBuyerDisconnect(buyerPeerId) {
978
1005
  const session = this._channelStore.getActiveChannelByPeer(buyerPeerId, CHANNEL_ROLE.SELLER);
@@ -1266,6 +1293,24 @@ export class SellerPaymentManager {
1266
1293
  catch (err) {
1267
1294
  return reject('close_failed', `could not read on-chain channel state: ${this._formatError(err)}`);
1268
1295
  }
1296
+ // Re-check after the awaits above: a request admitted while this handler
1297
+ // was verifying and waiting must finish billing before the channel closes,
1298
+ // and any spend it recorded must be signed for or the close settles short.
1299
+ // Everything from here to the submission is synchronous, so nothing can
1300
+ // land in between.
1301
+ if (this.hasInFlightRequests(buyerPeerId)) {
1302
+ return reject('busy', 'a request is still being served on this channel', {
1303
+ retryAfterMs: CLOSE_RETRY_AFTER_MS,
1304
+ });
1305
+ }
1306
+ spent = this._spent.get(channelId) ?? 0n;
1307
+ best = this._getSettleParams(channelId);
1308
+ if (spent > best.amount) {
1309
+ return reject('pending_auth', `unsigned spend outstanding (spent=${spent} signed=${best.amount})`, {
1310
+ retryAfterMs: CLOSE_RETRY_AFTER_MS,
1311
+ requiredCumulativeAmount: spent.toString(),
1312
+ });
1313
+ }
1269
1314
  const useSignedAuth = best.sig !== '0x' && best.amount > onChainSettled;
1270
1315
  const finalAmount = useSignedAuth ? best.amount : onChainSettled;
1271
1316
  const metadata = useSignedAuth ? best.metadata : '0x';