@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.
Files changed (255) hide show
  1. package/README.md +85 -11
  2. package/dist/buyer-request-handler.d.ts +41 -0
  3. package/dist/buyer-request-handler.d.ts.map +1 -0
  4. package/dist/buyer-request-handler.js +254 -0
  5. package/dist/buyer-request-handler.js.map +1 -0
  6. package/dist/discovery/announcer.d.ts +5 -2
  7. package/dist/discovery/announcer.d.ts.map +1 -1
  8. package/dist/discovery/announcer.js +11 -14
  9. package/dist/discovery/announcer.js.map +1 -1
  10. package/dist/discovery/index.d.ts +0 -2
  11. package/dist/discovery/index.d.ts.map +1 -1
  12. package/dist/discovery/index.js +0 -2
  13. package/dist/discovery/index.js.map +1 -1
  14. package/dist/discovery/metadata-codec.d.ts +2 -2
  15. package/dist/discovery/metadata-codec.d.ts.map +1 -1
  16. package/dist/discovery/metadata-codec.js +47 -72
  17. package/dist/discovery/metadata-codec.js.map +1 -1
  18. package/dist/discovery/metadata-validator.js +6 -6
  19. package/dist/discovery/metadata-validator.js.map +1 -1
  20. package/dist/discovery/peer-lookup.d.ts.map +1 -1
  21. package/dist/discovery/peer-lookup.js +1 -2
  22. package/dist/discovery/peer-lookup.js.map +1 -1
  23. package/dist/discovery/peer-metadata.d.ts +3 -5
  24. package/dist/discovery/peer-metadata.d.ts.map +1 -1
  25. package/dist/discovery/peer-metadata.js +1 -1
  26. package/dist/discovery/reputation-verifier.d.ts +2 -22
  27. package/dist/discovery/reputation-verifier.d.ts.map +1 -1
  28. package/dist/discovery/reputation-verifier.js +2 -24
  29. package/dist/discovery/reputation-verifier.js.map +1 -1
  30. package/dist/discovery/stats-verifier.d.ts +27 -0
  31. package/dist/discovery/stats-verifier.d.ts.map +1 -0
  32. package/dist/discovery/stats-verifier.js +38 -0
  33. package/dist/discovery/stats-verifier.js.map +1 -0
  34. package/dist/index.d.ts +17 -5
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +11 -3
  37. package/dist/index.js.map +1 -1
  38. package/dist/metering/index.d.ts +1 -0
  39. package/dist/metering/index.d.ts.map +1 -1
  40. package/dist/metering/index.js +1 -0
  41. package/dist/metering/index.js.map +1 -1
  42. package/dist/metering/receipt-generator.d.ts +4 -4
  43. package/dist/metering/receipt-generator.d.ts.map +1 -1
  44. package/dist/metering/receipt-verifier.d.ts +6 -6
  45. package/dist/metering/receipt-verifier.d.ts.map +1 -1
  46. package/dist/metering/receipt-verifier.js +1 -1
  47. package/dist/metering/seller-session-tracker.d.ts +91 -0
  48. package/dist/metering/seller-session-tracker.d.ts.map +1 -0
  49. package/dist/metering/seller-session-tracker.js +261 -0
  50. package/dist/metering/seller-session-tracker.js.map +1 -0
  51. package/dist/metering/storage.d.ts +11 -5
  52. package/dist/metering/storage.d.ts.map +1 -1
  53. package/dist/metering/storage.js +28 -80
  54. package/dist/metering/storage.js.map +1 -1
  55. package/dist/node.d.ts +83 -104
  56. package/dist/node.d.ts.map +1 -1
  57. package/dist/node.js +313 -1026
  58. package/dist/node.js.map +1 -1
  59. package/dist/p2p/connection-auth.d.ts +2 -1
  60. package/dist/p2p/connection-auth.d.ts.map +1 -1
  61. package/dist/p2p/connection-auth.js +6 -6
  62. package/dist/p2p/connection-auth.js.map +1 -1
  63. package/dist/p2p/connection-manager.d.ts +3 -2
  64. package/dist/p2p/connection-manager.d.ts.map +1 -1
  65. package/dist/p2p/connection-manager.js +12 -6
  66. package/dist/p2p/connection-manager.js.map +1 -1
  67. package/dist/p2p/identity.d.ts +44 -13
  68. package/dist/p2p/identity.d.ts.map +1 -1
  69. package/dist/p2p/identity.js +103 -49
  70. package/dist/p2p/identity.js.map +1 -1
  71. package/dist/p2p/index.d.ts +1 -3
  72. package/dist/p2p/index.d.ts.map +1 -1
  73. package/dist/p2p/index.js +1 -3
  74. package/dist/p2p/index.js.map +1 -1
  75. package/dist/p2p/payment-codec.d.ts +9 -19
  76. package/dist/p2p/payment-codec.d.ts.map +1 -1
  77. package/dist/p2p/payment-codec.js +41 -89
  78. package/dist/p2p/payment-codec.js.map +1 -1
  79. package/dist/p2p/payment-mux.d.ts +14 -29
  80. package/dist/p2p/payment-mux.d.ts.map +1 -1
  81. package/dist/p2p/payment-mux.js +41 -79
  82. package/dist/p2p/payment-mux.js.map +1 -1
  83. package/dist/payments/balance-manager.d.ts +2 -2
  84. package/dist/payments/balance-manager.d.ts.map +1 -1
  85. package/dist/payments/balance-manager.js +5 -5
  86. package/dist/payments/balance-manager.js.map +1 -1
  87. package/dist/payments/buyer-payment-manager.d.ts +157 -83
  88. package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
  89. package/dist/payments/buyer-payment-manager.js +573 -204
  90. package/dist/payments/buyer-payment-manager.js.map +1 -1
  91. package/dist/payments/buyer-payment-negotiator.d.ts +84 -0
  92. package/dist/payments/buyer-payment-negotiator.d.ts.map +1 -0
  93. package/dist/payments/buyer-payment-negotiator.js +624 -0
  94. package/dist/payments/buyer-payment-negotiator.js.map +1 -0
  95. package/dist/payments/chain-config.d.ts +44 -0
  96. package/dist/payments/chain-config.d.ts.map +1 -0
  97. package/dist/payments/chain-config.js +70 -0
  98. package/dist/payments/chain-config.js.map +1 -0
  99. package/dist/payments/channel-session-state.d.ts +13 -0
  100. package/dist/payments/channel-session-state.d.ts.map +1 -0
  101. package/dist/payments/channel-session-state.js +25 -0
  102. package/dist/payments/channel-session-state.js.map +1 -0
  103. package/dist/payments/channel-store.d.ts +87 -0
  104. package/dist/payments/channel-store.d.ts.map +1 -0
  105. package/dist/payments/channel-store.js +276 -0
  106. package/dist/payments/channel-store.js.map +1 -0
  107. package/dist/payments/evm/ants-token-client.d.ts +16 -0
  108. package/dist/payments/evm/ants-token-client.d.ts.map +1 -0
  109. package/dist/payments/evm/ants-token-client.js +65 -0
  110. package/dist/payments/evm/ants-token-client.js.map +1 -0
  111. package/dist/payments/evm/base-evm-client.d.ts +22 -0
  112. package/dist/payments/evm/base-evm-client.d.ts.map +1 -0
  113. package/dist/payments/evm/base-evm-client.js +71 -0
  114. package/dist/payments/evm/base-evm-client.js.map +1 -0
  115. package/dist/payments/evm/channels-client.d.ts +51 -0
  116. package/dist/payments/evm/channels-client.d.ts.map +1 -0
  117. package/dist/payments/evm/channels-client.js +101 -0
  118. package/dist/payments/evm/channels-client.js.map +1 -0
  119. package/dist/payments/evm/deposits-client.d.ts +30 -0
  120. package/dist/payments/evm/deposits-client.d.ts.map +1 -0
  121. package/dist/payments/evm/deposits-client.js +78 -0
  122. package/dist/payments/evm/deposits-client.js.map +1 -0
  123. package/dist/payments/evm/emissions-client.d.ts +22 -0
  124. package/dist/payments/evm/emissions-client.d.ts.map +1 -0
  125. package/dist/payments/evm/emissions-client.js +65 -0
  126. package/dist/payments/evm/emissions-client.js.map +1 -0
  127. package/dist/payments/evm/escrow-client.d.ts +57 -36
  128. package/dist/payments/evm/escrow-client.d.ts.map +1 -1
  129. package/dist/payments/evm/escrow-client.js +200 -93
  130. package/dist/payments/evm/escrow-client.js.map +1 -1
  131. package/dist/payments/evm/identity-client.d.ts +21 -0
  132. package/dist/payments/evm/identity-client.d.ts.map +1 -0
  133. package/dist/payments/evm/identity-client.js +68 -0
  134. package/dist/payments/evm/identity-client.js.map +1 -0
  135. package/dist/payments/evm/keypair.d.ts +3 -14
  136. package/dist/payments/evm/keypair.d.ts.map +1 -1
  137. package/dist/payments/evm/keypair.js +4 -20
  138. package/dist/payments/evm/keypair.js.map +1 -1
  139. package/dist/payments/evm/sessions-client.d.ts +30 -0
  140. package/dist/payments/evm/sessions-client.d.ts.map +1 -0
  141. package/dist/payments/evm/sessions-client.js +61 -0
  142. package/dist/payments/evm/sessions-client.js.map +1 -0
  143. package/dist/payments/evm/signatures.d.ts +54 -10
  144. package/dist/payments/evm/signatures.d.ts.map +1 -1
  145. package/dist/payments/evm/signatures.js +80 -54
  146. package/dist/payments/evm/signatures.js.map +1 -1
  147. package/dist/payments/evm/staking-client.d.ts +24 -0
  148. package/dist/payments/evm/staking-client.d.ts.map +1 -0
  149. package/dist/payments/evm/staking-client.js +54 -0
  150. package/dist/payments/evm/staking-client.js.map +1 -0
  151. package/dist/payments/evm/stats-client.d.ts +20 -0
  152. package/dist/payments/evm/stats-client.d.ts.map +1 -0
  153. package/dist/payments/evm/stats-client.js +25 -0
  154. package/dist/payments/evm/stats-client.js.map +1 -0
  155. package/dist/payments/evm/subpool-client.d.ts +30 -0
  156. package/dist/payments/evm/subpool-client.d.ts.map +1 -0
  157. package/dist/payments/evm/subpool-client.js +158 -0
  158. package/dist/payments/evm/subpool-client.js.map +1 -0
  159. package/dist/payments/index.d.ts +29 -9
  160. package/dist/payments/index.d.ts.map +1 -1
  161. package/dist/payments/index.js +27 -9
  162. package/dist/payments/index.js.map +1 -1
  163. package/dist/payments/pricing.d.ts +25 -0
  164. package/dist/payments/pricing.d.ts.map +1 -0
  165. package/dist/payments/pricing.js +33 -0
  166. package/dist/payments/pricing.js.map +1 -0
  167. package/dist/payments/readiness.d.ts +13 -0
  168. package/dist/payments/readiness.d.ts.map +1 -0
  169. package/dist/payments/readiness.js +57 -0
  170. package/dist/payments/readiness.js.map +1 -0
  171. package/dist/payments/seller-payment-manager.d.ts +101 -36
  172. package/dist/payments/seller-payment-manager.d.ts.map +1 -1
  173. package/dist/payments/seller-payment-manager.js +612 -120
  174. package/dist/payments/seller-payment-manager.js.map +1 -1
  175. package/dist/payments/session-store.d.ts +68 -0
  176. package/dist/payments/session-store.d.ts.map +1 -0
  177. package/dist/payments/session-store.js +272 -0
  178. package/dist/payments/session-store.js.map +1 -0
  179. package/dist/payments/types.d.ts +5 -3
  180. package/dist/payments/types.d.ts.map +1 -1
  181. package/dist/payments/usdc-utils.d.ts +9 -0
  182. package/dist/payments/usdc-utils.d.ts.map +1 -0
  183. package/dist/payments/usdc-utils.js +17 -0
  184. package/dist/payments/usdc-utils.js.map +1 -0
  185. package/dist/proxy/proxy-mux.d.ts.map +1 -1
  186. package/dist/proxy/proxy-mux.js +3 -2
  187. package/dist/proxy/proxy-mux.js.map +1 -1
  188. package/dist/proxy/request-codec.d.ts.map +1 -1
  189. package/dist/proxy/request-codec.js +3 -0
  190. package/dist/proxy/request-codec.js.map +1 -1
  191. package/dist/reputation/rating-manager.d.ts.map +1 -1
  192. package/dist/reputation/rating-manager.js +2 -4
  193. package/dist/reputation/rating-manager.js.map +1 -1
  194. package/dist/reputation/report-manager.d.ts.map +1 -1
  195. package/dist/reputation/report-manager.js +2 -4
  196. package/dist/reputation/report-manager.js.map +1 -1
  197. package/dist/routing/default-router.d.ts.map +1 -1
  198. package/dist/routing/default-router.js +4 -9
  199. package/dist/routing/default-router.js.map +1 -1
  200. package/dist/seller-request-handler.d.ts +54 -0
  201. package/dist/seller-request-handler.d.ts.map +1 -0
  202. package/dist/seller-request-handler.js +359 -0
  203. package/dist/seller-request-handler.js.map +1 -0
  204. package/dist/storage/migrate.d.ts +13 -0
  205. package/dist/storage/migrate.d.ts.map +1 -0
  206. package/dist/storage/migrate.js +28 -0
  207. package/dist/storage/migrate.js.map +1 -0
  208. package/dist/storage/migrations/channels/001_create_tables.d.ts +3 -0
  209. package/dist/storage/migrations/channels/001_create_tables.d.ts.map +1 -0
  210. package/dist/storage/migrations/channels/001_create_tables.js +45 -0
  211. package/dist/storage/migrations/channels/001_create_tables.js.map +1 -0
  212. package/dist/storage/migrations/channels/002_add_auth_sig_columns.d.ts +3 -0
  213. package/dist/storage/migrations/channels/002_add_auth_sig_columns.d.ts.map +1 -0
  214. package/dist/storage/migrations/channels/002_add_auth_sig_columns.js +19 -0
  215. package/dist/storage/migrations/channels/002_add_auth_sig_columns.js.map +1 -0
  216. package/dist/storage/migrations/channels/index.d.ts +3 -0
  217. package/dist/storage/migrations/channels/index.d.ts.map +1 -0
  218. package/dist/storage/migrations/channels/index.js +4 -0
  219. package/dist/storage/migrations/channels/index.js.map +1 -0
  220. package/dist/storage/migrations/metering/001_create_tables.d.ts +3 -0
  221. package/dist/storage/migrations/metering/001_create_tables.d.ts.map +1 -0
  222. package/dist/storage/migrations/metering/001_create_tables.js +80 -0
  223. package/dist/storage/migrations/metering/001_create_tables.js.map +1 -0
  224. package/dist/storage/migrations/metering/index.d.ts +3 -0
  225. package/dist/storage/migrations/metering/index.d.ts.map +1 -0
  226. package/dist/storage/migrations/metering/index.js +3 -0
  227. package/dist/storage/migrations/metering/index.js.map +1 -0
  228. package/dist/types/capability.d.ts +1 -1
  229. package/dist/types/http.d.ts +2 -0
  230. package/dist/types/http.d.ts.map +1 -1
  231. package/dist/types/http.js +2 -0
  232. package/dist/types/http.js.map +1 -1
  233. package/dist/types/index.d.ts +0 -1
  234. package/dist/types/index.d.ts.map +1 -1
  235. package/dist/types/index.js +0 -1
  236. package/dist/types/index.js.map +1 -1
  237. package/dist/types/metering.d.ts +2 -2
  238. package/dist/types/metering.d.ts.map +1 -1
  239. package/dist/types/peer.d.ts +10 -11
  240. package/dist/types/peer.d.ts.map +1 -1
  241. package/dist/types/peer.js +7 -3
  242. package/dist/types/peer.js.map +1 -1
  243. package/dist/types/protocol.d.ts +32 -97
  244. package/dist/types/protocol.d.ts.map +1 -1
  245. package/dist/types/protocol.js +5 -10
  246. package/dist/types/protocol.js.map +1 -1
  247. package/dist/types/rating.d.ts +1 -1
  248. package/dist/types/rating.d.ts.map +1 -1
  249. package/dist/types/report.d.ts +1 -1
  250. package/dist/types/report.d.ts.map +1 -1
  251. package/dist/utils/response-usage.d.ts +10 -0
  252. package/dist/utils/response-usage.d.ts.map +1 -0
  253. package/dist/utils/response-usage.js +34 -0
  254. package/dist/utils/response-usage.js.map +1 -0
  255. package/package.json +4 -3
