@andesmountain/gatepay-local-mcp 1.0.0 → 1.0.2
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 +3 -3
- package/dist/src/index.js +9 -28
- package/dist/src/index.js.map +1 -1
- package/dist/src/x402-standalone/client.d.ts.map +1 -1
- package/dist/src/x402-standalone/client.js +1 -0
- package/dist/src/x402-standalone/client.js.map +1 -1
- package/dist/test/fetch.js +11 -4
- package/dist/test/fetch.js.map +1 -1
- package/package.json +2 -2
- package/dist/src/x402-standalone/index.d.ts +0 -9
- package/dist/src/x402-standalone/index.d.ts.map +0 -1
- package/dist/src/x402-standalone/index.js +0 -8
- package/dist/src/x402-standalone/index.js.map +0 -1
package/Readme.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# gatepay-local-mcp
|
|
1
|
+
# gatepay-local-mcp
|
|
2
2
|
|
|
3
3
|
A local (stdio) MCP server that sends HTTP requests to **x402 payment-protected** endpoints. On `402 Payment Required`, it creates the payment payload, signs with your EVM key, and retries the request with the payment header. Exposes a single tool: `x402_request`.
|
|
4
4
|
|
|
@@ -17,7 +17,7 @@ A local (stdio) MCP server that sends HTTP requests to **x402 payment-protected*
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
19
|
"mcpServers": {
|
|
20
|
-
"
|
|
20
|
+
"gatepay-mcp": {
|
|
21
21
|
"command": "npx",
|
|
22
22
|
"args": ["-y", "gatepay-local-mcp"],
|
|
23
23
|
"env": {
|
|
@@ -35,7 +35,7 @@ Put this in your MCP config (e.g. `~/.cursor/mcp.json`), then restart Cursor or
|
|
|
35
35
|
```json
|
|
36
36
|
{
|
|
37
37
|
"mcpServers": {
|
|
38
|
-
"
|
|
38
|
+
"gatepay-mcp": {
|
|
39
39
|
"command": "npx",
|
|
40
40
|
"args": ["-y", "gatepay-local-mcp"],
|
|
41
41
|
"env": {
|
package/dist/src/index.js
CHANGED
|
@@ -16,13 +16,16 @@
|
|
|
16
16
|
* X402_DEBUG_LOG (optional) path to file — when set, append debug logs here (tail -f to debug)
|
|
17
17
|
*/
|
|
18
18
|
import { config } from "dotenv";
|
|
19
|
-
import {
|
|
19
|
+
import { existsSync } from "node:fs";
|
|
20
20
|
import { fileURLToPath } from "node:url";
|
|
21
21
|
import { dirname, join } from "node:path";
|
|
22
22
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
23
23
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
24
24
|
import { ListToolsRequestSchema, CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
25
|
-
import { X402ClientStandalone
|
|
25
|
+
import { X402ClientStandalone } from "./x402-standalone/client.js";
|
|
26
|
+
import { ExactEvmScheme } from "./x402-standalone/exactEvmScheme.js";
|
|
27
|
+
import { createSignerFromPrivateKey } from "./x402-standalone/signer.js";
|
|
28
|
+
import { wrapFetchWithPayment } from "./x402-standalone/fetch.js";
|
|
26
29
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
27
30
|
function findPackageRoot(startDir) {
|
|
28
31
|
let dir = startDir;
|
|
@@ -37,24 +40,6 @@ function findPackageRoot(startDir) {
|
|
|
37
40
|
}
|
|
38
41
|
const packageRoot = findPackageRoot(__dirname);
|
|
39
42
|
config({ path: join(packageRoot, ".env") });
|
|
40
|
-
const LOG_PATH = process.env.X402_DEBUG_LOG ?? process.env.MCP_X402_DEBUG_LOG;
|
|
41
|
-
const logStream = LOG_PATH
|
|
42
|
-
? (() => {
|
|
43
|
-
try {
|
|
44
|
-
return createWriteStream(LOG_PATH, { flags: "a" });
|
|
45
|
-
}
|
|
46
|
-
catch (e) {
|
|
47
|
-
console.error("X402 debug log open failed:", e);
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
})()
|
|
51
|
-
: null;
|
|
52
|
-
function debugLog(msg, obj) {
|
|
53
|
-
if (!logStream)
|
|
54
|
-
return;
|
|
55
|
-
const line = `${new Date().toISOString()} ${msg}${obj != null ? " " + JSON.stringify(obj) : ""}\n`;
|
|
56
|
-
logStream.write(line);
|
|
57
|
-
}
|
|
58
43
|
const TOOL_NAME = "x402_request";
|
|
59
44
|
const INPUT_SCHEMA = {
|
|
60
45
|
type: "object",
|
|
@@ -77,19 +62,20 @@ const INPUT_SCHEMA = {
|
|
|
77
62
|
const TOOL_DESCRIPTION = "Execute a single HTTP request with automatic x402 payment on 402. Use ONLY for endpoints that require payment (402). " +
|
|
78
63
|
"Pass full url and JSON body string as documented in the Skill. Do not use for plain/public list endpoints.";
|
|
79
64
|
async function main() {
|
|
80
|
-
debugLog("x402-request bridge starting");
|
|
81
65
|
const rawEvmKey = process.env.EVM_PRIVATE_KEY?.trim();
|
|
82
66
|
if (!rawEvmKey) {
|
|
83
|
-
debugLog("startup failed: EVM_PRIVATE_KEY missing");
|
|
84
67
|
console.error("❌ EVM_PRIVATE_KEY is required (wallet private key for x402 payment)");
|
|
85
68
|
process.exit(1);
|
|
86
69
|
}
|
|
87
70
|
const evmPrivateKey = (rawEvmKey.startsWith("0x") ? rawEvmKey : `0x${rawEvmKey}`);
|
|
88
71
|
const evmSigner = createSignerFromPrivateKey(evmPrivateKey);
|
|
89
72
|
const client = new X402ClientStandalone();
|
|
90
|
-
|
|
73
|
+
client.register("gatelayer_testnet", new ExactEvmScheme(evmSigner));
|
|
91
74
|
client.register("eth", new ExactEvmScheme(evmSigner));
|
|
92
75
|
client.register("base", new ExactEvmScheme(evmSigner));
|
|
76
|
+
client.register("polygon", new ExactEvmScheme(evmSigner));
|
|
77
|
+
client.register("gatelayer", new ExactEvmScheme(evmSigner));
|
|
78
|
+
client.register("gatechain", new ExactEvmScheme(evmSigner));
|
|
93
79
|
const fetchWithPayment = wrapFetchWithPayment(fetch, client);
|
|
94
80
|
const server = new Server({
|
|
95
81
|
name: "x402 Paid Request Bridge (standalone)",
|
|
@@ -107,7 +93,6 @@ async function main() {
|
|
|
107
93
|
}));
|
|
108
94
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
109
95
|
const { name, arguments: args } = request.params;
|
|
110
|
-
debugLog("tool call", { name, args });
|
|
111
96
|
if (name !== TOOL_NAME) {
|
|
112
97
|
return {
|
|
113
98
|
content: [{ type: "text", text: `未知工具: ${name}. 仅支持 ${TOOL_NAME}。` }],
|
|
@@ -153,10 +138,8 @@ async function main() {
|
|
|
153
138
|
isError: true,
|
|
154
139
|
};
|
|
155
140
|
}
|
|
156
|
-
debugLog("fetch start", { url, method });
|
|
157
141
|
const response = await fetchWithPayment(url, init);
|
|
158
142
|
const responseText = await response.text();
|
|
159
|
-
debugLog("fetch done", { url, status: response.status, textLen: responseText.length });
|
|
160
143
|
let text;
|
|
161
144
|
try {
|
|
162
145
|
const json = JSON.parse(responseText);
|
|
@@ -175,7 +158,6 @@ async function main() {
|
|
|
175
158
|
}
|
|
176
159
|
catch (err) {
|
|
177
160
|
const message = err instanceof Error ? err.message : String(err);
|
|
178
|
-
debugLog("request error", { url, method, error: message, stack: err instanceof Error ? err.stack : undefined });
|
|
179
161
|
const hint = message.toLowerCase().includes("fetch") || message.toLowerCase().includes("econnrefused")
|
|
180
162
|
? " 请确认 url 可访问;402 支付需 EVM_PRIVATE_KEY 对应钱包有足够余额。"
|
|
181
163
|
: "";
|
|
@@ -189,7 +171,6 @@ async function main() {
|
|
|
189
171
|
await server.connect(stdio);
|
|
190
172
|
}
|
|
191
173
|
main().catch((err) => {
|
|
192
|
-
debugLog("fatal", { error: String(err), stack: err instanceof Error ? err.stack : undefined });
|
|
193
174
|
console.error("Fatal error:", err);
|
|
194
175
|
process.exit(1);
|
|
195
176
|
});
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/x402-standalone/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAuB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAG5G,QAAA,MAAM,YAAY,IAAI,CAAC;AAEvB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4D;IAE7F,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAQtD,oBAAoB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/x402-standalone/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAuB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAG5G,QAAA,MAAM,YAAY,IAAI,CAAC;AAEvB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4D;IAE7F,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAQtD,oBAAoB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA4BrF,OAAO,CAAC,yBAAyB;CAgBlC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -12,6 +12,7 @@ export class X402ClientStandalone {
|
|
|
12
12
|
return this;
|
|
13
13
|
}
|
|
14
14
|
async createPaymentPayload(paymentRequired) {
|
|
15
|
+
// 按accepts的顺序依次尝试,直到找到第一个支持的
|
|
15
16
|
const requirements = this.selectPaymentRequirements(paymentRequired.x402Version, paymentRequired.accepts);
|
|
16
17
|
const schemeClient = findByNetworkAndScheme(this.schemesByNetwork, requirements.scheme, requirements.network);
|
|
17
18
|
if (!schemeClient) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/x402-standalone/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,OAAO,oBAAoB;IAAjC;QACmB,qBAAgB,GAAkD,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/x402-standalone/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,OAAO,oBAAoB;IAAjC;QACmB,qBAAgB,GAAkD,IAAI,GAAG,EAAE,CAAC;IAsD/F,CAAC;IApDC,QAAQ,CAAC,OAAe,EAAE,MAA2B;QACnD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,eAAgC;QACzD,6BAA6B;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CACjD,eAAe,CAAC,WAAW,EAC3B,eAAe,CAAC,OAAO,CACxB,CAAC;QACF,MAAM,YAAY,GAAG,sBAAsB,CACzC,IAAI,CAAC,gBAAgB,EACrB,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,OAAO,CACrB,CAAC;QACF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,mCAAmC,YAAY,CAAC,MAAM,gBAAgB,YAAY,CAAC,OAAO,EAAE,CAC7F,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,oBAAoB,CACrD,eAAe,CAAC,WAAW,EAC3B,YAAY,CACb,CAAC;QACF,OAAO;YACL,GAAG,OAAO;YACV,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,eAAe,CAAC,UAAU;SACvC,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,WAAmB,EACnB,OAA8B;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,wEAAwE,WAAW,GAAG,CACvF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;CACF;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/test/fetch.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { config } from "dotenv";
|
|
2
|
-
import { X402ClientStandalone
|
|
2
|
+
import { X402ClientStandalone } from "../src/x402-standalone/client.js";
|
|
3
|
+
import { ExactEvmScheme } from "../src/x402-standalone/exactEvmScheme.js";
|
|
4
|
+
import { createSignerFromPrivateKey } from "../src/x402-standalone/signer.js";
|
|
5
|
+
import { wrapFetchWithPayment } from "../src/x402-standalone/fetch.js";
|
|
3
6
|
import { safeBase64Decode } from "../src/x402-standalone/utils.js";
|
|
4
7
|
config();
|
|
5
8
|
const evmPrivateKey = process.env.EVM_PRIVATE_KEY;
|
|
6
|
-
const baseURL = process.env.RESOURCE_SERVER_URL || "http://localhost:
|
|
7
|
-
const endpointPath = process.env.ENDPOINT_PATH || "/
|
|
9
|
+
const baseURL = process.env.RESOURCE_SERVER_URL || "http://localhost:8080";
|
|
10
|
+
const endpointPath = process.env.ENDPOINT_PATH || "/flight/order";
|
|
8
11
|
const url = `${baseURL}${endpointPath}`;
|
|
9
12
|
function getPaymentSettleResponse(getHeader) {
|
|
10
13
|
const raw = getHeader("PAYMENT-RESPONSE") ?? getHeader("X-PAYMENT-RESPONSE") ?? null;
|
|
@@ -28,14 +31,18 @@ function getPaymentSettleResponse(getHeader) {
|
|
|
28
31
|
async function main() {
|
|
29
32
|
const evmSigner = createSignerFromPrivateKey(evmPrivateKey);
|
|
30
33
|
const client = new X402ClientStandalone();
|
|
34
|
+
client.register("gatelayer_testnet", new ExactEvmScheme(evmSigner));
|
|
31
35
|
client.register("eth", new ExactEvmScheme(evmSigner));
|
|
32
36
|
client.register("base", new ExactEvmScheme(evmSigner));
|
|
37
|
+
client.register("polygon", new ExactEvmScheme(evmSigner));
|
|
38
|
+
client.register("gatelayer", new ExactEvmScheme(evmSigner));
|
|
39
|
+
client.register("gatechain", new ExactEvmScheme(evmSigner));
|
|
33
40
|
const fetchWithPayment = wrapFetchWithPayment(fetch, client);
|
|
34
41
|
console.log(`Making request to: ${url}\n`);
|
|
35
42
|
const response = await fetchWithPayment(url, {
|
|
36
43
|
method: "POST",
|
|
37
44
|
headers: { "Content-Type": "application/json" },
|
|
38
|
-
body: JSON.stringify({}),
|
|
45
|
+
body: JSON.stringify({ flightId: "FL002", uid: "100" }),
|
|
39
46
|
});
|
|
40
47
|
const body = await response.json();
|
|
41
48
|
console.log("Response body:", body);
|
package/dist/test/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../test/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../test/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,MAAM,EAAE,CAAC;AAET,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAgC,CAAC;AACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,uBAAuB,CAAC;AAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,eAAe,CAAC;AAClE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,YAAY,EAAE,CAAC;AAExC,SAAS,wBAAwB,CAAC,SAA0C;IAC1E,MAAM,GAAG,GACP,SAAS,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC;IAC3E,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAY,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC1C,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE5D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAEpC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,eAAe,GAAG,wBAAwB,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAC3B,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0CAA0C,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andesmountain/gatepay-local-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Gatepay Local (stdio) MCP server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
7
7
|
"types": "dist/src/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
|
-
"
|
|
9
|
+
"gatepay-mcp": "dist/src/index.js"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"dist"
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Standalone x402 (no @x402/* deps). For use by stdio-bridge-x402-request-standalone.
|
|
3
|
-
*/
|
|
4
|
-
export { X402ClientStandalone } from "./client.js";
|
|
5
|
-
export { ExactEvmScheme } from "./exactEvmScheme.js";
|
|
6
|
-
export { createSignerFromPrivateKey } from "./signer.js";
|
|
7
|
-
export { wrapFetchWithPayment } from "./fetch.js";
|
|
8
|
-
export type { PaymentRequired, PaymentRequirements } from "./types.js";
|
|
9
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/x402-standalone/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Standalone x402 (no @x402/* deps). For use by stdio-bridge-x402-request-standalone.
|
|
3
|
-
*/
|
|
4
|
-
export { X402ClientStandalone } from "./client.js";
|
|
5
|
-
export { ExactEvmScheme } from "./exactEvmScheme.js";
|
|
6
|
-
export { createSignerFromPrivateKey } from "./signer.js";
|
|
7
|
-
export { wrapFetchWithPayment } from "./fetch.js";
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/x402-standalone/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|