@dominusnode/mcp-server 1.1.0 → 1.4.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/README.md +68 -62
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +16 -6
- package/dist/src/config.js.map +1 -1
- package/dist/src/http-client.d.ts.map +1 -1
- package/dist/src/http-client.js +25 -5
- package/dist/src/http-client.js.map +1 -1
- package/dist/src/index.js +15 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/proxy-fetch.d.ts.map +1 -1
- package/dist/src/proxy-fetch.js +51 -13
- package/dist/src/proxy-fetch.js.map +1 -1
- package/dist/src/token-manager.d.ts.map +1 -1
- package/dist/src/token-manager.js.map +1 -1
- package/dist/src/tools/account.d.ts.map +1 -1
- package/dist/src/tools/account.js +266 -34
- package/dist/src/tools/account.js.map +1 -1
- package/dist/src/tools/agent-wallet.d.ts.map +1 -1
- package/dist/src/tools/agent-wallet.js +164 -36
- package/dist/src/tools/agent-wallet.js.map +1 -1
- package/dist/src/tools/crypto.d.ts.map +1 -1
- package/dist/src/tools/crypto.js +57 -11
- package/dist/src/tools/crypto.js.map +1 -1
- package/dist/src/tools/fetch.d.ts.map +1 -1
- package/dist/src/tools/fetch.js +32 -10
- package/dist/src/tools/fetch.js.map +1 -1
- package/dist/src/tools/keys.d.ts.map +1 -1
- package/dist/src/tools/keys.js +49 -10
- package/dist/src/tools/keys.js.map +1 -1
- package/dist/src/tools/mpp.d.ts +4 -0
- package/dist/src/tools/mpp.d.ts.map +1 -0
- package/dist/src/tools/mpp.js +235 -0
- package/dist/src/tools/mpp.js.map +1 -0
- package/dist/src/tools/paypal.d.ts.map +1 -1
- package/dist/src/tools/paypal.js +20 -4
- package/dist/src/tools/paypal.js.map +1 -1
- package/dist/src/tools/plans.d.ts.map +1 -1
- package/dist/src/tools/plans.js +23 -4
- package/dist/src/tools/plans.js.map +1 -1
- package/dist/src/tools/proxy.d.ts.map +1 -1
- package/dist/src/tools/proxy.js +15 -3
- package/dist/src/tools/proxy.js.map +1 -1
- package/dist/src/tools/sessions.d.ts.map +1 -1
- package/dist/src/tools/sessions.js +14 -2
- package/dist/src/tools/sessions.js.map +1 -1
- package/dist/src/tools/slots.d.ts.map +1 -1
- package/dist/src/tools/slots.js +37 -6
- package/dist/src/tools/slots.js.map +1 -1
- package/dist/src/tools/stripe.d.ts.map +1 -1
- package/dist/src/tools/stripe.js +20 -4
- package/dist/src/tools/stripe.js.map +1 -1
- package/dist/src/tools/teams.d.ts.map +1 -1
- package/dist/src/tools/teams.js +266 -66
- package/dist/src/tools/teams.js.map +1 -1
- package/dist/src/tools/usage.d.ts.map +1 -1
- package/dist/src/tools/usage.js +42 -9
- package/dist/src/tools/usage.js.map +1 -1
- package/dist/src/tools/wallet-auth.d.ts.map +1 -1
- package/dist/src/tools/wallet-auth.js +75 -13
- package/dist/src/tools/wallet-auth.js.map +1 -1
- package/dist/src/tools/wallet.d.ts.map +1 -1
- package/dist/src/tools/wallet.js +21 -4
- package/dist/src/tools/wallet.js.map +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA2G7E"}
|
package/dist/src/tools/fetch.js
CHANGED
|
@@ -4,13 +4,30 @@ import { proxyFetch, validateUrl } from "../proxy-fetch.js";
|
|
|
4
4
|
export function registerFetchTools(server, config) {
|
|
5
5
|
server.tool("dominusnode_fetch", "Fetch a URL through Dominus Node's rotating proxy network. Supports geo-targeting by country and pool selection (dc at $3/GB or residential at $5/GB). Returns response status, headers, and body. Use this for web scraping, geo-targeted requests, or avoiding IP blocks.", {
|
|
6
6
|
url: z.string().max(8192).describe("URL to fetch (http: or https:)"),
|
|
7
|
-
method: z
|
|
8
|
-
|
|
7
|
+
method: z
|
|
8
|
+
.enum(["GET", "HEAD"])
|
|
9
|
+
.default("GET")
|
|
10
|
+
.describe("HTTP method (read-only for safety)"),
|
|
11
|
+
headers: z
|
|
12
|
+
.record(z.string().max(8192))
|
|
13
|
+
.optional()
|
|
9
14
|
.refine((h) => !h || Object.keys(h).length <= 50, "Maximum 50 custom headers allowed")
|
|
10
15
|
.describe("Request headers"),
|
|
11
|
-
country: z
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
country: z
|
|
17
|
+
.string()
|
|
18
|
+
.regex(/^[A-Z]{2}$/i)
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("2-letter ISO country code (e.g. 'US')"),
|
|
21
|
+
pool_type: z
|
|
22
|
+
.enum(["dc", "residential", "auto"])
|
|
23
|
+
.default("auto")
|
|
24
|
+
.describe("Proxy pool: dc ($3/GB, datacenter), residential ($5/GB, harder to detect), auto (tries dc first)"),
|
|
25
|
+
timeout_ms: z
|
|
26
|
+
.number()
|
|
27
|
+
.min(1000)
|
|
28
|
+
.max(120000)
|
|
29
|
+
.default(30000)
|
|
30
|
+
.describe("Request timeout in milliseconds"),
|
|
14
31
|
}, async (args) => {
|
|
15
32
|
try {
|
|
16
33
|
validateUrl(args.url);
|
|
@@ -52,16 +69,21 @@ export function registerFetchTools(server, config) {
|
|
|
52
69
|
// M-3: Provide actionable guidance for common proxy errors
|
|
53
70
|
let hint = "";
|
|
54
71
|
if (msg.includes("407") || msg.includes("Proxy Authentication")) {
|
|
55
|
-
hint =
|
|
72
|
+
hint =
|
|
73
|
+
"\nHint: Check your API key with dominusnode_get_balance. You may need to create a new key.";
|
|
56
74
|
}
|
|
57
|
-
else if (msg.includes("INSUFFICIENT_BALANCE") ||
|
|
58
|
-
|
|
75
|
+
else if (msg.includes("INSUFFICIENT_BALANCE") ||
|
|
76
|
+
msg.includes("insufficient")) {
|
|
77
|
+
hint =
|
|
78
|
+
"\nHint: Use dominusnode_get_balance to check, then dominusnode_pay_crypto to add funds.";
|
|
59
79
|
}
|
|
60
80
|
else if (msg.includes("timed out")) {
|
|
61
|
-
hint =
|
|
81
|
+
hint =
|
|
82
|
+
"\nHint: Try increasing timeout_ms (max 120000) or use a different country/pool_type.";
|
|
62
83
|
}
|
|
63
84
|
else if (msg.includes("ECONNREFUSED")) {
|
|
64
|
-
hint =
|
|
85
|
+
hint =
|
|
86
|
+
"\nHint: The proxy gateway may be down. Use dominusnode_get_proxy_status to check.";
|
|
65
87
|
}
|
|
66
88
|
return {
|
|
67
89
|
isError: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/tools/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAiB;IACrE,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6QAA6Q,EAC7Q;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACpE,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/tools/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/tools/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/tools/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwBpD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,GACrB,IAAI,CA8HN"}
|
package/dist/src/tools/keys.js
CHANGED
|
@@ -5,7 +5,8 @@ const KEYS_RATE_WINDOW_MS = 60_000;
|
|
|
5
5
|
const keysTimestamps = [];
|
|
6
6
|
function checkKeysRateLimit() {
|
|
7
7
|
const now = Date.now();
|
|
8
|
-
while (keysTimestamps.length > 0 &&
|
|
8
|
+
while (keysTimestamps.length > 0 &&
|
|
9
|
+
now - keysTimestamps[0] > KEYS_RATE_WINDOW_MS) {
|
|
9
10
|
keysTimestamps.shift();
|
|
10
11
|
}
|
|
11
12
|
if (keysTimestamps.length > 100)
|
|
@@ -30,21 +31,37 @@ export function registerKeysTools(server, httpClient) {
|
|
|
30
31
|
catch (err) {
|
|
31
32
|
return {
|
|
32
33
|
isError: true,
|
|
33
|
-
content: [
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: "text",
|
|
37
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
34
40
|
};
|
|
35
41
|
}
|
|
36
42
|
});
|
|
37
43
|
server.tool("dominusnode_create_key", "Create a new API key. The full key is shown only once — save it immediately. Use a descriptive label.", {
|
|
38
|
-
label: z
|
|
44
|
+
label: z
|
|
45
|
+
.string()
|
|
46
|
+
.min(1)
|
|
47
|
+
.max(100)
|
|
48
|
+
.describe("Descriptive label for the key (e.g. 'scraping-agent')"),
|
|
39
49
|
}, async (args) => {
|
|
40
50
|
try {
|
|
41
51
|
if (!checkKeysRateLimit()) {
|
|
42
52
|
return {
|
|
43
53
|
isError: true,
|
|
44
|
-
content: [
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: "Rate limit exceeded: maximum 10 key operations per minute. Please wait before retrying.",
|
|
58
|
+
},
|
|
59
|
+
],
|
|
45
60
|
};
|
|
46
61
|
}
|
|
47
|
-
const data = await httpClient.post("/api/keys", {
|
|
62
|
+
const data = await httpClient.post("/api/keys", {
|
|
63
|
+
label: args.label,
|
|
64
|
+
});
|
|
48
65
|
const text = [
|
|
49
66
|
`New API key created!`,
|
|
50
67
|
`Key: ${data.key}`,
|
|
@@ -60,27 +77,49 @@ export function registerKeysTools(server, httpClient) {
|
|
|
60
77
|
catch (err) {
|
|
61
78
|
return {
|
|
62
79
|
isError: true,
|
|
63
|
-
content: [
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
64
86
|
};
|
|
65
87
|
}
|
|
66
88
|
});
|
|
67
89
|
server.tool("dominusnode_revoke_key", "Revoke an API key by ID. This immediately disables the key. Cannot be undone.", {
|
|
68
|
-
key_id: z
|
|
90
|
+
key_id: z
|
|
91
|
+
.string()
|
|
92
|
+
.regex(UUID_REGEX, "Invalid key ID — must be a UUID")
|
|
93
|
+
.describe("UUID of the API key to revoke"),
|
|
69
94
|
}, async (args) => {
|
|
70
95
|
try {
|
|
71
96
|
if (!checkKeysRateLimit()) {
|
|
72
97
|
return {
|
|
73
98
|
isError: true,
|
|
74
|
-
content: [
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: "text",
|
|
102
|
+
text: "Rate limit exceeded: maximum 10 key operations per minute. Please wait before retrying.",
|
|
103
|
+
},
|
|
104
|
+
],
|
|
75
105
|
};
|
|
76
106
|
}
|
|
77
107
|
await httpClient.delete(`/api/keys/${encodeURIComponent(args.key_id)}`);
|
|
78
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
content: [
|
|
110
|
+
{ type: "text", text: `API key ${args.key_id} has been revoked.` },
|
|
111
|
+
],
|
|
112
|
+
};
|
|
79
113
|
}
|
|
80
114
|
catch (err) {
|
|
81
115
|
return {
|
|
82
116
|
isError: true,
|
|
83
|
-
content: [
|
|
117
|
+
content: [
|
|
118
|
+
{
|
|
119
|
+
type: "text",
|
|
120
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
84
123
|
};
|
|
85
124
|
}
|
|
86
125
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/tools/keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/tools/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpp.d.ts","sourceRoot":"","sources":["../../../src/tools/mpp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA0CpD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,GACrB,IAAI,CA2QN"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const MPP_TOPUP_MAX = 5;
|
|
3
|
+
const MPP_TOPUP_WINDOW_MS = 3_600_000;
|
|
4
|
+
const mppTopupTimestamps = [];
|
|
5
|
+
function checkMppTopupLimit() {
|
|
6
|
+
const now = Date.now();
|
|
7
|
+
while (mppTopupTimestamps.length > 0 &&
|
|
8
|
+
now - mppTopupTimestamps[0] > MPP_TOPUP_WINDOW_MS) {
|
|
9
|
+
mppTopupTimestamps.shift();
|
|
10
|
+
}
|
|
11
|
+
if (mppTopupTimestamps.length > 100)
|
|
12
|
+
mppTopupTimestamps.length = 100;
|
|
13
|
+
if (mppTopupTimestamps.length >= MPP_TOPUP_MAX)
|
|
14
|
+
return false;
|
|
15
|
+
mppTopupTimestamps.push(now);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
const MPP_SESSION_MAX = 10;
|
|
19
|
+
const MPP_SESSION_WINDOW_MS = 3_600_000;
|
|
20
|
+
const mppSessionTimestamps = [];
|
|
21
|
+
function checkMppSessionLimit() {
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
while (mppSessionTimestamps.length > 0 &&
|
|
24
|
+
now - mppSessionTimestamps[0] > MPP_SESSION_WINDOW_MS) {
|
|
25
|
+
mppSessionTimestamps.shift();
|
|
26
|
+
}
|
|
27
|
+
if (mppSessionTimestamps.length > 100)
|
|
28
|
+
mppSessionTimestamps.length = 100;
|
|
29
|
+
if (mppSessionTimestamps.length >= MPP_SESSION_MAX)
|
|
30
|
+
return false;
|
|
31
|
+
mppSessionTimestamps.push(now);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
function scrubCredentials(msg) {
|
|
35
|
+
return msg.replace(/dn_(?:live|test|proxy)_[A-Za-z0-9_.-]+/g, "[REDACTED]");
|
|
36
|
+
}
|
|
37
|
+
export function registerMppTools(server, httpClient) {
|
|
38
|
+
// ── dominusnode_mpp_info ──────────────────────────────────────────
|
|
39
|
+
server.tool("dominusnode_mpp_info", "Get MPP (Micropayment Protocol) info including supported methods, fee structure, and session limits. Use this to understand available MPP payment channels before opening a session.", {}, async () => {
|
|
40
|
+
try {
|
|
41
|
+
const data = await httpClient.get("/api/mpp/info");
|
|
42
|
+
const text = [
|
|
43
|
+
`MPP Protocol Info`,
|
|
44
|
+
``,
|
|
45
|
+
`Protocol: ${data.protocol}`,
|
|
46
|
+
`Version: ${data.version}`,
|
|
47
|
+
`Methods: ${Array.isArray(data.methods) ? data.methods.join(", ") : String(data.methods)}`,
|
|
48
|
+
`Min Deposit: $${(data.minDepositCents / 100).toFixed(2)}`,
|
|
49
|
+
`Max Deposit: $${(data.maxDepositCents / 100).toFixed(2)}`,
|
|
50
|
+
`Fee: ${data.feePercent}%`,
|
|
51
|
+
].join("\n");
|
|
52
|
+
return { content: [{ type: "text", text }] };
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return {
|
|
56
|
+
isError: true,
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: "text",
|
|
60
|
+
text: `MPP info error: ${scrubCredentials(err instanceof Error ? err.message : String(err))}`,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// ── dominusnode_mpp_challenge ─────────────────────────────────────
|
|
67
|
+
server.tool("dominusnode_mpp_challenge", "Get an MPP payment challenge for keyless proxy access. Agents without an API key can request a challenge, pay it via the specified method, and use the resulting credential to access the proxy without needing to register or hold an API key. Choose dc (datacenter $3/GB) or residential ($5/GB).", {
|
|
68
|
+
pool_type: z
|
|
69
|
+
.enum(["dc", "residential"])
|
|
70
|
+
.describe("Proxy pool type (dc = datacenter $3/GB, residential = $5/GB)"),
|
|
71
|
+
}, async (args) => {
|
|
72
|
+
try {
|
|
73
|
+
const data = await httpClient.post("/api/mpp/challenge", { poolType: args.pool_type }, false);
|
|
74
|
+
const text = [
|
|
75
|
+
`MPP Payment Challenge`,
|
|
76
|
+
``,
|
|
77
|
+
`Challenge ID: ${data.challengeId}`,
|
|
78
|
+
`Methods: ${Array.isArray(data.methods) ? data.methods.join(", ") : String(data.methods)}`,
|
|
79
|
+
`Amount: ${data.amount} ${data.currency}`,
|
|
80
|
+
`Expires At: ${data.expiresAt}`,
|
|
81
|
+
``,
|
|
82
|
+
`Pay this challenge to receive a proxy credential.`,
|
|
83
|
+
`No API key or account registration required.`,
|
|
84
|
+
].join("\n");
|
|
85
|
+
return { content: [{ type: "text", text }] };
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
return {
|
|
89
|
+
isError: true,
|
|
90
|
+
content: [
|
|
91
|
+
{
|
|
92
|
+
type: "text",
|
|
93
|
+
text: `MPP challenge error: ${scrubCredentials(err instanceof Error ? err.message : String(err))}`,
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// ── dominusnode_pay_mpp ───────────────────────────────────────────
|
|
100
|
+
server.tool("dominusnode_pay_mpp", "Top up your Dominus Node wallet via the MPP (Micropayment Protocol). Creates an MPP payment channel for the specified amount. After the channel is funded, your wallet is credited automatically.", {
|
|
101
|
+
amount_cents: z
|
|
102
|
+
.number()
|
|
103
|
+
.int()
|
|
104
|
+
.min(500)
|
|
105
|
+
.max(100000)
|
|
106
|
+
.describe("Amount in cents to add to wallet (min 500 = $5.00, max 100000 = $1,000.00)"),
|
|
107
|
+
}, async (args) => {
|
|
108
|
+
try {
|
|
109
|
+
if (!checkMppTopupLimit()) {
|
|
110
|
+
return {
|
|
111
|
+
isError: true,
|
|
112
|
+
content: [
|
|
113
|
+
{
|
|
114
|
+
type: "text",
|
|
115
|
+
text: "Rate limit exceeded: maximum 5 MPP top-up requests per hour. Please wait before creating another.",
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const data = await httpClient.post("/api/mpp/topup", { amountCents: args.amount_cents });
|
|
121
|
+
const text = [
|
|
122
|
+
`MPP Top-Up Created`,
|
|
123
|
+
``,
|
|
124
|
+
`Channel ID: ${data.channelId}`,
|
|
125
|
+
`Amount: $${(data.amountCents / 100).toFixed(2)}`,
|
|
126
|
+
`Status: ${data.status}`,
|
|
127
|
+
``,
|
|
128
|
+
`Your wallet will be credited once the payment channel is funded.`,
|
|
129
|
+
].join("\n");
|
|
130
|
+
return { content: [{ type: "text", text }] };
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
return {
|
|
134
|
+
isError: true,
|
|
135
|
+
content: [
|
|
136
|
+
{
|
|
137
|
+
type: "text",
|
|
138
|
+
text: `MPP payment error: ${scrubCredentials(err instanceof Error ? err.message : String(err))}`,
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
// ── dominusnode_mpp_session_open ──────────────────────────────────
|
|
145
|
+
server.tool("dominusnode_mpp_session_open", "Open a pay-as-you-go MPP session. Deposits are held in escrow and released as bandwidth is consumed. Choose a payment method (tempo, stripe_spt, or lightning) and pool type (dc at $3/GB or residential at $5/GB).", {
|
|
146
|
+
max_deposit_cents: z
|
|
147
|
+
.number()
|
|
148
|
+
.int()
|
|
149
|
+
.min(100)
|
|
150
|
+
.max(1000000)
|
|
151
|
+
.describe("Maximum deposit in cents for the session escrow"),
|
|
152
|
+
method: z
|
|
153
|
+
.enum(["tempo", "stripe_spt", "lightning"])
|
|
154
|
+
.describe("Payment method for the session (tempo, stripe_spt, or lightning)"),
|
|
155
|
+
pool_type: z
|
|
156
|
+
.enum(["dc", "residential"])
|
|
157
|
+
.describe("Proxy pool type (dc = datacenter $3/GB, residential = $5/GB)"),
|
|
158
|
+
}, async (args) => {
|
|
159
|
+
try {
|
|
160
|
+
if (!checkMppSessionLimit()) {
|
|
161
|
+
return {
|
|
162
|
+
isError: true,
|
|
163
|
+
content: [
|
|
164
|
+
{
|
|
165
|
+
type: "text",
|
|
166
|
+
text: "Rate limit exceeded: maximum 10 MPP session opens per hour. Please wait before opening another.",
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const data = await httpClient.post("/api/mpp/session/open", {
|
|
172
|
+
maxDepositCents: args.max_deposit_cents,
|
|
173
|
+
method: args.method,
|
|
174
|
+
poolType: args.pool_type,
|
|
175
|
+
});
|
|
176
|
+
const text = [
|
|
177
|
+
`MPP Session Opened`,
|
|
178
|
+
``,
|
|
179
|
+
`Channel ID: ${data.channelId}`,
|
|
180
|
+
`Max Deposit: $${(data.maxDepositCents / 100).toFixed(2)}`,
|
|
181
|
+
`Method: ${data.method}`,
|
|
182
|
+
`Pool: ${data.poolType}`,
|
|
183
|
+
`Status: ${data.status}`,
|
|
184
|
+
``,
|
|
185
|
+
`Session is active. Bandwidth will be metered and billed from the escrow deposit.`,
|
|
186
|
+
`Use dominusnode_mpp_session_close with the channel ID to settle and close.`,
|
|
187
|
+
].join("\n");
|
|
188
|
+
return { content: [{ type: "text", text }] };
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
return {
|
|
192
|
+
isError: true,
|
|
193
|
+
content: [
|
|
194
|
+
{
|
|
195
|
+
type: "text",
|
|
196
|
+
text: `MPP session open error: ${scrubCredentials(err instanceof Error ? err.message : String(err))}`,
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
// ── dominusnode_mpp_session_close ─────────────────────────────────
|
|
203
|
+
server.tool("dominusnode_mpp_session_close", "Close an active MPP pay-as-you-go session. Settles the payment channel, returns any unused escrow deposit to your wallet, and finalizes bandwidth billing.", {
|
|
204
|
+
channel_id: z
|
|
205
|
+
.string()
|
|
206
|
+
.min(1)
|
|
207
|
+
.max(200)
|
|
208
|
+
.describe("Channel ID of the MPP session to close"),
|
|
209
|
+
}, async (args) => {
|
|
210
|
+
try {
|
|
211
|
+
const data = await httpClient.post("/api/mpp/session/close", { channelId: args.channel_id });
|
|
212
|
+
const text = [
|
|
213
|
+
`MPP Session Closed`,
|
|
214
|
+
``,
|
|
215
|
+
`Channel ID: ${data.channelId}`,
|
|
216
|
+
`Used: $${(data.usedCents / 100).toFixed(2)}`,
|
|
217
|
+
`Refunded: $${(data.refundedCents / 100).toFixed(2)}`,
|
|
218
|
+
`Status: ${data.status}`,
|
|
219
|
+
].join("\n");
|
|
220
|
+
return { content: [{ type: "text", text }] };
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
return {
|
|
224
|
+
isError: true,
|
|
225
|
+
content: [
|
|
226
|
+
{
|
|
227
|
+
type: "text",
|
|
228
|
+
text: `MPP session close error: ${scrubCredentials(err instanceof Error ? err.message : String(err))}`,
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=mpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpp.js","sourceRoot":"","sources":["../../../src/tools/mpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paypal.d.ts","sourceRoot":"","sources":["../../../src/tools/paypal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"paypal.d.ts","sourceRoot":"","sources":["../../../src/tools/paypal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAoBpD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,GACrB,IAAI,CA2DN"}
|
package/dist/src/tools/paypal.js
CHANGED
|
@@ -4,7 +4,8 @@ const PAYPAL_PAY_WINDOW_MS = 3_600_000;
|
|
|
4
4
|
const paypalPayTimestamps = [];
|
|
5
5
|
function checkPaypalPayLimit() {
|
|
6
6
|
const now = Date.now();
|
|
7
|
-
while (paypalPayTimestamps.length > 0 &&
|
|
7
|
+
while (paypalPayTimestamps.length > 0 &&
|
|
8
|
+
now - paypalPayTimestamps[0] > PAYPAL_PAY_WINDOW_MS) {
|
|
8
9
|
paypalPayTimestamps.shift();
|
|
9
10
|
}
|
|
10
11
|
if (paypalPayTimestamps.length > 100)
|
|
@@ -16,13 +17,23 @@ function checkPaypalPayLimit() {
|
|
|
16
17
|
}
|
|
17
18
|
export function registerPaypalTools(server, httpClient) {
|
|
18
19
|
server.tool("dominusnode_pay_paypal", "Create a PayPal payment order to top up your Dominus Node wallet. Returns an approval URL where you complete the payment. After approval, the wallet is credited automatically via webhook, or you can use the capture endpoint. Lower fees than Stripe for PayPal users.", {
|
|
19
|
-
amount_cents: z
|
|
20
|
+
amount_cents: z
|
|
21
|
+
.number()
|
|
22
|
+
.int()
|
|
23
|
+
.min(500)
|
|
24
|
+
.max(100000)
|
|
25
|
+
.describe("Amount in cents to add to wallet (min 500 = $5.00, max 100000 = $1,000.00)"),
|
|
20
26
|
}, async (args) => {
|
|
21
27
|
try {
|
|
22
28
|
if (!checkPaypalPayLimit()) {
|
|
23
29
|
return {
|
|
24
30
|
isError: true,
|
|
25
|
-
content: [
|
|
31
|
+
content: [
|
|
32
|
+
{
|
|
33
|
+
type: "text",
|
|
34
|
+
text: "Rate limit exceeded: maximum 5 PayPal orders per hour. Please wait before creating another.",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
26
37
|
};
|
|
27
38
|
}
|
|
28
39
|
const data = await httpClient.post("/api/wallet/topup/paypal", { amountCents: args.amount_cents });
|
|
@@ -42,7 +53,12 @@ export function registerPaypalTools(server, httpClient) {
|
|
|
42
53
|
catch (err) {
|
|
43
54
|
return {
|
|
44
55
|
isError: true,
|
|
45
|
-
content: [
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "text",
|
|
59
|
+
text: `PayPal payment error: ${(err instanceof Error ? err.message : String(err)).replace(/dn_(?:live|test)_[A-Za-z0-9_-]+/g, "[REDACTED]")}`,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
46
62
|
};
|
|
47
63
|
}
|
|
48
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paypal.js","sourceRoot":"","sources":["../../../src/tools/paypal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,oBAAoB,GAAG,SAAS,CAAC;AACvC,MAAM,mBAAmB,GAAa,EAAE,CAAC;AAEzC,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"paypal.js","sourceRoot":"","sources":["../../../src/tools/paypal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,oBAAoB,GAAG,SAAS,CAAC;AACvC,MAAM,mBAAmB,GAAa,EAAE,CAAC;AAEzC,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OACE,mBAAmB,CAAC,MAAM,GAAG,CAAC;QAC9B,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,oBAAoB,EACnD,CAAC;QACD,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,mBAAmB,CAAC,MAAM,GAAG,GAAG;QAAE,mBAAmB,CAAC,MAAM,GAAG,GAAG,CAAC;IACvE,IAAI,mBAAmB,CAAC,MAAM,IAAI,cAAc;QAAE,OAAO,KAAK,CAAC;IAC/D,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,UAAsB;IAEtB,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,2QAA2Q,EAC3Q;QACE,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,GAAG,CAAC;aACR,GAAG,CAAC,MAAM,CAAC;aACX,QAAQ,CACP,4EAA4E,CAC7E;KACJ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,6FAA6F;yBACpG;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAI/B,0BAA0B,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAEnE,MAAM,IAAI,GAAG;gBACX,8BAA8B;gBAC9B,EAAE;gBACF,aAAa,IAAI,CAAC,OAAO,EAAE;gBAC3B,YAAY,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACjD,EAAE;gBACF,yBAAyB,IAAI,CAAC,WAAW,EAAE;gBAC3C,EAAE;gBACF,8DAA8D;gBAC9D,kFAAkF;aACnF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yBAAyB,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,YAAY,CAAC,EAAE;qBAC9I;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../../src/tools/plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../../src/tools/plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AASpD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,GACrB,IAAI,CAyGN"}
|
package/dist/src/tools/plans.js
CHANGED
|
@@ -23,7 +23,12 @@ export function registerPlansTools(server, httpClient) {
|
|
|
23
23
|
catch (err) {
|
|
24
24
|
return {
|
|
25
25
|
isError: true,
|
|
26
|
-
content: [
|
|
26
|
+
content: [
|
|
27
|
+
{
|
|
28
|
+
type: "text",
|
|
29
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
27
32
|
};
|
|
28
33
|
}
|
|
29
34
|
});
|
|
@@ -41,12 +46,21 @@ export function registerPlansTools(server, httpClient) {
|
|
|
41
46
|
catch (err) {
|
|
42
47
|
return {
|
|
43
48
|
isError: true,
|
|
44
|
-
content: [
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: "text",
|
|
52
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
45
55
|
};
|
|
46
56
|
}
|
|
47
57
|
});
|
|
48
58
|
server.tool("dominusnode_change_plan", "Switch your account to a different pricing plan. Available plans: free-dc (free, 500MB DC), free-res (free, 50MB residential), payg (pay-as-you-go, unlimited), vol100 (100GB/month), vol1tb (1TB/month), agent (AI agent plan, unlimited bandwidth, 50 connections, $5/GB). Volume plans require minimum wallet balance. Email must be verified.", {
|
|
49
|
-
plan_id: z
|
|
59
|
+
plan_id: z
|
|
60
|
+
.string()
|
|
61
|
+
.min(1)
|
|
62
|
+
.max(50)
|
|
63
|
+
.describe("Plan ID to switch to. Options: free-dc, free-res, payg, vol100, vol1tb, agent"),
|
|
50
64
|
}, async (args) => {
|
|
51
65
|
try {
|
|
52
66
|
const data = await httpClient.put("/api/plans/user/plan", { planId: args.plan_id });
|
|
@@ -63,7 +77,12 @@ export function registerPlansTools(server, httpClient) {
|
|
|
63
77
|
catch (err) {
|
|
64
78
|
return {
|
|
65
79
|
isError: true,
|
|
66
|
-
content: [
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `Error: ${err instanceof Error ? err.message : String(err)}`,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
67
86
|
};
|
|
68
87
|
}
|
|
69
88
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/tools/plans.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/tools/plans.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/tools/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/tools/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,GACrB,IAAI,CAsEN"}
|