@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,446 @@
|
|
|
1
|
+
// EVM chain provider implementation with agent0-sdk
|
|
2
|
+
import { encodeFunctionData } from 'viem';
|
|
3
|
+
import { SDK as Agent0SDK, SubgraphClient, REPUTATION_REGISTRY_ABI, } from 'agent0-sdk';
|
|
4
|
+
import { toGlobalId } from '../../core/interfaces/agent.js';
|
|
5
|
+
import { TrustTier, getTrustTierName } from '../../core/interfaces/reputation.js';
|
|
6
|
+
import { getWalletManager } from '../../core/wallet/index.js';
|
|
7
|
+
export class EVMChainProvider {
|
|
8
|
+
chainType = 'evm';
|
|
9
|
+
chainPrefix;
|
|
10
|
+
chainId;
|
|
11
|
+
displayName;
|
|
12
|
+
config;
|
|
13
|
+
_ready = false;
|
|
14
|
+
_sdk;
|
|
15
|
+
_subgraph;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.chainPrefix = config.chainPrefix;
|
|
19
|
+
this.chainId = `${config.chainPrefix}:${config.chainId}`;
|
|
20
|
+
this.displayName = this.getDisplayName(config.chainPrefix, config.chainId);
|
|
21
|
+
}
|
|
22
|
+
getDisplayName(prefix, chainId) {
|
|
23
|
+
const names = {
|
|
24
|
+
base: { 8453: 'Base Mainnet', 84532: 'Base Sepolia' },
|
|
25
|
+
eth: { 1: 'Ethereum Mainnet', 11155111: 'Sepolia' },
|
|
26
|
+
arb: { 42161: 'Arbitrum One', 421614: 'Arbitrum Sepolia' },
|
|
27
|
+
poly: { 137: 'Polygon', 80002: 'Polygon Amoy' },
|
|
28
|
+
op: { 10: 'Optimism', 11155420: 'Optimism Sepolia' },
|
|
29
|
+
};
|
|
30
|
+
return names[prefix]?.[chainId] ?? `EVM ${prefix}:${chainId}`;
|
|
31
|
+
}
|
|
32
|
+
// Get or create SDK instance (public for registration tools)
|
|
33
|
+
getSdk() {
|
|
34
|
+
if (!this._sdk) {
|
|
35
|
+
const walletManager = getWalletManager();
|
|
36
|
+
const privateKey = this.config.privateKey ?? walletManager.getAnyUnlockedEvmPrivateKey();
|
|
37
|
+
const sdkConfig = {
|
|
38
|
+
chainId: this.config.chainId,
|
|
39
|
+
rpcUrl: this.config.rpcUrl,
|
|
40
|
+
privateKey: privateKey,
|
|
41
|
+
subgraphUrl: this.config.subgraphUrl,
|
|
42
|
+
};
|
|
43
|
+
this._sdk = new Agent0SDK(sdkConfig);
|
|
44
|
+
}
|
|
45
|
+
return this._sdk;
|
|
46
|
+
}
|
|
47
|
+
// Get subgraph client for direct GraphQL queries (faster reads, no RPC)
|
|
48
|
+
getSubgraph() {
|
|
49
|
+
if (!this.config.subgraphUrl)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (!this._subgraph) {
|
|
52
|
+
this._subgraph = new SubgraphClient(this.config.subgraphUrl);
|
|
53
|
+
}
|
|
54
|
+
return this._subgraph;
|
|
55
|
+
}
|
|
56
|
+
// Invalidate SDK (e.g., after wallet unlock)
|
|
57
|
+
invalidateSdk() {
|
|
58
|
+
this._sdk = undefined;
|
|
59
|
+
}
|
|
60
|
+
// Lifecycle
|
|
61
|
+
async initialize() {
|
|
62
|
+
// Verify we can create SDK
|
|
63
|
+
this.getSdk();
|
|
64
|
+
this._ready = true;
|
|
65
|
+
}
|
|
66
|
+
isReady() {
|
|
67
|
+
return this._ready;
|
|
68
|
+
}
|
|
69
|
+
canWrite() {
|
|
70
|
+
return !!(this.config.privateKey || getWalletManager().getAnyUnlockedEvmAccount());
|
|
71
|
+
}
|
|
72
|
+
getConfig() {
|
|
73
|
+
return {
|
|
74
|
+
chainType: this.chainType,
|
|
75
|
+
chainPrefix: this.chainPrefix,
|
|
76
|
+
chainId: String(this.config.chainId),
|
|
77
|
+
displayName: this.displayName,
|
|
78
|
+
rpcUrl: this.config.rpcUrl,
|
|
79
|
+
indexerUrl: this.config.subgraphUrl,
|
|
80
|
+
isDefault: false,
|
|
81
|
+
priority: 2,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Agent Operations
|
|
85
|
+
async getAgent(agentId) {
|
|
86
|
+
try {
|
|
87
|
+
const sdk = this.getSdk();
|
|
88
|
+
const agent = await sdk.getAgent(agentId);
|
|
89
|
+
if (!agent)
|
|
90
|
+
return null;
|
|
91
|
+
return {
|
|
92
|
+
id: agentId,
|
|
93
|
+
globalId: toGlobalId(this.chainPrefix, agentId, String(this.config.chainId)),
|
|
94
|
+
chainType: 'evm',
|
|
95
|
+
chainPrefix: this.chainPrefix,
|
|
96
|
+
name: agent.name ?? `Agent #${agentId}`,
|
|
97
|
+
description: agent.description,
|
|
98
|
+
owner: agent.owners?.[0] ?? '',
|
|
99
|
+
createdAt: Date.now(),
|
|
100
|
+
updatedAt: Date.now(),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
console.warn(`EVMChainProvider.getAgent error: ${err}`);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async agentExists(agentId) {
|
|
109
|
+
const agent = await this.getAgent(agentId);
|
|
110
|
+
return agent !== null;
|
|
111
|
+
}
|
|
112
|
+
async searchAgents(params) {
|
|
113
|
+
const limit = params.limit ?? 20;
|
|
114
|
+
const offset = params.offset ?? 0;
|
|
115
|
+
// Determine the name query to use based on search mode
|
|
116
|
+
const mode = params.searchMode ?? 'all';
|
|
117
|
+
let nameFilter = params.nameQuery ?? params.query;
|
|
118
|
+
// For description mode, use descriptionQuery if provided
|
|
119
|
+
if (mode === 'description' && params.descriptionQuery) {
|
|
120
|
+
nameFilter = params.descriptionQuery;
|
|
121
|
+
}
|
|
122
|
+
// Endpoint search: filter by mcp/a2a capabilities (AgentSummary doesn't have endpoint URLs)
|
|
123
|
+
// endpointQuery can match against mcpTools, a2aSkills, or require mcp/a2a support
|
|
124
|
+
const endpointFilter = (mode === 'endpoint' || mode === 'all') ? params.endpointQuery : undefined;
|
|
125
|
+
try {
|
|
126
|
+
// Prefer subgraph for reads (faster, no RPC calls)
|
|
127
|
+
const subgraph = this.getSubgraph();
|
|
128
|
+
if (subgraph) {
|
|
129
|
+
// Fetch more if we need to filter client-side
|
|
130
|
+
const fetchLimit = endpointFilter ? Math.min(limit * 3, 100) : limit;
|
|
131
|
+
const agents = await subgraph.searchAgents({
|
|
132
|
+
owners: params.owner ? [params.owner] : undefined,
|
|
133
|
+
name: nameFilter,
|
|
134
|
+
}, fetchLimit, offset);
|
|
135
|
+
// Apply client-side filtering if needed
|
|
136
|
+
let filteredAgents = agents;
|
|
137
|
+
if (endpointFilter) {
|
|
138
|
+
const lowerEndpoint = endpointFilter.toLowerCase();
|
|
139
|
+
filteredAgents = agents.filter((a) => {
|
|
140
|
+
// Search in mcpTools, a2aSkills, mcpPrompts, mcpResources
|
|
141
|
+
const allCapabilities = [
|
|
142
|
+
...(a.mcpTools ?? []),
|
|
143
|
+
...(a.a2aSkills ?? []),
|
|
144
|
+
...(a.mcpPrompts ?? []),
|
|
145
|
+
...(a.mcpResources ?? []),
|
|
146
|
+
];
|
|
147
|
+
// Also match if looking for mcp/a2a support
|
|
148
|
+
if (lowerEndpoint === 'mcp' && a.mcp)
|
|
149
|
+
return true;
|
|
150
|
+
if (lowerEndpoint === 'a2a' && a.a2a)
|
|
151
|
+
return true;
|
|
152
|
+
return allCapabilities.some(cap => cap.toLowerCase().includes(lowerEndpoint));
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Apply limit after filtering
|
|
156
|
+
const paginatedAgents = filteredAgents.slice(0, limit);
|
|
157
|
+
return {
|
|
158
|
+
results: paginatedAgents.map((a) => ({
|
|
159
|
+
id: a.agentId,
|
|
160
|
+
globalId: toGlobalId(this.chainPrefix, a.agentId, String(this.config.chainId)),
|
|
161
|
+
chainType: 'evm',
|
|
162
|
+
chainPrefix: this.chainPrefix,
|
|
163
|
+
name: a.name ?? `Agent #${a.agentId}`,
|
|
164
|
+
owner: a.owners?.[0] ?? '',
|
|
165
|
+
// Include capability flags for better search results
|
|
166
|
+
mcp: a.mcp,
|
|
167
|
+
a2a: a.a2a,
|
|
168
|
+
})),
|
|
169
|
+
total: filteredAgents.length,
|
|
170
|
+
hasMore: filteredAgents.length > limit,
|
|
171
|
+
offset,
|
|
172
|
+
limit,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Fallback to SDK (may use RPC)
|
|
176
|
+
const sdk = this.getSdk();
|
|
177
|
+
// Note: agent0-sdk uses cursor-based pagination, not offset-based.
|
|
178
|
+
// For offset>0, we need to iterate through pages to skip results.
|
|
179
|
+
// This is inefficient for large offsets but maintains API compatibility.
|
|
180
|
+
let cursor;
|
|
181
|
+
let allItems = [];
|
|
182
|
+
// Fetch pages until we have enough items to satisfy offset + limit
|
|
183
|
+
do {
|
|
184
|
+
const results = await sdk.searchAgents({
|
|
185
|
+
owners: params.owner ? [params.owner] : undefined,
|
|
186
|
+
name: nameFilter,
|
|
187
|
+
}, {
|
|
188
|
+
pageSize: Math.min(100, limit + offset), // Fetch more to handle offset
|
|
189
|
+
cursor,
|
|
190
|
+
});
|
|
191
|
+
allItems = allItems.concat(results.items);
|
|
192
|
+
cursor = results.nextCursor;
|
|
193
|
+
// If we have enough items or no more pages, stop
|
|
194
|
+
if (allItems.length >= offset + limit || !cursor) {
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
} while (cursor);
|
|
198
|
+
// Apply offset by slicing
|
|
199
|
+
const paginatedItems = allItems.slice(offset, offset + limit);
|
|
200
|
+
return {
|
|
201
|
+
results: paginatedItems.map((a) => ({
|
|
202
|
+
id: a.agentId,
|
|
203
|
+
globalId: toGlobalId(this.chainPrefix, a.agentId, String(this.config.chainId)),
|
|
204
|
+
chainType: 'evm',
|
|
205
|
+
chainPrefix: this.chainPrefix,
|
|
206
|
+
name: a.name ?? `Agent #${a.agentId}`,
|
|
207
|
+
owner: a.owners?.[0] ?? '',
|
|
208
|
+
})),
|
|
209
|
+
total: allItems.length,
|
|
210
|
+
hasMore: allItems.length > offset + limit || !!cursor,
|
|
211
|
+
offset,
|
|
212
|
+
limit,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
console.warn(`EVMChainProvider.searchAgents error: ${err}`);
|
|
217
|
+
return {
|
|
218
|
+
results: [],
|
|
219
|
+
total: 0,
|
|
220
|
+
hasMore: false,
|
|
221
|
+
offset,
|
|
222
|
+
limit,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Feedback Operations
|
|
227
|
+
async getFeedback(agentId, client, index) {
|
|
228
|
+
try {
|
|
229
|
+
const sdk = this.getSdk();
|
|
230
|
+
const feedback = await sdk.getFeedback(agentId, client, Number(index));
|
|
231
|
+
if (!feedback)
|
|
232
|
+
return null;
|
|
233
|
+
// ERC-8004 EVM: SDK returns decoded value (no raw value/decimals exposed separately)
|
|
234
|
+
// Score field does not exist on EVM per spec - only value/valueDecimals on-chain
|
|
235
|
+
return {
|
|
236
|
+
agentId,
|
|
237
|
+
client,
|
|
238
|
+
index,
|
|
239
|
+
// SDK returns decoded value as number - raw encoding not available from SDK
|
|
240
|
+
value: undefined,
|
|
241
|
+
valueDecimals: undefined,
|
|
242
|
+
// No score field on EVM per ERC-8004 spec
|
|
243
|
+
score: null,
|
|
244
|
+
tag1: feedback.tags?.[0],
|
|
245
|
+
tag2: feedback.tags?.[1],
|
|
246
|
+
endpoint: feedback.endpoint,
|
|
247
|
+
comment: feedback.text,
|
|
248
|
+
timestamp: feedback.createdAt ?? Date.now(),
|
|
249
|
+
chainType: 'evm',
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
console.warn(`EVMChainProvider.getFeedback error: ${err}`);
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
async listFeedbacks(query) {
|
|
258
|
+
try {
|
|
259
|
+
// Prefer subgraph for reads (faster, no RPC calls)
|
|
260
|
+
const subgraph = this.getSubgraph();
|
|
261
|
+
if (subgraph) {
|
|
262
|
+
const feedbacks = await subgraph.searchFeedback({
|
|
263
|
+
agents: [query.agentId],
|
|
264
|
+
reviewers: query.client ? [query.client] : undefined,
|
|
265
|
+
includeRevoked: query.includeRevoked,
|
|
266
|
+
}, query.limit ?? 20, query.offset ?? 0);
|
|
267
|
+
return {
|
|
268
|
+
feedbacks: feedbacks.map((f) => ({
|
|
269
|
+
agentId: String(f.agentId ?? query.agentId),
|
|
270
|
+
client: String(f.reviewer ?? ''),
|
|
271
|
+
index: BigInt(typeof f.index === 'number' || typeof f.index === 'string' ? f.index : 0),
|
|
272
|
+
value: undefined,
|
|
273
|
+
valueDecimals: undefined,
|
|
274
|
+
score: null,
|
|
275
|
+
tag1: f.tags?.[0],
|
|
276
|
+
tag2: f.tags?.[1],
|
|
277
|
+
endpoint: f.endpoint,
|
|
278
|
+
comment: f.text,
|
|
279
|
+
timestamp: Number(f.createdAt ?? Date.now()),
|
|
280
|
+
chainType: 'evm',
|
|
281
|
+
})),
|
|
282
|
+
total: feedbacks.length,
|
|
283
|
+
hasMore: feedbacks.length === (query.limit ?? 20),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
// Fallback to SDK (may use RPC)
|
|
287
|
+
const sdk = this.getSdk();
|
|
288
|
+
const feedbacks = await sdk.searchFeedback({
|
|
289
|
+
agentId: query.agentId,
|
|
290
|
+
reviewers: query.client ? [query.client] : undefined,
|
|
291
|
+
includeRevoked: query.includeRevoked,
|
|
292
|
+
});
|
|
293
|
+
return {
|
|
294
|
+
feedbacks: feedbacks.map((f) => {
|
|
295
|
+
// ERC-8004 EVM: SDK returns decoded value (no raw value/decimals exposed separately)
|
|
296
|
+
// Score field does not exist on EVM per spec - only value/valueDecimals on-chain
|
|
297
|
+
return {
|
|
298
|
+
agentId: f.agentId,
|
|
299
|
+
client: f.reviewer,
|
|
300
|
+
index: BigInt(f.id[2]),
|
|
301
|
+
// SDK returns decoded value as number - raw encoding not available from SDK
|
|
302
|
+
value: undefined,
|
|
303
|
+
valueDecimals: undefined,
|
|
304
|
+
// No score field on EVM per ERC-8004 spec
|
|
305
|
+
score: null,
|
|
306
|
+
tag1: f.tags?.[0],
|
|
307
|
+
tag2: f.tags?.[1],
|
|
308
|
+
endpoint: f.endpoint,
|
|
309
|
+
comment: f.text,
|
|
310
|
+
timestamp: f.createdAt ?? Date.now(),
|
|
311
|
+
chainType: 'evm',
|
|
312
|
+
};
|
|
313
|
+
}),
|
|
314
|
+
total: feedbacks.length,
|
|
315
|
+
hasMore: false, // searchFeedback doesn't support pagination yet
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
console.warn(`EVMChainProvider.listFeedbacks error: ${err}`);
|
|
320
|
+
return { feedbacks: [], total: 0, hasMore: false };
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Write operations with skipSend support
|
|
324
|
+
async giveFeedback(input, options) {
|
|
325
|
+
const skipSend = options?.skipSend ?? false;
|
|
326
|
+
const sdk = this.getSdk();
|
|
327
|
+
// Get reputation registry address from SDK
|
|
328
|
+
const reputationRegistry = sdk.reputationRegistryAddress();
|
|
329
|
+
if (!reputationRegistry) {
|
|
330
|
+
throw new Error('Reputation registry address not configured for this chain');
|
|
331
|
+
}
|
|
332
|
+
// Prepare feedback parameters
|
|
333
|
+
// agentId can be "tokenId" or "chainId:tokenId" format - extract just the token ID
|
|
334
|
+
const rawAgentId = input.agentId.includes(':') ? input.agentId.split(':').pop() : input.agentId;
|
|
335
|
+
const agentId = BigInt(rawAgentId);
|
|
336
|
+
const value = typeof input.value === 'bigint' ? input.value : BigInt(input.value);
|
|
337
|
+
const valueDecimals = input.valueDecimals ?? 0;
|
|
338
|
+
const tag1 = input.tag1 ?? '';
|
|
339
|
+
const tag2 = input.tag2 ?? '';
|
|
340
|
+
const endpoint = input.endpoint ?? '';
|
|
341
|
+
const feedbackUri = input.feedbackUri ?? '';
|
|
342
|
+
const feedbackHash = input.feedbackHash
|
|
343
|
+
? (typeof input.feedbackHash === 'string' ? input.feedbackHash : `0x${Buffer.from(input.feedbackHash).toString('hex')}`)
|
|
344
|
+
: '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
345
|
+
if (skipSend) {
|
|
346
|
+
// Build unsigned transaction using viem
|
|
347
|
+
const data = encodeFunctionData({
|
|
348
|
+
abi: REPUTATION_REGISTRY_ABI,
|
|
349
|
+
functionName: 'giveFeedback',
|
|
350
|
+
args: [agentId, value, valueDecimals, tag1, tag2, endpoint, feedbackUri, feedbackHash],
|
|
351
|
+
});
|
|
352
|
+
const unsignedTx = {
|
|
353
|
+
to: reputationRegistry,
|
|
354
|
+
data,
|
|
355
|
+
chainId: this.config.chainId,
|
|
356
|
+
value: '0',
|
|
357
|
+
};
|
|
358
|
+
return {
|
|
359
|
+
unsigned: true,
|
|
360
|
+
transaction: JSON.stringify(unsignedTx),
|
|
361
|
+
message: 'Sign this transaction with MetaMask/WalletConnect and broadcast to the network.',
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
// Send transaction via SDK
|
|
365
|
+
if (!this.canWrite()) {
|
|
366
|
+
throw new Error('Write operations require a configured signer. Use skipSend=true to get unsigned transaction.');
|
|
367
|
+
}
|
|
368
|
+
// agent0-sdk uses encodeReputationValue() internally which expects a decimal string
|
|
369
|
+
// Convert our raw value/valueDecimals back to decimal format for SDK encoding
|
|
370
|
+
// Example: value=9977n, valueDecimals=2 → "99.77"
|
|
371
|
+
const decimalValue = this.rawToDecimalString(value, valueDecimals);
|
|
372
|
+
const result = await sdk.giveFeedback(input.agentId, decimalValue, input.tag1, input.tag2, input.endpoint, input.feedbackUri ? { text: input.comment } : undefined);
|
|
373
|
+
return {
|
|
374
|
+
unsigned: false,
|
|
375
|
+
signature: result.hash,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
// Reputation Operations
|
|
379
|
+
async getReputationSummary(agentId) {
|
|
380
|
+
try {
|
|
381
|
+
const sdk = this.getSdk();
|
|
382
|
+
const summary = await sdk.getReputationSummary(agentId);
|
|
383
|
+
// Compute trust tier based on count and average
|
|
384
|
+
const trustTier = this.computeTrustTier(summary.count, summary.averageValue);
|
|
385
|
+
return {
|
|
386
|
+
agentId,
|
|
387
|
+
chainType: 'evm',
|
|
388
|
+
trustTier,
|
|
389
|
+
trustTierName: getTrustTierName(trustTier),
|
|
390
|
+
qualityScore: summary.averageValue,
|
|
391
|
+
totalFeedbacks: summary.count,
|
|
392
|
+
averageScore: summary.averageValue,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
catch (err) {
|
|
396
|
+
console.warn(`EVMChainProvider.getReputationSummary error: ${err}`);
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
computeTrustTier(count, averageValue) {
|
|
401
|
+
if (count >= 100 && averageValue >= 90)
|
|
402
|
+
return TrustTier.Platinum;
|
|
403
|
+
if (count >= 50 && averageValue >= 80)
|
|
404
|
+
return TrustTier.Gold;
|
|
405
|
+
if (count >= 20 && averageValue >= 65)
|
|
406
|
+
return TrustTier.Silver;
|
|
407
|
+
if (count >= 5 && averageValue >= 50)
|
|
408
|
+
return TrustTier.Bronze;
|
|
409
|
+
return TrustTier.Unrated;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Convert raw value with decimals back to decimal string for SDK encoding
|
|
413
|
+
* Example: value=9977n, valueDecimals=2 → "99.77"
|
|
414
|
+
* The SDK's encodeReputationValue() expects decimal strings and will re-encode correctly
|
|
415
|
+
*/
|
|
416
|
+
rawToDecimalString(value, valueDecimals) {
|
|
417
|
+
if (valueDecimals === 0)
|
|
418
|
+
return value.toString();
|
|
419
|
+
const str = value.toString();
|
|
420
|
+
const isNegative = str.startsWith('-');
|
|
421
|
+
const absStr = isNegative ? str.slice(1) : str;
|
|
422
|
+
if (absStr.length <= valueDecimals) {
|
|
423
|
+
// Need leading zeros: 0.00xxx
|
|
424
|
+
const padded = absStr.padStart(valueDecimals, '0');
|
|
425
|
+
return (isNegative ? '-' : '') + '0.' + padded;
|
|
426
|
+
}
|
|
427
|
+
// Insert decimal point
|
|
428
|
+
const intPart = absStr.slice(0, -valueDecimals);
|
|
429
|
+
const fracPart = absStr.slice(-valueDecimals);
|
|
430
|
+
return (isNegative ? '-' : '') + intPart + '.' + fracPart;
|
|
431
|
+
}
|
|
432
|
+
// Optional: Indexer operations
|
|
433
|
+
async isIndexerAvailable() {
|
|
434
|
+
return !!this.config.subgraphUrl;
|
|
435
|
+
}
|
|
436
|
+
async getLeaderboard(_options) {
|
|
437
|
+
// Leaderboard requires subgraph - not yet implemented
|
|
438
|
+
console.warn('EVMChainProvider.getLeaderboard not yet implemented');
|
|
439
|
+
return {
|
|
440
|
+
entries: [],
|
|
441
|
+
total: 0,
|
|
442
|
+
hasMore: false,
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/chains/evm/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IndexerClient } from '8004-solana';
|
|
2
|
+
import { BaseDataSource } from '../../core/cache/data-source.js';
|
|
3
|
+
import type { ISyncBatch } from '../../core/cache/data-source.js';
|
|
4
|
+
export declare class SolanaDataSource extends BaseDataSource {
|
|
5
|
+
readonly sourceId = "sol:devnet";
|
|
6
|
+
readonly chainPrefix = "sol";
|
|
7
|
+
private readonly indexer;
|
|
8
|
+
constructor(indexer: IndexerClient, cluster?: string);
|
|
9
|
+
isAvailable(): Promise<boolean>;
|
|
10
|
+
fetchBatch(options: {
|
|
11
|
+
cursor?: string;
|
|
12
|
+
updatedSince?: number;
|
|
13
|
+
limit?: number;
|
|
14
|
+
}): Promise<ISyncBatch>;
|
|
15
|
+
getTotalCount(): Promise<number>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source.d.ts","sourceRoot":"","sources":["../../../src/chains/solana/data-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGlE,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,QAAQ,CAAC,QAAQ,gBAAgB;IACjC,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAE5B,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,MAAiB;IAMxD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,UAAU,CAAC,OAAO,EAAE;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6CjB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAIvC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Solana data source for cache sync
|
|
2
|
+
import { BaseDataSource } from '../../core/cache/data-source.js';
|
|
3
|
+
export class SolanaDataSource extends BaseDataSource {
|
|
4
|
+
sourceId = 'sol:devnet';
|
|
5
|
+
chainPrefix = 'sol';
|
|
6
|
+
indexer;
|
|
7
|
+
constructor(indexer, cluster = 'devnet') {
|
|
8
|
+
super();
|
|
9
|
+
this.indexer = indexer;
|
|
10
|
+
this.sourceId = `sol:${cluster}`;
|
|
11
|
+
}
|
|
12
|
+
async isAvailable() {
|
|
13
|
+
try {
|
|
14
|
+
await this.indexer.getGlobalStats();
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async fetchBatch(options) {
|
|
22
|
+
const limit = options.limit ?? this.defaultBatchSize;
|
|
23
|
+
// Parse cursor for offset
|
|
24
|
+
const offset = options.cursor ? parseInt(options.cursor, 10) : 0;
|
|
25
|
+
// Fetch agents from indexer using getAgents (no searchAgents method)
|
|
26
|
+
const indexedAgents = await this.indexer.getAgents({
|
|
27
|
+
limit,
|
|
28
|
+
offset,
|
|
29
|
+
order: 'updated_at.desc',
|
|
30
|
+
});
|
|
31
|
+
const agents = indexedAgents.map((agent) => ({
|
|
32
|
+
id: `sol:${agent.asset}`,
|
|
33
|
+
chainPrefix: 'sol',
|
|
34
|
+
chainType: 'solana',
|
|
35
|
+
rawId: agent.asset,
|
|
36
|
+
name: agent.nft_name ?? 'Unknown',
|
|
37
|
+
description: undefined,
|
|
38
|
+
image: undefined,
|
|
39
|
+
owner: agent.owner,
|
|
40
|
+
collection: agent.collection,
|
|
41
|
+
metadata: undefined,
|
|
42
|
+
endpoints: undefined,
|
|
43
|
+
trustTier: agent.trust_tier,
|
|
44
|
+
qualityScore: agent.quality_score,
|
|
45
|
+
totalFeedbacks: agent.feedback_count,
|
|
46
|
+
averageScore: agent.raw_avg_score,
|
|
47
|
+
createdAt: agent.created_at ? new Date(agent.created_at).getTime() : Date.now(),
|
|
48
|
+
updatedAt: agent.updated_at ? new Date(agent.updated_at).getTime() : Date.now(),
|
|
49
|
+
}));
|
|
50
|
+
const nextOffset = offset + agents.length;
|
|
51
|
+
// Since getAgents doesn't return total, we check if we got a full batch
|
|
52
|
+
const hasMore = agents.length === limit;
|
|
53
|
+
return {
|
|
54
|
+
agents,
|
|
55
|
+
cursor: hasMore ? String(nextOffset) : undefined,
|
|
56
|
+
hasMore,
|
|
57
|
+
total: undefined, // Not available from getAgents
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async getTotalCount() {
|
|
61
|
+
const stats = await this.indexer.getGlobalStats();
|
|
62
|
+
return stats.total_agents ?? 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=data-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../../src/chains/solana/data-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './provider.js';
|
|
2
|
+
export * from './state.js';
|
|
3
|
+
export * from './parsers.js';
|
|
4
|
+
export * from './data-source.js';
|
|
5
|
+
export * from './tools/atom.js';
|
|
6
|
+
export * from './tools/wallet.js';
|
|
7
|
+
export * from './tools/validation.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chains/solana/index.ts"],"names":[],"mappings":"AAEA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Solana chain exports
|
|
2
|
+
export * from './provider.js';
|
|
3
|
+
export * from './state.js';
|
|
4
|
+
export * from './parsers.js';
|
|
5
|
+
export * from './data-source.js';
|
|
6
|
+
export * from './tools/atom.js';
|
|
7
|
+
export * from './tools/wallet.js';
|
|
8
|
+
export * from './tools/validation.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chains/solana/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AAEvB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PublicKey, Keypair } from '@solana/web3.js';
|
|
2
|
+
import type { JsonRecord } from '../../core/parsers/common.js';
|
|
3
|
+
export declare function parsePublicKey(value: unknown, fieldName: string): PublicKey;
|
|
4
|
+
export declare function parseOptionalPublicKey(value: unknown, fieldName: string): PublicKey | undefined;
|
|
5
|
+
export declare function parseKeypair(value: unknown, fieldName: string): Keypair;
|
|
6
|
+
export declare function parseWriteOptions(obj: JsonRecord): {
|
|
7
|
+
skipSend?: boolean;
|
|
8
|
+
signer?: Keypair;
|
|
9
|
+
feePayer?: PublicKey;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../../src/chains/solana/parsers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAe3E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAK/F;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAoDvE;AAGD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAoBA"}
|