@quantulabs/8004-mcp 0.1.0

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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/dist/chains/evm/index.d.ts +2 -0
  4. package/dist/chains/evm/index.d.ts.map +1 -0
  5. package/dist/chains/evm/index.js +3 -0
  6. package/dist/chains/evm/index.js.map +1 -0
  7. package/dist/chains/evm/provider.d.ts +48 -0
  8. package/dist/chains/evm/provider.d.ts.map +1 -0
  9. package/dist/chains/evm/provider.js +446 -0
  10. package/dist/chains/evm/provider.js.map +1 -0
  11. package/dist/chains/index.d.ts +3 -0
  12. package/dist/chains/index.d.ts.map +1 -0
  13. package/dist/chains/index.js +4 -0
  14. package/dist/chains/index.js.map +1 -0
  15. package/dist/chains/solana/data-source.d.ts +17 -0
  16. package/dist/chains/solana/data-source.d.ts.map +1 -0
  17. package/dist/chains/solana/data-source.js +65 -0
  18. package/dist/chains/solana/data-source.js.map +1 -0
  19. package/dist/chains/solana/index.d.ts +8 -0
  20. package/dist/chains/solana/index.d.ts.map +1 -0
  21. package/dist/chains/solana/index.js +9 -0
  22. package/dist/chains/solana/index.js.map +1 -0
  23. package/dist/chains/solana/parsers.d.ts +11 -0
  24. package/dist/chains/solana/parsers.d.ts.map +1 -0
  25. package/dist/chains/solana/parsers.js +94 -0
  26. package/dist/chains/solana/parsers.js.map +1 -0
  27. package/dist/chains/solana/provider.d.ts +33 -0
  28. package/dist/chains/solana/provider.d.ts.map +1 -0
  29. package/dist/chains/solana/provider.js +407 -0
  30. package/dist/chains/solana/provider.js.map +1 -0
  31. package/dist/chains/solana/state.d.ts +55 -0
  32. package/dist/chains/solana/state.d.ts.map +1 -0
  33. package/dist/chains/solana/state.js +162 -0
  34. package/dist/chains/solana/state.js.map +1 -0
  35. package/dist/chains/solana/tools/atom.d.ts +45 -0
  36. package/dist/chains/solana/tools/atom.d.ts.map +1 -0
  37. package/dist/chains/solana/tools/atom.js +115 -0
  38. package/dist/chains/solana/tools/atom.js.map +1 -0
  39. package/dist/chains/solana/tools/validation.d.ts +45 -0
  40. package/dist/chains/solana/tools/validation.d.ts.map +1 -0
  41. package/dist/chains/solana/tools/validation.js +212 -0
  42. package/dist/chains/solana/tools/validation.js.map +1 -0
  43. package/dist/chains/solana/tools/wallet.d.ts +45 -0
  44. package/dist/chains/solana/tools/wallet.d.ts.map +1 -0
  45. package/dist/chains/solana/tools/wallet.js +103 -0
  46. package/dist/chains/solana/tools/wallet.js.map +1 -0
  47. package/dist/config/defaults.d.ts +68 -0
  48. package/dist/config/defaults.d.ts.map +1 -0
  49. package/dist/config/defaults.js +247 -0
  50. package/dist/config/defaults.js.map +1 -0
  51. package/dist/config/env.d.ts +33 -0
  52. package/dist/config/env.d.ts.map +1 -0
  53. package/dist/config/env.js +42 -0
  54. package/dist/config/env.js.map +1 -0
  55. package/dist/config/index.d.ts +3 -0
  56. package/dist/config/index.d.ts.map +1 -0
  57. package/dist/config/index.js +3 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/core/cache/agent-cache.d.ts +36 -0
  60. package/dist/core/cache/agent-cache.d.ts.map +1 -0
  61. package/dist/core/cache/agent-cache.js +87 -0
  62. package/dist/core/cache/agent-cache.js.map +1 -0
  63. package/dist/core/cache/data-source.d.ts +31 -0
  64. package/dist/core/cache/data-source.d.ts.map +1 -0
  65. package/dist/core/cache/data-source.js +6 -0
  66. package/dist/core/cache/data-source.js.map +1 -0
  67. package/dist/core/cache/index.d.ts +7 -0
  68. package/dist/core/cache/index.d.ts.map +1 -0
  69. package/dist/core/cache/index.js +9 -0
  70. package/dist/core/cache/index.js.map +1 -0
  71. package/dist/core/cache/lazy-cache.d.ts +30 -0
  72. package/dist/core/cache/lazy-cache.d.ts.map +1 -0
  73. package/dist/core/cache/lazy-cache.js +79 -0
  74. package/dist/core/cache/lazy-cache.js.map +1 -0
  75. package/dist/core/cache/slim-store.d.ts +66 -0
  76. package/dist/core/cache/slim-store.d.ts.map +1 -0
  77. package/dist/core/cache/slim-store.js +285 -0
  78. package/dist/core/cache/slim-store.js.map +1 -0
  79. package/dist/core/cache/sqlite-store.d.ts +99 -0
  80. package/dist/core/cache/sqlite-store.d.ts.map +1 -0
  81. package/dist/core/cache/sqlite-store.js +470 -0
  82. package/dist/core/cache/sqlite-store.js.map +1 -0
  83. package/dist/core/cache/sync-manager.d.ts +38 -0
  84. package/dist/core/cache/sync-manager.d.ts.map +1 -0
  85. package/dist/core/cache/sync-manager.js +213 -0
  86. package/dist/core/cache/sync-manager.js.map +1 -0
  87. package/dist/core/errors/index.d.ts +2 -0
  88. package/dist/core/errors/index.d.ts.map +1 -0
  89. package/dist/core/errors/index.js +2 -0
  90. package/dist/core/errors/index.js.map +1 -0
  91. package/dist/core/errors/mcp-error.d.ts +39 -0
  92. package/dist/core/errors/mcp-error.d.ts.map +1 -0
  93. package/dist/core/errors/mcp-error.js +79 -0
  94. package/dist/core/errors/mcp-error.js.map +1 -0
  95. package/dist/core/interfaces/agent.d.ts +84 -0
  96. package/dist/core/interfaces/agent.d.ts.map +1 -0
  97. package/dist/core/interfaces/agent.js +40 -0
  98. package/dist/core/interfaces/agent.js.map +1 -0
  99. package/dist/core/interfaces/chain-provider.d.ts +50 -0
  100. package/dist/core/interfaces/chain-provider.d.ts.map +1 -0
  101. package/dist/core/interfaces/chain-provider.js +5 -0
  102. package/dist/core/interfaces/chain-provider.js.map +1 -0
  103. package/dist/core/interfaces/feedback.d.ts +46 -0
  104. package/dist/core/interfaces/feedback.d.ts.map +1 -0
  105. package/dist/core/interfaces/feedback.js +3 -0
  106. package/dist/core/interfaces/feedback.js.map +1 -0
  107. package/dist/core/interfaces/index.d.ts +6 -0
  108. package/dist/core/interfaces/index.d.ts.map +1 -0
  109. package/dist/core/interfaces/index.js +7 -0
  110. package/dist/core/interfaces/index.js.map +1 -0
  111. package/dist/core/interfaces/reputation.d.ts +47 -0
  112. package/dist/core/interfaces/reputation.d.ts.map +1 -0
  113. package/dist/core/interfaces/reputation.js +30 -0
  114. package/dist/core/interfaces/reputation.js.map +1 -0
  115. package/dist/core/interfaces/x402.d.ts +226 -0
  116. package/dist/core/interfaces/x402.d.ts.map +1 -0
  117. package/dist/core/interfaces/x402.js +120 -0
  118. package/dist/core/interfaces/x402.js.map +1 -0
  119. package/dist/core/parsers/common.d.ts +31 -0
  120. package/dist/core/parsers/common.d.ts.map +1 -0
  121. package/dist/core/parsers/common.js +185 -0
  122. package/dist/core/parsers/common.js.map +1 -0
  123. package/dist/core/parsers/index.d.ts +2 -0
  124. package/dist/core/parsers/index.d.ts.map +1 -0
  125. package/dist/core/parsers/index.js +2 -0
  126. package/dist/core/parsers/index.js.map +1 -0
  127. package/dist/core/registry/chain-registry.d.ts +26 -0
  128. package/dist/core/registry/chain-registry.d.ts.map +1 -0
  129. package/dist/core/registry/chain-registry.js +141 -0
  130. package/dist/core/registry/chain-registry.js.map +1 -0
  131. package/dist/core/registry/index.d.ts +3 -0
  132. package/dist/core/registry/index.d.ts.map +1 -0
  133. package/dist/core/registry/index.js +3 -0
  134. package/dist/core/registry/index.js.map +1 -0
  135. package/dist/core/registry/tool-registry.d.ts +23 -0
  136. package/dist/core/registry/tool-registry.d.ts.map +1 -0
  137. package/dist/core/registry/tool-registry.js +66 -0
  138. package/dist/core/registry/tool-registry.js.map +1 -0
  139. package/dist/core/serializers/common.d.ts +20 -0
  140. package/dist/core/serializers/common.d.ts.map +1 -0
  141. package/dist/core/serializers/common.js +76 -0
  142. package/dist/core/serializers/common.js.map +1 -0
  143. package/dist/core/serializers/index.d.ts +2 -0
  144. package/dist/core/serializers/index.d.ts.map +1 -0
  145. package/dist/core/serializers/index.js +2 -0
  146. package/dist/core/serializers/index.js.map +1 -0
  147. package/dist/core/services/index.d.ts +3 -0
  148. package/dist/core/services/index.d.ts.map +1 -0
  149. package/dist/core/services/index.js +3 -0
  150. package/dist/core/services/index.js.map +1 -0
  151. package/dist/core/services/ipfs-service.d.ts +59 -0
  152. package/dist/core/services/ipfs-service.d.ts.map +1 -0
  153. package/dist/core/services/ipfs-service.js +84 -0
  154. package/dist/core/services/ipfs-service.js.map +1 -0
  155. package/dist/core/utils/tags.d.ts +38 -0
  156. package/dist/core/utils/tags.d.ts.map +1 -0
  157. package/dist/core/utils/tags.js +77 -0
  158. package/dist/core/utils/tags.js.map +1 -0
  159. package/dist/core/utils/value-encoding.d.ts +36 -0
  160. package/dist/core/utils/value-encoding.d.ts.map +1 -0
  161. package/dist/core/utils/value-encoding.js +196 -0
  162. package/dist/core/utils/value-encoding.js.map +1 -0
  163. package/dist/core/wallet/index.d.ts +2 -0
  164. package/dist/core/wallet/index.d.ts.map +1 -0
  165. package/dist/core/wallet/index.js +3 -0
  166. package/dist/core/wallet/index.js.map +1 -0
  167. package/dist/core/wallet/wallet-manager.d.ts +86 -0
  168. package/dist/core/wallet/wallet-manager.d.ts.map +1 -0
  169. package/dist/core/wallet/wallet-manager.js +783 -0
  170. package/dist/core/wallet/wallet-manager.js.map +1 -0
  171. package/dist/core/x402/index.d.ts +2 -0
  172. package/dist/core/x402/index.d.ts.map +1 -0
  173. package/dist/core/x402/index.js +3 -0
  174. package/dist/core/x402/index.js.map +1 -0
  175. package/dist/core/x402/proof-validator.d.ts +57 -0
  176. package/dist/core/x402/proof-validator.d.ts.map +1 -0
  177. package/dist/core/x402/proof-validator.js +103 -0
  178. package/dist/core/x402/proof-validator.js.map +1 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +135 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/state/global-state.d.ts +98 -0
  184. package/dist/state/global-state.d.ts.map +1 -0
  185. package/dist/state/global-state.js +258 -0
  186. package/dist/state/global-state.js.map +1 -0
  187. package/dist/tools/definitions.d.ts +10 -0
  188. package/dist/tools/definitions.d.ts.map +1 -0
  189. package/dist/tools/definitions.js +163 -0
  190. package/dist/tools/definitions.js.map +1 -0
  191. package/dist/tools/unified/agent.d.ts +5 -0
  192. package/dist/tools/unified/agent.d.ts.map +1 -0
  193. package/dist/tools/unified/agent.js +300 -0
  194. package/dist/tools/unified/agent.js.map +1 -0
  195. package/dist/tools/unified/cache.d.ts +5 -0
  196. package/dist/tools/unified/cache.d.ts.map +1 -0
  197. package/dist/tools/unified/cache.js +207 -0
  198. package/dist/tools/unified/cache.js.map +1 -0
  199. package/dist/tools/unified/collection.d.ts +5 -0
  200. package/dist/tools/unified/collection.d.ts.map +1 -0
  201. package/dist/tools/unified/collection.js +162 -0
  202. package/dist/tools/unified/collection.js.map +1 -0
  203. package/dist/tools/unified/config.d.ts +5 -0
  204. package/dist/tools/unified/config.d.ts.map +1 -0
  205. package/dist/tools/unified/config.js +217 -0
  206. package/dist/tools/unified/config.js.map +1 -0
  207. package/dist/tools/unified/crawler.d.ts +5 -0
  208. package/dist/tools/unified/crawler.d.ts.map +1 -0
  209. package/dist/tools/unified/crawler.js +212 -0
  210. package/dist/tools/unified/crawler.js.map +1 -0
  211. package/dist/tools/unified/feedback.d.ts +5 -0
  212. package/dist/tools/unified/feedback.d.ts.map +1 -0
  213. package/dist/tools/unified/feedback.js +274 -0
  214. package/dist/tools/unified/feedback.js.map +1 -0
  215. package/dist/tools/unified/ipfs.d.ts +5 -0
  216. package/dist/tools/unified/ipfs.d.ts.map +1 -0
  217. package/dist/tools/unified/ipfs.js +156 -0
  218. package/dist/tools/unified/ipfs.js.map +1 -0
  219. package/dist/tools/unified/oasf.d.ts +5 -0
  220. package/dist/tools/unified/oasf.d.ts.map +1 -0
  221. package/dist/tools/unified/oasf.js +167 -0
  222. package/dist/tools/unified/oasf.js.map +1 -0
  223. package/dist/tools/unified/registration.d.ts +5 -0
  224. package/dist/tools/unified/registration.d.ts.map +1 -0
  225. package/dist/tools/unified/registration.js +223 -0
  226. package/dist/tools/unified/registration.js.map +1 -0
  227. package/dist/tools/unified/reputation.d.ts +5 -0
  228. package/dist/tools/unified/reputation.d.ts.map +1 -0
  229. package/dist/tools/unified/reputation.js +121 -0
  230. package/dist/tools/unified/reputation.js.map +1 -0
  231. package/dist/tools/unified/wallet.d.ts +5 -0
  232. package/dist/tools/unified/wallet.d.ts.map +1 -0
  233. package/dist/tools/unified/wallet.js +434 -0
  234. package/dist/tools/unified/wallet.js.map +1 -0
  235. package/dist/tools/unified/write-operations.d.ts +5 -0
  236. package/dist/tools/unified/write-operations.d.ts.map +1 -0
  237. package/dist/tools/unified/write-operations.js +582 -0
  238. package/dist/tools/unified/write-operations.js.map +1 -0
  239. package/dist/tools/unified/x402.d.ts +5 -0
  240. package/dist/tools/unified/x402.d.ts.map +1 -0
  241. package/dist/tools/unified/x402.js +594 -0
  242. package/dist/tools/unified/x402.js.map +1 -0
  243. package/package.json +67 -0
