@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.
- package/LICENSE +21 -0
- package/README.md +370 -0
- package/dist/chains/evm/index.d.ts +2 -0
- package/dist/chains/evm/index.d.ts.map +1 -0
- package/dist/chains/evm/index.js +3 -0
- package/dist/chains/evm/index.js.map +1 -0
- package/dist/chains/evm/provider.d.ts +48 -0
- package/dist/chains/evm/provider.d.ts.map +1 -0
- package/dist/chains/evm/provider.js +446 -0
- package/dist/chains/evm/provider.js.map +1 -0
- package/dist/chains/index.d.ts +3 -0
- package/dist/chains/index.d.ts.map +1 -0
- package/dist/chains/index.js +4 -0
- package/dist/chains/index.js.map +1 -0
- package/dist/chains/solana/data-source.d.ts +17 -0
- package/dist/chains/solana/data-source.d.ts.map +1 -0
- package/dist/chains/solana/data-source.js +65 -0
- package/dist/chains/solana/data-source.js.map +1 -0
- package/dist/chains/solana/index.d.ts +8 -0
- package/dist/chains/solana/index.d.ts.map +1 -0
- package/dist/chains/solana/index.js +9 -0
- package/dist/chains/solana/index.js.map +1 -0
- package/dist/chains/solana/parsers.d.ts +11 -0
- package/dist/chains/solana/parsers.d.ts.map +1 -0
- package/dist/chains/solana/parsers.js +94 -0
- package/dist/chains/solana/parsers.js.map +1 -0
- package/dist/chains/solana/provider.d.ts +33 -0
- package/dist/chains/solana/provider.d.ts.map +1 -0
- package/dist/chains/solana/provider.js +407 -0
- package/dist/chains/solana/provider.js.map +1 -0
- package/dist/chains/solana/state.d.ts +55 -0
- package/dist/chains/solana/state.d.ts.map +1 -0
- package/dist/chains/solana/state.js +162 -0
- package/dist/chains/solana/state.js.map +1 -0
- package/dist/chains/solana/tools/atom.d.ts +45 -0
- package/dist/chains/solana/tools/atom.d.ts.map +1 -0
- package/dist/chains/solana/tools/atom.js +115 -0
- package/dist/chains/solana/tools/atom.js.map +1 -0
- package/dist/chains/solana/tools/validation.d.ts +45 -0
- package/dist/chains/solana/tools/validation.d.ts.map +1 -0
- package/dist/chains/solana/tools/validation.js +212 -0
- package/dist/chains/solana/tools/validation.js.map +1 -0
- package/dist/chains/solana/tools/wallet.d.ts +45 -0
- package/dist/chains/solana/tools/wallet.d.ts.map +1 -0
- package/dist/chains/solana/tools/wallet.js +103 -0
- package/dist/chains/solana/tools/wallet.js.map +1 -0
- package/dist/config/defaults.d.ts +68 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +247 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/env.d.ts +33 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +42 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/cache/agent-cache.d.ts +36 -0
- package/dist/core/cache/agent-cache.d.ts.map +1 -0
- package/dist/core/cache/agent-cache.js +87 -0
- package/dist/core/cache/agent-cache.js.map +1 -0
- package/dist/core/cache/data-source.d.ts +31 -0
- package/dist/core/cache/data-source.d.ts.map +1 -0
- package/dist/core/cache/data-source.js +6 -0
- package/dist/core/cache/data-source.js.map +1 -0
- package/dist/core/cache/index.d.ts +7 -0
- package/dist/core/cache/index.d.ts.map +1 -0
- package/dist/core/cache/index.js +9 -0
- package/dist/core/cache/index.js.map +1 -0
- package/dist/core/cache/lazy-cache.d.ts +30 -0
- package/dist/core/cache/lazy-cache.d.ts.map +1 -0
- package/dist/core/cache/lazy-cache.js +79 -0
- package/dist/core/cache/lazy-cache.js.map +1 -0
- package/dist/core/cache/slim-store.d.ts +66 -0
- package/dist/core/cache/slim-store.d.ts.map +1 -0
- package/dist/core/cache/slim-store.js +285 -0
- package/dist/core/cache/slim-store.js.map +1 -0
- package/dist/core/cache/sqlite-store.d.ts +99 -0
- package/dist/core/cache/sqlite-store.d.ts.map +1 -0
- package/dist/core/cache/sqlite-store.js +470 -0
- package/dist/core/cache/sqlite-store.js.map +1 -0
- package/dist/core/cache/sync-manager.d.ts +38 -0
- package/dist/core/cache/sync-manager.d.ts.map +1 -0
- package/dist/core/cache/sync-manager.js +213 -0
- package/dist/core/cache/sync-manager.js.map +1 -0
- package/dist/core/errors/index.d.ts +2 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +2 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/mcp-error.d.ts +39 -0
- package/dist/core/errors/mcp-error.d.ts.map +1 -0
- package/dist/core/errors/mcp-error.js +79 -0
- package/dist/core/errors/mcp-error.js.map +1 -0
- package/dist/core/interfaces/agent.d.ts +84 -0
- package/dist/core/interfaces/agent.d.ts.map +1 -0
- package/dist/core/interfaces/agent.js +40 -0
- package/dist/core/interfaces/agent.js.map +1 -0
- package/dist/core/interfaces/chain-provider.d.ts +50 -0
- package/dist/core/interfaces/chain-provider.d.ts.map +1 -0
- package/dist/core/interfaces/chain-provider.js +5 -0
- package/dist/core/interfaces/chain-provider.js.map +1 -0
- package/dist/core/interfaces/feedback.d.ts +46 -0
- package/dist/core/interfaces/feedback.d.ts.map +1 -0
- package/dist/core/interfaces/feedback.js +3 -0
- package/dist/core/interfaces/feedback.js.map +1 -0
- package/dist/core/interfaces/index.d.ts +6 -0
- package/dist/core/interfaces/index.d.ts.map +1 -0
- package/dist/core/interfaces/index.js +7 -0
- package/dist/core/interfaces/index.js.map +1 -0
- package/dist/core/interfaces/reputation.d.ts +47 -0
- package/dist/core/interfaces/reputation.d.ts.map +1 -0
- package/dist/core/interfaces/reputation.js +30 -0
- package/dist/core/interfaces/reputation.js.map +1 -0
- package/dist/core/interfaces/x402.d.ts +226 -0
- package/dist/core/interfaces/x402.d.ts.map +1 -0
- package/dist/core/interfaces/x402.js +120 -0
- package/dist/core/interfaces/x402.js.map +1 -0
- package/dist/core/parsers/common.d.ts +31 -0
- package/dist/core/parsers/common.d.ts.map +1 -0
- package/dist/core/parsers/common.js +185 -0
- package/dist/core/parsers/common.js.map +1 -0
- package/dist/core/parsers/index.d.ts +2 -0
- package/dist/core/parsers/index.d.ts.map +1 -0
- package/dist/core/parsers/index.js +2 -0
- package/dist/core/parsers/index.js.map +1 -0
- package/dist/core/registry/chain-registry.d.ts +26 -0
- package/dist/core/registry/chain-registry.d.ts.map +1 -0
- package/dist/core/registry/chain-registry.js +141 -0
- package/dist/core/registry/chain-registry.js.map +1 -0
- package/dist/core/registry/index.d.ts +3 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/index.js +3 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/tool-registry.d.ts +23 -0
- package/dist/core/registry/tool-registry.d.ts.map +1 -0
- package/dist/core/registry/tool-registry.js +66 -0
- package/dist/core/registry/tool-registry.js.map +1 -0
- package/dist/core/serializers/common.d.ts +20 -0
- package/dist/core/serializers/common.d.ts.map +1 -0
- package/dist/core/serializers/common.js +76 -0
- package/dist/core/serializers/common.js.map +1 -0
- package/dist/core/serializers/index.d.ts +2 -0
- package/dist/core/serializers/index.d.ts.map +1 -0
- package/dist/core/serializers/index.js +2 -0
- package/dist/core/serializers/index.js.map +1 -0
- package/dist/core/services/index.d.ts +3 -0
- package/dist/core/services/index.d.ts.map +1 -0
- package/dist/core/services/index.js +3 -0
- package/dist/core/services/index.js.map +1 -0
- package/dist/core/services/ipfs-service.d.ts +59 -0
- package/dist/core/services/ipfs-service.d.ts.map +1 -0
- package/dist/core/services/ipfs-service.js +84 -0
- package/dist/core/services/ipfs-service.js.map +1 -0
- package/dist/core/utils/tags.d.ts +38 -0
- package/dist/core/utils/tags.d.ts.map +1 -0
- package/dist/core/utils/tags.js +77 -0
- package/dist/core/utils/tags.js.map +1 -0
- package/dist/core/utils/value-encoding.d.ts +36 -0
- package/dist/core/utils/value-encoding.d.ts.map +1 -0
- package/dist/core/utils/value-encoding.js +196 -0
- package/dist/core/utils/value-encoding.js.map +1 -0
- package/dist/core/wallet/index.d.ts +2 -0
- package/dist/core/wallet/index.d.ts.map +1 -0
- package/dist/core/wallet/index.js +3 -0
- package/dist/core/wallet/index.js.map +1 -0
- package/dist/core/wallet/wallet-manager.d.ts +86 -0
- package/dist/core/wallet/wallet-manager.d.ts.map +1 -0
- package/dist/core/wallet/wallet-manager.js +783 -0
- package/dist/core/wallet/wallet-manager.js.map +1 -0
- package/dist/core/x402/index.d.ts +2 -0
- package/dist/core/x402/index.d.ts.map +1 -0
- package/dist/core/x402/index.js +3 -0
- package/dist/core/x402/index.js.map +1 -0
- package/dist/core/x402/proof-validator.d.ts +57 -0
- package/dist/core/x402/proof-validator.d.ts.map +1 -0
- package/dist/core/x402/proof-validator.js +103 -0
- package/dist/core/x402/proof-validator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/state/global-state.d.ts +98 -0
- package/dist/state/global-state.d.ts.map +1 -0
- package/dist/state/global-state.js +258 -0
- package/dist/state/global-state.js.map +1 -0
- package/dist/tools/definitions.d.ts +10 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +163 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/unified/agent.d.ts +5 -0
- package/dist/tools/unified/agent.d.ts.map +1 -0
- package/dist/tools/unified/agent.js +300 -0
- package/dist/tools/unified/agent.js.map +1 -0
- package/dist/tools/unified/cache.d.ts +5 -0
- package/dist/tools/unified/cache.d.ts.map +1 -0
- package/dist/tools/unified/cache.js +207 -0
- package/dist/tools/unified/cache.js.map +1 -0
- package/dist/tools/unified/collection.d.ts +5 -0
- package/dist/tools/unified/collection.d.ts.map +1 -0
- package/dist/tools/unified/collection.js +162 -0
- package/dist/tools/unified/collection.js.map +1 -0
- package/dist/tools/unified/config.d.ts +5 -0
- package/dist/tools/unified/config.d.ts.map +1 -0
- package/dist/tools/unified/config.js +217 -0
- package/dist/tools/unified/config.js.map +1 -0
- package/dist/tools/unified/crawler.d.ts +5 -0
- package/dist/tools/unified/crawler.d.ts.map +1 -0
- package/dist/tools/unified/crawler.js +212 -0
- package/dist/tools/unified/crawler.js.map +1 -0
- package/dist/tools/unified/feedback.d.ts +5 -0
- package/dist/tools/unified/feedback.d.ts.map +1 -0
- package/dist/tools/unified/feedback.js +274 -0
- package/dist/tools/unified/feedback.js.map +1 -0
- package/dist/tools/unified/ipfs.d.ts +5 -0
- package/dist/tools/unified/ipfs.d.ts.map +1 -0
- package/dist/tools/unified/ipfs.js +156 -0
- package/dist/tools/unified/ipfs.js.map +1 -0
- package/dist/tools/unified/oasf.d.ts +5 -0
- package/dist/tools/unified/oasf.d.ts.map +1 -0
- package/dist/tools/unified/oasf.js +167 -0
- package/dist/tools/unified/oasf.js.map +1 -0
- package/dist/tools/unified/registration.d.ts +5 -0
- package/dist/tools/unified/registration.d.ts.map +1 -0
- package/dist/tools/unified/registration.js +223 -0
- package/dist/tools/unified/registration.js.map +1 -0
- package/dist/tools/unified/reputation.d.ts +5 -0
- package/dist/tools/unified/reputation.d.ts.map +1 -0
- package/dist/tools/unified/reputation.js +121 -0
- package/dist/tools/unified/reputation.js.map +1 -0
- package/dist/tools/unified/wallet.d.ts +5 -0
- package/dist/tools/unified/wallet.d.ts.map +1 -0
- package/dist/tools/unified/wallet.js +434 -0
- package/dist/tools/unified/wallet.js.map +1 -0
- package/dist/tools/unified/write-operations.d.ts +5 -0
- package/dist/tools/unified/write-operations.d.ts.map +1 -0
- package/dist/tools/unified/write-operations.js +582 -0
- package/dist/tools/unified/write-operations.js.map +1 -0
- package/dist/tools/unified/x402.d.ts +5 -0
- package/dist/tools/unified/x402.d.ts.map +1 -0
- package/dist/tools/unified/x402.js +594 -0
- package/dist/tools/unified/x402.js.map +1 -0
- 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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"}
|