mcpize 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/LICENSE +21 -0
- package/README.md +140 -0
- package/dist/commands/deploy.d.ts +8 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +337 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +257 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +238 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +6 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +147 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +88 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +9 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +13 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +173 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/secrets.d.ts +16 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +195 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +187 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +241 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +154 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +364 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +20 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +106 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/cache.d.ts +39 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +112 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/config.d.ts +21 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +90 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/degit.d.ts +25 -0
- package/dist/lib/degit.d.ts.map +1 -0
- package/dist/lib/degit.js +187 -0
- package/dist/lib/degit.js.map +1 -0
- package/dist/lib/git.d.ts +10 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +43 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/project.d.ts +38 -0
- package/dist/lib/project.d.ts.map +1 -0
- package/dist/lib/project.js +72 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/tarball.d.ts +7 -0
- package/dist/lib/tarball.d.ts.map +1 -0
- package/dist/lib/tarball.js +130 -0
- package/dist/lib/tarball.js.map +1 -0
- package/package.json +56 -0
package/dist/lib/auth.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { getToken, getRefreshToken, isTokenExpired, setSession, clearSession, getSupabaseUrl, getSupabaseAnonKey, } from "./config.js";
|
|
2
|
+
// Global token override (set via --token flag)
|
|
3
|
+
let tokenOverride = null;
|
|
4
|
+
/**
|
|
5
|
+
* Set token override (from --token flag).
|
|
6
|
+
* This takes highest priority over env and file-based tokens.
|
|
7
|
+
*/
|
|
8
|
+
export function setTokenOverride(token) {
|
|
9
|
+
tokenOverride = token;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get token from environment variable.
|
|
13
|
+
* Used for CI/CD environments.
|
|
14
|
+
*/
|
|
15
|
+
function getEnvToken() {
|
|
16
|
+
return process.env.MCPIZE_TOKEN || null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Refresh the access token using the stored refresh token.
|
|
20
|
+
* Returns the new access token or null if refresh failed.
|
|
21
|
+
*/
|
|
22
|
+
async function refreshAccessToken() {
|
|
23
|
+
const refreshToken = getRefreshToken();
|
|
24
|
+
if (!refreshToken) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const supabaseUrl = getSupabaseUrl();
|
|
28
|
+
const anonKey = getSupabaseAnonKey();
|
|
29
|
+
try {
|
|
30
|
+
const response = await fetch(`${supabaseUrl}/auth/v1/token?grant_type=refresh_token`, {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
apikey: anonKey,
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify({
|
|
37
|
+
refresh_token: refreshToken,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
const error = (await response.json());
|
|
42
|
+
console.error(`Token refresh failed: ${error.error_description || error.error}`);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const data = (await response.json());
|
|
46
|
+
// Save the new session
|
|
47
|
+
setSession(data.access_token, data.refresh_token, data.expires_in);
|
|
48
|
+
return data.access_token;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(`Token refresh error: ${error instanceof Error ? error.message : String(error)}`);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get a valid access token, refreshing if necessary.
|
|
57
|
+
* Priority: --token flag > MCPIZE_TOKEN env > file-based session
|
|
58
|
+
* Returns null if no valid token is available and refresh failed.
|
|
59
|
+
*/
|
|
60
|
+
export async function getValidToken() {
|
|
61
|
+
// 1. Highest priority: --token flag
|
|
62
|
+
if (tokenOverride) {
|
|
63
|
+
return tokenOverride;
|
|
64
|
+
}
|
|
65
|
+
// 2. Environment variable (for CI/CD)
|
|
66
|
+
const envToken = getEnvToken();
|
|
67
|
+
if (envToken) {
|
|
68
|
+
return envToken;
|
|
69
|
+
}
|
|
70
|
+
// 3. File-based session with auto-refresh
|
|
71
|
+
const token = getToken();
|
|
72
|
+
// No token at all
|
|
73
|
+
if (!token) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// Token not expired, use it
|
|
77
|
+
if (!isTokenExpired()) {
|
|
78
|
+
return token;
|
|
79
|
+
}
|
|
80
|
+
// Token expired, try to refresh
|
|
81
|
+
const newToken = await refreshAccessToken();
|
|
82
|
+
if (!newToken) {
|
|
83
|
+
// Refresh failed, clear session
|
|
84
|
+
clearSession();
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return newToken;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if user is authenticated (has valid or refreshable session).
|
|
91
|
+
*/
|
|
92
|
+
export async function isAuthenticated() {
|
|
93
|
+
const token = await getValidToken();
|
|
94
|
+
return token !== null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Require authentication. Throws if not authenticated.
|
|
98
|
+
*/
|
|
99
|
+
export async function requireAuth() {
|
|
100
|
+
const token = await getValidToken();
|
|
101
|
+
if (!token) {
|
|
102
|
+
throw new Error("Not authenticated. Run: mcpize login");
|
|
103
|
+
}
|
|
104
|
+
return token;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTL values for different cache types
|
|
3
|
+
*/
|
|
4
|
+
export declare const CacheTTL: {
|
|
5
|
+
readonly STATUS: number;
|
|
6
|
+
readonly LOGS: number;
|
|
7
|
+
readonly TEMPLATES: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Get cached data if it exists and is not expired
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCache<T>(key: string): {
|
|
13
|
+
data: T;
|
|
14
|
+
age: number;
|
|
15
|
+
} | null;
|
|
16
|
+
/**
|
|
17
|
+
* Get cached data even if expired (for fallback when offline)
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCacheStale<T>(key: string): {
|
|
20
|
+
data: T;
|
|
21
|
+
age: number;
|
|
22
|
+
} | null;
|
|
23
|
+
/**
|
|
24
|
+
* Set cached data with TTL
|
|
25
|
+
*/
|
|
26
|
+
export declare function setCache<T>(key: string, data: T, ttl: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Format age for display (e.g., "3 minutes ago")
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatAge(ageMs: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* Cache keys for different data types
|
|
33
|
+
*/
|
|
34
|
+
export declare const CacheKeys: {
|
|
35
|
+
readonly serverStatus: (serverId: string) => string;
|
|
36
|
+
readonly serverLogs: (serverId: string, type: string) => string;
|
|
37
|
+
readonly templates: () => string;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;CAIX,CAAC;AAcX;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBxE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAenE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgB/C;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;sCACK,MAAM;oCACR,MAAM,QAAQ,MAAM;;CAEnC,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const CACHE_DIR = join(homedir(), ".mcpize", "cache");
|
|
5
|
+
/**
|
|
6
|
+
* TTL values for different cache types
|
|
7
|
+
*/
|
|
8
|
+
export const CacheTTL = {
|
|
9
|
+
STATUS: 5 * 60 * 1000, // 5 minutes
|
|
10
|
+
LOGS: 5 * 60 * 1000, // 5 minutes
|
|
11
|
+
TEMPLATES: 24 * 60 * 60 * 1000, // 24 hours
|
|
12
|
+
};
|
|
13
|
+
function ensureCacheDir() {
|
|
14
|
+
if (!existsSync(CACHE_DIR)) {
|
|
15
|
+
mkdirSync(CACHE_DIR, { recursive: true, mode: 0o700 });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function getCacheFilePath(key) {
|
|
19
|
+
// Sanitize key to be filesystem safe
|
|
20
|
+
const safeKey = key.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
21
|
+
return join(CACHE_DIR, `${safeKey}.json`);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get cached data if it exists and is not expired
|
|
25
|
+
*/
|
|
26
|
+
export function getCache(key) {
|
|
27
|
+
ensureCacheDir();
|
|
28
|
+
const filePath = getCacheFilePath(key);
|
|
29
|
+
if (!existsSync(filePath)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const content = readFileSync(filePath, "utf-8");
|
|
34
|
+
const entry = JSON.parse(content);
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
const age = now - entry.timestamp;
|
|
37
|
+
// Check if expired
|
|
38
|
+
if (age > entry.ttl) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return { data: entry.data, age };
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get cached data even if expired (for fallback when offline)
|
|
49
|
+
*/
|
|
50
|
+
export function getCacheStale(key) {
|
|
51
|
+
ensureCacheDir();
|
|
52
|
+
const filePath = getCacheFilePath(key);
|
|
53
|
+
if (!existsSync(filePath)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const content = readFileSync(filePath, "utf-8");
|
|
58
|
+
const entry = JSON.parse(content);
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const age = now - entry.timestamp;
|
|
61
|
+
return { data: entry.data, age };
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Set cached data with TTL
|
|
69
|
+
*/
|
|
70
|
+
export function setCache(key, data, ttl) {
|
|
71
|
+
ensureCacheDir();
|
|
72
|
+
const filePath = getCacheFilePath(key);
|
|
73
|
+
const entry = {
|
|
74
|
+
data,
|
|
75
|
+
timestamp: Date.now(),
|
|
76
|
+
ttl,
|
|
77
|
+
};
|
|
78
|
+
try {
|
|
79
|
+
writeFileSync(filePath, JSON.stringify(entry, null, 2), { mode: 0o600 });
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Ignore cache write errors
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Format age for display (e.g., "3 minutes ago")
|
|
87
|
+
*/
|
|
88
|
+
export function formatAge(ageMs) {
|
|
89
|
+
const seconds = Math.floor(ageMs / 1000);
|
|
90
|
+
const minutes = Math.floor(seconds / 60);
|
|
91
|
+
const hours = Math.floor(minutes / 60);
|
|
92
|
+
const days = Math.floor(hours / 24);
|
|
93
|
+
if (days > 0) {
|
|
94
|
+
return `${days} day${days > 1 ? "s" : ""} ago`;
|
|
95
|
+
}
|
|
96
|
+
if (hours > 0) {
|
|
97
|
+
return `${hours} hour${hours > 1 ? "s" : ""} ago`;
|
|
98
|
+
}
|
|
99
|
+
if (minutes > 0) {
|
|
100
|
+
return `${minutes} minute${minutes > 1 ? "s" : ""} ago`;
|
|
101
|
+
}
|
|
102
|
+
return "just now";
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Cache keys for different data types
|
|
106
|
+
*/
|
|
107
|
+
export const CacheKeys = {
|
|
108
|
+
serverStatus: (serverId) => `status-${serverId}`,
|
|
109
|
+
serverLogs: (serverId, type) => `logs-${serverId}-${type}`,
|
|
110
|
+
templates: () => "templates",
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface MCPizeConfig {
|
|
2
|
+
token?: string;
|
|
3
|
+
refreshToken?: string;
|
|
4
|
+
expiresAt?: number;
|
|
5
|
+
apiUrl?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function ensureConfigDir(): void;
|
|
8
|
+
export declare function loadConfig(): MCPizeConfig;
|
|
9
|
+
export declare function saveConfig(config: MCPizeConfig): void;
|
|
10
|
+
export declare function getToken(): string | undefined;
|
|
11
|
+
export declare function setToken(token: string): void;
|
|
12
|
+
export declare function clearToken(): void;
|
|
13
|
+
export declare function getApiUrl(): string;
|
|
14
|
+
export declare function getSupabaseUrl(): string;
|
|
15
|
+
export declare function getFunctionsUrl(): string;
|
|
16
|
+
export declare function getSupabaseAnonKey(): string;
|
|
17
|
+
export declare function setSession(accessToken: string, refreshToken: string, expiresIn: number): void;
|
|
18
|
+
export declare function getRefreshToken(): string | undefined;
|
|
19
|
+
export declare function isTokenExpired(): boolean;
|
|
20
|
+
export declare function clearSession(): void;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED,wBAAgB,UAAU,IAAI,YAAY,CAazC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAQrD;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAG7C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI5C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAIjC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAOxC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAED,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,IAAI,CAMN;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAGpD;AAED,wBAAgB,cAAc,IAAI,OAAO,CAKxC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAMnC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync, } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const CONFIG_DIR = join(homedir(), ".mcpize");
|
|
5
|
+
const CONFIG_FILE = join(CONFIG_DIR, "config.json");
|
|
6
|
+
export function ensureConfigDir() {
|
|
7
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
8
|
+
mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function loadConfig() {
|
|
12
|
+
ensureConfigDir();
|
|
13
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const content = readFileSync(CONFIG_FILE, "utf-8");
|
|
18
|
+
return JSON.parse(content);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function saveConfig(config) {
|
|
25
|
+
ensureConfigDir();
|
|
26
|
+
const content = JSON.stringify(config, null, 2);
|
|
27
|
+
writeFileSync(CONFIG_FILE, content, { mode: 0o600 });
|
|
28
|
+
// Ensure file permissions are correct (user read/write only)
|
|
29
|
+
chmodSync(CONFIG_FILE, 0o600);
|
|
30
|
+
}
|
|
31
|
+
export function getToken() {
|
|
32
|
+
const config = loadConfig();
|
|
33
|
+
return config.token;
|
|
34
|
+
}
|
|
35
|
+
export function setToken(token) {
|
|
36
|
+
const config = loadConfig();
|
|
37
|
+
config.token = token;
|
|
38
|
+
saveConfig(config);
|
|
39
|
+
}
|
|
40
|
+
export function clearToken() {
|
|
41
|
+
const config = loadConfig();
|
|
42
|
+
delete config.token;
|
|
43
|
+
saveConfig(config);
|
|
44
|
+
}
|
|
45
|
+
export function getApiUrl() {
|
|
46
|
+
const config = loadConfig();
|
|
47
|
+
return (config.apiUrl || process.env.MCPIZE_API_URL || "https://api.mcpize.com");
|
|
48
|
+
}
|
|
49
|
+
export function getSupabaseUrl() {
|
|
50
|
+
return process.env.MCPIZE_SUPABASE_URL || "https://be.mcpize.com";
|
|
51
|
+
}
|
|
52
|
+
export function getFunctionsUrl() {
|
|
53
|
+
// Derive from SUPABASE_URL if FUNCTIONS_URL not explicitly set
|
|
54
|
+
if (process.env.MCPIZE_FUNCTIONS_URL) {
|
|
55
|
+
return process.env.MCPIZE_FUNCTIONS_URL;
|
|
56
|
+
}
|
|
57
|
+
const supabaseUrl = getSupabaseUrl();
|
|
58
|
+
return `${supabaseUrl}/functions/v1`;
|
|
59
|
+
}
|
|
60
|
+
export function getSupabaseAnonKey() {
|
|
61
|
+
// Public anon key - safe to embed
|
|
62
|
+
return (process.env.MCPIZE_SUPABASE_ANON_KEY ||
|
|
63
|
+
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imp5d3Zhb2NxZ3VoaHZwaGhicXV2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjAxMjIzNTksImV4cCI6MjA3NTY5ODM1OX0.x_CISxdW0i3twjkyqFewE8TGucEYRInCFbM_JucpuX8");
|
|
64
|
+
}
|
|
65
|
+
export function setSession(accessToken, refreshToken, expiresIn) {
|
|
66
|
+
const config = loadConfig();
|
|
67
|
+
config.token = accessToken;
|
|
68
|
+
config.refreshToken = refreshToken;
|
|
69
|
+
config.expiresAt = Math.floor(Date.now() / 1000) + expiresIn;
|
|
70
|
+
saveConfig(config);
|
|
71
|
+
}
|
|
72
|
+
export function getRefreshToken() {
|
|
73
|
+
const config = loadConfig();
|
|
74
|
+
return config.refreshToken;
|
|
75
|
+
}
|
|
76
|
+
export function isTokenExpired() {
|
|
77
|
+
const config = loadConfig();
|
|
78
|
+
if (!config.expiresAt)
|
|
79
|
+
return true;
|
|
80
|
+
// Consider expired 60 seconds before actual expiry
|
|
81
|
+
return Date.now() / 1000 > config.expiresAt - 60;
|
|
82
|
+
}
|
|
83
|
+
export function clearSession() {
|
|
84
|
+
const config = loadConfig();
|
|
85
|
+
delete config.token;
|
|
86
|
+
delete config.refreshToken;
|
|
87
|
+
delete config.expiresAt;
|
|
88
|
+
saveConfig(config);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface DownloadOptions {
|
|
2
|
+
force?: boolean;
|
|
3
|
+
onProgress?: (downloaded: number, total: number | null) => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Download a template from GitHub
|
|
7
|
+
* Falls back to local templates in development
|
|
8
|
+
*
|
|
9
|
+
* @param template - Template path (e.g., "typescript/default")
|
|
10
|
+
* @param dest - Destination directory
|
|
11
|
+
* @param options - Download options
|
|
12
|
+
*/
|
|
13
|
+
export declare function downloadTemplate(template: string, dest: string, options?: DownloadOptions): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Fetch available templates
|
|
16
|
+
*/
|
|
17
|
+
export declare function fetchTemplatesList(): Promise<Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
}>>;
|
|
21
|
+
/**
|
|
22
|
+
* Clear the templates cache
|
|
23
|
+
*/
|
|
24
|
+
export declare function clearCache(): void;
|
|
25
|
+
//# sourceMappingURL=degit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"degit.d.ts","sourceRoot":"","sources":["../../src/lib/degit.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjE;AAoKD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CACjD,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAC7C,CAaA;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAIjC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { extract } from "tar";
|
|
5
|
+
// GitHub repo for templates
|
|
6
|
+
const TEMPLATES_REPO = "mcpize/templates";
|
|
7
|
+
// Cache directory
|
|
8
|
+
const CACHE_DIR = path.join(os.homedir(), ".mcpize", "templates-cache");
|
|
9
|
+
// Retry config
|
|
10
|
+
const RETRY_CONFIG = {
|
|
11
|
+
maxAttempts: 3,
|
|
12
|
+
baseDelayMs: 1000,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Download with retry logic
|
|
16
|
+
*/
|
|
17
|
+
async function fetchWithRetry(url, options = {}) {
|
|
18
|
+
let lastError = null;
|
|
19
|
+
for (let attempt = 0; attempt < RETRY_CONFIG.maxAttempts; attempt++) {
|
|
20
|
+
try {
|
|
21
|
+
const response = await fetch(url, {
|
|
22
|
+
headers: {
|
|
23
|
+
"User-Agent": "mcpize-cli",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
28
|
+
}
|
|
29
|
+
const contentLength = response.headers.get("content-length");
|
|
30
|
+
const total = contentLength ? parseInt(contentLength, 10) : null;
|
|
31
|
+
// Read response with progress
|
|
32
|
+
const reader = response.body?.getReader();
|
|
33
|
+
if (!reader) {
|
|
34
|
+
throw new Error("No response body");
|
|
35
|
+
}
|
|
36
|
+
const chunks = [];
|
|
37
|
+
let downloaded = 0;
|
|
38
|
+
while (true) {
|
|
39
|
+
const { done, value } = await reader.read();
|
|
40
|
+
if (done)
|
|
41
|
+
break;
|
|
42
|
+
chunks.push(value);
|
|
43
|
+
downloaded += value.length;
|
|
44
|
+
if (options.onProgress) {
|
|
45
|
+
options.onProgress(downloaded, total);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Combine chunks
|
|
49
|
+
const buffer = Buffer.concat(chunks);
|
|
50
|
+
return buffer;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
54
|
+
// Check if offline
|
|
55
|
+
if (lastError.message.includes("ENOTFOUND") ||
|
|
56
|
+
lastError.message.includes("ENETUNREACH") ||
|
|
57
|
+
lastError.message.includes("fetch failed")) {
|
|
58
|
+
throw new Error("Cannot connect to GitHub. Check your internet connection and try again.");
|
|
59
|
+
}
|
|
60
|
+
// Retry with exponential backoff
|
|
61
|
+
if (attempt < RETRY_CONFIG.maxAttempts - 1) {
|
|
62
|
+
const delay = RETRY_CONFIG.baseDelayMs * Math.pow(2, attempt);
|
|
63
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw lastError || new Error("Download failed");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract a subfolder from tarball to destination
|
|
71
|
+
*/
|
|
72
|
+
async function extractSubfolder(tarballBuffer, subfolder, dest) {
|
|
73
|
+
// Create temp file for tarball
|
|
74
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "mcpize-"));
|
|
75
|
+
const tarPath = path.join(tempDir, "template.tar.gz");
|
|
76
|
+
try {
|
|
77
|
+
// Write buffer to temp file
|
|
78
|
+
fs.writeFileSync(tarPath, tarballBuffer);
|
|
79
|
+
// Extract tarball
|
|
80
|
+
const extractDir = path.join(tempDir, "extracted");
|
|
81
|
+
fs.mkdirSync(extractDir, { recursive: true });
|
|
82
|
+
await extract({
|
|
83
|
+
file: tarPath,
|
|
84
|
+
cwd: extractDir,
|
|
85
|
+
});
|
|
86
|
+
// Find the extracted folder (GitHub adds repo-branch prefix)
|
|
87
|
+
const entries = fs.readdirSync(extractDir);
|
|
88
|
+
if (entries.length !== 1) {
|
|
89
|
+
throw new Error("Unexpected tarball structure");
|
|
90
|
+
}
|
|
91
|
+
const repoRoot = path.join(extractDir, entries[0]);
|
|
92
|
+
const sourceDir = path.join(repoRoot, subfolder);
|
|
93
|
+
if (!fs.existsSync(sourceDir)) {
|
|
94
|
+
throw new Error(`Template folder "${subfolder}" not found in repository`);
|
|
95
|
+
}
|
|
96
|
+
// Copy to destination
|
|
97
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
98
|
+
copyDirectory(sourceDir, dest);
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
// Cleanup temp files
|
|
102
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Copy directory recursively
|
|
107
|
+
*/
|
|
108
|
+
function copyDirectory(src, dest) {
|
|
109
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
110
|
+
for (const entry of entries) {
|
|
111
|
+
const srcPath = path.join(src, entry.name);
|
|
112
|
+
const destPath = path.join(dest, entry.name);
|
|
113
|
+
// Skip .git, node_modules, dist, build
|
|
114
|
+
if ([".git", "node_modules", "dist", "build"].includes(entry.name)) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (entry.isDirectory()) {
|
|
118
|
+
fs.mkdirSync(destPath, { recursive: true });
|
|
119
|
+
copyDirectory(srcPath, destPath);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
fs.copyFileSync(srcPath, destPath);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get local templates path (for development fallback)
|
|
128
|
+
*/
|
|
129
|
+
function getLocalTemplatesPath() {
|
|
130
|
+
const devPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), "../../../../templates");
|
|
131
|
+
if (fs.existsSync(devPath)) {
|
|
132
|
+
return devPath;
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Download a template from GitHub
|
|
138
|
+
* Falls back to local templates in development
|
|
139
|
+
*
|
|
140
|
+
* @param template - Template path (e.g., "typescript/default")
|
|
141
|
+
* @param dest - Destination directory
|
|
142
|
+
* @param options - Download options
|
|
143
|
+
*/
|
|
144
|
+
export async function downloadTemplate(template, dest, options = {}) {
|
|
145
|
+
// Try local templates first (development mode)
|
|
146
|
+
const localPath = getLocalTemplatesPath();
|
|
147
|
+
if (localPath) {
|
|
148
|
+
const templatePath = path.join(localPath, template);
|
|
149
|
+
if (fs.existsSync(templatePath)) {
|
|
150
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
151
|
+
copyDirectory(templatePath, dest);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Download from GitHub
|
|
156
|
+
const tarballUrl = `https://github.com/${TEMPLATES_REPO}/archive/refs/heads/main.tar.gz`;
|
|
157
|
+
const buffer = await fetchWithRetry(tarballUrl, {
|
|
158
|
+
onProgress: options.onProgress,
|
|
159
|
+
});
|
|
160
|
+
await extractSubfolder(buffer, template, dest);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Fetch available templates
|
|
164
|
+
*/
|
|
165
|
+
export async function fetchTemplatesList() {
|
|
166
|
+
return [
|
|
167
|
+
{
|
|
168
|
+
name: "typescript/default",
|
|
169
|
+
description: "TypeScript MCP server (recommended)",
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: "typescript/openapi",
|
|
173
|
+
description: "Generate MCP from OpenAPI spec",
|
|
174
|
+
},
|
|
175
|
+
{ name: "typescript/api", description: "REST API proxy template" },
|
|
176
|
+
{ name: "python/default", description: "Python FastMCP server" },
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Clear the templates cache
|
|
181
|
+
*/
|
|
182
|
+
export function clearCache() {
|
|
183
|
+
if (fs.existsSync(CACHE_DIR)) {
|
|
184
|
+
fs.rmSync(CACHE_DIR, { recursive: true, force: true });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=degit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"degit.js","sourceRoot":"","sources":["../../src/lib/degit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface GitInfo {
|
|
2
|
+
sha: string;
|
|
3
|
+
branch: string;
|
|
4
|
+
author: string;
|
|
5
|
+
message: string;
|
|
6
|
+
repoFullName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function getGitInfo(cwd: string): Promise<GitInfo | null>;
|
|
9
|
+
export declare function isGitRepo(cwd: string): Promise<boolean>;
|
|
10
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAWD,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA8BrE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG7D"}
|