@@ -0,0 +1,594 @@
1
+ // x402 Protocol Tools for 8004-reputation Extension
2
+ // Spec: https://github.com/coinbase/x402/issues/931
3
+ import { getArgs, readString, readNumber, readBoolean, readRecord, parseChainParam, } from '../../core/parsers/common.js';
4
+ import { successResponse } from '../../core/serializers/common.js';
5
+ import { globalState } from '../../state/global-state.js';
6
+ import { parseGlobalId, isValidGlobalId } from '../../core/interfaces/agent.js';
7
+ import { isWritableProvider } from '../../core/interfaces/chain-provider.js';
8
+ import { buildRegistryIdentifier, buildClientAddress, feedbackFileToRecord, } from '../../core/interfaces/x402.js';
9
+ import { validateProofFormat, isProofFormatValid } from '../../core/x402/proof-validator.js';
10
+ import { CHAIN_CONFIGS } from '../../config/defaults.js';
11
+ import { createHash } from 'crypto';
12
+ import { encodeReputationValue } from '../../core/utils/value-encoding.js';
13
+ export const x402Tools = [
14
+ {
15
+ name: 'x402_identity_build',
16
+ description: 'Build x402 AgentIdentity object for PaymentRequired responses (CAIP-2 format)',
17
+ inputSchema: {
18
+ type: 'object',
19
+ properties: {
20
+ agentId: {
21
+ type: 'string',
22
+ description: 'Agent ID (global format like sol:xxx or base:8453:123)',
23
+ },
24
+ chain: {
25
+ type: 'string',
26
+ description: 'Chain override (optional if using global ID)',
27
+ },
28
+ },
29
+ required: ['agentId'],
30
+ },
31
+ },
32
+ {
33
+ name: 'x402_proof_parse',
34
+ description: 'Parse x402 PaymentResponse header and extract proof-of-payment',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ paymentResponse: {
39
+ type: 'string',
40
+ description: 'Base64-encoded PaymentResponse header from x402 settlement',
41
+ },
42
+ },
43
+ required: ['paymentResponse'],
44
+ },
45
+ },
46
+ {
47
+ name: 'x402_feedback_build',
48
+ description: 'Build x402 feedback file without submitting. Use this to get the file content for manual storage (IPFS, HTTP, etc.) before calling x402_feedback_submit with feedbackUri.',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ agentId: {
53
+ type: 'string',
54
+ description: 'Agent ID (global format like sol:xxx or base:8453:123)',
55
+ },
56
+ value: {
57
+ type: ['number', 'string'],
58
+ description: 'Raw metric value (required) - e.g., 9977 for 99.77% when valueDecimals=2',
59
+ },
60
+ valueDecimals: {
61
+ type: 'number',
62
+ description: 'Decimal precision (0-6), default 0',
63
+ },
64
+ score: {
65
+ type: 'number',
66
+ description: 'Quality score (0-100), optional',
67
+ },
68
+ tag1: {
69
+ type: 'string',
70
+ description: 'x402 feedback tag (x402-resource-delivered, x402-good-payer, etc.). Use oasf_list_tags to see all.',
71
+ },
72
+ tag2: {
73
+ type: 'string',
74
+ description: 'Network tag (exact-svm for Solana, exact-evm for EVM)',
75
+ },
76
+ endpoint: {
77
+ type: 'string',
78
+ description: 'Agent endpoint that was called',
79
+ },
80
+ proofOfPayment: {
81
+ type: 'object',
82
+ description: 'Proof of payment object',
83
+ properties: {
84
+ fromAddress: { type: 'string', description: 'Payer address' },
85
+ toAddress: { type: 'string', description: 'Payee address' },
86
+ chainId: { type: 'string', description: 'Chain ID or genesis hash' },
87
+ txHash: { type: 'string', description: 'Transaction hash/signature' },
88
+ },
89
+ required: ['fromAddress', 'toAddress', 'chainId', 'txHash'],
90
+ },
91
+ x402Settlement: {
92
+ type: 'object',
93
+ description: 'Optional settlement details',
94
+ },
95
+ comment: {
96
+ type: 'string',
97
+ description: 'Optional feedback comment',
98
+ },
99
+ signer: {
100
+ type: 'string',
101
+ description: 'Client address (defaults to proofOfPayment.fromAddress)',
102
+ },
103
+ chain: {
104
+ type: 'string',
105
+ description: 'Chain override (optional if using global ID)',
106
+ },
107
+ },
108
+ required: ['agentId', 'value', 'tag1', 'tag2', 'proofOfPayment'],
109
+ },
110
+ },
111
+ {
112
+ name: 'x402_feedback_submit',
113
+ description: 'Submit feedback with proof-of-payment (x402 extension). Requires feedbackUri (use x402_feedback_build + ipfs_add_json first) OR storeOnIpfs=true with IPFS configured.',
114
+ inputSchema: {
115
+ type: 'object',
116
+ properties: {
117
+ agentId: {
118
+ type: 'string',
119
+ description: 'Agent ID (global format like sol:xxx or base:8453:123)',
120
+ },
121
+ value: {
122
+ type: ['number', 'string'],
123
+ description: 'Raw metric value (required) - e.g., 9977 for 99.77% when valueDecimals=2',
124
+ },
125
+ valueDecimals: {
126
+ type: 'number',
127
+ description: 'Decimal precision (0-6), default 0',
128
+ },
129
+ score: {
130
+ type: 'number',
131
+ description: 'Quality score (0-100), optional',
132
+ },
133
+ tag1: {
134
+ type: 'string',
135
+ description: 'x402 feedback tag (x402-resource-delivered, x402-good-payer, etc.). Use oasf_list_tags to see all.',
136
+ },
137
+ tag2: {
138
+ type: 'string',
139
+ description: 'Network tag (exact-svm for Solana, exact-evm for EVM)',
140
+ },
141
+ endpoint: {
142
+ type: 'string',
143
+ description: 'Agent endpoint that was called',
144
+ },
145
+ proofOfPayment: {
146
+ type: 'object',
147
+ description: 'Proof of payment object',
148
+ properties: {
149
+ fromAddress: {
150
+ type: 'string',
151
+ description: 'Payer address',
152
+ },
153
+ toAddress: {
154
+ type: 'string',
155
+ description: 'Payee address',
156
+ },
157
+ chainId: {
158
+ type: 'string',
159
+ description: 'Chain ID or genesis hash',
160
+ },
161
+ txHash: {
162
+ type: 'string',
163
+ description: 'Transaction hash/signature',
164
+ },
165
+ },
166
+ required: ['fromAddress', 'toAddress', 'chainId', 'txHash'],
167
+ },
168
+ x402Settlement: {
169
+ type: 'object',
170
+ description: 'Optional settlement details',
171
+ properties: {
172
+ success: { type: 'boolean' },
173
+ transaction: { type: 'string' },
174
+ network: { type: 'string' },
175
+ settledAt: { type: 'string' },
176
+ },
177
+ },
178
+ comment: {
179
+ type: 'string',
180
+ description: 'Optional feedback comment',
181
+ },
182
+ feedbackUri: {
183
+ type: 'string',
184
+ description: 'URI where feedback file is stored (ipfs://, https://, ar://). If provided, skips IPFS upload.',
185
+ },
186
+ validateProof: {
187
+ type: 'boolean',
188
+ description: 'Validate proof format (default: false). Note: This only validates the format of addresses and transaction hash, NOT on-chain transaction presence.',
189
+ },
190
+ storeOnIpfs: {
191
+ type: 'boolean',
192
+ description: 'Store feedback file on IPFS (default: true). Requires IPFS configured if feedbackUri not provided.',
193
+ },
194
+ skipSend: {
195
+ type: 'boolean',
196
+ description: 'Return unsigned transaction for external wallet (default: false)',
197
+ },
198
+ signer: {
199
+ type: 'string',
200
+ description: 'Signer public key if skipSend=true',
201
+ },
202
+ chain: {
203
+ type: 'string',
204
+ description: 'Chain override (optional if using global ID)',
205
+ },
206
+ },
207
+ required: ['agentId', 'value', 'tag1', 'tag2', 'proofOfPayment'],
208
+ },
209
+ },
210
+ ];
211
+ export const x402Handlers = {
212
+ x402_identity_build: async (args) => {
213
+ const input = getArgs(args);
214
+ const agentId = readString(input, 'agentId', true);
215
+ const { chainPrefix } = parseChainParam(input);
216
+ // Resolve chain and agent ID
217
+ let provider;
218
+ let rawId = agentId;
219
+ if (isValidGlobalId(agentId)) {
220
+ const parsed = parseGlobalId(agentId);
221
+ provider = globalState.chains.getByPrefix(parsed.prefix);
222
+ rawId = parsed.rawId;
223
+ }
224
+ else if (chainPrefix) {
225
+ provider = globalState.chains.getByPrefix(chainPrefix);
226
+ }
227
+ else {
228
+ provider = globalState.chains.getDefault();
229
+ }
230
+ if (!provider) {
231
+ throw new Error('No chain provider available');
232
+ }
233
+ // Get chain config
234
+ const config = provider.getConfig();
235
+ const networkMode = globalState.networkMode;
236
+ const chainConfig = CHAIN_CONFIGS[config.chainPrefix];
237
+ if (!chainConfig) {
238
+ throw new Error(`Unknown chain: ${config.chainPrefix}`);
239
+ }
240
+ const networkConfig = networkMode === 'mainnet' ? chainConfig.mainnet : chainConfig.testnet;
241
+ const registryAddress = networkConfig.registries.identity;
242
+ if (!registryAddress) {
243
+ throw new Error(`No registry deployed for ${config.chainPrefix} ${networkMode}`);
244
+ }
245
+ // Build CAIP-2 registry identifier
246
+ const agentRegistry = buildRegistryIdentifier(config.chainType, networkConfig.chainId, registryAddress);
247
+ const identity = {
248
+ agentRegistry,
249
+ agentId: rawId,
250
+ };
251
+ return successResponse({
252
+ identity,
253
+ chainType: config.chainType,
254
+ chainPrefix: config.chainPrefix,
255
+ networkMode,
256
+ });
257
+ },
258
+ x402_proof_parse: async (args) => {
259
+ const input = getArgs(args);
260
+ const paymentResponse = readString(input, 'paymentResponse', true);
261
+ // Decode base64 PaymentResponse
262
+ let decoded;
263
+ try {
264
+ const jsonStr = Buffer.from(paymentResponse, 'base64').toString('utf-8');
265
+ decoded = JSON.parse(jsonStr);
266
+ }
267
+ catch {
268
+ throw new Error('Invalid PaymentResponse: not valid base64 JSON');
269
+ }
270
+ if (typeof decoded !== 'object' || decoded === null) {
271
+ throw new Error('Invalid PaymentResponse: must be an object');
272
+ }
273
+ const response = decoded;
274
+ // Extract proof of payment fields
275
+ // x402 PaymentResponse format varies by implementation
276
+ // Common fields: txHash, from, to, chainId, success, settledAt
277
+ const proofOfPayment = {
278
+ fromAddress: String(response.from ?? response.fromAddress ?? response.payer ?? ''),
279
+ toAddress: String(response.to ?? response.toAddress ?? response.payee ?? ''),
280
+ chainId: String(response.chainId ?? response.chain ?? ''),
281
+ txHash: String(response.txHash ??
282
+ response.transactionHash ??
283
+ response.signature ??
284
+ response.transaction ??
285
+ ''),
286
+ };
287
+ // Validate format
288
+ const validation = isProofFormatValid(proofOfPayment);
289
+ if (!validation.valid) {
290
+ throw new Error(`Invalid proof format: ${validation.errors.join(', ')}`);
291
+ }
292
+ // Build settlement info if available
293
+ let settlement;
294
+ if (response.success !== undefined || response.settledAt) {
295
+ // Detect network type
296
+ const isSolana = !proofOfPayment.fromAddress.startsWith('0x') &&
297
+ !proofOfPayment.txHash.startsWith('0x');
298
+ settlement = {
299
+ success: response.success === true || response.success === 'true',
300
+ transaction: proofOfPayment.txHash,
301
+ network: isSolana
302
+ ? `solana:${proofOfPayment.chainId}`
303
+ : `eip155:${proofOfPayment.chainId}`,
304
+ settledAt: String(response.settledAt ?? '') || new Date().toISOString(),
305
+ };
306
+ }
307
+ return successResponse({
308
+ proofOfPayment,
309
+ settlement,
310
+ raw: response,
311
+ });
312
+ },
313
+ x402_feedback_build: async (args) => {
314
+ const input = getArgs(args);
315
+ const agentId = readString(input, 'agentId', true);
316
+ const tag1 = readString(input, 'tag1', true);
317
+ const tag2 = readString(input, 'tag2', true);
318
+ const endpoint = readString(input, 'endpoint');
319
+ const comment = readString(input, 'comment');
320
+ const proofInput = readRecord(input, 'proofOfPayment', true);
321
+ const settlementInput = readRecord(input, 'x402Settlement');
322
+ const signer = readString(input, 'signer');
323
+ const { chainPrefix } = parseChainParam(input);
324
+ // Parse value (required) - accepts decimal strings ("99.77") or raw integers
325
+ // Auto-encodes to { value: bigint, valueDecimals: number }
326
+ const rawValue = input.value;
327
+ if (rawValue === undefined || rawValue === null) {
328
+ throw new Error('value is required');
329
+ }
330
+ if (typeof rawValue !== 'string' && typeof rawValue !== 'number' && typeof rawValue !== 'bigint') {
331
+ throw new Error('value must be a number or string');
332
+ }
333
+ // Use encodeReputationValue for auto-encoding decimal strings
334
+ // e.g., "99.77" → { value: 9977n, valueDecimals: 2 }
335
+ const explicitDecimals = readNumber(input, 'valueDecimals');
336
+ const encoded = encodeReputationValue(rawValue, explicitDecimals);
337
+ const value = encoded.value;
338
+ const valueDecimals = encoded.valueDecimals;
339
+ // Parse score (optional)
340
+ const score = readNumber(input, 'score');
341
+ if (score !== undefined && (score < 0 || score > 100)) {
342
+ throw new Error('score must be between 0 and 100');
343
+ }
344
+ // Parse proof of payment
345
+ const proofOfPayment = {
346
+ fromAddress: String(proofInput.fromAddress ?? ''),
347
+ toAddress: String(proofInput.toAddress ?? ''),
348
+ chainId: String(proofInput.chainId ?? ''),
349
+ txHash: String(proofInput.txHash ?? ''),
350
+ };
351
+ // Validate proof format
352
+ const formatValidation = isProofFormatValid(proofOfPayment);
353
+ if (!formatValidation.valid) {
354
+ throw new Error(`Invalid proof format: ${formatValidation.errors.join(', ')}`);
355
+ }
356
+ // Parse settlement if provided
357
+ let x402Settlement;
358
+ if (settlementInput) {
359
+ x402Settlement = {
360
+ success: settlementInput.success === true,
361
+ transaction: String(settlementInput.transaction ?? ''),
362
+ network: String(settlementInput.network ?? ''),
363
+ settledAt: String(settlementInput.settledAt ?? ''),
364
+ };
365
+ }
366
+ // Resolve provider for config
367
+ let provider;
368
+ let rawId = agentId;
369
+ if (isValidGlobalId(agentId)) {
370
+ const parsed = parseGlobalId(agentId);
371
+ provider = globalState.chains.getByPrefix(parsed.prefix);
372
+ rawId = parsed.rawId;
373
+ }
374
+ else if (chainPrefix) {
375
+ provider = globalState.chains.getByPrefix(chainPrefix);
376
+ }
377
+ else {
378
+ provider = globalState.chains.getDefault();
379
+ }
380
+ if (!provider) {
381
+ throw new Error('No chain provider available');
382
+ }
383
+ // Build feedback file
384
+ const config = provider.getConfig();
385
+ const networkMode = globalState.networkMode;
386
+ const chainConfig = CHAIN_CONFIGS[config.chainPrefix];
387
+ const networkConfig = networkMode === 'mainnet' ? chainConfig.mainnet : chainConfig.testnet;
388
+ const registryAddress = networkConfig.registries.identity;
389
+ // Get client address (signer or from proof)
390
+ const clientAddress = signer ?? proofOfPayment.fromAddress;
391
+ const feedbackFile = {
392
+ agentRegistry: buildRegistryIdentifier(config.chainType, networkConfig.chainId, registryAddress),
393
+ agentId: rawId,
394
+ clientAddress: buildClientAddress(config.chainType, networkConfig.chainId, clientAddress),
395
+ createdAt: new Date().toISOString(),
396
+ value: value.toString(),
397
+ valueDecimals,
398
+ score,
399
+ tag1,
400
+ tag2,
401
+ endpoint,
402
+ proofOfPayment,
403
+ x402Settlement,
404
+ comment,
405
+ };
406
+ // Calculate feedback hash (SHA-256 of canonical JSON)
407
+ const feedbackJson = JSON.stringify(feedbackFile, Object.keys(feedbackFile).sort());
408
+ const feedbackHash = createHash('sha256')
409
+ .update(feedbackJson)
410
+ .digest('hex');
411
+ return successResponse({
412
+ feedbackFile: feedbackFileToRecord(feedbackFile),
413
+ feedbackHash: `0x${feedbackHash}`,
414
+ hint: 'Store this file on IPFS (ipfs_add_json) or HTTP, then call x402_feedback_submit with the feedbackUri.',
415
+ });
416
+ },
417
+ x402_feedback_submit: async (args) => {
418
+ const input = getArgs(args);
419
+ const agentId = readString(input, 'agentId', true);
420
+ const tag1 = readString(input, 'tag1', true);
421
+ const tag2 = readString(input, 'tag2', true);
422
+ const endpoint = readString(input, 'endpoint');
423
+ const comment = readString(input, 'comment');
424
+ const proofInput = readRecord(input, 'proofOfPayment', true);
425
+ const settlementInput = readRecord(input, 'x402Settlement');
426
+ const shouldValidateProof = readBoolean(input, 'validateProof') ?? false;
427
+ const storeOnIpfs = readBoolean(input, 'storeOnIpfs') ?? true;
428
+ const providedFeedbackUri = readString(input, 'feedbackUri');
429
+ const skipSend = readBoolean(input, 'skipSend') ?? false;
430
+ const signer = readString(input, 'signer');
431
+ const { chainPrefix } = parseChainParam(input);
432
+ // Parse value (required) - accepts decimal strings ("99.77") or raw integers
433
+ // Auto-encodes to { value: bigint, valueDecimals: number }
434
+ const rawValue = input.value;
435
+ if (rawValue === undefined || rawValue === null) {
436
+ throw new Error('value is required');
437
+ }
438
+ if (typeof rawValue !== 'string' && typeof rawValue !== 'number' && typeof rawValue !== 'bigint') {
439
+ throw new Error('value must be a number or string');
440
+ }
441
+ // Use encodeReputationValue for auto-encoding decimal strings
442
+ // e.g., "99.77" → { value: 9977n, valueDecimals: 2 }
443
+ const explicitDecimals = readNumber(input, 'valueDecimals');
444
+ const encoded = encodeReputationValue(rawValue, explicitDecimals);
445
+ const value = encoded.value;
446
+ const valueDecimals = encoded.valueDecimals;
447
+ // Parse score (optional)
448
+ const score = readNumber(input, 'score');
449
+ if (score !== undefined && (score < 0 || score > 100)) {
450
+ throw new Error('score must be between 0 and 100');
451
+ }
452
+ // Parse proof of payment
453
+ const proofOfPayment = {
454
+ fromAddress: String(proofInput.fromAddress ?? ''),
455
+ toAddress: String(proofInput.toAddress ?? ''),
456
+ chainId: String(proofInput.chainId ?? ''),
457
+ txHash: String(proofInput.txHash ?? ''),
458
+ };
459
+ // Validate proof format
460
+ const formatValidation = isProofFormatValid(proofOfPayment);
461
+ if (!formatValidation.valid) {
462
+ throw new Error(`Invalid proof format: ${formatValidation.errors.join(', ')}`);
463
+ }
464
+ // Parse settlement if provided
465
+ let x402Settlement;
466
+ if (settlementInput) {
467
+ x402Settlement = {
468
+ success: settlementInput.success === true,
469
+ transaction: String(settlementInput.transaction ?? ''),
470
+ network: String(settlementInput.network ?? ''),
471
+ settledAt: String(settlementInput.settledAt ?? ''),
472
+ };
473
+ }
474
+ // Resolve provider
475
+ let provider;
476
+ let rawId = agentId;
477
+ if (isValidGlobalId(agentId)) {
478
+ const parsed = parseGlobalId(agentId);
479
+ provider = globalState.chains.getByPrefix(parsed.prefix);
480
+ rawId = parsed.rawId;
481
+ }
482
+ else if (chainPrefix) {
483
+ provider = globalState.chains.getByPrefix(chainPrefix);
484
+ }
485
+ else {
486
+ provider = globalState.chains.getDefault();
487
+ }
488
+ if (!provider) {
489
+ throw new Error('No chain provider available');
490
+ }
491
+ // Check write capability
492
+ if (!skipSend && !isWritableProvider(provider)) {
493
+ throw new Error('Chain provider does not support write operations. Use skipSend=true for unsigned transaction.');
494
+ }
495
+ if (typeof provider.giveFeedback !== 'function') {
496
+ throw new Error('Chain provider does not support feedback operations');
497
+ }
498
+ // Optional proof format validation (addresses, tx hash format - NOT on-chain)
499
+ if (shouldValidateProof) {
500
+ const proofValidation = await validateProofFormat(proofOfPayment);
501
+ if (!proofValidation.valid) {
502
+ throw new Error(`Proof format validation failed: ${proofValidation.error ?? 'Unknown error'}`);
503
+ }
504
+ }
505
+ // Build feedback file
506
+ const config = provider.getConfig();
507
+ const networkMode = globalState.networkMode;
508
+ const chainConfig = CHAIN_CONFIGS[config.chainPrefix];
509
+ const networkConfig = networkMode === 'mainnet' ? chainConfig.mainnet : chainConfig.testnet;
510
+ const registryAddress = networkConfig.registries.identity;
511
+ // Get client address (signer or from proof)
512
+ const clientAddress = signer ?? proofOfPayment.fromAddress;
513
+ const feedbackFile = {
514
+ agentRegistry: buildRegistryIdentifier(config.chainType, networkConfig.chainId, registryAddress),
515
+ agentId: rawId,
516
+ clientAddress: buildClientAddress(config.chainType, networkConfig.chainId, clientAddress),
517
+ createdAt: new Date().toISOString(),
518
+ value: value.toString(),
519
+ valueDecimals,
520
+ score,
521
+ tag1,
522
+ tag2,
523
+ endpoint,
524
+ proofOfPayment,
525
+ x402Settlement,
526
+ comment,
527
+ };
528
+ // Calculate feedback hash (SHA-256 of canonical JSON)
529
+ const feedbackJson = JSON.stringify(feedbackFile, Object.keys(feedbackFile).sort());
530
+ const feedbackHash = createHash('sha256')
531
+ .update(feedbackJson)
532
+ .digest('hex');
533
+ const feedbackHashBuffer = Buffer.from(feedbackHash, 'hex');
534
+ // Determine feedbackUri - user-provided takes priority
535
+ let feedbackUri = providedFeedbackUri;
536
+ // Store on IPFS if no feedbackUri provided and storeOnIpfs is enabled
537
+ if (!feedbackUri && storeOnIpfs) {
538
+ if (!globalState.ipfs.isConfigured()) {
539
+ throw new Error('IPFS not configured. Either: (1) call ipfs_configure first, (2) provide feedbackUri parameter, ' +
540
+ 'or (3) use x402_feedback_build to get the file and store it yourself.');
541
+ }
542
+ const cid = await globalState.ipfs.addJson(feedbackFileToRecord(feedbackFile));
543
+ feedbackUri = `ipfs://${cid}`;
544
+ }
545
+ // Validate feedbackUri if provided
546
+ if (feedbackUri) {
547
+ const validPrefixes = ['ipfs://', 'https://', 'http://', 'ar://'];
548
+ if (!validPrefixes.some(p => feedbackUri.startsWith(p))) {
549
+ throw new Error(`Invalid feedbackUri format. Must start with: ${validPrefixes.join(', ')}`);
550
+ }
551
+ }
552
+ // Submit feedback on-chain
553
+ const result = await provider.giveFeedback({
554
+ agentId: rawId,
555
+ value,
556
+ valueDecimals,
557
+ score,
558
+ comment,
559
+ tag1,
560
+ tag2,
561
+ endpoint,
562
+ feedbackUri,
563
+ feedbackHash: feedbackHashBuffer,
564
+ }, { skipSend });
565
+ if (result.unsigned) {
566
+ return successResponse({
567
+ unsigned: true,
568
+ unsignedTx: result.transaction,
569
+ feedbackHash: `0x${feedbackHash}`,
570
+ feedbackUri,
571
+ feedbackFile,
572
+ message: 'Sign with your wallet (Phantom/MetaMask) and broadcast to the network.',
573
+ hint: 'For Solana: decode base64, sign, and send. For EVM: sign the transaction object.',
574
+ });
575
+ }
576
+ return successResponse({
577
+ unsigned: false,
578
+ signature: result.signature,
579
+ feedbackHash: `0x${feedbackHash}`,
580
+ feedbackUri,
581
+ agentId: rawId,
582
+ value: value.toString(),
583
+ valueDecimals,
584
+ score,
585
+ tag1,
586
+ tag2,
587
+ });
588
+ },
589
+ };
590
+ // Aliases for backward compatibility / convenience
591
+ export const x402Aliases = {
592
+ // No aliases needed for now
593
+ };
594
+ //# sourceMappingURL=x402.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.js","sourceRoot":"","sources":["../../../src/tools/unified/x402.ts"],"names":[],"mappings":"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"}