@dominusnode/mcp-server 1.0.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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +303 -0
  3. package/dist/src/config.d.ts +15 -0
  4. package/dist/src/config.d.ts.map +1 -0
  5. package/dist/src/config.js +111 -0
  6. package/dist/src/config.js.map +1 -0
  7. package/dist/src/http-client.d.ts +23 -0
  8. package/dist/src/http-client.d.ts.map +1 -0
  9. package/dist/src/http-client.js +241 -0
  10. package/dist/src/http-client.js.map +1 -0
  11. package/dist/src/index.d.ts +3 -0
  12. package/dist/src/index.d.ts.map +1 -0
  13. package/dist/src/index.js +160 -0
  14. package/dist/src/index.js.map +1 -0
  15. package/dist/src/proxy-fetch.d.ts +23 -0
  16. package/dist/src/proxy-fetch.d.ts.map +1 -0
  17. package/dist/src/proxy-fetch.js +549 -0
  18. package/dist/src/proxy-fetch.js.map +1 -0
  19. package/dist/src/token-manager.d.ts +18 -0
  20. package/dist/src/token-manager.d.ts.map +1 -0
  21. package/dist/src/token-manager.js +192 -0
  22. package/dist/src/token-manager.js.map +1 -0
  23. package/dist/src/tools/account.d.ts +6 -0
  24. package/dist/src/tools/account.d.ts.map +1 -0
  25. package/dist/src/tools/account.js +329 -0
  26. package/dist/src/tools/account.js.map +1 -0
  27. package/dist/src/tools/agent-wallet.d.ts +5 -0
  28. package/dist/src/tools/agent-wallet.d.ts.map +1 -0
  29. package/dist/src/tools/agent-wallet.js +355 -0
  30. package/dist/src/tools/agent-wallet.js.map +1 -0
  31. package/dist/src/tools/crypto.d.ts +4 -0
  32. package/dist/src/tools/crypto.d.ts.map +1 -0
  33. package/dist/src/tools/crypto.js +102 -0
  34. package/dist/src/tools/crypto.js.map +1 -0
  35. package/dist/src/tools/fetch.d.ts +4 -0
  36. package/dist/src/tools/fetch.d.ts.map +1 -0
  37. package/dist/src/tools/fetch.js +73 -0
  38. package/dist/src/tools/fetch.js.map +1 -0
  39. package/dist/src/tools/keys.d.ts +4 -0
  40. package/dist/src/tools/keys.d.ts.map +1 -0
  41. package/dist/src/tools/keys.js +88 -0
  42. package/dist/src/tools/keys.js.map +1 -0
  43. package/dist/src/tools/paypal.d.ts +4 -0
  44. package/dist/src/tools/paypal.d.ts.map +1 -0
  45. package/dist/src/tools/paypal.js +50 -0
  46. package/dist/src/tools/paypal.js.map +1 -0
  47. package/dist/src/tools/plans.d.ts +4 -0
  48. package/dist/src/tools/plans.d.ts.map +1 -0
  49. package/dist/src/tools/plans.js +48 -0
  50. package/dist/src/tools/plans.js.map +1 -0
  51. package/dist/src/tools/proxy.d.ts +4 -0
  52. package/dist/src/tools/proxy.d.ts.map +1 -0
  53. package/dist/src/tools/proxy.js +51 -0
  54. package/dist/src/tools/proxy.js.map +1 -0
  55. package/dist/src/tools/sessions.d.ts +4 -0
  56. package/dist/src/tools/sessions.d.ts.map +1 -0
  57. package/dist/src/tools/sessions.js +21 -0
  58. package/dist/src/tools/sessions.js.map +1 -0
  59. package/dist/src/tools/slots.d.ts +4 -0
  60. package/dist/src/tools/slots.d.ts.map +1 -0
  61. package/dist/src/tools/slots.js +61 -0
  62. package/dist/src/tools/slots.js.map +1 -0
  63. package/dist/src/tools/teams.d.ts +4 -0
  64. package/dist/src/tools/teams.d.ts.map +1 -0
  65. package/dist/src/tools/teams.js +520 -0
  66. package/dist/src/tools/teams.js.map +1 -0
  67. package/dist/src/tools/usage.d.ts +4 -0
  68. package/dist/src/tools/usage.d.ts.map +1 -0
  69. package/dist/src/tools/usage.js +79 -0
  70. package/dist/src/tools/usage.js.map +1 -0
  71. package/dist/src/tools/wallet-auth.d.ts +6 -0
  72. package/dist/src/tools/wallet-auth.d.ts.map +1 -0
  73. package/dist/src/tools/wallet-auth.js +158 -0
  74. package/dist/src/tools/wallet-auth.js.map +1 -0
  75. package/dist/src/tools/wallet.d.ts +4 -0
  76. package/dist/src/tools/wallet.d.ts.map +1 -0
  77. package/dist/src/tools/wallet.js +57 -0
  78. package/dist/src/tools/wallet.js.map +1 -0
  79. package/dist/src/types.d.ts +142 -0
  80. package/dist/src/types.d.ts.map +1 -0
  81. package/dist/src/types.js +2 -0
  82. package/dist/src/types.js.map +1 -0
  83. package/package.json +33 -0