@@ -1,43 +1,28 @@
1
1
  import type { PeerConnection } from './connection-manager.js';
2
- import type { SessionLockAuthPayload, SessionLockConfirmPayload, SessionLockRejectPayload, SellerReceiptPayload, BuyerAckPayload, SessionEndPayload, TopUpRequestPayload, TopUpAuthPayload, DisputeNotifyPayload } from '../types/protocol.js';
2
+ import type { SpendingAuthPayload, AuthAckPayload, PaymentRequiredPayload, NeedAuthPayload } from '../types/protocol.js';
3
3
  import type { FramedMessage } from '../types/protocol.js';
4
4
  export type PaymentMessageHandler<T> = (payload: T) => void | Promise<void>;
5
5
  /**
6
- * Multiplexes bilateral payment messages over a PeerConnection.
6
+ * Multiplexes payment messages over a PeerConnection.
7
7
  * Register handlers for each message type, then call handleFrame()
8
8
  * when a payment-range frame arrives.
9
9
  */
10
10
  export declare class PaymentMux {
11
11
  private _connection;
12
12
  private _messageIdCounter;
13
- private _onSessionLockAuth?;
14
- private _onSessionLockConfirm?;
15
- private _onSessionLockReject?;
16
- private _onSellerReceipt?;
17
- private _onBuyerAck?;
18
- private _onSessionEnd?;
19
- private _onTopUpRequest?;
20
- private _onTopUpAuth?;
21
- private _onDisputeNotify?;
13
+ private _onSpendingAuth?;
14
+ private _onAuthAck?;
15
+ private _onPaymentRequired?;
16
+ private _onNeedAuth?;
22
17
  constructor(connection: PeerConnection);
23
- onSessionLockAuth(handler: PaymentMessageHandler<SessionLockAuthPayload>): void;
24
- onSessionLockConfirm(handler: PaymentMessageHandler<SessionLockConfirmPayload>): void;
25
- onSessionLockReject(handler: PaymentMessageHandler<SessionLockRejectPayload>): void;
26
- onSellerReceipt(handler: PaymentMessageHandler<SellerReceiptPayload>): void;
27
- onBuyerAck(handler: PaymentMessageHandler<BuyerAckPayload>): void;
28
- onSessionEnd(handler: PaymentMessageHandler<SessionEndPayload>): void;
29
- onTopUpRequest(handler: PaymentMessageHandler<TopUpRequestPayload>): void;
30
- onTopUpAuth(handler: PaymentMessageHandler<TopUpAuthPayload>): void;
31
- onDisputeNotify(handler: PaymentMessageHandler<DisputeNotifyPayload>): void;
32
- sendSessionLockAuth(payload: SessionLockAuthPayload): void;
33
- sendSessionLockConfirm(payload: SessionLockConfirmPayload): void;
34
- sendSessionLockReject(payload: SessionLockRejectPayload): void;
35
- sendSellerReceipt(payload: SellerReceiptPayload): void;
36
- sendBuyerAck(payload: BuyerAckPayload): void;
37
- sendSessionEnd(payload: SessionEndPayload): void;
38
- sendTopUpRequest(payload: TopUpRequestPayload): void;
39
- sendTopUpAuth(payload: TopUpAuthPayload): void;
40
- sendDisputeNotify(payload: DisputeNotifyPayload): void;
18
+ onSpendingAuth(handler: PaymentMessageHandler<SpendingAuthPayload>): void;
19
+ onAuthAck(handler: PaymentMessageHandler<AuthAckPayload>): void;
20
+ onPaymentRequired(handler: PaymentMessageHandler<PaymentRequiredPayload>): void;
21
+ onNeedAuth(handler: PaymentMessageHandler<NeedAuthPayload>): void;
22
+ sendSpendingAuth(payload: SpendingAuthPayload): void;
23
+ sendAuthAck(payload: AuthAckPayload): void;
24
+ sendPaymentRequired(payload: PaymentRequiredPayload): void;
25
+ sendNeedAuth(payload: NeedAuthPayload): void;
41
26
  /**
42
27
  * Returns true if this frame is a payment message and was handled.
43
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"payment-mux.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,kBAAkB,CAAC,CAAgD;IAC3E,OAAO,CAAC,qBAAqB,CAAC,CAAmD;IACjF,OAAO,CAAC,oBAAoB,CAAC,CAAkD;IAC/E,OAAO,CAAC,gBAAgB,CAAC,CAA8C;IACvE,OAAO,CAAC,WAAW,CAAC,CAAyC;IAC7D,OAAO,CAAC,aAAa,CAAC,CAA2C;IACjE,OAAO,CAAC,eAAe,CAAC,CAA6C;IACrE,OAAO,CAAC,YAAY,CAAC,CAA0C;IAC/D,OAAO,CAAC,gBAAgB,CAAC,CAA8C;gBAE3D,UAAU,EAAE,cAAc;IAKtC,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAG/E,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAGrF,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,wBAAwB,CAAC,GAAG,IAAI;IAGnF,eAAe,CAAC,OAAO,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAG3E,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,eAAe,CAAC,GAAG,IAAI;IAGjE,YAAY,CAAC,OAAO,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAGrE,cAAc,CAAC,OAAO,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAGzE,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAGnE,eAAe,CAAC,OAAO,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAK3E,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAG1D,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAGhE,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAG9D,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAGtD,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAG5C,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAGhD,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAGpD,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAG9C,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAKtD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCzD,mEAAmE;IACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C,OAAO,CAAC,KAAK;CAQd"}
1
+ {"version":3,"file":"payment-mux.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,eAAe,CAAC,CAA6C;IACrE,OAAO,CAAC,UAAU,CAAC,CAAwC;IAC3D,OAAO,CAAC,kBAAkB,CAAC,CAAgD;IAC3E,OAAO,CAAC,WAAW,CAAC,CAAyC;gBAEjD,UAAU,EAAE,cAAc;IAKtC,cAAc,CAAC,OAAO,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAGzE,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,IAAI;IAG/D,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAG/E,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,eAAe,CAAC,GAAG,IAAI;IAKjE,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAGpD,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAG1C,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAG1D,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK5C;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBzD,mEAAmE;IACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C,OAAO,CAAC,KAAK;CASd"}
@@ -1,8 +1,15 @@
1
1
  import { MessageType } from '../types/protocol.js';
2
2
  import { encodeFrame } from './message-protocol.js';
3
3
  import * as codec from './payment-codec.js';
4
+ import { debugLog } from '../utils/debug.js';
5
+ const MESSAGE_TYPE_NAME = {
6
+ [MessageType.SpendingAuth]: 'SpendingAuth',
7
+ [MessageType.AuthAck]: 'AuthAck',
8
+ [MessageType.PaymentRequired]: 'PaymentRequired',
9
+ [MessageType.NeedAuth]: 'NeedAuth',
10
+ };
4
11
  /**
5
- * Multiplexes bilateral payment messages over a PeerConnection.
12
+ * Multiplexes payment messages over a PeerConnection.
6
13
  * Register handlers for each message type, then call handleFrame()
7
14
  * when a payment-range frame arrives.
8
15
  */
@@ -10,106 +17,60 @@ export class PaymentMux {
10
17
  _connection;
11
18
  _messageIdCounter = 0;
12
19
  // Handler registrations
13
- _onSessionLockAuth;
14
- _onSessionLockConfirm;
15
- _onSessionLockReject;
16
- _onSellerReceipt;
17
- _onBuyerAck;
18
- _onSessionEnd;
19
- _onTopUpRequest;
20
- _onTopUpAuth;
21
- _onDisputeNotify;
20
+ _onSpendingAuth;
21
+ _onAuthAck;
22
+ _onPaymentRequired;
23
+ _onNeedAuth;
22
24
  constructor(connection) {
23
25
  this._connection = connection;
24
26
  }
25
27
  // --- Handler registration ---
26
- onSessionLockAuth(handler) {
27
- this._onSessionLockAuth = handler;
28
+ onSpendingAuth(handler) {
29
+ this._onSpendingAuth = handler;
28
30
  }
29
- onSessionLockConfirm(handler) {
30
- this._onSessionLockConfirm = handler;
31
+ onAuthAck(handler) {
32
+ this._onAuthAck = handler;
31
33
  }
32
- onSessionLockReject(handler) {
33
- this._onSessionLockReject = handler;
34
+ onPaymentRequired(handler) {
35
+ this._onPaymentRequired = handler;
34
36
  }
35
- onSellerReceipt(handler) {
36
- this._onSellerReceipt = handler;
37
- }
38
- onBuyerAck(handler) {
39
- this._onBuyerAck = handler;
40
- }
41
- onSessionEnd(handler) {
42
- this._onSessionEnd = handler;
43
- }
44
- onTopUpRequest(handler) {
45
- this._onTopUpRequest = handler;
46
- }
47
- onTopUpAuth(handler) {
48
- this._onTopUpAuth = handler;
49
- }
50
- onDisputeNotify(handler) {
51
- this._onDisputeNotify = handler;
37
+ onNeedAuth(handler) {
38
+ this._onNeedAuth = handler;
52
39
  }
53
40
  // --- Sending ---
54
- sendSessionLockAuth(payload) {
55
- this._send(MessageType.SessionLockAuth, codec.encodeSessionLockAuth(payload));
56
- }
57
- sendSessionLockConfirm(payload) {
58
- this._send(MessageType.SessionLockConfirm, codec.encodeSessionLockConfirm(payload));
59
- }
60
- sendSessionLockReject(payload) {
61
- this._send(MessageType.SessionLockReject, codec.encodeSessionLockReject(payload));
62
- }
63
- sendSellerReceipt(payload) {
64
- this._send(MessageType.SellerReceipt, codec.encodeSellerReceipt(payload));
41
+ sendSpendingAuth(payload) {
42
+ this._send(MessageType.SpendingAuth, codec.encodeSpendingAuth(payload));
65
43
  }
66
- sendBuyerAck(payload) {
67
- this._send(MessageType.BuyerAck, codec.encodeBuyerAck(payload));
44
+ sendAuthAck(payload) {
45
+ this._send(MessageType.AuthAck, codec.encodeAuthAck(payload));
68
46
  }
69
- sendSessionEnd(payload) {
70
- this._send(MessageType.SessionEnd, codec.encodeSessionEnd(payload));
47
+ sendPaymentRequired(payload) {
48
+ this._send(MessageType.PaymentRequired, codec.encodePaymentRequired(payload));
71
49
  }
72
- sendTopUpRequest(payload) {
73
- this._send(MessageType.TopUpRequest, codec.encodeTopUpRequest(payload));
74
- }
75
- sendTopUpAuth(payload) {
76
- this._send(MessageType.TopUpAuth, codec.encodeTopUpAuth(payload));
77
- }
78
- sendDisputeNotify(payload) {
79
- this._send(MessageType.DisputeNotify, codec.encodeDisputeNotify(payload));
50
+ sendNeedAuth(payload) {
51
+ this._send(MessageType.NeedAuth, codec.encodeNeedAuth(payload));
80
52
  }
81
53
  // --- Receiving ---
82
54
  /**
83
55
  * Returns true if this frame is a payment message and was handled.
84
56
  */
85
57
  async handleFrame(frame) {
58
+ const name = MESSAGE_TYPE_NAME[frame.type];
59
+ if (!name)
60
+ return false;
61
+ debugLog(`[PaymentMux] ← recv ${name} (${frame.payload.length}b)`);
86
62
  switch (frame.type) {
87
- case MessageType.SessionLockAuth:
88
- await this._onSessionLockAuth?.(codec.decodeSessionLockAuth(frame.payload));
89
- return true;
90
- case MessageType.SessionLockConfirm:
91
- await this._onSessionLockConfirm?.(codec.decodeSessionLockConfirm(frame.payload));
92
- return true;
93
- case MessageType.SessionLockReject:
94
- await this._onSessionLockReject?.(codec.decodeSessionLockReject(frame.payload));
95
- return true;
96
- case MessageType.SellerReceipt:
97
- await this._onSellerReceipt?.(codec.decodeSellerReceipt(frame.payload));
98
- return true;
99
- case MessageType.BuyerAck:
100
- await this._onBuyerAck?.(codec.decodeBuyerAck(frame.payload));
101
- return true;
102
- case MessageType.SessionEnd:
103
- await this._onSessionEnd?.(codec.decodeSessionEnd(frame.payload));
63
+ case MessageType.SpendingAuth:
64
+ await this._onSpendingAuth?.(codec.decodeSpendingAuth(frame.payload));
104
65
  return true;
105
- case MessageType.TopUpRequest:
106
- await this._onTopUpRequest?.(codec.decodeTopUpRequest(frame.payload));
66
+ case MessageType.AuthAck:
67
+ await this._onAuthAck?.(codec.decodeAuthAck(frame.payload));
107
68
  return true;
108
- case MessageType.TopUpAuth:
109
- await this._onTopUpAuth?.(codec.decodeTopUpAuth(frame.payload));
69
+ case MessageType.PaymentRequired:
70
+ await this._onPaymentRequired?.(codec.decodePaymentRequired(frame.payload));
110
71
  return true;
111
- case MessageType.DisputeNotify:
112
- await this._onDisputeNotify?.(codec.decodeDisputeNotify(frame.payload));
72
+ case MessageType.NeedAuth:
73
+ await this._onNeedAuth?.(codec.decodeNeedAuth(frame.payload));
113
74
  return true;
114
75
  default:
115
76
  return false;
@@ -120,6 +81,7 @@ export class PaymentMux {
120
81
  return type >= 0x50 && type <= 0x5f;
121
82
  }
122
83
  _send(type, payload) {
84
+ debugLog(`[PaymentMux] → send ${MESSAGE_TYPE_NAME[type] ?? `0x${type.toString(16)}`} (${payload.length}b)`);
123
85
  const frame = encodeFrame({
124
86
  type,
125
87
  messageId: this._messageIdCounter++ & 0xffffffff,
@@ -1 +1 @@
1
- {"version":3,"file":"payment-mux.js","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payment-mux.js","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import type { WalletInfo, Transaction, TransactionType } from './types.js';
2
2
  export interface UnifiedBalance {
3
3
  cryptoUSDC: number;
4
- inEscrowUSDC: number;
4
+ inDepositsUSDC: number;
5
5
  totalUSD: number;
6
6
  }
7
7
  export declare class BalanceManager {
8
8
  private transactions;
9
- getBalance(walletInfo: WalletInfo | null, inEscrowUSDC: number): UnifiedBalance;
9
+ getBalance(walletInfo: WalletInfo | null, inDepositsUSDC: number): UnifiedBalance;
10
10
  recordTransaction(tx: Transaction): void;
11
11
  getTransactionHistory(filter?: TransactionType, limit?: number, offset?: number): Transaction[];
12
12
  getTotalEarnings(since?: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"balance-manager.d.ts","sourceRoot":"","sources":["../../src/payments/balance-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAqB;IAEzC,UAAU,CACR,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,YAAY,EAAE,MAAM,GACnB,cAAc;IAWjB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAIxC,qBAAqB,CACnB,MAAM,CAAC,EAAE,eAAe,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,WAAW,EAAE;IAYhB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAOxC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAOlC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS7C"}
1
+ {"version":3,"file":"balance-manager.d.ts","sourceRoot":"","sources":["../../src/payments/balance-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAqB;IAEzC,UAAU,CACR,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,cAAc,EAAE,MAAM,GACrB,cAAc;IAWjB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAIxC,qBAAqB,CACnB,MAAM,CAAC,EAAE,eAAe,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,WAAW,EAAE;IAYhB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAOxC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAOlC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS7C"}
@@ -2,12 +2,12 @@ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
  export class BalanceManager {
4
4
  transactions = [];
5
- getBalance(walletInfo, inEscrowUSDC) {
5
+ getBalance(walletInfo, inDepositsUSDC) {
6
6
  const cryptoUSDC = walletInfo ? parseFloat(walletInfo.balanceUSDC) : 0;
7
- const totalUSD = cryptoUSDC + inEscrowUSDC;
7
+ const totalUSD = cryptoUSDC + inDepositsUSDC;
8
8
  return {
9
9
  cryptoUSDC,
10
- inEscrowUSDC,
10
+ inDepositsUSDC,
11
11
  totalUSD,
12
12
  };
13
13
  }
@@ -25,13 +25,13 @@ export class BalanceManager {
25
25
  }
26
26
  getTotalEarnings(since) {
27
27
  return this.transactions
28
- .filter((tx) => tx.type === 'escrow_release')
28
+ .filter((tx) => tx.type === 'deposit_release')
29
29
  .filter((tx) => (since !== undefined ? tx.timestamp >= since : true))
30
30
  .reduce((sum, tx) => sum + tx.amountUSD, 0);
31
31
  }
32
32
  getTotalSpending(since) {
33
33
  return this.transactions
34
- .filter((tx) => tx.type === 'escrow_lock')
34
+ .filter((tx) => tx.type === 'deposit_lock')
35
35
  .filter((tx) => (since !== undefined ? tx.timestamp >= since : true))
36
36
  .reduce((sum, tx) => sum + tx.amountUSD, 0);
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"balance-manager.js","sourceRoot":"","sources":["../../src/payments/balance-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,OAAO,cAAc;IACjB,YAAY,GAAkB,EAAE,CAAC;IAEzC,UAAU,CACR,UAA6B,EAC7B,YAAoB;QAEpB,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;QAE3C,OAAO;YACL,UAAU;YACV,YAAY;YACZ,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,EAAe;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB,CACnB,MAAwB,EACxB,KAAc,EACd,MAAe;QAEf,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QAE/B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,OAAO,IAAI,CAAC,YAAY;aACrB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC;aAC5C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACpE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,OAAO,IAAI,CAAC,YAAY;aACrB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC;aACzC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACpE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"balance-manager.js","sourceRoot":"","sources":["../../src/payments/balance-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,MAAM,OAAO,cAAc;IACjB,YAAY,GAAkB,EAAE,CAAC;IAEzC,UAAU,CACR,UAA6B,EAC7B,cAAsB;QAEtB,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,UAAU,GAAG,cAAc,CAAC;QAE7C,OAAO;YACL,UAAU;YACV,cAAc;YACd,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,EAAe;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,qBAAqB,CACnB,MAAwB,EACxB,KAAc,EACd,MAAe;QAEf,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QAE/B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,OAAO,IAAI,CAAC,YAAY;aACrB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,iBAAiB,CAAC;aAC7C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACpE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,OAAO,IAAI,CAAC,YAAY;aACrB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC;aAC1C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACpE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
@@ -1,122 +1,196 @@
1
- import { type AbstractSigner, Wallet } from 'ethers';
1
+ import { type AbstractSigner } from 'ethers';
2
2
  import type { Identity } from '../p2p/identity.js';
3
3
  import type { PaymentMux } from '../p2p/payment-mux.js';
4
- import type { SessionLockConfirmPayload, SessionLockRejectPayload, SellerReceiptPayload, TopUpRequestPayload } from '../types/protocol.js';
5
- import { BaseEscrowClient } from './evm/escrow-client.js';
4
+ import type { SpendingAuthPayload, AuthAckPayload, NeedAuthPayload } from '../types/protocol.js';
5
+ import { DepositsClient } from './evm/deposits-client.js';
6
+ import { ChannelStore, type StoredChannel } from './channel-store.js';
7
+ import { type ServicePricing } from './pricing.js';
6
8
  export interface BuyerPaymentConfig {
7
- /** Default lock amount in USDC base units (6 decimals). e.g. "1000000" = 1 USDC */
8
- defaultLockAmountUSDC: string;
9
- /** Base JSON-RPC endpoint */
10
9
  rpcUrl: string;
11
- /** Deployed AntseedEscrow contract address */
12
- contractAddress: string;
13
- /** USDC token contract address */
10
+ depositsContractAddress: string;
11
+ channelsContractAddress: string;
14
12
  usdcAddress: string;
15
- /** Auto-acknowledge seller receipts. Default: true */
16
- autoAck?: boolean;
17
- /** Auto-approve top-up requests. Default: true */
18
- autoTopUp?: boolean;
19
- /** Maximum total amount the buyer will commit per session (USDC base units). Default: "10000000" (10 USDC) */
20
- maxSessionBudgetUSDC?: string;
13
+ identityRegistryAddress: string;
14
+ chainId: number;
15
+ defaultAuthDurationSecs: number;
16
+ /**
17
+ * Max unverified exposure (overdraft limit) in USDC base units.
18
+ * The buyer will never sign more than verifiedCost + maxPerRequestUsdc.
19
+ * Default: 500000 ($0.50).
20
+ */
21
+ maxPerRequestUsdc: bigint;
22
+ /** Max USDC to reserve per ReserveAuth signature (base units). Default: 1000000 ($1.00). */
23
+ maxReserveAmountUsdc: bigint;
24
+ /** Max ratio of seller-claimed cost to buyer's bytes/4 estimate. Default: 1.4. */
25
+ costToleranceMultiplier?: number;
26
+ dataDir: string;
21
27
  }
22
- export type BuyerSessionStatus = 'pending' | 'confirmed' | 'active' | 'ending' | 'ended';
23
- export interface BuyerSessionState {
24
- sessionId: string;
25
- sellerPeerId: string;
26
- sellerEvmAddress: string;
27
- lockedAmount: bigint;
28
- status: BuyerSessionStatus;
29
- txSignature: string | null;
30
- lastRunningTotal: bigint;
31
- lastRequestCount: number;
32
- createdAt: number;
33
- updatedAt: number;
28
+ /** Result of signPerRequestAuth includes the payload and whether a reserve top-up is needed. */
29
+ export interface PerRequestAuthResult {
30
+ payload: SpendingAuthPayload;
31
+ topUpNeeded: boolean;
34
32
  }
35
33
  /**
36
- * Manages buyer-side bilateral payment sessions across seller connections.
37
- *
38
- * Handles the full lifecycle: lock initiation, receipt acknowledgement,
39
- * top-up approval, and session settlement.
34
+ * Manages buyer-side payment sessions using EIP-712 SpendingAuth
35
+ * with cumulative authorization, bytes/4 cost verification, and overdraft control.
40
36
  */
41
37
  export declare class BuyerPaymentManager {
42
38
  private readonly _identity;
43
39
  private _signer;
44
- private readonly _escrowClient;
40
+ private readonly _depositsClient;
45
41
  private readonly _config;
46
- private readonly _sessions;
47
- constructor(identity: Identity, config: BuyerPaymentConfig);
42
+ private readonly _channelStore;
43
+ /** In-memory map of active confirmed sessions by seller peerId for fast lookups. */
44
+ private readonly _confirmedPeers;
45
+ /** Peers that explicitly rejected our spending auth. */
46
+ private readonly _rejectedPeers;
47
+ /** sellerPeerId -> cumulative USDC amount in the latest SpendingAuth */
48
+ private readonly _cumulativeAmount;
49
+ /** sellerPeerId -> cumulative metadata for SpendingAuth */
50
+ private readonly _metadata;
51
+ /** sellerPeerId -> buyer-verified cumulative cost from bytes/4 */
52
+ private readonly _verifiedCost;
53
+ /** sellerPeerId -> pricing learned from 402 / peer metadata at session start */
54
+ private readonly _sessionPricing;
55
+ /** Cumulative response token totals per seller, tracked independently of signing metadata. */
56
+ private readonly _responseTokenTotals;
57
+ /** sellerPeerId -> current on-chain reserve ceiling (can grow with top-ups) */
58
+ private readonly _currentReserveCeiling;
59
+ /** sellerPeerId -> salt used in the current reserve */
60
+ private readonly _reserveSalt;
61
+ /** Cached EIP-712 domain — static for the lifetime of this manager. */
62
+ private readonly _channelsDomain;
63
+ constructor(identity: Identity, config: BuyerPaymentConfig, channelStore: ChannelStore);
64
+ /** Hydrate cumulative tracking maps from persisted active buyer sessions. */
65
+ private _hydrateFromStore;
48
66
  get signer(): AbstractSigner;
49
- /** @deprecated Use .signer instead */
50
- get wallet(): Wallet;
51
- /** Replace the signer at runtime (e.g. with a WalletConnect signer). */
52
67
  setSigner(signer: AbstractSigner): void;
53
- get escrowClient(): BaseEscrowClient;
54
- /** Get a snapshot of all active sessions. */
55
- getActiveSessions(): BuyerSessionState[];
56
- /** Get the session for a given seller peer, if it exists. */
57
- getSession(sellerPeerId: string): BuyerSessionState | undefined;
68
+ get depositsClient(): DepositsClient;
69
+ private get _costTolerance();
70
+ private _getCeiling;
71
+ /** Clean up all in-memory state for a seller when the session ends. */
72
+ cleanupSession(sellerPeerId: string): void;
73
+ getActiveSession(sellerPeerId: string): StoredChannel | null;
74
+ retireSession(sellerPeerId: string, status: Extract<StoredChannel['status'], 'settled' | 'timeout' | 'ghost'>, settledAmount?: bigint): void;
75
+ canReplayReserveAuth(sellerPeerId: string): boolean;
76
+ resendCurrentSpendingAuth(sellerPeerId: string, paymentMux: PaymentMux): Promise<string>;
77
+ resendReserveAuth(sellerPeerId: string, paymentMux: PaymentMux): Promise<string>;
58
78
  /**
59
- * Generate a session ID, sign a lock authorization, and send it
60
- * to the seller via PaymentMux.
79
+ * Sign and send an initial EIP-712 SpendingAuth to a seller.
80
+ * The initial cumulativeAmount is set to the seller's minBudgetPerRequest.
81
+ *
82
+ * @param pricing Token pricing from the seller's 402 / peer metadata.
61
83
  */
62
- initiateLock(sellerPeerId: string, sellerEvmAddress: string, paymentMux: PaymentMux, lockAmount?: string): Promise<string>;
84
+ authorizeSpending(sellerPeerId: string, paymentMux: PaymentMux, minBudgetPerRequest: bigint, reserveAmountOrPricing?: bigint | ServicePricing, pricingArg?: ServicePricing): Promise<string>;
85
+ handleAuthAck(sellerPeerId: string, payload: AuthAckPayload): void;
63
86
  /**
64
- * Called when the seller confirms the lock was committed on-chain.
87
+ * Estimate tokens and cost from response content without updating state.
65
88
  */
66
- handleLockConfirm(sellerPeerId: string, payload: SessionLockConfirmPayload): void;
89
+ private _estimateResponseCost;
67
90
  /**
68
- * Called when the seller rejects the lock.
91
+ * Accumulate a cost estimate into verifiedCost.
69
92
  */
70
- handleLockReject(sellerPeerId: string, payload: SessionLockRejectPayload): void;
93
+ private _accumulateVerifiedCost;
71
94
  /**
72
- * Handle a running-total receipt from the seller.
73
- * If autoAck is enabled, automatically counter-sign and send BuyerAck.
95
+ * Record response content and update the buyer's verified cost.
96
+ * Call this after receiving each response from the seller.
97
+ *
98
+ * NOTE: Do not call this AND signPerRequestAuth for the same response —
99
+ * signPerRequestAuth already updates verifiedCost internally.
100
+ *
101
+ * @returns The updated verified cost and estimated tokens, or null if no pricing is available.
74
102
  */
75
- handleSellerReceipt(sellerPeerId: string, receipt: SellerReceiptPayload, paymentMux: PaymentMux): Promise<void>;
103
+ recordResponseBytes(sellerPeerId: string, inputBytes: Uint8Array, outputBytes: Uint8Array): {
104
+ verifiedCost: bigint;
105
+ inputTokens: number;
106
+ outputTokens: number;
107
+ } | null;
76
108
  /**
77
- * Handle a top-up request from the seller.
78
- * If autoTopUp is enabled and budget allows, sign and send TopUpAuth.
79
- * Otherwise, end the session.
109
+ * Compute the max signable cumulative amount based on the overdraft model:
110
+ * maxSignable = verifiedCost + maxPerRequestUsdc, capped at reserve ceiling.
80
111
  */
81
- handleTopUpRequest(sellerPeerId: string, request: TopUpRequestPayload, paymentMux: PaymentMux): Promise<void>;
112
+ private _maxSignable;
82
113
  /**
83
- * End a session with the given seller. Signs a settlement message
84
- * with ECDSA and sends SessionEnd.
114
+ * Check whether the current cumulative amount is approaching the reserve ceiling
115
+ * and a top-up should be triggered.
85
116
  */
86
- endSession(sellerPeerId: string, paymentMux: PaymentMux, score?: number): Promise<void>;
87
- /**
88
- * Deposit USDC into the escrow contract.
89
- * @param amount Amount in USDC base units (6 decimals).
90
- */
91
- deposit(amount: bigint): Promise<string>;
117
+ private _needsTopUp;
92
118
  /**
93
- * Withdraw USDC from the escrow contract.
94
- * @param amount Amount in USDC base units (6 decimals).
119
+ * Sign an updated SpendingAuth after receiving a response.
120
+ *
121
+ * The buyer uses the seller's claimed cost to advance the cumulative amount,
122
+ * but validates it against the buyer's bytes/4 estimate. If the seller's claim
123
+ * exceeds the buyer's estimate by more than the configured tolerance, the buyer
124
+ * caps at tolerance * buyerEstimate. The cumulative is also capped at the
125
+ * overdraft limit (verifiedCost + maxPerRequestUsdc) and the reserve ceiling.
126
+ *
127
+ * @param sellerPeerId Seller peer ID.
128
+ * @param responseStats Byte counts from the last response and seller's claimed cost.
129
+ * @param addedLatencyMs Optional latency for metadata.
130
+ * @returns The signed payload and whether a reserve top-up is needed.
95
131
  */
96
- withdraw(amount: bigint): Promise<string>;
97
- /**
98
- * Get the buyer's on-chain escrow balance.
99
- */
100
- getBalance(): Promise<{
101
- deposited: bigint;
102
- committed: bigint;
103
- available: bigint;
104
- }>;
132
+ signPerRequestAuth(sellerPeerId: string, responseStats: {
133
+ inputBytes: Uint8Array;
134
+ outputBytes: Uint8Array;
135
+ sellerClaimedCost?: bigint;
136
+ }, addedLatencyMs?: bigint): Promise<PerRequestAuthResult>;
105
137
  /**
106
- * Release an expired lock (buyer reclaims funds).
138
+ * Handle seller-initiated NeedAuth messages when the seller's budget runs out mid-session.
139
+ * Caps the signed amount at verifiedCost + maxPerRequestUsdc (overdraft model).
107
140
  */
108
- releaseExpiredLock(sessionId: string): Promise<string>;
141
+ handleNeedAuth(sellerPeerId: string, payload: NeedAuthPayload, paymentMux: PaymentMux): Promise<void>;
109
142
  /**
110
- * Respond to a dispute opened by the seller.
143
+ * Sign a new ReserveAuth with a higher maxAmount to extend the session's reserve ceiling.
144
+ * The seller must call reserve() on-chain again with the new signature.
145
+ * Note: requires contract support for top-up (increaseDeposit on existing channelId).
111
146
  */
112
- respondToDispute(sessionId: string): Promise<string>;
147
+ topUpReserve(sellerPeerId: string, paymentMux: PaymentMux): Promise<void>;
148
+ /** Max USDC overdraft (unverified exposure) from buyer config. */
149
+ get maxPerRequestUsdc(): bigint;
150
+ /** Max USDC per ReserveAuth signature from buyer config. */
151
+ get maxReserveAmountUsdc(): bigint;
152
+ /** Current buyer-verified cost for a seller. */
153
+ getVerifiedCost(sellerPeerId: string): bigint;
154
+ /** Current reserve ceiling for a seller (may be higher than initial after top-ups). */
155
+ getReserveCeiling(sellerPeerId: string): bigint;
156
+ /** Current cumulative signed amount for a seller. */
157
+ getCumulativeAmount(sellerPeerId: string): bigint;
158
+ /** Live cumulative token counts for a seller (in-memory, always up-to-date). */
159
+ getCumulativeTokens(sellerPeerId: string): {
160
+ inputTokens: bigint;
161
+ outputTokens: bigint;
162
+ };
113
163
  /**
114
- * Check if a session lock has been confirmed (for polling).
164
+ * Accumulate response token counts and persist to the channel store.
165
+ * Tracks its own running totals independently of signPerRequestAuth metadata,
166
+ * so the persisted data is always up-to-date after each response.
115
167
  */
168
+ recordAndPersistTokens(sellerPeerId: string, inputTokens: number, outputTokens: number): void;
169
+ /** Get the live response token totals for a seller, or null if none recorded this session. */
170
+ getResponseTokenTotals(sellerPeerId: string): {
171
+ input: number;
172
+ output: number;
173
+ requests: number;
174
+ } | null;
175
+ /** Check if a session has been confirmed via AuthAck. */
176
+ isAuthorized(sellerPeerId: string): boolean;
177
+ /** Alias for isAuthorized (used by polling loop). */
116
178
  isLockConfirmed(sellerPeerId: string): boolean;
117
- /**
118
- * Check if a session lock has been rejected (for polling).
119
- */
179
+ /** Check if the lock was explicitly rejected (not just never-contacted). */
120
180
  isLockRejected(sellerPeerId: string): boolean;
181
+ /** Mark a peer as having rejected our spending auth. */
182
+ markRejected(sellerPeerId: string): void;
183
+ getSessionHistory(sellerPeerId: string): StoredChannel[];
184
+ deposit(amount: bigint): Promise<string>;
185
+ withdraw(amount: bigint): Promise<string>;
186
+ getBalance(): Promise<{
187
+ available: bigint;
188
+ reserved: bigint;
189
+ }>;
190
+ static parseResponseCost(headers: Record<string, string>): {
191
+ cost: bigint;
192
+ inputTokens: bigint;
193
+ outputTokens: bigint;
194
+ } | null;
121
195
  }
122
196
  //# sourceMappingURL=buyer-payment-manager.d.ts.map