@1ly/mcp-server 0.1.4 → 0.1.5
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/README.md +60 -28
- package/dist/budget.d.ts.map +1 -1
- package/dist/budget.js +3 -0
- package/dist/budget.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/tools/call.d.ts.map +1 -1
- package/dist/tools/call.js +59 -20
- package/dist/tools/call.js.map +1 -1
- package/dist/wallet/agentic.d.ts +19 -0
- package/dist/wallet/agentic.d.ts.map +1 -0
- package/dist/wallet/agentic.js +77 -0
- package/dist/wallet/agentic.js.map +1 -0
- package/dist/wallet/evm.d.ts.map +1 -1
- package/dist/wallet/evm.js +13 -6
- package/dist/wallet/evm.js.map +1 -1
- package/dist/wallet/solana.d.ts.map +1 -1
- package/dist/wallet/solana.js +12 -6
- package/dist/wallet/solana.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -6,47 +6,68 @@ MCP server for [1ly.store](https://1ly.store) — Enable AI agents to discover,
|
|
|
6
6
|
|
|
7
7
|
This MCP server gives AI agents the ability to:
|
|
8
8
|
|
|
9
|
-
- **Buy** — Search, discover, and pay for APIs
|
|
9
|
+
- **Buy** — Search, discover, and pay for APIs/resources with automatic crypto payments (x402 protocol)
|
|
10
10
|
- **Sell** — Create a store, list paid API endpoints or resources, and accept payments
|
|
11
11
|
|
|
12
12
|
**Supported Networks:** Solana (mainnet), Base (mainnet)
|
|
13
13
|
**Payment Currency:** USDC
|
|
14
14
|
|
|
15
15
|
## What is this?
|
|
16
|
-
This MCP server enables AI agents (Claude, GPT, Cursor,
|
|
16
|
+
This MCP server enables AI agents (Claude, GPT, Cursor, and more) to:
|
|
17
17
|
|
|
18
|
-
Create store on 1ly.store
|
|
19
|
-
Accept payments for your
|
|
20
|
-
Create paid links that any x402‑compatible agent can call and pay automatically
|
|
21
|
-
|
|
22
|
-
Search for APIs and services on 1ly.store
|
|
23
|
-
Get details about pricing, reviews, and usage
|
|
24
|
-
Call paid APIs with automatic crypto payments (x402 protocol)
|
|
25
|
-
Leave reviews after purchases
|
|
18
|
+
- Create a store on 1ly.store
|
|
19
|
+
- Accept payments for your APIs/resources using 1ly as the payment layer
|
|
20
|
+
- Create paid links that any x402‑compatible agent can call and pay automatically
|
|
21
|
+
- List paid links on the 1ly marketplace for instant agent discovery
|
|
22
|
+
- Search for APIs and services on 1ly.store
|
|
23
|
+
- Get details about pricing, reviews, and usage
|
|
24
|
+
- Call paid APIs with automatic crypto payments (x402 protocol) securely
|
|
25
|
+
- Leave reviews after purchases (optional but recommended)
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
## Quick Start
|
|
30
30
|
|
|
31
|
+
**Wallet path rule:** wallet files must be located in your home directory (recommended) or `/tmp`. Paths outside those locations are rejected for security. `~/` is supported and expands to your home directory.
|
|
32
|
+
|
|
31
33
|
### 1. Install and Run
|
|
32
34
|
|
|
35
|
+
#### Option A: Raw Wallet (default)
|
|
36
|
+
|
|
33
37
|
```bash
|
|
34
38
|
# Solana wallet
|
|
35
|
-
ONELY_WALLET_SOLANA_KEY="/
|
|
39
|
+
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" npx @1ly/mcp-server
|
|
36
40
|
|
|
37
41
|
# OR Base/EVM wallet
|
|
38
|
-
ONELY_WALLET_EVM_KEY="/
|
|
42
|
+
ONELY_WALLET_EVM_KEY="~/.1ly/wallets/evm.key" npx @1ly/mcp-server
|
|
39
43
|
|
|
40
44
|
# OR both wallets
|
|
41
|
-
ONELY_WALLET_SOLANA_KEY="/
|
|
42
|
-
ONELY_WALLET_EVM_KEY="/
|
|
45
|
+
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" \
|
|
46
|
+
ONELY_WALLET_EVM_KEY="~/.1ly/wallets/evm.key" \
|
|
43
47
|
npx @1ly/mcp-server
|
|
44
48
|
```
|
|
45
49
|
|
|
50
|
+
#### Option B: Coinbase Agentic Wallet (Base only)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
ONELY_WALLET_PROVIDER="coinbase" npx @1ly/mcp-server
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
> When using Agentic Wallet, you **do not** pass raw private keys.
|
|
57
|
+
> Make sure the Coinbase Agentic Wallet app is running and authenticated.
|
|
58
|
+
|
|
59
|
+
If you haven't installed Agentic Wallet yet:
|
|
60
|
+
- Follow Coinbase Agentic Wallet docs: `https://docs.cdp.coinbase.com/agentic-wallet/welcome`
|
|
61
|
+
- Quick install:
|
|
62
|
+
```bash
|
|
63
|
+
npx skills add coinbase/agentic-wallet-skills
|
|
64
|
+
npx awal show
|
|
65
|
+
```
|
|
66
|
+
|
|
46
67
|
### 2. Verify Setup
|
|
47
68
|
|
|
48
69
|
```bash
|
|
49
|
-
ONELY_WALLET_SOLANA_KEY="/
|
|
70
|
+
ONELY_WALLET_SOLANA_KEY="~/.1ly/wallets/solana.json" npx @1ly/mcp-server --self-test
|
|
50
71
|
```
|
|
51
72
|
|
|
52
73
|
---
|
|
@@ -57,16 +78,18 @@ ONELY_WALLET_SOLANA_KEY="/path/to/solana-wallet.json" npx @1ly/mcp-server --self
|
|
|
57
78
|
|
|
58
79
|
| Variable | Required | Description |
|
|
59
80
|
|----------|----------|-------------|
|
|
60
|
-
| `ONELY_WALLET_SOLANA_KEY` |
|
|
61
|
-
| `ONELY_WALLET_EVM_KEY` |
|
|
81
|
+
| `ONELY_WALLET_SOLANA_KEY` | No | Path to Solana keypair JSON file, or inline JSON array |
|
|
82
|
+
| `ONELY_WALLET_EVM_KEY` | No | Path to EVM private key file, or inline hex key (with or without `0x`) |
|
|
62
83
|
| `ONELY_API_KEY` | No | API key for seller tools. Auto-loaded after `1ly_create_store` |
|
|
63
84
|
| `ONELY_BUDGET_PER_CALL` | No | Max USD per API call (default: `1.00`) |
|
|
64
85
|
| `ONELY_BUDGET_DAILY` | No | Daily USD spending limit (default: `50.00`) |
|
|
65
86
|
| `ONELY_BUDGET_STATE_FILE` | No | Path to local budget state file (default: `~/.1ly-mcp-budget.json`) |
|
|
66
87
|
| `ONELY_NETWORK` | No | Preferred network: `solana` or `base` (default: `solana`) |
|
|
67
88
|
| `ONELY_API_BASE` | No | API base URL (default: `https://1ly.store`) |
|
|
89
|
+
| `ONELY_WALLET_PROVIDER` | No | `raw` (default) or `coinbase` (Agentic Wallet, Base-only) |
|
|
68
90
|
|
|
69
|
-
*
|
|
91
|
+
*A wallet is required only for **paid** calls. For free search/details you can run without a wallet.*
|
|
92
|
+
Use **one** of: `ONELY_WALLET_SOLANA_KEY`, `ONELY_WALLET_EVM_KEY`, or `ONELY_WALLET_PROVIDER=coinbase`.
|
|
70
93
|
|
|
71
94
|
### Claude Desktop Configuration
|
|
72
95
|
|
|
@@ -79,7 +102,7 @@ Add to `claude_desktop_config.json`:
|
|
|
79
102
|
"command": "npx",
|
|
80
103
|
"args": ["@1ly/mcp-server"],
|
|
81
104
|
"env": {
|
|
82
|
-
"ONELY_WALLET_SOLANA_KEY": "/
|
|
105
|
+
"ONELY_WALLET_SOLANA_KEY": "~/.1ly/wallets/solana.json",
|
|
83
106
|
"ONELY_BUDGET_PER_CALL": "1.00",
|
|
84
107
|
"ONELY_BUDGET_DAILY": "50.00"
|
|
85
108
|
}
|
|
@@ -98,7 +121,7 @@ Add to `claude_desktop_config.json`:
|
|
|
98
121
|
"command": "npx",
|
|
99
122
|
"args": ["@1ly/mcp-server"],
|
|
100
123
|
"env": {
|
|
101
|
-
"ONELY_WALLET_EVM_KEY": "/
|
|
124
|
+
"ONELY_WALLET_EVM_KEY": "~/.1ly/wallets/evm.key",
|
|
102
125
|
"ONELY_BUDGET_PER_CALL": "1.00",
|
|
103
126
|
"ONELY_BUDGET_DAILY": "50.00"
|
|
104
127
|
}
|
|
@@ -118,8 +141,8 @@ Add to `claude_desktop_config.json`:
|
|
|
118
141
|
"command": "npx",
|
|
119
142
|
"args": ["@1ly/mcp-server"],
|
|
120
143
|
"env": {
|
|
121
|
-
"ONELY_WALLET_SOLANA_KEY": "/
|
|
122
|
-
"ONELY_WALLET_EVM_KEY": "/
|
|
144
|
+
"ONELY_WALLET_SOLANA_KEY": "~/.1ly/wallets/solana.json",
|
|
145
|
+
"ONELY_WALLET_EVM_KEY": "~/.1ly/wallets/evm.key",
|
|
123
146
|
"ONELY_BUDGET_PER_CALL": "1.00",
|
|
124
147
|
"ONELY_BUDGET_DAILY": "50.00"
|
|
125
148
|
}
|
|
@@ -133,9 +156,9 @@ Add to `claude_desktop_config.json`:
|
|
|
133
156
|
|
|
134
157
|
## Tools Reference
|
|
135
158
|
|
|
136
|
-
### Buyer Tools
|
|
159
|
+
### Buyer Tools
|
|
137
160
|
|
|
138
|
-
|
|
161
|
+
Wallet **required only for paid calls** (`1ly_call`). Search/details work without a wallet.
|
|
139
162
|
|
|
140
163
|
#### `1ly_search`
|
|
141
164
|
|
|
@@ -260,6 +283,11 @@ Call a paid API with automatic crypto payment.
|
|
|
260
283
|
> **Note:** The `_1ly` object contains tokens needed for `1ly_review`. Save these if you want to leave a review.
|
|
261
284
|
> For free APIs, `_1ly` may be `{ "note": "No payment required (free API)" }`.
|
|
262
285
|
|
|
286
|
+
**Agentic Wallet (Base only):**
|
|
287
|
+
- Set `ONELY_WALLET_PROVIDER=coinbase`.
|
|
288
|
+
- Ensure Coinbase Agentic Wallet is installed, running, and authenticated.
|
|
289
|
+
- Local private keys are not required.
|
|
290
|
+
|
|
263
291
|
---
|
|
264
292
|
|
|
265
293
|
#### `1ly_review`
|
|
@@ -781,16 +809,18 @@ List recent withdrawals.
|
|
|
781
809
|
|
|
782
810
|
Create a new keypair:
|
|
783
811
|
```bash
|
|
784
|
-
|
|
812
|
+
mkdir -p ~/.1ly/wallets
|
|
813
|
+
solana-keygen new -o ~/.1ly/wallets/solana.json
|
|
785
814
|
```
|
|
786
815
|
|
|
787
816
|
Fund with USDC on Solana mainnet.
|
|
788
817
|
|
|
789
818
|
### EVM (Base)
|
|
790
819
|
|
|
791
|
-
Export your private key
|
|
820
|
+
Export your private key or Create a new keypair:
|
|
792
821
|
```bash
|
|
793
|
-
|
|
822
|
+
mkdir -p ~/.1ly/wallets
|
|
823
|
+
echo "0xYOUR_PRIVATE_KEY" > ~/.1ly/wallets/evm.key
|
|
794
824
|
```
|
|
795
825
|
|
|
796
826
|
Fund with USDC on Base mainnet.
|
|
@@ -821,7 +851,9 @@ All responses follow this structure:
|
|
|
821
851
|
|
|
822
852
|
| Error | Cause | Solution |
|
|
823
853
|
|-------|-------|----------|
|
|
824
|
-
| `Missing wallet config` | No wallet env var set | Set `ONELY_WALLET_SOLANA_KEY` or `
|
|
854
|
+
| `Missing wallet config` | No wallet env var set | Set `ONELY_WALLET_SOLANA_KEY`, `ONELY_WALLET_EVM_KEY`, or `ONELY_WALLET_PROVIDER=coinbase` |
|
|
855
|
+
| `Agentic Wallet not running` | Wallet app not running or not authenticated | Open the Agentic Wallet app and sign in (`npx awal show`) |
|
|
856
|
+
| `Agentic Wallet Base-only` | API requires Solana payment | Use raw Solana wallet or a Base-compatible endpoint |
|
|
825
857
|
| `Missing ONELY_API_KEY` | Seller tool called without API key | Run `1ly_create_store` first |
|
|
826
858
|
| `Price exceeds per-call budget` | API costs more than limit | Increase `ONELY_BUDGET_PER_CALL` |
|
|
827
859
|
| `Daily budget exceeded` | Spent more than daily limit | Wait until tomorrow or increase `ONELY_BUDGET_DAILY` |
|
package/dist/budget.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA0D1C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAuC/E"}
|
package/dist/budget.js
CHANGED
|
@@ -11,6 +11,9 @@ const security_log_js_1 = require("./security-log.js");
|
|
|
11
11
|
function getBudgetStatePath() {
|
|
12
12
|
const envPath = process.env.ONELY_BUDGET_STATE_FILE;
|
|
13
13
|
if (envPath && envPath.trim().length > 0) {
|
|
14
|
+
if (envPath.startsWith("~/")) {
|
|
15
|
+
return path_1.default.join(os_1.default.homedir(), envPath.slice(2));
|
|
16
|
+
}
|
|
14
17
|
return envPath;
|
|
15
18
|
}
|
|
16
19
|
return path_1.default.join(os_1.default.homedir(), ".1ly-mcp-budget.json");
|
package/dist/budget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
24
24
|
daily?: number | undefined;
|
|
25
25
|
}>;
|
|
26
26
|
network: z.ZodDefault<z.ZodEnum<["solana", "base"]>>;
|
|
27
|
+
walletProvider: z.ZodDefault<z.ZodEnum<["raw", "coinbase"]>>;
|
|
27
28
|
apiKey: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
28
29
|
}, "strip", z.ZodTypeAny, {
|
|
29
30
|
apiBase: string;
|
|
@@ -32,6 +33,7 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
32
33
|
daily: number;
|
|
33
34
|
};
|
|
34
35
|
network: "solana" | "base";
|
|
36
|
+
walletProvider: "raw" | "coinbase";
|
|
35
37
|
wallet?: {
|
|
36
38
|
type: "solana" | "evm";
|
|
37
39
|
key: string;
|
|
@@ -52,6 +54,7 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
52
54
|
walletSolana?: string | null | undefined;
|
|
53
55
|
walletEvm?: string | null | undefined;
|
|
54
56
|
network?: "solana" | "base" | undefined;
|
|
57
|
+
walletProvider?: "raw" | "coinbase" | undefined;
|
|
55
58
|
apiKey?: string | null | undefined;
|
|
56
59
|
}>;
|
|
57
60
|
export type Config = z.infer<typeof ConfigSchema>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+CvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,IAAI,MAAM,CAqEnC;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAK/D"}
|
package/dist/config.js
CHANGED
|
@@ -45,6 +45,7 @@ exports.ConfigSchema = zod_1.z.object({
|
|
|
45
45
|
daily: zod_1.z.number().positive().finite().default(50.0),
|
|
46
46
|
}),
|
|
47
47
|
network: zod_1.z.enum(["solana", "base"]).default("solana"),
|
|
48
|
+
walletProvider: zod_1.z.enum(["raw", "coinbase"]).default("raw"),
|
|
48
49
|
apiKey: zod_1.z.string().optional().nullable(),
|
|
49
50
|
});
|
|
50
51
|
function loadConfig() {
|
|
@@ -54,6 +55,7 @@ function loadConfig() {
|
|
|
54
55
|
const walletEvm = process.env.ONELY_WALLET_EVM_KEY || null;
|
|
55
56
|
const apiKeyEnv = process.env.ONELY_API_KEY || null;
|
|
56
57
|
const apiBase = process.env.ONELY_API_BASE || "https://1ly.store";
|
|
58
|
+
const walletProvider = process.env.ONELY_WALLET_PROVIDER === "coinbase" ? "coinbase" : "raw";
|
|
57
59
|
// Parse and validate budget values to prevent NaN/negative bypasses
|
|
58
60
|
const perCallRaw = process.env.ONELY_BUDGET_PER_CALL || "1.0";
|
|
59
61
|
const dailyRaw = process.env.ONELY_BUDGET_DAILY || "50.0";
|
|
@@ -88,6 +90,7 @@ function loadConfig() {
|
|
|
88
90
|
daily,
|
|
89
91
|
},
|
|
90
92
|
network: process.env.ONELY_NETWORK || "solana",
|
|
93
|
+
walletProvider,
|
|
91
94
|
apiKey: apiKeyEnv,
|
|
92
95
|
});
|
|
93
96
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/tools/call.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/tools/call.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/tools/call.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BpB,CAAC;AAiBF,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;;;;;;GAuM7D"}
|
package/dist/tools/call.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.handleCall = handleCall;
|
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
const solana_js_1 = require("../wallet/solana.js");
|
|
7
7
|
const evm_js_1 = require("../wallet/evm.js");
|
|
8
|
+
const agentic_js_1 = require("../wallet/agentic.js");
|
|
8
9
|
const http_js_1 = require("../http.js");
|
|
9
10
|
const budget_js_1 = require("../budget.js");
|
|
10
11
|
const mcp_js_1 = require("../mcp.js");
|
|
@@ -54,17 +55,15 @@ async function handleCall(args, config) {
|
|
|
54
55
|
const input = InputSchema.parse(args);
|
|
55
56
|
const solanaKey = config.walletSolana || (config.wallet?.type === "solana" ? config.wallet.key : null);
|
|
56
57
|
const evmKey = config.walletEvm || (config.wallet?.type === "evm" ? config.wallet.key : null);
|
|
57
|
-
if (!solanaKey && !evmKey) {
|
|
58
|
-
throw new Error("Missing wallet config: set ONELY_WALLET_SOLANA_KEY or ONELY_WALLET_EVM_KEY (or legacy ONELY_WALLET_TYPE/KEY)");
|
|
59
|
-
}
|
|
60
58
|
const endpointPath = parseEndpoint(input.endpoint);
|
|
61
59
|
const fullUrl = `${config.apiBase}${endpointPath}`;
|
|
60
|
+
const requestHeaders = {
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
...input.headers,
|
|
63
|
+
};
|
|
62
64
|
const initialResponse = await (0, http_js_1.fetchWithTimeout)(fullUrl, {
|
|
63
65
|
method: input.method,
|
|
64
|
-
headers:
|
|
65
|
-
"Content-Type": "application/json",
|
|
66
|
-
...input.headers,
|
|
67
|
-
},
|
|
66
|
+
headers: requestHeaders,
|
|
68
67
|
body: input.body ? JSON.stringify(input.body) : undefined,
|
|
69
68
|
});
|
|
70
69
|
if (initialResponse.status !== 402) {
|
|
@@ -83,13 +82,15 @@ async function handleCall(args, config) {
|
|
|
83
82
|
catch {
|
|
84
83
|
// Some 402 responses only include headers
|
|
85
84
|
}
|
|
86
|
-
const preferredNetwork =
|
|
87
|
-
? "
|
|
88
|
-
:
|
|
89
|
-
? "
|
|
90
|
-
:
|
|
91
|
-
? "
|
|
92
|
-
: "
|
|
85
|
+
const preferredNetwork = config.walletProvider === "coinbase"
|
|
86
|
+
? "eip155"
|
|
87
|
+
: solanaKey && !evmKey
|
|
88
|
+
? "solana"
|
|
89
|
+
: evmKey && !solanaKey
|
|
90
|
+
? "eip155"
|
|
91
|
+
: config.network === "solana"
|
|
92
|
+
? "solana"
|
|
93
|
+
: "eip155";
|
|
93
94
|
const accepts = body402.accepts?.find((entry) => {
|
|
94
95
|
const network = String(entry.network);
|
|
95
96
|
if (preferredNetwork === "solana")
|
|
@@ -109,16 +110,55 @@ async function handleCall(args, config) {
|
|
|
109
110
|
if (priceUsd > config.budgets.perCall) {
|
|
110
111
|
throw new Error(`Price $${priceUsd} exceeds per-call budget limit of $${config.budgets.perCall}`);
|
|
111
112
|
}
|
|
112
|
-
// Enforce and record daily spending
|
|
113
|
-
(0, budget_js_1.checkAndRecordDailySpend)(config, priceUsd);
|
|
114
|
-
// Build x402 payment signature header (v2)
|
|
115
|
-
let paymentSignature;
|
|
116
113
|
const network = String(accepts.network || "");
|
|
117
114
|
const shouldUseSolana = network.startsWith("solana:")
|
|
118
115
|
? true
|
|
119
116
|
: network.startsWith("eip155:")
|
|
120
117
|
? false
|
|
121
118
|
: preferredNetwork === "solana";
|
|
119
|
+
if (config.walletProvider === "coinbase") {
|
|
120
|
+
if (shouldUseSolana) {
|
|
121
|
+
throw new Error("Agentic Wallet only supports Base (EVM). Solana payments are not supported.");
|
|
122
|
+
}
|
|
123
|
+
// Enforce and record daily spending
|
|
124
|
+
(0, budget_js_1.checkAndRecordDailySpend)(config, priceUsd);
|
|
125
|
+
const baseAccept = {
|
|
126
|
+
scheme: accepts.scheme,
|
|
127
|
+
network: accepts.network,
|
|
128
|
+
amount: accepts.amount,
|
|
129
|
+
maxAmountRequired: accepts.maxAmountRequired,
|
|
130
|
+
payTo: accepts.payTo,
|
|
131
|
+
asset: accepts.asset,
|
|
132
|
+
maxTimeoutSeconds: accepts.maxTimeoutSeconds,
|
|
133
|
+
extra: accepts.extra,
|
|
134
|
+
};
|
|
135
|
+
const result = await (0, agentic_js_1.makeX402RequestViaAgenticWallet)({
|
|
136
|
+
baseURL: config.apiBase,
|
|
137
|
+
path: endpointPath,
|
|
138
|
+
method: input.method,
|
|
139
|
+
body: input.body,
|
|
140
|
+
headers: requestHeaders,
|
|
141
|
+
maxAmountPerRequest: priceInSmallestUnit,
|
|
142
|
+
paymentRequirements: [baseAccept],
|
|
143
|
+
}, 30_000);
|
|
144
|
+
if (result.status < 200 || result.status >= 300) {
|
|
145
|
+
throw new Error(`Payment failed: ${result.status} - ${result.statusText || "Agentic Wallet error"}`);
|
|
146
|
+
}
|
|
147
|
+
return (0, mcp_js_1.mcpOk)(result.data ?? {});
|
|
148
|
+
}
|
|
149
|
+
if (shouldUseSolana && !solanaKey) {
|
|
150
|
+
throw new Error("Solana wallet not configured for this payment");
|
|
151
|
+
}
|
|
152
|
+
if (!shouldUseSolana && !evmKey) {
|
|
153
|
+
throw new Error("EVM wallet not configured for this payment");
|
|
154
|
+
}
|
|
155
|
+
if (!solanaKey && !evmKey) {
|
|
156
|
+
throw new Error("Missing wallet config: set ONELY_WALLET_SOLANA_KEY or ONELY_WALLET_EVM_KEY (or legacy ONELY_WALLET_TYPE/KEY)");
|
|
157
|
+
}
|
|
158
|
+
// Enforce and record daily spending
|
|
159
|
+
(0, budget_js_1.checkAndRecordDailySpend)(config, priceUsd);
|
|
160
|
+
// Build x402 payment signature header (v2)
|
|
161
|
+
let paymentSignature;
|
|
122
162
|
if (shouldUseSolana) {
|
|
123
163
|
if (!solanaKey) {
|
|
124
164
|
throw new Error("Solana wallet not configured for this payment");
|
|
@@ -147,8 +187,7 @@ async function handleCall(args, config) {
|
|
|
147
187
|
const paidResponse = await (0, http_js_1.fetchWithTimeout)(fullUrl, {
|
|
148
188
|
method: input.method,
|
|
149
189
|
headers: {
|
|
150
|
-
|
|
151
|
-
...input.headers,
|
|
190
|
+
...requestHeaders,
|
|
152
191
|
"payment-signature": paymentSignature,
|
|
153
192
|
},
|
|
154
193
|
body: input.body ? JSON.stringify(input.body) : undefined,
|
package/dist/tools/call.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/tools/call.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/tools/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface AgenticWalletRequest {
|
|
2
|
+
baseURL: string;
|
|
3
|
+
path: string;
|
|
4
|
+
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
5
|
+
queryParams?: Record<string, string>;
|
|
6
|
+
body?: unknown;
|
|
7
|
+
headers?: Record<string, string>;
|
|
8
|
+
maxAmountPerRequest?: number;
|
|
9
|
+
paymentRequirements?: Array<Record<string, unknown>>;
|
|
10
|
+
}
|
|
11
|
+
type AgenticWalletResponse = {
|
|
12
|
+
status: number;
|
|
13
|
+
statusText?: string;
|
|
14
|
+
data?: unknown;
|
|
15
|
+
headers?: Record<string, string>;
|
|
16
|
+
};
|
|
17
|
+
export declare function makeX402RequestViaAgenticWallet(request: AgenticWalletRequest, timeoutMs?: number): Promise<AgenticWalletResponse>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=agentic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic.d.ts","sourceRoot":"","sources":["../../src/wallet/agentic.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,KAAK,qBAAqB,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AA0BF,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,oBAAoB,EAC7B,SAAS,SAAS,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAkDhC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.makeX402RequestViaAgenticWallet = makeX402RequestViaAgenticWallet;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_crypto_1 = require("node:crypto");
|
|
10
|
+
const IPC_DIR = "/tmp/payments-mcp-ui-bridge";
|
|
11
|
+
const REQUESTS_DIR = node_path_1.default.join(IPC_DIR, "requests");
|
|
12
|
+
const RESPONSES_DIR = node_path_1.default.join(IPC_DIR, "responses");
|
|
13
|
+
function ensureIpcDirs() {
|
|
14
|
+
if (!node_fs_1.default.existsSync(IPC_DIR))
|
|
15
|
+
node_fs_1.default.mkdirSync(IPC_DIR, { mode: 0o700 });
|
|
16
|
+
if (!node_fs_1.default.existsSync(REQUESTS_DIR))
|
|
17
|
+
node_fs_1.default.mkdirSync(REQUESTS_DIR, { mode: 0o700 });
|
|
18
|
+
if (!node_fs_1.default.existsSync(RESPONSES_DIR))
|
|
19
|
+
node_fs_1.default.mkdirSync(RESPONSES_DIR, { mode: 0o700 });
|
|
20
|
+
}
|
|
21
|
+
async function waitForResponseFile(filePath, timeoutMs) {
|
|
22
|
+
if (node_fs_1.default.existsSync(filePath))
|
|
23
|
+
return;
|
|
24
|
+
await new Promise((resolve, reject) => {
|
|
25
|
+
const timeout = setTimeout(() => {
|
|
26
|
+
watcher.close();
|
|
27
|
+
reject(new Error("Agentic Wallet IPC timeout"));
|
|
28
|
+
}, timeoutMs);
|
|
29
|
+
const watcher = node_fs_1.default.watch(RESPONSES_DIR, (eventType, filename) => {
|
|
30
|
+
if (filename === node_path_1.default.basename(filePath)) {
|
|
31
|
+
clearTimeout(timeout);
|
|
32
|
+
watcher.close();
|
|
33
|
+
resolve();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function makeX402RequestViaAgenticWallet(request, timeoutMs = 30_000) {
|
|
39
|
+
ensureIpcDirs();
|
|
40
|
+
const originalTitle = process.title;
|
|
41
|
+
process.title = "awal-cli";
|
|
42
|
+
const requestId = (0, node_crypto_1.randomUUID)();
|
|
43
|
+
const requestFile = node_path_1.default.join(REQUESTS_DIR, `${requestId}.json`);
|
|
44
|
+
const responseFile = node_path_1.default.join(RESPONSES_DIR, `${requestId}.json`);
|
|
45
|
+
try {
|
|
46
|
+
const payload = {
|
|
47
|
+
id: requestId,
|
|
48
|
+
channel: "make-x402-request",
|
|
49
|
+
data: request,
|
|
50
|
+
timestamp: Date.now(),
|
|
51
|
+
pid: process.pid,
|
|
52
|
+
processTitle: process.title,
|
|
53
|
+
};
|
|
54
|
+
node_fs_1.default.writeFileSync(requestFile, JSON.stringify(payload, null, 2), { mode: 0o600 });
|
|
55
|
+
await waitForResponseFile(responseFile, timeoutMs);
|
|
56
|
+
const responseData = node_fs_1.default.readFileSync(responseFile, "utf-8");
|
|
57
|
+
const response = JSON.parse(responseData);
|
|
58
|
+
try {
|
|
59
|
+
node_fs_1.default.unlinkSync(responseFile);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// ignore cleanup errors
|
|
63
|
+
}
|
|
64
|
+
if (response.error) {
|
|
65
|
+
const message = typeof response.error === "string" ? response.error : JSON.stringify(response.error);
|
|
66
|
+
throw new Error(message);
|
|
67
|
+
}
|
|
68
|
+
if (!response.result) {
|
|
69
|
+
throw new Error("Agentic Wallet IPC returned empty result");
|
|
70
|
+
}
|
|
71
|
+
return response.result;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
process.title = originalTitle;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=agentic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic.js","sourceRoot":"","sources":["../../src/wallet/agentic.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet/evm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/wallet/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAQ5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/wallet/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAQ5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA0CxD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiBhF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3E;AAED,UAAU,mBAAmB;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAaD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,mBAAmB,EACjC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CAmEjB;AAYD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAA;CAAE,CAAC,CAkB/H;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CAmDjB;AAED,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAqCjB"}
|
package/dist/wallet/evm.js
CHANGED
|
@@ -49,6 +49,11 @@ const evm_1 = require("@x402/evm");
|
|
|
49
49
|
const fs = __importStar(require("fs"));
|
|
50
50
|
// Mainnet only
|
|
51
51
|
const CHAIN = chains_1.base;
|
|
52
|
+
function expandTilde(inputPath) {
|
|
53
|
+
if (!inputPath.startsWith("~/"))
|
|
54
|
+
return inputPath;
|
|
55
|
+
return (0, path_1.resolve)(os.homedir(), inputPath.slice(2));
|
|
56
|
+
}
|
|
52
57
|
/**
|
|
53
58
|
* Validates wallet file path to prevent directory traversal attacks.
|
|
54
59
|
* Only allows files in home directory or /tmp (for testing).
|
|
@@ -82,10 +87,11 @@ async function loadEvmWallet(keyInput) {
|
|
|
82
87
|
// Inline hex key - no path validation needed
|
|
83
88
|
privateKey = keyInput;
|
|
84
89
|
}
|
|
85
|
-
else if (fs.existsSync(keyInput)) {
|
|
90
|
+
else if (fs.existsSync(expandTilde(keyInput))) {
|
|
91
|
+
const expandedPath = expandTilde(keyInput);
|
|
86
92
|
// File path - validate before reading
|
|
87
|
-
validateWalletPath(
|
|
88
|
-
const content = fs.readFileSync(
|
|
93
|
+
validateWalletPath(expandedPath);
|
|
94
|
+
const content = fs.readFileSync(expandedPath, "utf-8").trim();
|
|
89
95
|
privateKey = (content.startsWith("0x") ? content : `0x${content}`);
|
|
90
96
|
}
|
|
91
97
|
else {
|
|
@@ -176,10 +182,11 @@ async function loadEvmWalletWithKey(keyInput) {
|
|
|
176
182
|
// Inline hex key - no path validation needed
|
|
177
183
|
privateKey = keyInput;
|
|
178
184
|
}
|
|
179
|
-
else if (fs.existsSync(keyInput)) {
|
|
185
|
+
else if (fs.existsSync(expandTilde(keyInput))) {
|
|
186
|
+
const expandedPath = expandTilde(keyInput);
|
|
180
187
|
// File path - validate before reading
|
|
181
|
-
validateWalletPath(
|
|
182
|
-
const content = fs.readFileSync(
|
|
188
|
+
validateWalletPath(expandedPath);
|
|
189
|
+
const content = fs.readFileSync(expandedPath, "utf-8").trim();
|
|
183
190
|
privateKey = (content.startsWith("0x") ? content : `0x${content}`);
|
|
184
191
|
}
|
|
185
192
|
else {
|
package/dist/wallet/evm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/wallet/evm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/wallet/evm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/wallet/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAS1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/wallet/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAS1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAuCxD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BxE;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,QAAQ,GAAG,KAAK,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,2BAA2B,CAC/C,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
package/dist/wallet/solana.js
CHANGED
|
@@ -45,6 +45,11 @@ const http_1 = require("@x402/core/http");
|
|
|
45
45
|
const client_2 = require("@x402/svm/exact/client");
|
|
46
46
|
const svm_1 = require("@x402/svm");
|
|
47
47
|
const signers_1 = require("@solana/signers");
|
|
48
|
+
function expandTilde(inputPath) {
|
|
49
|
+
if (!inputPath.startsWith("~/"))
|
|
50
|
+
return inputPath;
|
|
51
|
+
return (0, path_1.resolve)(os.homedir(), inputPath.slice(2));
|
|
52
|
+
}
|
|
48
53
|
/**
|
|
49
54
|
* Validates wallet file path to prevent directory traversal attacks.
|
|
50
55
|
* Only allows files in home directory or /tmp (for testing).
|
|
@@ -78,10 +83,14 @@ async function loadSolanaWallet(keyPath) {
|
|
|
78
83
|
// Inline JSON array format - no path validation needed
|
|
79
84
|
keyData = JSON.parse(keyPath);
|
|
80
85
|
}
|
|
81
|
-
else
|
|
86
|
+
else {
|
|
87
|
+
const expandedPath = expandTilde(keyPath);
|
|
88
|
+
if (!fs.existsSync(expandedPath)) {
|
|
89
|
+
throw new Error(`Wallet key file not found: ${keyPath}`);
|
|
90
|
+
}
|
|
82
91
|
// File path - validate before reading
|
|
83
|
-
validateWalletPath(
|
|
84
|
-
const fileContent = fs.readFileSync(
|
|
92
|
+
validateWalletPath(expandedPath);
|
|
93
|
+
const fileContent = fs.readFileSync(expandedPath, "utf-8");
|
|
85
94
|
const parsed = JSON.parse(fileContent);
|
|
86
95
|
// Handle both formats:
|
|
87
96
|
// 1. { publicKey: "...", secretKey: [...] } - test wallet format
|
|
@@ -96,9 +105,6 @@ async function loadSolanaWallet(keyPath) {
|
|
|
96
105
|
throw new Error("Invalid wallet file format");
|
|
97
106
|
}
|
|
98
107
|
}
|
|
99
|
-
else {
|
|
100
|
-
throw new Error(`Wallet key file not found: ${keyPath}`);
|
|
101
|
-
}
|
|
102
108
|
return web3_js_1.Keypair.fromSecretKey(Uint8Array.from(keyData));
|
|
103
109
|
}
|
|
104
110
|
async function getWalletAddress(type, key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/wallet/solana.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/wallet/solana.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1ly/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "MCP server for 1ly.store - Discover and pay for APIs with AI agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -66,5 +66,8 @@
|
|
|
66
66
|
"tsx": "^4.21.0",
|
|
67
67
|
"typescript": "^5.0.0",
|
|
68
68
|
"vitest": "^2.0.0"
|
|
69
|
+
},
|
|
70
|
+
"overrides": {
|
|
71
|
+
"borsh": "^2.0.0"
|
|
69
72
|
}
|
|
70
73
|
}
|