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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/dist/commands/deploy.d.ts +8 -0
  4. package/dist/commands/deploy.d.ts.map +1 -0
  5. package/dist/commands/deploy.js +337 -0
  6. package/dist/commands/deploy.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +7 -0
  8. package/dist/commands/doctor.d.ts.map +1 -0
  9. package/dist/commands/doctor.js +257 -0
  10. package/dist/commands/doctor.js.map +1 -0
  11. package/dist/commands/init.d.ts +9 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +238 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/link.d.ts +6 -0
  16. package/dist/commands/link.d.ts.map +1 -0
  17. package/dist/commands/link.js +147 -0
  18. package/dist/commands/link.js.map +1 -0
  19. package/dist/commands/login.d.ts +2 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +88 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +2 -0
  24. package/dist/commands/logout.d.ts.map +1 -0
  25. package/dist/commands/logout.js +9 -0
  26. package/dist/commands/logout.js.map +1 -0
  27. package/dist/commands/logs.d.ts +13 -0
  28. package/dist/commands/logs.d.ts.map +1 -0
  29. package/dist/commands/logs.js +173 -0
  30. package/dist/commands/logs.js.map +1 -0
  31. package/dist/commands/secrets.d.ts +16 -0
  32. package/dist/commands/secrets.d.ts.map +1 -0
  33. package/dist/commands/secrets.js +195 -0
  34. package/dist/commands/secrets.js.map +1 -0
  35. package/dist/commands/status.d.ts +7 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +187 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +241 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lib/api.d.ts +154 -0
  44. package/dist/lib/api.d.ts.map +1 -0
  45. package/dist/lib/api.js +364 -0
  46. package/dist/lib/api.js.map +1 -0
  47. package/dist/lib/auth.d.ts +20 -0
  48. package/dist/lib/auth.d.ts.map +1 -0
  49. package/dist/lib/auth.js +106 -0
  50. package/dist/lib/auth.js.map +1 -0
  51. package/dist/lib/cache.d.ts +39 -0
  52. package/dist/lib/cache.d.ts.map +1 -0
  53. package/dist/lib/cache.js +112 -0
  54. package/dist/lib/cache.js.map +1 -0
  55. package/dist/lib/config.d.ts +21 -0
  56. package/dist/lib/config.d.ts.map +1 -0
  57. package/dist/lib/config.js +90 -0
  58. package/dist/lib/config.js.map +1 -0
  59. package/dist/lib/degit.d.ts +25 -0
  60. package/dist/lib/degit.d.ts.map +1 -0
  61. package/dist/lib/degit.js +187 -0
  62. package/dist/lib/degit.js.map +1 -0
  63. package/dist/lib/git.d.ts +10 -0
  64. package/dist/lib/git.d.ts.map +1 -0
  65. package/dist/lib/git.js +43 -0
  66. package/dist/lib/git.js.map +1 -0
  67. package/dist/lib/project.d.ts +38 -0
  68. package/dist/lib/project.d.ts.map +1 -0
  69. package/dist/lib/project.js +72 -0
  70. package/dist/lib/project.js.map +1 -0
  71. package/dist/lib/tarball.d.ts +7 -0
  72. package/dist/lib/tarball.d.ts.map +1 -0
  73. package/dist/lib/tarball.js +130 -0
  74. package/dist/lib/tarball.js.map +1 -0
  75. package/package.json +56 -0
