pulsecloud-mcp 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.
package/dist/auth.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export declare function getToken(): string | null;
2
+ export declare function getAccountEmail(): string | null;
3
+ export declare function isAuthenticated(): boolean;
4
+ export declare function setToken(accountEmail: string, pteroToken: string): void;
5
+ export declare function logout(): void;
6
+ export declare function getAuthUrl(): string;
7
+ export declare function startCallbackServer(port?: number): Promise<{
8
+ url: string;
9
+ port: number;
10
+ }>;
11
+ export declare function stopCallbackServer(): void;
12
+ export declare function waitForCallback(timeoutMs?: number): Promise<string>;
13
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAuCA,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAEhE;AAED,wBAAgB,MAAM,SAKrB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAKD,wBAAsB,mBAAmB,CAAC,IAAI,SAAI,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC1F;AAED,wBAAgB,kBAAkB,SAKjC;AAED,wBAAgB,eAAe,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAYnE"}
package/dist/auth.js ADDED
@@ -0,0 +1,111 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import * as http from 'node:http';
4
+ const AUTH_FILE = process.env.PULSECLOUD_AUTH_FILE
5
+ || (process.env.HOME ? `${process.env.HOME}/.pulsecloud-mcp/auth.json` : '/tmp/.pulsecloud-mcp/auth.json');
6
+ let cachedAuth = null;
7
+ function ensureDir() {
8
+ const dir = path.dirname(AUTH_FILE);
9
+ if (!fs.existsSync(dir))
10
+ fs.mkdirSync(dir, { recursive: true });
11
+ }
12
+ function load() {
13
+ if (cachedAuth)
14
+ return cachedAuth;
15
+ try {
16
+ if (fs.existsSync(AUTH_FILE)) {
17
+ const raw = fs.readFileSync(AUTH_FILE, 'utf-8');
18
+ cachedAuth = JSON.parse(raw);
19
+ return cachedAuth;
20
+ }
21
+ }
22
+ catch { /* ignore */ }
23
+ return null;
24
+ }
25
+ function save(data) {
26
+ ensureDir();
27
+ fs.writeFileSync(AUTH_FILE, JSON.stringify(data, null, 2));
28
+ cachedAuth = data;
29
+ }
30
+ export function getToken() {
31
+ return load()?.ptero_token ?? null;
32
+ }
33
+ export function getAccountEmail() {
34
+ return load()?.account_email ?? null;
35
+ }
36
+ export function isAuthenticated() {
37
+ return getToken() !== null;
38
+ }
39
+ export function setToken(accountEmail, pteroToken) {
40
+ save({ account_email: accountEmail, ptero_token: pteroToken, created_at: new Date().toISOString() });
41
+ }
42
+ export function logout() {
43
+ cachedAuth = null;
44
+ try {
45
+ if (fs.existsSync(AUTH_FILE))
46
+ fs.unlinkSync(AUTH_FILE);
47
+ }
48
+ catch { /* ignore */ }
49
+ }
50
+ export function getAuthUrl() {
51
+ return 'https://pulsecloud.com.br/mcp/authorize';
52
+ }
53
+ let callbackServer = null;
54
+ let pendingCallback = null;
55
+ export async function startCallbackServer(port = 0) {
56
+ return new Promise((resolve) => {
57
+ const server = http.createServer((req, res) => {
58
+ const url = new URL(req.url || '/', `http://localhost:${port}`);
59
+ if (url.pathname === '/callback') {
60
+ const token = url.searchParams.get('token') || '';
61
+ const error = url.searchParams.get('error') || '';
62
+ if (error) {
63
+ res.writeHead(400, { 'Content-Type': 'text/html' });
64
+ res.end(`<html><body><h2>Erro: ${error}</h2></body></html>`);
65
+ return;
66
+ }
67
+ if (token && pendingCallback) {
68
+ pendingCallback(token);
69
+ pendingCallback = null;
70
+ res.writeHead(200, { 'Content-Type': 'text/html' });
71
+ res.end(`<html><body><h2>Token recebido! Feche esta janela.</h2></body></html>`);
72
+ setTimeout(() => server.close(), 1000);
73
+ }
74
+ else {
75
+ res.writeHead(400, { 'Content-Type': 'text/html' });
76
+ res.end(`<html><body><h2>Token nao encontrado.</h2></body></html>`);
77
+ }
78
+ return;
79
+ }
80
+ res.writeHead(404).end('Not found');
81
+ });
82
+ server.listen(port, '127.0.0.1', () => {
83
+ const addr = server.address();
84
+ const actualPort = typeof addr === 'object' && addr ? addr.port : port;
85
+ callbackServer = server;
86
+ resolve({
87
+ url: `http://localhost:${actualPort}/callback`,
88
+ port: actualPort,
89
+ });
90
+ });
91
+ });
92
+ }
93
+ export function stopCallbackServer() {
94
+ if (callbackServer) {
95
+ callbackServer.close();
96
+ callbackServer = null;
97
+ }
98
+ }
99
+ export function waitForCallback(timeoutMs = 120000) {
100
+ return new Promise((resolve, reject) => {
101
+ const timeout = setTimeout(() => {
102
+ pendingCallback = null;
103
+ reject(new Error('Tempo limite excedido. Nao foi possivel receber o token.'));
104
+ }, timeoutMs);
105
+ pendingCallback = (token) => {
106
+ clearTimeout(timeout);
107
+ resolve(token);
108
+ };
109
+ });
110
+ }
111
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const CONFIG: {
2
+ PTERODACTYL_URL: string;
3
+ CTRLPANEL_URL: string;
4
+ STATUS_URL: string;
5
+ NPM_PROXY_URL: string;
6
+ CLOUDFLARE_API: string;
7
+ CLOUDFLARE_ZONE_ID: string;
8
+ CLOUDFLARE_TOKEN: string;
9
+ AUTH_FILE: string;
10
+ };
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;CAWlB,CAAA"}
package/dist/config.js ADDED
@@ -0,0 +1,12 @@
1
+ export const CONFIG = {
2
+ PTERODACTYL_URL: process.env.PULSECLOUD_PTERODACTYL_URL || 'https://console.pulsecloud.com.br',
3
+ CTRLPANEL_URL: process.env.PULSECLOUD_CTRLPANEL_URL || 'https://pulsecloud.com.br',
4
+ STATUS_URL: process.env.PULSECLOUD_STATUS_URL || 'https://status.pulsecloud.com.br',
5
+ NPM_PROXY_URL: process.env.PULSECLOUD_NPM_PROXY || 'http://46.224.134.22:3001',
6
+ CLOUDFLARE_API: 'https://api.cloudflare.com/client/v4',
7
+ CLOUDFLARE_ZONE_ID: process.env.PULSECLOUD_CF_ZONE || '371200d1989f64babbf842e1ea6442c2',
8
+ CLOUDFLARE_TOKEN: process.env.PULSECLOUD_CF_TOKEN || '',
9
+ AUTH_FILE: process.env.PULSECLOUD_AUTH_FILE
10
+ || (process.env.HOME ? `${process.env.HOME}/.pulsecloud-mcp/auth.json` : '/tmp/.pulsecloud-mcp/auth.json'),
11
+ };
12
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,mCAAmC;IAC9F,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,2BAA2B;IAClF,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,kCAAkC;IACnF,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,2BAA2B;IAC9E,cAAc,EAAE,sCAAsC;IACtD,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,kCAAkC;IACxF,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE;IAEvD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;WACtC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,4BAA4B,CAAC,CAAC,CAAC,gCAAgC,CAAC;CAC7G,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}