run402-mcp 1.8.1 → 1.8.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/dist/tools/bundle-deploy.d.ts.map +1 -1
- package/dist/tools/bundle-deploy.js +5 -25
- package/dist/tools/bundle-deploy.js.map +1 -1
- package/dist/tools/deploy-site.d.ts.map +1 -1
- package/dist/tools/deploy-site.js +5 -25
- package/dist/tools/deploy-site.js.map +1 -1
- package/dist/tools/fork-app.d.ts +0 -2
- package/dist/tools/fork-app.d.ts.map +1 -1
- package/dist/tools/fork-app.js +5 -30
- package/dist/tools/fork-app.js.map +1 -1
- package/dist/tools/provision.d.ts.map +1 -1
- package/dist/tools/provision.js +5 -26
- package/dist/tools/provision.js.map +1 -1
- package/dist/tools/send-message.d.ts.map +1 -1
- package/dist/tools/send-message.js +5 -5
- package/dist/tools/send-message.js.map +1 -1
- package/dist/tools/set-agent-contact.d.ts.map +1 -1
- package/dist/tools/set-agent-contact.js +5 -5
- package/dist/tools/set-agent-contact.js.map +1 -1
- package/dist/tools/tier-status.d.ts.map +1 -1
- package/dist/tools/tier-status.js +8 -1
- package/dist/tools/tier-status.js.map +1 -1
- package/dist/wallet-auth.d.ts +31 -0
- package/dist/wallet-auth.d.ts.map +1 -0
- package/dist/wallet-auth.js +94 -0
- package/dist/wallet-auth.js.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-deploy.d.ts","sourceRoot":"","sources":["../../src/tools/bundle-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle-deploy.d.ts","sourceRoot":"","sources":["../../src/tools/bundle-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD9B,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACpF,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAClG,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAsEjF"}
|
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { saveProject } from "../keystore.js";
|
|
4
4
|
import { formatApiError } from "../errors.js";
|
|
5
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
5
6
|
export const bundleDeploySchema = {
|
|
6
7
|
name: z.string().describe("App name (used as project name and default subdomain)"),
|
|
7
8
|
migrations: z
|
|
@@ -49,8 +50,12 @@ export const bundleDeploySchema = {
|
|
|
49
50
|
.describe("Custom subdomain to claim (e.g. 'myapp' → myapp.run402.com)"),
|
|
50
51
|
};
|
|
51
52
|
export async function handleBundleDeploy(args) {
|
|
53
|
+
const auth = requireWalletAuth();
|
|
54
|
+
if ("error" in auth)
|
|
55
|
+
return auth.error;
|
|
52
56
|
const res = await apiRequest("/deploy/v1", {
|
|
53
57
|
method: "POST",
|
|
58
|
+
headers: { ...auth.headers },
|
|
54
59
|
body: {
|
|
55
60
|
name: args.name,
|
|
56
61
|
migrations: args.migrations,
|
|
@@ -61,31 +66,6 @@ export async function handleBundleDeploy(args) {
|
|
|
61
66
|
subdomain: args.subdomain,
|
|
62
67
|
},
|
|
63
68
|
});
|
|
64
|
-
if (res.is402) {
|
|
65
|
-
const body = res.body;
|
|
66
|
-
const lines = [
|
|
67
|
-
`## Payment Required`,
|
|
68
|
-
``,
|
|
69
|
-
`To bundle-deploy **${args.name}**, an x402 payment is needed.`,
|
|
70
|
-
``,
|
|
71
|
-
];
|
|
72
|
-
if (body.x402) {
|
|
73
|
-
lines.push(`**Payment details:**`);
|
|
74
|
-
lines.push("```json");
|
|
75
|
-
lines.push(JSON.stringify(body.x402, null, 2));
|
|
76
|
-
lines.push("```");
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
lines.push(`**Server response:**`);
|
|
80
|
-
lines.push("```json");
|
|
81
|
-
lines.push(JSON.stringify(body, null, 2));
|
|
82
|
-
lines.push("```");
|
|
83
|
-
}
|
|
84
|
-
lines.push(``);
|
|
85
|
-
lines.push(`The user's wallet or payment agent must send the required amount. ` +
|
|
86
|
-
`Once payment is confirmed, retry this tool call.`);
|
|
87
|
-
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
88
|
-
}
|
|
89
69
|
if (!res.ok)
|
|
90
70
|
return formatApiError(res, "deploying bundle");
|
|
91
71
|
const body = res.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-deploy.js","sourceRoot":"","sources":["../../src/tools/bundle-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle-deploy.js","sourceRoot":"","sources":["../../src/tools/bundle-deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-site.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-site.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAwB5B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA+CjF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { formatApiError } from "../errors.js";
|
|
4
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
4
5
|
export const deploySiteSchema = {
|
|
5
6
|
name: z
|
|
6
7
|
.string()
|
|
@@ -25,8 +26,12 @@ export const deploySiteSchema = {
|
|
|
25
26
|
.describe("Array of files to deploy. Must include at least index.html."),
|
|
26
27
|
};
|
|
27
28
|
export async function handleDeploySite(args) {
|
|
29
|
+
const auth = requireWalletAuth();
|
|
30
|
+
if ("error" in auth)
|
|
31
|
+
return auth.error;
|
|
28
32
|
const res = await apiRequest("/deployments/v1", {
|
|
29
33
|
method: "POST",
|
|
34
|
+
headers: { ...auth.headers },
|
|
30
35
|
body: {
|
|
31
36
|
name: args.name,
|
|
32
37
|
project: args.project,
|
|
@@ -34,31 +39,6 @@ export async function handleDeploySite(args) {
|
|
|
34
39
|
files: args.files,
|
|
35
40
|
},
|
|
36
41
|
});
|
|
37
|
-
if (res.is402) {
|
|
38
|
-
const body = res.body;
|
|
39
|
-
const lines = [
|
|
40
|
-
`## Payment Required`,
|
|
41
|
-
``,
|
|
42
|
-
`To deploy a static site, an active tier subscription is needed.`,
|
|
43
|
-
``,
|
|
44
|
-
];
|
|
45
|
-
if (body.x402) {
|
|
46
|
-
lines.push(`**Payment details:**`);
|
|
47
|
-
lines.push("```json");
|
|
48
|
-
lines.push(JSON.stringify(body.x402, null, 2));
|
|
49
|
-
lines.push("```");
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
lines.push(`**Server response:**`);
|
|
53
|
-
lines.push("```json");
|
|
54
|
-
lines.push(JSON.stringify(body, null, 2));
|
|
55
|
-
lines.push("```");
|
|
56
|
-
}
|
|
57
|
-
lines.push(``);
|
|
58
|
-
lines.push(`The user's wallet or payment agent must send the required amount. ` +
|
|
59
|
-
`Once payment is confirmed, retry this tool call.`);
|
|
60
|
-
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
61
|
-
}
|
|
62
42
|
if (!res.ok)
|
|
63
43
|
return formatApiError(res, "deploying site");
|
|
64
44
|
const body = res.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-site.js","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-site.js","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2EAA2E,CAAC;IACxF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;IAC7F,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QAC7E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAClE,QAAQ,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;aACzB,QAAQ,EAAE;aACV,QAAQ,CAAC,iEAAiE,CAAC;KAC/E,CAAC,CACH;SACA,QAAQ,CAAC,6DAA6D,CAAC;CAC3E,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAKtC;IACC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAEvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAE1D,MAAM,IAAI,GAAG,GAAG,CAAC,IAShB,CAAC;IAEF,MAAM,KAAK,GAAG;QACZ,kBAAkB;QAClB,EAAE;QACF,mBAAmB;QACnB,mBAAmB;QACnB,YAAY,IAAI,CAAC,EAAE,MAAM;QACzB,WAAW,IAAI,CAAC,GAAG,IAAI;QACvB,cAAc,IAAI,CAAC,MAAM,IAAI;QAC7B,aAAa,IAAI,CAAC,WAAW,IAAI;QACjC,YAAY,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QACtD,EAAE;QACF,yBAAyB,IAAI,CAAC,GAAG,IAAI;KACtC,CAAC;IAEF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
package/dist/tools/fork-app.d.ts
CHANGED
|
@@ -2,13 +2,11 @@ import { z } from "zod";
|
|
|
2
2
|
export declare const forkAppSchema: {
|
|
3
3
|
version_id: z.ZodString;
|
|
4
4
|
name: z.ZodString;
|
|
5
|
-
tier: z.ZodDefault<z.ZodEnum<["prototype", "hobby", "team"]>>;
|
|
6
5
|
subdomain: z.ZodOptional<z.ZodString>;
|
|
7
6
|
};
|
|
8
7
|
export declare function handleForkApp(args: {
|
|
9
8
|
version_id: string;
|
|
10
9
|
name: string;
|
|
11
|
-
tier?: string;
|
|
12
10
|
subdomain?: string;
|
|
13
11
|
}): Promise<{
|
|
14
12
|
content: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork-app.d.ts","sourceRoot":"","sources":["../../src/tools/fork-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"fork-app.d.ts","sourceRoot":"","sources":["../../src/tools/fork-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,aAAa;;;;CAOzB,CAAC;AAEF,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA0DjF"}
|
package/dist/tools/fork-app.js
CHANGED
|
@@ -2,53 +2,28 @@ import { z } from "zod";
|
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { saveProject } from "../keystore.js";
|
|
4
4
|
import { formatApiError } from "../errors.js";
|
|
5
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
5
6
|
export const forkAppSchema = {
|
|
6
7
|
version_id: z.string().describe("The app version ID to fork (from browse_apps)"),
|
|
7
8
|
name: z.string().describe("Name for the new forked project"),
|
|
8
|
-
tier: z
|
|
9
|
-
.enum(["prototype", "hobby", "team"])
|
|
10
|
-
.default("prototype")
|
|
11
|
-
.describe("Database tier: prototype ($0.10/7d), hobby ($5/30d), team ($20/30d)"),
|
|
12
9
|
subdomain: z
|
|
13
10
|
.string()
|
|
14
11
|
.optional()
|
|
15
12
|
.describe("Optional subdomain to claim for the forked app"),
|
|
16
13
|
};
|
|
17
14
|
export async function handleForkApp(args) {
|
|
18
|
-
const
|
|
15
|
+
const auth = requireWalletAuth();
|
|
16
|
+
if ("error" in auth)
|
|
17
|
+
return auth.error;
|
|
19
18
|
const res = await apiRequest("/fork/v1", {
|
|
20
19
|
method: "POST",
|
|
20
|
+
headers: { ...auth.headers },
|
|
21
21
|
body: {
|
|
22
22
|
version_id: args.version_id,
|
|
23
23
|
name: args.name,
|
|
24
24
|
subdomain: args.subdomain,
|
|
25
25
|
},
|
|
26
26
|
});
|
|
27
|
-
if (res.is402) {
|
|
28
|
-
const body = res.body;
|
|
29
|
-
const lines = [
|
|
30
|
-
`## Payment Required`,
|
|
31
|
-
``,
|
|
32
|
-
`To fork this app (tier: **${tier}**), an x402 payment is needed.`,
|
|
33
|
-
``,
|
|
34
|
-
];
|
|
35
|
-
if (body.x402) {
|
|
36
|
-
lines.push(`**Payment details:**`);
|
|
37
|
-
lines.push("```json");
|
|
38
|
-
lines.push(JSON.stringify(body.x402, null, 2));
|
|
39
|
-
lines.push("```");
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
lines.push(`**Server response:**`);
|
|
43
|
-
lines.push("```json");
|
|
44
|
-
lines.push(JSON.stringify(body, null, 2));
|
|
45
|
-
lines.push("```");
|
|
46
|
-
}
|
|
47
|
-
lines.push(``);
|
|
48
|
-
lines.push(`The user's wallet or payment agent must send the required amount. ` +
|
|
49
|
-
`Once payment is confirmed, retry this tool call.`);
|
|
50
|
-
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
51
|
-
}
|
|
52
27
|
if (!res.ok)
|
|
53
28
|
return formatApiError(res, "forking app");
|
|
54
29
|
const body = res.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork-app.js","sourceRoot":"","sources":["../../src/tools/fork-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"fork-app.js","sourceRoot":"","sources":["../../src/tools/fork-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAInC;IACC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAEvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE;YACJ,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,GAAG,CAAC,IAUhB,CAAC;IAEF,sCAAsC;IACtC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,gBAAgB;KAClC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,kBAAkB,IAAI,CAAC,IAAI,EAAE;QAC7B,EAAE;QACF,mBAAmB;QACnB,mBAAmB;QACnB,oBAAoB,IAAI,CAAC,UAAU,MAAM;QACzC,YAAY,IAAI,CAAC,IAAI,IAAI;QACzB,cAAc,IAAI,CAAC,WAAW,IAAI;QAClC,eAAe,IAAI,CAAC,gBAAgB,IAAI;KACzC,CAAC;IAEF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAE7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/tools/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/tools/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,eAAe;;;CAS3B,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA8CjF"}
|
package/dist/tools/provision.js
CHANGED
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { saveProject } from "../keystore.js";
|
|
4
4
|
import { formatApiError } from "../errors.js";
|
|
5
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
5
6
|
export const provisionSchema = {
|
|
6
7
|
tier: z
|
|
7
8
|
.enum(["prototype", "hobby", "team"])
|
|
@@ -13,38 +14,16 @@ export const provisionSchema = {
|
|
|
13
14
|
.describe("Optional project name (auto-generated if omitted)"),
|
|
14
15
|
};
|
|
15
16
|
export async function handleProvision(args) {
|
|
17
|
+
const auth = requireWalletAuth();
|
|
18
|
+
if ("error" in auth)
|
|
19
|
+
return auth.error;
|
|
16
20
|
const tier = args.tier || "prototype";
|
|
17
21
|
const name = args.name;
|
|
18
22
|
const res = await apiRequest("/projects/v1", {
|
|
19
23
|
method: "POST",
|
|
24
|
+
headers: { ...auth.headers },
|
|
20
25
|
body: { tier, name },
|
|
21
26
|
});
|
|
22
|
-
if (res.is402) {
|
|
23
|
-
const body = res.body;
|
|
24
|
-
const lines = [
|
|
25
|
-
`## Payment Required`,
|
|
26
|
-
``,
|
|
27
|
-
`To provision a **${tier}** database, an x402 payment is needed.`,
|
|
28
|
-
``,
|
|
29
|
-
];
|
|
30
|
-
if (body.x402) {
|
|
31
|
-
lines.push(`**Payment details:**`);
|
|
32
|
-
lines.push("```json");
|
|
33
|
-
lines.push(JSON.stringify(body.x402, null, 2));
|
|
34
|
-
lines.push("```");
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
lines.push(`**Server response:**`);
|
|
38
|
-
lines.push("```json");
|
|
39
|
-
lines.push(JSON.stringify(body, null, 2));
|
|
40
|
-
lines.push("```");
|
|
41
|
-
}
|
|
42
|
-
lines.push(``);
|
|
43
|
-
lines.push(`The user's wallet or payment agent must send the required amount. ` +
|
|
44
|
-
`Once payment is confirmed, retry this tool call.`);
|
|
45
|
-
// Return as text (NOT isError) so the LLM can reason about payment
|
|
46
|
-
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
47
|
-
}
|
|
48
27
|
if (!res.ok)
|
|
49
28
|
return formatApiError(res, "provisioning project");
|
|
50
29
|
const body = res.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/tools/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/tools/provision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SACpC,OAAO,CAAC,WAAW,CAAC;SACpB,QAAQ,CAAC,qEAAqE,CAAC;IAClF,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;CACjE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAGrC;IACC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAEvB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,GAAG,CAAC,IAOhB,CAAC;IAEF,sCAAsC;IACtC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,gBAAgB;KAClC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,EAAE;QACF,mBAAmB;QACnB,mBAAmB;QACnB,oBAAoB,IAAI,CAAC,UAAU,MAAM;QACzC,YAAY,IAAI,CAAC,IAAI,IAAI;QACzB,cAAc,IAAI,CAAC,WAAW,IAAI;QAClC,eAAe,IAAI,CAAC,gBAAgB,IAAI;QACxC,EAAE;QACF,oHAAoH;KACrH,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../src/tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../src/tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,iBAAiB;;CAE7B,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAejF"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { formatApiError } from "../errors.js";
|
|
4
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
4
5
|
export const sendMessageSchema = {
|
|
5
6
|
message: z.string().describe("Message to send to the Run402 developers"),
|
|
6
7
|
};
|
|
7
8
|
export async function handleSendMessage(args) {
|
|
9
|
+
const auth = requireWalletAuth();
|
|
10
|
+
if ("error" in auth)
|
|
11
|
+
return auth.error;
|
|
8
12
|
const res = await apiRequest("/message/v1", {
|
|
9
13
|
method: "POST",
|
|
14
|
+
headers: { ...auth.headers },
|
|
10
15
|
body: { message: args.message },
|
|
11
16
|
});
|
|
12
|
-
if (res.is402) {
|
|
13
|
-
return {
|
|
14
|
-
content: [{ type: "text", text: `## Auth Required\n\nSending a message requires wallet auth.\n\n${JSON.stringify(res.body, null, 2)}` }],
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
17
|
if (!res.ok)
|
|
18
18
|
return formatApiError(res, "sending message");
|
|
19
19
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../src/tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../src/tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CACzE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAEvC;IACC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAEvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE;QAC1C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;KAChC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-agent-contact.d.ts","sourceRoot":"","sources":["../../src/tools/set-agent-contact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"set-agent-contact.d.ts","sourceRoot":"","sources":["../../src/tools/set-agent-contact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,qBAAqB;;;;CAIjC,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA+BjF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { formatApiError } from "../errors.js";
|
|
4
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
4
5
|
export const setAgentContactSchema = {
|
|
5
6
|
name: z.string().describe("Agent name"),
|
|
6
7
|
email: z.string().optional().describe("Contact email (optional)"),
|
|
@@ -12,15 +13,14 @@ export async function handleSetAgentContact(args) {
|
|
|
12
13
|
body.email = args.email;
|
|
13
14
|
if (args.webhook)
|
|
14
15
|
body.webhook = args.webhook;
|
|
16
|
+
const auth = requireWalletAuth();
|
|
17
|
+
if ("error" in auth)
|
|
18
|
+
return auth.error;
|
|
15
19
|
const res = await apiRequest("/agent/v1/contact", {
|
|
16
20
|
method: "POST",
|
|
21
|
+
headers: { ...auth.headers },
|
|
17
22
|
body,
|
|
18
23
|
});
|
|
19
|
-
if (res.is402) {
|
|
20
|
-
return {
|
|
21
|
-
content: [{ type: "text", text: `## Auth Required\n\nRegistering agent contact requires wallet auth.\n\n${JSON.stringify(res.body, null, 2)}` }],
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
24
|
if (!res.ok)
|
|
25
25
|
return formatApiError(res, "setting agent contact");
|
|
26
26
|
const result = res.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-agent-contact.js","sourceRoot":"","sources":["../../src/tools/set-agent-contact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"set-agent-contact.js","sourceRoot":"","sources":["../../src/tools/set-agent-contact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CACpF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAI3C;IACC,MAAM,IAAI,GAA2B,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAE9C,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAEvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,mBAAmB,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,GAAG,CAAC,IAA8F,CAAC;IAElH,MAAM,KAAK,GAAG;QACZ,0BAA0B;QAC1B,EAAE;QACF,mBAAmB;QACnB,mBAAmB;QACnB,cAAc,MAAM,CAAC,MAAM,IAAI;QAC/B,YAAY,MAAM,CAAC,IAAI,IAAI;QAC3B,aAAa,MAAM,CAAC,KAAK,IAAI,GAAG,IAAI;QACpC,eAAe,MAAM,CAAC,OAAO,IAAI,GAAG,IAAI;QACxC,kBAAkB,MAAM,CAAC,UAAU,IAAI;KACxC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier-status.d.ts","sourceRoot":"","sources":["../../src/tools/tier-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tier-status.d.ts","sourceRoot":"","sources":["../../src/tools/tier-status.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,IAAK,CAAC;AAEnC,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAyChF"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { apiRequest } from "../client.js";
|
|
2
2
|
import { formatApiError } from "../errors.js";
|
|
3
|
+
import { requireWalletAuth } from "../wallet-auth.js";
|
|
3
4
|
export const tierStatusSchema = {};
|
|
4
5
|
export async function handleTierStatus(_args) {
|
|
5
|
-
const
|
|
6
|
+
const auth = requireWalletAuth();
|
|
7
|
+
if ("error" in auth)
|
|
8
|
+
return auth.error;
|
|
9
|
+
const res = await apiRequest("/tiers/v1/status", {
|
|
10
|
+
method: "GET",
|
|
11
|
+
headers: { ...auth.headers },
|
|
12
|
+
});
|
|
6
13
|
if (!res.ok)
|
|
7
14
|
return formatApiError(res, "checking tier status");
|
|
8
15
|
const body = res.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier-status.js","sourceRoot":"","sources":["../../src/tools/tier-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tier-status.js","sourceRoot":"","sources":["../../src/tools/tier-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAA4B;IAE5B,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAEvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE;QAC/C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;KAC7B,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,GAAG,CAAC,IAKhB,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gIAAgI;iBACvI;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,gBAAgB;QAChB,EAAE;QACF,mBAAmB;QACnB,mBAAmB;QACnB,gBAAgB,IAAI,CAAC,MAAM,MAAM;QACjC,YAAY,IAAI,CAAC,IAAI,IAAI;QACzB,cAAc,IAAI,CAAC,MAAM,IAAI;QAC7B,eAAe,IAAI,CAAC,gBAAgB,IAAI;KACzC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet auth helper — generates EIP-191 signature headers for Run402 API.
|
|
3
|
+
*
|
|
4
|
+
* Used by MCP tools that call wallet-authenticated endpoints.
|
|
5
|
+
* Reads the local wallet from ~/.config/run402/wallet.json.
|
|
6
|
+
*/
|
|
7
|
+
export interface WalletAuthHeaders {
|
|
8
|
+
"X-Run402-Wallet": string;
|
|
9
|
+
"X-Run402-Signature": string;
|
|
10
|
+
"X-Run402-Timestamp": string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get wallet auth headers for the Run402 API.
|
|
14
|
+
* Returns null if no wallet is configured.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getWalletAuthHeaders(): WalletAuthHeaders | null;
|
|
17
|
+
/**
|
|
18
|
+
* Get wallet auth headers or return an MCP error result.
|
|
19
|
+
*/
|
|
20
|
+
export declare function requireWalletAuth(): {
|
|
21
|
+
headers: WalletAuthHeaders;
|
|
22
|
+
} | {
|
|
23
|
+
error: {
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
isError: true;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=wallet-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-auth.d.ts","sourceRoot":"","sources":["../src/wallet-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AA4CD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAqB/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GAAG;IACF,KAAK,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC;CAC1E,CAgBA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet auth helper — generates EIP-191 signature headers for Run402 API.
|
|
3
|
+
*
|
|
4
|
+
* Used by MCP tools that call wallet-authenticated endpoints.
|
|
5
|
+
* Reads the local wallet from ~/.config/run402/wallet.json.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
8
|
+
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
9
|
+
import { keccak_256 } from "@noble/hashes/sha3.js";
|
|
10
|
+
import { bytesToHex } from "@noble/hashes/utils.js";
|
|
11
|
+
import { getWalletPath } from "./config.js";
|
|
12
|
+
/**
|
|
13
|
+
* EIP-191 personal_sign: sign a message with the wallet's private key.
|
|
14
|
+
*/
|
|
15
|
+
function personalSign(privateKeyHex, address, message) {
|
|
16
|
+
const msgBytes = new TextEncoder().encode(message);
|
|
17
|
+
const prefix = new TextEncoder().encode(`\x19Ethereum Signed Message:\n${msgBytes.length}`);
|
|
18
|
+
const prefixed = new Uint8Array(prefix.length + msgBytes.length);
|
|
19
|
+
prefixed.set(prefix);
|
|
20
|
+
prefixed.set(msgBytes, prefix.length);
|
|
21
|
+
const hash = keccak_256(prefixed);
|
|
22
|
+
const pkHex = privateKeyHex.startsWith("0x")
|
|
23
|
+
? privateKeyHex.slice(2)
|
|
24
|
+
: privateKeyHex;
|
|
25
|
+
const pkBytes = Uint8Array.from(Buffer.from(pkHex, "hex"));
|
|
26
|
+
const rawSig = secp256k1.sign(hash, pkBytes);
|
|
27
|
+
const sig = secp256k1.Signature.fromBytes(rawSig);
|
|
28
|
+
// Determine recovery bit by trying both and matching the address
|
|
29
|
+
let recovery = 0;
|
|
30
|
+
for (const v of [0, 1]) {
|
|
31
|
+
try {
|
|
32
|
+
const recovered = sig.addRecoveryBit(v).recoverPublicKey(hash);
|
|
33
|
+
const pubBytes = recovered.toBytes(false).slice(1); // uncompressed, drop 04 prefix
|
|
34
|
+
const addrBytes = keccak_256(pubBytes).slice(-20);
|
|
35
|
+
if ("0x" + bytesToHex(addrBytes) === address.toLowerCase()) {
|
|
36
|
+
recovery = v;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const r = sig.r.toString(16).padStart(64, "0");
|
|
45
|
+
const s = sig.s.toString(16).padStart(64, "0");
|
|
46
|
+
const vHex = (recovery + 27).toString(16).padStart(2, "0");
|
|
47
|
+
return "0x" + r + s + vHex;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get wallet auth headers for the Run402 API.
|
|
51
|
+
* Returns null if no wallet is configured.
|
|
52
|
+
*/
|
|
53
|
+
export function getWalletAuthHeaders() {
|
|
54
|
+
const walletPath = getWalletPath();
|
|
55
|
+
if (!existsSync(walletPath))
|
|
56
|
+
return null;
|
|
57
|
+
let wallet;
|
|
58
|
+
try {
|
|
59
|
+
wallet = JSON.parse(readFileSync(walletPath, "utf-8"));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
if (!wallet.address || !wallet.privateKey)
|
|
65
|
+
return null;
|
|
66
|
+
const timestamp = Math.floor(Date.now() / 1000).toString();
|
|
67
|
+
const signature = personalSign(wallet.privateKey, wallet.address, `run402:${timestamp}`);
|
|
68
|
+
return {
|
|
69
|
+
"X-Run402-Wallet": wallet.address,
|
|
70
|
+
"X-Run402-Signature": signature,
|
|
71
|
+
"X-Run402-Timestamp": timestamp,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get wallet auth headers or return an MCP error result.
|
|
76
|
+
*/
|
|
77
|
+
export function requireWalletAuth() {
|
|
78
|
+
const headers = getWalletAuthHeaders();
|
|
79
|
+
if (!headers) {
|
|
80
|
+
return {
|
|
81
|
+
error: {
|
|
82
|
+
content: [
|
|
83
|
+
{
|
|
84
|
+
type: "text",
|
|
85
|
+
text: "Error: No wallet configured. Use `wallet_create` to create a wallet first, then `request_faucet` to fund it.",
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
isError: true,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return { headers };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=wallet-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-auth.js","sourceRoot":"","sources":["../src/wallet-auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "run402-mcp",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.2",
|
|
4
4
|
"description": "MCP server for Run402 — AI-native Postgres databases with REST API, auth, storage, and row-level security. Pay with x402 USDC micropayments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"start": "node dist/index.js",
|
|
18
18
|
"test:skill": "node --test --import tsx SKILL.test.ts",
|
|
19
19
|
"test:sync": "node --test --import tsx sync.test.ts",
|
|
20
|
-
"test": "node --test --import tsx SKILL.test.ts sync.test.ts src/**/*.test.ts"
|
|
20
|
+
"test": "node --experimental-test-module-mocks --test --import tsx SKILL.test.ts sync.test.ts src/**/*.test.ts"
|
|
21
21
|
},
|
|
22
22
|
"keywords": [
|
|
23
23
|
"mcp",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
49
|
+
"@noble/curves": "^2.0.1",
|
|
49
50
|
"@noble/hashes": "^2.0.1",
|
|
50
51
|
"zod": "^3.24.0"
|
|
51
52
|
},
|