@@ -0,0 +1,195 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import fs from "node:fs";
4
+ import readline from "node:readline";
5
+ import { getToken } from "../lib/config.js";
6
+ import { loadProjectConfig } from "../lib/project.js";
7
+ import { listSecrets, setSecret, deleteSecret, exportSecrets, } from "../lib/api.js";
8
+ function getServerId(options) {
9
+ // Priority: --server flag > project config
10
+ if (options.server) {
11
+ return options.server;
12
+ }
13
+ const projectConfig = loadProjectConfig(process.cwd());
14
+ if (projectConfig?.serverId) {
15
+ return projectConfig.serverId;
16
+ }
17
+ console.error(chalk.red("No server specified."));
18
+ console.error(chalk.dim("Use --server <id> or run from a linked project directory."));
19
+ process.exit(1);
20
+ }
21
+ function requireAuth() {
22
+ const token = getToken();
23
+ if (!token) {
24
+ console.error(chalk.red("Not authenticated. Run: mcpize login"));
25
+ process.exit(1);
26
+ }
27
+ }
28
+ export async function secretsListCommand(options) {
29
+ requireAuth();
30
+ const serverId = getServerId(options);
31
+ const environment = options.environment || "production";
32
+ const spinner = ora("Fetching secrets...").start();
33
+ try {
34
+ const secrets = await listSecrets(serverId, environment);
35
+ spinner.stop();
36
+ if (secrets.length === 0) {
37
+ console.log(chalk.dim(`No secrets found for environment: ${environment}`));
38
+ return;
39
+ }
40
+ console.log(chalk.bold(`\nSecrets (${environment}):\n`));
41
+ for (const secret of secrets) {
42
+ const required = secret.required ? chalk.yellow(" [required]") : "";
43
+ console.log(` ${chalk.cyan(secret.name)}${required}`);
44
+ console.log(chalk.dim(` Updated: ${new Date(secret.updated_at).toLocaleString()}`));
45
+ }
46
+ console.log();
47
+ }
48
+ catch (error) {
49
+ spinner.fail("Failed to list secrets");
50
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
51
+ process.exit(1);
52
+ }
53
+ }
54
+ export async function secretsSetCommand(name, value, options) {
55
+ requireAuth();
56
+ const serverId = getServerId(options);
57
+ const environment = options.environment || "production";
58
+ // Validate name format
59
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(name)) {
60
+ console.error(chalk.red("Secret name must be uppercase letters, numbers, and underscores (e.g., OPENAI_API_KEY)"));
61
+ process.exit(1);
62
+ }
63
+ let secretValue;
64
+ if (options.fromFile) {
65
+ // Read value from file
66
+ try {
67
+ secretValue = fs.readFileSync(options.fromFile, "utf-8").trim();
68
+ }
69
+ catch (error) {
70
+ console.error(chalk.red(`Failed to read file: ${options.fromFile}`));
71
+ process.exit(1);
72
+ }
73
+ }
74
+ else if (value) {
75
+ secretValue = value;
76
+ }
77
+ else {
78
+ // Read from stdin (for piping)
79
+ if (process.stdin.isTTY) {
80
+ // Interactive mode - prompt for value
81
+ const rl = readline.createInterface({
82
+ input: process.stdin,
83
+ output: process.stdout,
84
+ });
85
+ secretValue = await new Promise((resolve) => {
86
+ // Hide input for secrets
87
+ process.stdout.write(`Enter value for ${name}: `);
88
+ let input = "";
89
+ process.stdin.setRawMode(true);
90
+ process.stdin.resume();
91
+ process.stdin.on("data", (char) => {
92
+ const c = char.toString();
93
+ if (c === "\n" || c === "\r") {
94
+ process.stdin.setRawMode(false);
95
+ process.stdout.write("\n");
96
+ rl.close();
97
+ resolve(input);
98
+ }
99
+ else if (c === "\u0003") {
100
+ // Ctrl+C
101
+ process.exit(0);
102
+ }
103
+ else if (c === "\u007F") {
104
+ // Backspace
105
+ if (input.length > 0) {
106
+ input = input.slice(0, -1);
107
+ }
108
+ }
109
+ else {
110
+ input += c;
111
+ }
112
+ });
113
+ });
114
+ }
115
+ else {
116
+ // Piped input
117
+ const chunks = [];
118
+ for await (const chunk of process.stdin) {
119
+ chunks.push(chunk);
120
+ }
121
+ secretValue = Buffer.concat(chunks).toString("utf-8").trim();
122
+ }
123
+ }
124
+ if (!secretValue) {
125
+ console.error(chalk.red("Secret value cannot be empty"));
126
+ process.exit(1);
127
+ }
128
+ const spinner = ora(`Setting ${name}...`).start();
129
+ try {
130
+ await setSecret(serverId, name, secretValue, {
131
+ environment,
132
+ required: options.required,
133
+ });
134
+ spinner.succeed(`Secret ${chalk.cyan(name)} set for ${environment}`);
135
+ }
136
+ catch (error) {
137
+ spinner.fail(`Failed to set secret ${name}`);
138
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
139
+ process.exit(1);
140
+ }
141
+ }
142
+ export async function secretsDeleteCommand(name, options) {
143
+ requireAuth();
144
+ const serverId = getServerId(options);
145
+ const environment = options.environment || "production";
146
+ const spinner = ora(`Deleting ${name}...`).start();
147
+ try {
148
+ await deleteSecret(serverId, name, environment);
149
+ spinner.succeed(`Secret ${chalk.cyan(name)} deleted from ${environment}`);
150
+ }
151
+ catch (error) {
152
+ spinner.fail(`Failed to delete secret ${name}`);
153
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
154
+ process.exit(1);
155
+ }
156
+ }
157
+ export async function secretsExportCommand(options) {
158
+ requireAuth();
159
+ const serverId = getServerId(options);
160
+ const environment = options.environment || "production";
161
+ const format = options.format || "env";
162
+ const spinner = ora("Exporting secrets...").start();
163
+ try {
164
+ const secrets = await exportSecrets(serverId, environment);
165
+ spinner.stop();
166
+ if (secrets.length === 0) {
167
+ console.error(chalk.dim(`No secrets found for environment: ${environment}`));
168
+ return;
169
+ }
170
+ if (format === "json") {
171
+ const obj = {};
172
+ for (const secret of secrets) {
173
+ obj[secret.name] = secret.value;
174
+ }
175
+ console.log(JSON.stringify(obj, null, 2));
176
+ }
177
+ else {
178
+ // .env format
179
+ for (const secret of secrets) {
180
+ // Escape special characters in value
181
+ const escapedValue = secret.value
182
+ .replace(/\\/g, "\\\\")
183
+ .replace(/"/g, '\\"')
184
+ .replace(/\n/g, "\\n");
185
+ console.log(`${secret.name}="${escapedValue}"`);
186
+ }
187
+ }
188
+ }
189
+ catch (error) {
190
+ spinner.fail("Failed to export secrets");
191
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
192
+ process.exit(1);
193
+ }
194
+ }
195
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface StatusOptions {
2
+ server?: string;
3
+ json?: boolean;
4
+ refresh?: boolean;
5
+ }
6
+ export declare function statusCommand(options: StatusOptions): Promise<void>;
7
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkGD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+HzE"}
@@ -0,0 +1,187 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { getToken } from "../lib/config.js";
4
+ import { loadProjectConfig } from "../lib/project.js";
5
+ import { getServerStatus, withRetry, NetworkError, } from "../lib/api.js";
6
+ import { getCache, getCacheStale, setCache, formatAge as formatCacheAge, CacheTTL, CacheKeys, } from "../lib/cache.js";
7
+ function getServerId(options) {
8
+ if (options.server) {
9
+ return options.server;
10
+ }
11
+ const projectConfig = loadProjectConfig(process.cwd());
12
+ if (projectConfig?.serverId) {
13
+ return projectConfig.serverId;
14
+ }
15
+ console.error(chalk.red("No server specified."));
16
+ console.error(chalk.dim("Use --server <id> or run from a linked project directory."));
17
+ process.exit(1);
18
+ }
19
+ function requireAuth() {
20
+ const token = getToken();
21
+ if (!token) {
22
+ console.error(chalk.red("Not authenticated. Run: mcpize login"));
23
+ process.exit(1);
24
+ }
25
+ }
26
+ function formatStatus(status) {
27
+ switch (status) {
28
+ case "success":
29
+ return chalk.green("success");
30
+ case "failed":
31
+ return chalk.red("failed");
32
+ case "building":
33
+ return chalk.yellow("building");
34
+ case "deploying":
35
+ return chalk.cyan("deploying");
36
+ case "pending":
37
+ return chalk.dim("pending");
38
+ default:
39
+ return status;
40
+ }
41
+ }
42
+ function formatHealthStatus(status) {
43
+ if (!status)
44
+ return chalk.dim("unknown");
45
+ switch (status) {
46
+ case "healthy":
47
+ return chalk.green("healthy");
48
+ case "unhealthy":
49
+ return chalk.red("unhealthy");
50
+ case "unknown":
51
+ return chalk.dim("unknown");
52
+ default:
53
+ return status;
54
+ }
55
+ }
56
+ function formatAge(dateStr) {
57
+ const date = new Date(dateStr);
58
+ const now = new Date();
59
+ const diffMs = now.getTime() - date.getTime();
60
+ const diffMins = Math.floor(diffMs / 60000);
61
+ const diffHours = Math.floor(diffMins / 60);
62
+ const diffDays = Math.floor(diffHours / 24);
63
+ if (diffDays > 0) {
64
+ return `${diffDays}d ago`;
65
+ }
66
+ else if (diffHours > 0) {
67
+ return `${diffHours}h ago`;
68
+ }
69
+ else if (diffMins > 0) {
70
+ return `${diffMins}m ago`;
71
+ }
72
+ else {
73
+ return "just now";
74
+ }
75
+ }
76
+ function formatDeployment(dep, index) {
77
+ const sha = dep.git_sha ? dep.git_sha.slice(0, 7) : chalk.dim("n/a");
78
+ const branch = dep.git_branch || chalk.dim("n/a");
79
+ const status = formatStatus(dep.status);
80
+ const age = formatAge(dep.created_at);
81
+ const author = dep.git_author || chalk.dim("unknown");
82
+ const prefix = index === 0 ? chalk.cyan("*") : " ";
83
+ console.log(`${prefix} ${sha} ${branch.padEnd(15)} ${status.padEnd(18)} ${age.padEnd(10)} ${author}`);
84
+ if (dep.git_message) {
85
+ console.log(` ${chalk.dim(dep.git_message.slice(0, 60))}`);
86
+ }
87
+ if (dep.status === "failed" && dep.error_message) {
88
+ console.log(` ${chalk.red(dep.error_message.slice(0, 80))}`);
89
+ }
90
+ }
91
+ export async function statusCommand(options) {
92
+ requireAuth();
93
+ const serverId = getServerId(options);
94
+ const cacheKey = CacheKeys.serverStatus(serverId);
95
+ // Try to get from cache first (unless --refresh)
96
+ let status = null;
97
+ let fromCache = false;
98
+ let cacheAge = 0;
99
+ if (!options.refresh) {
100
+ const cached = getCache(cacheKey);
101
+ if (cached) {
102
+ status = cached.data;
103
+ fromCache = true;
104
+ cacheAge = cached.age;
105
+ }
106
+ }
107
+ // Fetch from API if no cache or refresh requested
108
+ if (!status) {
109
+ const spinner = ora("Fetching server status...").start();
110
+ try {
111
+ status = await withRetry(() => getServerStatus(serverId), {
112
+ onRetry: (attempt, delay) => {
113
+ spinner.text = `Retrying... (attempt ${attempt + 1}/3, waiting ${delay / 1000}s)`;
114
+ },
115
+ });
116
+ spinner.stop();
117
+ // Save to cache
118
+ setCache(cacheKey, status, CacheTTL.STATUS);
119
+ fromCache = false;
120
+ }
121
+ catch (error) {
122
+ spinner.stop();
123
+ // Try stale cache as fallback
124
+ const staleCache = getCacheStale(cacheKey);
125
+ if (staleCache) {
126
+ console.log(chalk.yellow(`\n⚠ Cannot connect to MCPize API (showing cached data from ${formatCacheAge(staleCache.age)})\n`));
127
+ status = staleCache.data;
128
+ fromCache = true;
129
+ cacheAge = staleCache.age;
130
+ }
131
+ else {
132
+ // No cache available, show error
133
+ if (error instanceof NetworkError) {
134
+ console.error(chalk.red(`\n✗ ${error.message}`));
135
+ console.error(chalk.dim("Run 'mcpize status --refresh' when online to update"));
136
+ }
137
+ else {
138
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
139
+ }
140
+ process.exit(1);
141
+ }
142
+ }
143
+ }
144
+ if (options.json) {
145
+ console.log(JSON.stringify({ ...status, _cached: fromCache, _cacheAge: cacheAge }, null, 2));
146
+ return;
147
+ }
148
+ const { server, deployments, stats } = status;
149
+ // Show cached indicator if applicable
150
+ if (fromCache && cacheAge > 0) {
151
+ console.log(chalk.dim(`(cached ${formatCacheAge(cacheAge)})`));
152
+ }
153
+ // Server info
154
+ console.log(chalk.bold(`\n${server.name}`));
155
+ console.log(chalk.dim(`ID: ${server.id}`));
156
+ console.log(chalk.dim(`Slug: ${server.slug}`));
157
+ console.log();
158
+ // Status line
159
+ console.log(`Status: ${formatStatus(server.status)}`);
160
+ console.log(`Health: ${formatHealthStatus(server.health_status)}`);
161
+ if (server.hosting_url) {
162
+ console.log(`URL: ${chalk.cyan(server.hosting_url)}`);
163
+ }
164
+ console.log();
165
+ // Stats
166
+ console.log(chalk.bold("Stats:"));
167
+ console.log(` Deployments: ${stats.total_deployments} total, ${chalk.green(stats.successful_deployments + " success")}, ${chalk.red(stats.failed_deployments + " failed")}`);
168
+ console.log(` Secrets: ${stats.secrets_count} configured`);
169
+ console.log();
170
+ // Deployments
171
+ if (deployments.length === 0) {
172
+ console.log(chalk.dim("No deployments yet."));
173
+ }
174
+ else {
175
+ console.log(chalk.bold("Recent Deployments:"));
176
+ console.log(chalk.dim(" SHA Branch Status Age Author"));
177
+ console.log(chalk.dim(" " + "-".repeat(70)));
178
+ for (let i = 0; i < deployments.length; i++) {
179
+ formatDeployment(deployments[i], i);
180
+ }
181
+ }
182
+ console.log();
183
+ if (fromCache) {
184
+ console.log(chalk.dim("Run 'mcpize status --refresh' to update"));
185
+ }
186
+ }
187
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,GAGb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,SAAS,IAAI,cAAc,EAC3B,QAAQ,EACR,SAAS,GACV,MAAM,iBAAiB,CAAC;AAQzB,SAAS,WAAW,CAAC,OAAsB;IACzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,IAAI,aAAa,EAAE,QAAQ,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CACvE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAqB;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAE5C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC5B,CAAC;SAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,SAAS,OAAO,CAAC;IAC7B,CAAC;SAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAmB,EAAE,KAAa;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnD,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,CAC7F,CAAC;IAEF,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,WAAW,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAElD,iDAAiD;IACjD,IAAI,MAAM,GAAgC,IAAI,CAAC;IAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAuB,QAAQ,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACrB,SAAS,GAAG,IAAI,CAAC;YACjB,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;QACxB,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACxD,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;oBAC1B,OAAO,CAAC,IAAI,GAAG,wBAAwB,OAAO,GAAG,CAAC,eAAe,KAAK,GAAG,IAAI,IAAI,CAAC;gBACpF,CAAC;aACF,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,gBAAgB;YAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5C,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,8BAA8B;YAC9B,MAAM,UAAU,GAAG,aAAa,CAAuB,QAAQ,CAAC,CAAC;YACjE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,8DAA8D,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAClG,CACF,CAAC;gBACF,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;gBACzB,SAAS,GAAG,IAAI,CAAC;gBACjB,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,iCAAiC;gBACjC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACjD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CACjE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAClE,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EACtD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE9C,sCAAsC;IACtC,IAAI,SAAS,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,cAAc;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,cAAc;IACd,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CACT,kBAAkB,KAAK,CAAC,iBAAiB,WAAW,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,GAAG,UAAU,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAC,EAAE,CACjK,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,aAAa,aAAa,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,cAAc;IACd,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,oEAAoE,CACrE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -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":""}
package/dist/index.js ADDED
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env node
2
+ // Suppress dotenv v17 verbose logging
3
+ process.env.DOTENV_CONFIG_QUIET = "true";
4
+ import { config } from "dotenv";
5
+ // Load .env from current directory (for local development)
6
+ config();
7
+ import { Command } from "commander";
8
+ import chalk from "chalk";
9
+ import { loginCommand } from "./commands/login.js";
10
+ import { logoutCommand } from "./commands/logout.js";
11
+ import { deployCommand } from "./commands/deploy.js";
12
+ import { linkCommand } from "./commands/link.js";
13
+ import { initCommand } from "./commands/init.js";
14
+ import { secretsListCommand, secretsSetCommand, secretsDeleteCommand, secretsExportCommand, } from "./commands/secrets.js";
15
+ import { logsCommand } from "./commands/logs.js";
16
+ import { statusCommand } from "./commands/status.js";
17
+ import { doctorCommand } from "./commands/doctor.js";
18
+ import { setTokenOverride } from "./lib/auth.js";
19
+ const program = new Command();
20
+ program
21
+ .name("mcpize")
22
+ .description("MCPize CLI - Deploy MCP servers to the cloud")
23
+ .version("1.0.0")
24
+ .option("--token <token>", "API token (overrides MCPIZE_TOKEN env and saved session)")
25
+ .hook("preAction", (thisCommand) => {
26
+ const opts = thisCommand.opts();
27
+ if (opts.token) {
28
+ setTokenOverride(opts.token);
29
+ }
30
+ });
31
+ program
32
+ .command("init [name]")
33
+ .description("Create a new MCP server project")
34
+ .option("-t, --template <template>", "Template to use (e.g., typescript, openapi)")
35
+ .option("--dir <path>", "Target directory")
36
+ .option("--no-install", "Skip dependency installation")
37
+ .option("--no-git", "Skip git initialization")
38
+ // Template-specific options (passed to post-init script via env)
39
+ .option("--from-url <url>", "OpenAPI spec URL to generate from")
40
+ .option("--from-file <path>", "Local OpenAPI spec file to generate from")
41
+ .allowUnknownOption(true) // Allow any options for future templates
42
+ .action(async (name, options) => {
43
+ try {
44
+ await initCommand(name, options);
45
+ }
46
+ catch (error) {
47
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
48
+ process.exit(1);
49
+ }
50
+ });
51
+ program
52
+ .command("login")
53
+ .description("Authenticate with MCPize via browser")
54
+ .action(async () => {
55
+ try {
56
+ await loginCommand();
57
+ }
58
+ catch (error) {
59
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
60
+ process.exit(1);
61
+ }
62
+ });
63
+ program
64
+ .command("logout")
65
+ .description("Log out from MCPize")
66
+ .action(async () => {
67
+ try {
68
+ await logoutCommand();
69
+ }
70
+ catch (error) {
71
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
72
+ process.exit(1);
73
+ }
74
+ });
75
+ program
76
+ .command("deploy")
77
+ .description("Deploy current project to MCPize")
78
+ .option("--no-wait", "Don't wait for deployment to complete (just trigger and exit)")
79
+ .option("--notes <notes>", "Add deployment notes")
80
+ .option("-y, --yes", "Auto-create server if not linked (non-interactive)")
81
+ .action(async (options) => {
82
+ try {
83
+ await deployCommand(options);
84
+ }
85
+ catch (error) {
86
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
87
+ process.exit(1);
88
+ }
89
+ });
90
+ program
91
+ .command("whoami")
92
+ .description("Display current authenticated user")
93
+ .action(async () => {
94
+ const { getToken } = await import("./lib/config.js");
95
+ const token = getToken();
96
+ if (!token) {
97
+ console.log(chalk.yellow("Not logged in. Run: mcpize login"));
98
+ process.exit(1);
99
+ }
100
+ console.log(chalk.green("Authenticated"));
101
+ console.log(chalk.dim(`Token: ${token.slice(0, 8)}...${token.slice(-4)}`));
102
+ });
103
+ program
104
+ .command("link")
105
+ .description("Link current directory to an existing MCPize server")
106
+ .option("--server <id>", "Server ID to link to")
107
+ .option("--force", "Force re-link even if already linked")
108
+ .action(async (options) => {
109
+ try {
110
+ await linkCommand(options);
111
+ }
112
+ catch (error) {
113
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
114
+ process.exit(1);
115
+ }
116
+ });
117
+ // Secrets command group
118
+ const secrets = program
119
+ .command("secrets")
120
+ .description("Manage environment secrets");
121
+ secrets
122
+ .command("list")
123
+ .description("List all secrets (names only)")
124
+ .option("-e, --environment <env>", "Environment (production, staging, preview)", "production")
125
+ .option("--server <id>", "Server ID (uses linked project if not specified)")
126
+ .action(async (options) => {
127
+ try {
128
+ await secretsListCommand(options);
129
+ }
130
+ catch (error) {
131
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
132
+ process.exit(1);
133
+ }
134
+ });
135
+ secrets
136
+ .command("set <name> [value]")
137
+ .description("Set a secret (value can be piped or entered interactively)")
138
+ .option("-e, --environment <env>", "Environment (production, staging, preview)", "production")
139
+ .option("--server <id>", "Server ID (uses linked project if not specified)")
140
+ .option("--required", "Mark secret as required for deployment")
141
+ .option("--from-file <path>", "Read secret value from file")
142
+ .action(async (name, value, options) => {
143
+ try {
144
+ await secretsSetCommand(name, value, options);
145
+ }
146
+ catch (error) {
147
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
148
+ process.exit(1);
149
+ }
150
+ });
151
+ secrets
152
+ .command("delete <name>")
153
+ .alias("rm")
154
+ .description("Delete a secret")
155
+ .option("-e, --environment <env>", "Environment (production, staging, preview)", "production")
156
+ .option("--server <id>", "Server ID (uses linked project if not specified)")
157
+ .action(async (name, options) => {
158
+ try {
159
+ await secretsDeleteCommand(name, options);
160
+ }
161
+ catch (error) {
162
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
163
+ process.exit(1);
164
+ }
165
+ });
166
+ secrets
167
+ .command("export")
168
+ .description("Export secrets with values (use with caution)")
169
+ .option("-e, --environment <env>", "Environment (production, staging, preview)", "production")
170
+ .option("--server <id>", "Server ID (uses linked project if not specified)")
171
+ .option("-f, --format <format>", "Output format: env, json", "env")
172
+ .action(async (options) => {
173
+ try {
174
+ await secretsExportCommand(options);
175
+ }
176
+ catch (error) {
177
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
178
+ process.exit(1);
179
+ }
180
+ });
181
+ // Logs command (proxies to Google Cloud Logging)
182
+ program
183
+ .command("logs")
184
+ .description("View deployment and runtime logs from Cloud Logging")
185
+ .option("--server <id>", "Server ID (uses linked project if not specified)")
186
+ .option("-d, --deployment <id>", "Filter by deployment ID")
187
+ .option("-t, --type <type>", "Log type: build, runtime, bridge", "runtime")
188
+ .option("-s, --severity <level>", "Minimum severity: DEBUG, INFO, WARNING, ERROR")
189
+ .option("--since <duration>", "Show logs since (e.g., 1h, 30m, 24h)")
190
+ .option("-n, --tail <lines>", "Number of lines to show", "50")
191
+ .option("-f, --follow", "Follow log output (requires Supabase Realtime)")
192
+ .option("--json", "Output in JSON format")
193
+ .option("--refresh", "Force refresh from API (ignore cache)")
194
+ .action(async (options) => {
195
+ try {
196
+ await logsCommand({
197
+ ...options,
198
+ severity: options.severity?.toUpperCase(),
199
+ tail: options.tail ? parseInt(options.tail, 10) : 50,
200
+ });
201
+ }
202
+ catch (error) {
203
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
204
+ process.exit(1);
205
+ }
206
+ });
207
+ // Status command
208
+ program
209
+ .command("status")
210
+ .description("Show server status, deployments, and usage stats")
211
+ .option("--server <id>", "Server ID (uses linked project if not specified)")
212
+ .option("--json", "Output in JSON format")
213
+ .option("--refresh", "Force refresh from API (ignore cache)")
214
+ .action(async (options) => {
215
+ try {
216
+ await statusCommand(options);
217
+ }
218
+ catch (error) {
219
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
220
+ process.exit(1);
221
+ }
222
+ });
223
+ // Doctor command
224
+ program
225
+ .command("doctor")
226
+ .description("Run local diagnostics and pre-deploy validation")
227
+ .option("--manifest", "Check mcpize.yaml only")
228
+ .option("--dockerfile", "Check Dockerfile only")
229
+ .option("--fix", "Attempt automatic fixes (not yet implemented)")
230
+ .action(async (options) => {
231
+ try {
232
+ await doctorCommand(options);
233
+ }
234
+ catch (error) {
235
+ console.error(chalk.red(error instanceof Error ? error.message : String(error)));
236
+ process.exit(1);
237
+ }
238
+ });
239
+ // Parse arguments
240
+ program.parse();
241
+ //# sourceMappingURL=index.js.map