@@ -0,0 +1,88 @@
1
+ import { z } from "zod";
2
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
3
+ const KEYS_RATE_MAX = 10;
4
+ const KEYS_RATE_WINDOW_MS = 60_000;
5
+ const keysTimestamps = [];
6
+ function checkKeysRateLimit() {
7
+ const now = Date.now();
8
+ while (keysTimestamps.length > 0 && now - keysTimestamps[0] > KEYS_RATE_WINDOW_MS) {
9
+ keysTimestamps.shift();
10
+ }
11
+ if (keysTimestamps.length > 100)
12
+ keysTimestamps.length = 100;
13
+ if (keysTimestamps.length >= KEYS_RATE_MAX)
14
+ return false;
15
+ keysTimestamps.push(now);
16
+ return true;
17
+ }
18
+ export function registerKeysTools(server, httpClient) {
19
+ server.tool("dominusnode_list_keys", "List all API keys on this account. Shows key prefix, label, and last used date.", {}, async () => {
20
+ try {
21
+ const data = await httpClient.get("/api/keys");
22
+ const keys = data.keys ?? [];
23
+ if (keys.length === 0) {
24
+ return { content: [{ type: "text", text: "No API keys found." }] };
25
+ }
26
+ const lines = keys.map((k) => `${k.prefix}... | Label: ${k.label || "(none)"} | Created: ${k.createdAt} | Revoked: ${k.revokedAt ?? "no"}`);
27
+ lines.unshift(`API Keys (${keys.length}):`);
28
+ return { content: [{ type: "text", text: lines.join("\n") }] };
29
+ }
30
+ catch (err) {
31
+ return {
32
+ isError: true,
33
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
34
+ };
35
+ }
36
+ });
37
+ 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.string().min(1).max(100).describe("Descriptive label for the key (e.g. 'scraping-agent')"),
39
+ }, async (args) => {
40
+ try {
41
+ if (!checkKeysRateLimit()) {
42
+ return {
43
+ isError: true,
44
+ content: [{ type: "text", text: "Rate limit exceeded: maximum 10 key operations per minute. Please wait before retrying." }],
45
+ };
46
+ }
47
+ const data = await httpClient.post("/api/keys", { label: args.label });
48
+ const text = [
49
+ `New API key created!`,
50
+ `Key: ${data.key}`,
51
+ `ID: ${data.id}`,
52
+ `Label: ${data.label}`,
53
+ ``,
54
+ `IMPORTANT: Save this key now — it will not be shown again.`,
55
+ `WARNING: This key is a secret credential. Do not log it, share it,`,
56
+ `or include it in any output that may be visible to others.`,
57
+ ].join("\n");
58
+ return { content: [{ type: "text", text }] };
59
+ }
60
+ catch (err) {
61
+ return {
62
+ isError: true,
63
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
64
+ };
65
+ }
66
+ });
67
+ server.tool("dominusnode_revoke_key", "Revoke an API key by ID. This immediately disables the key. Cannot be undone.", {
68
+ key_id: z.string().regex(UUID_REGEX, "Invalid key ID — must be a UUID").describe("UUID of the API key to revoke"),
69
+ }, async (args) => {
70
+ try {
71
+ if (!checkKeysRateLimit()) {
72
+ return {
73
+ isError: true,
74
+ content: [{ type: "text", text: "Rate limit exceeded: maximum 10 key operations per minute. Please wait before retrying." }],
75
+ };
76
+ }
77
+ await httpClient.delete(`/api/keys/${encodeURIComponent(args.key_id)}`);
78
+ return { content: [{ type: "text", text: `API key ${args.key_id} has been revoked.` }] };
79
+ }
80
+ catch (err) {
81
+ return {
82
+ isError: true,
83
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
84
+ };
85
+ }
86
+ });
87
+ }
88
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/tools/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { HttpClient } from "../http-client.js";
3
+ export declare function registerPaypalTools(server: McpServer, httpClient: HttpClient): void;
4
+ //# sourceMappingURL=paypal.d.ts.map
@@ -0,0 +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;AAiBpD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CA6CnF"}
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ const PAYPAL_PAY_MAX = 5;
3
+ const PAYPAL_PAY_WINDOW_MS = 3_600_000;
4
+ const paypalPayTimestamps = [];
5
+ function checkPaypalPayLimit() {
6
+ const now = Date.now();
7
+ while (paypalPayTimestamps.length > 0 && now - paypalPayTimestamps[0] > PAYPAL_PAY_WINDOW_MS) {
8
+ paypalPayTimestamps.shift();
9
+ }
10
+ if (paypalPayTimestamps.length > 100)
11
+ paypalPayTimestamps.length = 100;
12
+ if (paypalPayTimestamps.length >= PAYPAL_PAY_MAX)
13
+ return false;
14
+ paypalPayTimestamps.push(now);
15
+ return true;
16
+ }
17
+ export function registerPaypalTools(server, httpClient) {
18
+ 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.number().int().min(500).max(100000).describe("Amount in cents to add to wallet (min 500 = $5.00, max 100000 = $1,000.00)"),
20
+ }, async (args) => {
21
+ try {
22
+ if (!checkPaypalPayLimit()) {
23
+ return {
24
+ isError: true,
25
+ content: [{ type: "text", text: "Rate limit exceeded: maximum 5 PayPal orders per hour. Please wait before creating another." }],
26
+ };
27
+ }
28
+ const data = await httpClient.post("/api/wallet/topup/paypal", { amountCents: args.amount_cents });
29
+ const text = [
30
+ `PayPal Payment Order Created`,
31
+ ``,
32
+ `Order ID: ${data.orderId}`,
33
+ `Amount: $${(data.amountCents / 100).toFixed(2)}`,
34
+ ``,
35
+ `Approve payment here: ${data.approvalUrl}`,
36
+ ``,
37
+ `After approving, your wallet will be credited automatically.`,
38
+ `You can also check the status using dominusnode_check_payment with the order ID.`,
39
+ ].join("\n");
40
+ return { content: [{ type: "text", text }] };
41
+ }
42
+ catch (err) {
43
+ return {
44
+ isError: true,
45
+ content: [{ type: "text", text: `PayPal payment error: ${err instanceof Error ? err.message : String(err)}` }],
46
+ };
47
+ }
48
+ });
49
+ }
50
+ //# sourceMappingURL=paypal.js.map
@@ -0,0 +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,OAAO,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,oBAAoB,EAAE,CAAC;QAC7F,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,CAAC,MAAiB,EAAE,UAAsB;IAC3E,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,2QAA2Q,EAC3Q;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,4EAA4E,CAAC;KAC3I,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,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6FAA6F,EAAE,CAAC;iBACjI,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAKhC,0BAA0B,EAC1B,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CACnC,CAAC;YAEF,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,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;aAC/G,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { HttpClient } from "../http-client.js";
3
+ export declare function registerPlansTools(server: McpServer, httpClient: HttpClient): void;
4
+ //# sourceMappingURL=plans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../../src/tools/plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQpD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAoDlF"}
@@ -0,0 +1,48 @@
1
+ function formatBytes(bytes) {
2
+ if (bytes < 1024 * 1024 * 1024)
3
+ return `${(bytes / (1024 * 1024)).toFixed(0)} MB`;
4
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
5
+ }
6
+ export function registerPlansTools(server, httpClient) {
7
+ server.tool("dominusnode_get_plan", "Get current plan details including monthly usage and bandwidth limits.", {}, async () => {
8
+ try {
9
+ const data = await httpClient.get("/api/plans/user/plan");
10
+ const bandwidthLine = data.usage.limitGB != null
11
+ ? `Bandwidth: ${formatBytes(data.usage.monthlyUsageBytes)} / ${formatBytes(data.usage.limitBytes)} (${data.usage.percentUsed?.toFixed(1) ?? "0.0"}%)`
12
+ : `Bandwidth: ${formatBytes(data.usage.monthlyUsageBytes)} (unlimited)`;
13
+ const text = [
14
+ `Plan: ${data.plan.name}`,
15
+ `Price: $${data.plan.pricePerGbUsd.toFixed(2)}/GB`,
16
+ bandwidthLine,
17
+ `Max Connections: ${data.plan.maxConnections}`,
18
+ `Proxy Types: ${Array.isArray(data.plan.allowedProxyTypes) ? data.plan.allowedProxyTypes.join(", ") : (data.plan.allowedProxyTypes ?? "all")}`,
19
+ ].join("\n");
20
+ return { content: [{ type: "text", text }] };
21
+ }
22
+ catch (err) {
23
+ return {
24
+ isError: true,
25
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
26
+ };
27
+ }
28
+ });
29
+ server.tool("dominusnode_list_plans", "List all available pricing plans with bandwidth, connection limits, and features.", {}, async () => {
30
+ try {
31
+ const data = await httpClient.get("/api/plans");
32
+ const plans = data.plans ?? [];
33
+ if (plans.length === 0) {
34
+ return { content: [{ type: "text", text: "No plans available." }] };
35
+ }
36
+ const lines = plans.map((p) => `${p.name} — $${p.pricePerGbUsd.toFixed(2)}/GB | ${p.monthlyBandwidthGB != null ? `${p.monthlyBandwidthGB} GB` : "unlimited"} bandwidth | ${p.maxConnections} connections`);
37
+ lines.unshift("Available Plans:");
38
+ return { content: [{ type: "text", text: lines.join("\n") }] };
39
+ }
40
+ catch (err) {
41
+ return {
42
+ isError: true,
43
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
44
+ };
45
+ }
46
+ });
47
+ }
48
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/tools/plans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { HttpClient } from "../http-client.js";
3
+ export declare function registerProxyTools(server: McpServer, httpClient: HttpClient): void;
4
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +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,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CA0DlF"}
@@ -0,0 +1,51 @@
1
+ export function registerProxyTools(server, httpClient) {
2
+ server.tool("dominusnode_get_proxy_config", "Get proxy endpoint configuration including HTTP/SOCKS5 endpoints, supported countries, pricing, and username format for geo-targeting.", {}, async () => {
3
+ try {
4
+ const config = await httpClient.get("/api/proxy/config");
5
+ const text = [
6
+ `HTTP Endpoint: ${config.httpProxy.host}:${config.httpProxy.port}`,
7
+ `SOCKS5 Endpoint: ${config.socks5Proxy.host}:${config.socks5Proxy.port}`,
8
+ ``,
9
+ `Pricing:`,
10
+ ` Datacenter Pool: $3.00/GB (prefix: dc-)`,
11
+ ` Residential Pool: $5.00/GB (prefix: residential-)`,
12
+ ` Auto (default): tries DC first, falls back to residential`,
13
+ ``,
14
+ `Username Format: <pool>-country-<CC>:<api_key>`,
15
+ ` Examples: dc-country-US:<key> | residential-country-DE:<key> | auto:<key>`,
16
+ ``,
17
+ `Supported Countries: ${config.supportedCountries?.join(", ") ?? "all"}`,
18
+ `Blocked Countries (OFAC): ${config.blockedCountries?.join(", ") ?? "none"}`,
19
+ `Geo-Targeting: Country: yes, State: ${config.geoTargeting?.stateSupport ? "yes" : "no"}, City: ${config.geoTargeting?.citySupport ? "yes" : "no"}`,
20
+ ].join("\n");
21
+ return { content: [{ type: "text", text }] };
22
+ }
23
+ catch (err) {
24
+ return {
25
+ isError: true,
26
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
27
+ };
28
+ }
29
+ });
30
+ server.tool("dominusnode_get_proxy_status", "Get live proxy network status including latency, active session count, and uptime.", {}, async () => {
31
+ try {
32
+ const status = await httpClient.get("/api/proxy/status");
33
+ const text = [
34
+ `Status: ${status.status}`,
35
+ `Latency: ${status.avgLatencyMs ?? 0}ms`,
36
+ `Active Sessions: ${status.activeSessions}`,
37
+ `Uptime: ${status.uptimeSeconds ?? 0}s`,
38
+ status.endpoints ? `HTTP: ${status.endpoints.http}` : null,
39
+ status.endpoints ? `SOCKS5: ${status.endpoints.socks5}` : null,
40
+ ].filter(Boolean).join("\n");
41
+ return { content: [{ type: "text", text }] };
42
+ }
43
+ catch (err) {
44
+ return {
45
+ isError: true,
46
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
47
+ };
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/tools/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { HttpClient } from "../http-client.js";
3
+ export declare function registerSessionsTools(server: McpServer, httpClient: HttpClient): void;
4
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/tools/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAyBrF"}
@@ -0,0 +1,21 @@
1
+ export function registerSessionsTools(server, httpClient) {
2
+ server.tool("dominusnode_get_active_sessions", "Get all active proxy sessions. Sessions are created automatically per dominusnode_fetch call and settled on completion — no manual start/end needed.", {}, async () => {
3
+ try {
4
+ const data = await httpClient.get("/api/sessions/active");
5
+ const sessions = data.sessions ?? [];
6
+ if (sessions.length === 0) {
7
+ return { content: [{ type: "text", text: "No active proxy sessions.\n\nNote: Sessions are managed automatically. Each dominusnode_fetch call creates and settles a session. For sticky sessions (same exit IP), use the same session parameter in the proxy username format." }] };
8
+ }
9
+ const lines = sessions.map((s) => `${s.id} | Status: ${s.status} | Since: ${s.startedAt}`);
10
+ lines.unshift(`Active Sessions (${sessions.length}):`);
11
+ return { content: [{ type: "text", text: lines.join("\n") }] };
12
+ }
13
+ catch (err) {
14
+ return {
15
+ isError: true,
16
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
17
+ };
18
+ }
19
+ });
20
+ }
21
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/tools/sessions.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,UAAsB;IAC7E,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,sJAAsJ,EACtJ,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAgC,sBAAsB,CAAC,CAAC;YACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oOAAoO,EAAE,CAAC,EAAE,CAAC;YACrR,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC,SAAS,EAAE,CAC/D,CAAC;YACF,KAAK,CAAC,OAAO,CAAC,oBAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;aAChG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { HttpClient } from "../http-client.js";
3
+ export declare function registerSlotsTools(server: McpServer, httpClient: HttpClient): void;
4
+ //# sourceMappingURL=slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../src/tools/slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiBpD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CA4ElF"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ export function registerSlotsTools(server, httpClient) {
3
+ server.tool("dominusnode_check_slots", "Check how many alpha registration slots are available. Returns total, used, and remaining slot counts. No authentication required.", {}, async () => {
4
+ try {
5
+ const data = await httpClient.get("/api/slots", false);
6
+ if (data.unlimited) {
7
+ return {
8
+ content: [{ type: "text", text: "Registration is currently unlimited — no slot cap in effect." }],
9
+ };
10
+ }
11
+ const text = [
12
+ `Alpha Slot Availability`,
13
+ ` Total slots: ${data.total}`,
14
+ ` Used: ${data.used}`,
15
+ ` Remaining: ${data.remaining}`,
16
+ ``,
17
+ data.remaining > 0
18
+ ? `Slots available! Use dominusnode_setup or dominusnode_register to create an account.`
19
+ : `All slots are taken. Use dominusnode_join_waitlist to get notified when a slot opens.`,
20
+ ].join("\n");
21
+ return { content: [{ type: "text", text }] };
22
+ }
23
+ catch (err) {
24
+ return {
25
+ isError: true,
26
+ content: [{ type: "text", text: `Error checking slots: ${err instanceof Error ? err.message : String(err)}` }],
27
+ };
28
+ }
29
+ });
30
+ server.tool("dominusnode_join_waitlist", "Join the waitlist to be notified when an alpha registration slot opens. No authentication required.", {
31
+ email: z.string().email().describe("Email address to be notified at"),
32
+ }, async (args) => {
33
+ try {
34
+ const data = await httpClient.post("/api/waitlist/join", { email: args.email }, false);
35
+ return {
36
+ content: [{ type: "text", text: data.message || "You've been added to the waitlist. We'll email you when a slot opens." }],
37
+ };
38
+ }
39
+ catch (err) {
40
+ return {
41
+ isError: true,
42
+ content: [{ type: "text", text: `Waitlist error: ${err instanceof Error ? err.message : String(err)}` }],
43
+ };
44
+ }
45
+ });
46
+ server.tool("dominusnode_get_waitlist_count", "Get the number of people currently on the waitlist. No authentication required.", {}, async () => {
47
+ try {
48
+ const data = await httpClient.get("/api/waitlist/count", false);
49
+ return {
50
+ content: [{ type: "text", text: `Waitlist: ${data.pending} people waiting for an alpha slot.` }],
51
+ };
52
+ }
53
+ catch (err) {
54
+ return {
55
+ isError: true,
56
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
57
+ };
58
+ }
59
+ });
60
+ }
61
+ //# sourceMappingURL=slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.js","sourceRoot":"","sources":["../../../src/tools/slots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { HttpClient } from "../http-client.js";
3
+ export declare function registerTeamsTools(server: McpServer, httpClient: HttpClient): void;
4
+ //# sourceMappingURL=teams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAmBpD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAkvBlF"}