zideploy 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/commands/deploy.d.ts +14 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +143 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +79 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/config/mirrors.d.ts +13 -0
- package/dist/config/mirrors.d.ts.map +1 -0
- package/dist/config/mirrors.js +25 -0
- package/dist/config/mirrors.js.map +1 -0
- package/dist/deploy/detector.d.ts +4 -0
- package/dist/deploy/detector.d.ts.map +1 -0
- package/dist/deploy/detector.js +67 -0
- package/dist/deploy/detector.js.map +1 -0
- package/dist/deploy/direct-deploy.d.ts +6 -0
- package/dist/deploy/direct-deploy.d.ts.map +1 -0
- package/dist/deploy/direct-deploy.js +100 -0
- package/dist/deploy/direct-deploy.js.map +1 -0
- package/dist/deploy/docker-deploy.d.ts +5 -0
- package/dist/deploy/docker-deploy.d.ts.map +1 -0
- package/dist/deploy/docker-deploy.js +63 -0
- package/dist/deploy/docker-deploy.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +269 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/prompts/credentials.d.ts +4 -0
- package/dist/prompts/credentials.d.ts.map +1 -0
- package/dist/prompts/credentials.js +86 -0
- package/dist/prompts/credentials.js.map +1 -0
- package/dist/setup/docker.d.ts +5 -0
- package/dist/setup/docker.d.ts.map +1 -0
- package/dist/setup/docker.js +55 -0
- package/dist/setup/docker.js.map +1 -0
- package/dist/setup/mirrors.d.ts +6 -0
- package/dist/setup/mirrors.d.ts.map +1 -0
- package/dist/setup/mirrors.js +52 -0
- package/dist/setup/mirrors.js.map +1 -0
- package/dist/setup/nginx.d.ts +6 -0
- package/dist/setup/nginx.d.ts.map +1 -0
- package/dist/setup/nginx.js +87 -0
- package/dist/setup/nginx.js.map +1 -0
- package/dist/setup/nodejs.d.ts +6 -0
- package/dist/setup/nodejs.d.ts.map +1 -0
- package/dist/setup/nodejs.js +69 -0
- package/dist/setup/nodejs.js.map +1 -0
- package/dist/ssh/client.d.ts +18 -0
- package/dist/ssh/client.d.ts.map +1 -0
- package/dist/ssh/client.js +70 -0
- package/dist/ssh/client.js.map +1 -0
- package/dist/types/index.d.ts +32 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +31 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const init_1 = require("./commands/init");
|
|
43
|
+
const deploy_1 = require("./commands/deploy");
|
|
44
|
+
const program = new commander_1.Command();
|
|
45
|
+
program
|
|
46
|
+
.name('zideploy')
|
|
47
|
+
.description('ZiSales Deploy Plugin — Deploy projects to PaaS servers')
|
|
48
|
+
.version('1.0.0');
|
|
49
|
+
program
|
|
50
|
+
.command('init')
|
|
51
|
+
.description('Initialize a server: install Docker, Nginx, Node.js, configure IR mirrors if needed')
|
|
52
|
+
.option('--host <ip>', 'Server IP address')
|
|
53
|
+
.option('--port <number>', 'SSH port', '22')
|
|
54
|
+
.option('--user <username>', 'SSH username')
|
|
55
|
+
.option('--password <password>', 'SSH password')
|
|
56
|
+
.option('--location <ir|global>', 'Server location: ir or global', 'global')
|
|
57
|
+
.option('--ubuntu-version <version>', 'Ubuntu version: bionic|focal|jammy|noble')
|
|
58
|
+
.action(async (opts) => {
|
|
59
|
+
try {
|
|
60
|
+
await (0, init_1.runInit)({
|
|
61
|
+
...opts,
|
|
62
|
+
port: opts.port ? parseInt(opts.port) : undefined,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
67
|
+
console.error(chalk_1.default.red(`\nError: ${msg}`));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
program
|
|
72
|
+
.command('deploy')
|
|
73
|
+
.description('Deploy a project and set up subdomain on zisites.app')
|
|
74
|
+
.option('--host <ip>', 'Server IP address')
|
|
75
|
+
.option('--port <number>', 'SSH port', '22')
|
|
76
|
+
.option('--user <username>', 'SSH username')
|
|
77
|
+
.option('--password <password>', 'SSH password')
|
|
78
|
+
.option('--location <ir|global>', 'Server location: ir or global', 'global')
|
|
79
|
+
.option('--ubuntu-version <version>', 'Ubuntu version: bionic|focal|jammy|noble')
|
|
80
|
+
.option('--project <name>', 'Project name (becomes subdomain: name.zisites.app)')
|
|
81
|
+
.option('--domain <domain>', "Client's custom domain (e.g. zisite.com)")
|
|
82
|
+
.option('--path <localPath>', 'Local path to project folder')
|
|
83
|
+
.option('--app-port <number>', 'Port the app runs on', '3000')
|
|
84
|
+
.action(async (opts) => {
|
|
85
|
+
try {
|
|
86
|
+
await (0, deploy_1.runDeploy)({
|
|
87
|
+
...opts,
|
|
88
|
+
port: opts.port ? parseInt(opts.port) : undefined,
|
|
89
|
+
appPort: opts.appPort ? parseInt(opts.appPort) : undefined,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
94
|
+
console.error(chalk_1.default.red(`\nError: ${msg}`));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
program
|
|
99
|
+
.command('subdomain')
|
|
100
|
+
.description('Add or update an Nginx subdomain for an existing service')
|
|
101
|
+
.requiredOption('--host <ip>', 'Server IP address')
|
|
102
|
+
.requiredOption('--port <number>', 'SSH port', '22')
|
|
103
|
+
.requiredOption('--user <username>', 'SSH username')
|
|
104
|
+
.requiredOption('--password <password>', 'SSH password')
|
|
105
|
+
.requiredOption('--project <name>', 'Project name')
|
|
106
|
+
.requiredOption('--app-port <number>', 'Port the app runs on')
|
|
107
|
+
.option('--domain <domain>', "Client's custom domain")
|
|
108
|
+
.action(async (opts) => {
|
|
109
|
+
const { SSHClient } = await Promise.resolve().then(() => __importStar(require('./ssh/client')));
|
|
110
|
+
const { createSubdomain } = await Promise.resolve().then(() => __importStar(require('./setup/nginx')));
|
|
111
|
+
const ssh = new SSHClient({
|
|
112
|
+
host: opts.host,
|
|
113
|
+
port: parseInt(opts.port),
|
|
114
|
+
username: opts.user,
|
|
115
|
+
password: opts.password,
|
|
116
|
+
location: 'global',
|
|
117
|
+
});
|
|
118
|
+
try {
|
|
119
|
+
await ssh.connect();
|
|
120
|
+
await createSubdomain(ssh, {
|
|
121
|
+
projectName: opts.project,
|
|
122
|
+
appPort: parseInt(opts.appPort),
|
|
123
|
+
clientDomain: opts.domain,
|
|
124
|
+
});
|
|
125
|
+
console.log(chalk_1.default.green('✓ Subdomain configured'));
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
ssh.disconnect();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
program.parse(process.argv);
|
|
132
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
// Redirect console.log/info to stderr so stdout stays clean for MCP JSON-RPC
|
|
38
|
+
console.log = (...args) => process.stderr.write(args.map(String).join(' ') + '\n');
|
|
39
|
+
console.info = (...args) => process.stderr.write(args.map(String).join(' ') + '\n');
|
|
40
|
+
console.warn = (...args) => process.stderr.write(args.map(String).join(' ') + '\n');
|
|
41
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
42
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
43
|
+
const zod_1 = require("zod");
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const client_1 = require("./ssh/client");
|
|
46
|
+
const types_1 = require("./types");
|
|
47
|
+
const mirrors_1 = require("./setup/mirrors");
|
|
48
|
+
const docker_1 = require("./setup/docker");
|
|
49
|
+
const nginx_1 = require("./setup/nginx");
|
|
50
|
+
const nodejs_1 = require("./setup/nodejs");
|
|
51
|
+
const detector_1 = require("./deploy/detector");
|
|
52
|
+
const docker_deploy_1 = require("./deploy/docker-deploy");
|
|
53
|
+
const direct_deploy_1 = require("./deploy/direct-deploy");
|
|
54
|
+
const server = new mcp_js_1.McpServer({
|
|
55
|
+
name: 'zideploy',
|
|
56
|
+
version: '1.0.0',
|
|
57
|
+
});
|
|
58
|
+
const credFields = {
|
|
59
|
+
host: zod_1.z.string().describe('Server IP address'),
|
|
60
|
+
port: zod_1.z.number().optional().describe('SSH port (default: 22)'),
|
|
61
|
+
username: zod_1.z.string().describe('SSH username'),
|
|
62
|
+
password: zod_1.z.string().describe('SSH password'),
|
|
63
|
+
location: zod_1.z.enum(['ir', 'global']).optional().describe('Server location: ir (Iran) or global (default: global)'),
|
|
64
|
+
ubuntu_version: zod_1.z.enum(['bionic', 'focal', 'jammy', 'noble']).optional().describe('Ubuntu version'),
|
|
65
|
+
};
|
|
66
|
+
function buildCreds(params) {
|
|
67
|
+
return {
|
|
68
|
+
host: params.host,
|
|
69
|
+
port: params.port ?? 22,
|
|
70
|
+
username: params.username,
|
|
71
|
+
password: params.password,
|
|
72
|
+
location: params.location ?? 'global',
|
|
73
|
+
ubuntuVersion: params.ubuntu_version,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// ─── Tool: init_server ───────────────────────────────────────────────────────
|
|
77
|
+
server.tool('init_server', 'Initialize a Linux server: install Docker, Nginx, Node.js + PM2, and/or PHP. Configures Iranian package mirrors automatically when location=ir.', {
|
|
78
|
+
...credFields,
|
|
79
|
+
components: zod_1.z
|
|
80
|
+
.array(zod_1.z.enum(['docker', 'nginx', 'nodejs', 'php']))
|
|
81
|
+
.optional()
|
|
82
|
+
.describe('Components to install (default: docker, nginx, nodejs)'),
|
|
83
|
+
}, async (params) => {
|
|
84
|
+
const creds = buildCreds(params);
|
|
85
|
+
const components = params.components ?? ['docker', 'nginx', 'nodejs'];
|
|
86
|
+
const log = [];
|
|
87
|
+
const ssh = new client_1.SSHClient(creds);
|
|
88
|
+
try {
|
|
89
|
+
await ssh.connect();
|
|
90
|
+
log.push(`Connected to ${creds.host}:${creds.port}`);
|
|
91
|
+
await ssh.sudo('apt-get update -y');
|
|
92
|
+
log.push('Package lists updated');
|
|
93
|
+
if (creds.location === 'ir') {
|
|
94
|
+
await (0, mirrors_1.configureUbuntuMirrors)(ssh, creds);
|
|
95
|
+
log.push('Iranian Ubuntu mirrors configured');
|
|
96
|
+
}
|
|
97
|
+
if (components.includes('docker')) {
|
|
98
|
+
await (0, docker_1.installDocker)(ssh, creds);
|
|
99
|
+
await (0, docker_1.installDockerCompose)(ssh);
|
|
100
|
+
log.push('Docker + Docker Compose installed');
|
|
101
|
+
}
|
|
102
|
+
if (components.includes('nginx')) {
|
|
103
|
+
await (0, nginx_1.installNginx)(ssh);
|
|
104
|
+
log.push('Nginx installed');
|
|
105
|
+
}
|
|
106
|
+
if (components.includes('nodejs')) {
|
|
107
|
+
await (0, nodejs_1.installNodejs)(ssh, creds);
|
|
108
|
+
await (0, nodejs_1.installPm2)(ssh);
|
|
109
|
+
log.push('Node.js + PM2 installed');
|
|
110
|
+
}
|
|
111
|
+
if (components.includes('php')) {
|
|
112
|
+
await (0, nodejs_1.installPhp)(ssh);
|
|
113
|
+
log.push('PHP + PHP-FPM installed');
|
|
114
|
+
}
|
|
115
|
+
log.push(`\nServer ${creds.host} is ready for deployments.`);
|
|
116
|
+
return { content: [{ type: 'text', text: log.join('\n') }] };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
120
|
+
return { content: [{ type: 'text', text: `Error: ${msg}` }], isError: true };
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
ssh.disconnect();
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
// ─── Tool: deploy_project ─────────────────────────────────────────────────────
|
|
127
|
+
server.tool('deploy_project', 'Deploy a local project to a server and configure an Nginx subdomain on zisites.app. Automatically detects project type (Node.js, PHP, Docker, static).', {
|
|
128
|
+
...credFields,
|
|
129
|
+
project: zod_1.z.string().describe('Project name — becomes the subdomain: <project>.zisites.app'),
|
|
130
|
+
domain: zod_1.z.string().optional().describe("Client's custom domain (e.g. example.com)"),
|
|
131
|
+
path: zod_1.z.string().describe('Absolute local path to the project folder'),
|
|
132
|
+
app_port: zod_1.z.number().optional().describe('Port the app listens on (default: 3000)'),
|
|
133
|
+
}, async (params) => {
|
|
134
|
+
const creds = buildCreds(params);
|
|
135
|
+
const localPath = params.path;
|
|
136
|
+
const appPort = params.app_port ?? 3000;
|
|
137
|
+
const log = [];
|
|
138
|
+
if (!fs.existsSync(localPath)) {
|
|
139
|
+
return {
|
|
140
|
+
content: [{ type: 'text', text: `Error: project path does not exist: ${localPath}` }],
|
|
141
|
+
isError: true,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
const projectType = (0, detector_1.detectProjectType)(localPath);
|
|
145
|
+
log.push(`Detected project type: ${projectType}`);
|
|
146
|
+
const config = {
|
|
147
|
+
server: creds,
|
|
148
|
+
projectName: params.project,
|
|
149
|
+
clientDomain: params.domain ?? '',
|
|
150
|
+
localProjectPath: localPath,
|
|
151
|
+
appPort,
|
|
152
|
+
projectType,
|
|
153
|
+
};
|
|
154
|
+
const ssh = new client_1.SSHClient(creds);
|
|
155
|
+
try {
|
|
156
|
+
await ssh.connect();
|
|
157
|
+
log.push(`Connected to ${creds.host}:${creds.port}`);
|
|
158
|
+
switch (projectType) {
|
|
159
|
+
case 'docker': {
|
|
160
|
+
await (0, docker_1.installDocker)(ssh, creds);
|
|
161
|
+
const hasCompose = fs.existsSync(`${localPath}/docker-compose.yml`) ||
|
|
162
|
+
fs.existsSync(`${localPath}/docker-compose.yaml`);
|
|
163
|
+
if (hasCompose) {
|
|
164
|
+
await (0, docker_deploy_1.deployWithDockerCompose)(ssh, config);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
await (0, docker_deploy_1.deployWithDocker)(ssh, config);
|
|
168
|
+
}
|
|
169
|
+
log.push('Docker deployment complete');
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case 'node': {
|
|
173
|
+
await (0, nodejs_1.installNodejs)(ssh, creds);
|
|
174
|
+
await (0, nodejs_1.installPm2)(ssh);
|
|
175
|
+
await (0, direct_deploy_1.deployNode)(ssh, config);
|
|
176
|
+
log.push('Node.js deployment complete');
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case 'php': {
|
|
180
|
+
await (0, nodejs_1.installPhp)(ssh);
|
|
181
|
+
await (0, direct_deploy_1.deployPhp)(ssh, config);
|
|
182
|
+
log.push('PHP deployment complete');
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case 'static': {
|
|
186
|
+
await (0, direct_deploy_1.deployStatic)(ssh, config);
|
|
187
|
+
log.push('Static site deployment complete');
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
default: {
|
|
191
|
+
await (0, nodejs_1.installNodejs)(ssh, creds);
|
|
192
|
+
await (0, nodejs_1.installPm2)(ssh);
|
|
193
|
+
await (0, direct_deploy_1.deployNode)(ssh, config);
|
|
194
|
+
log.push('Node.js deployment complete (fallback)');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
await (0, nginx_1.createSubdomain)(ssh, {
|
|
198
|
+
projectName: params.project,
|
|
199
|
+
appPort,
|
|
200
|
+
clientDomain: params.domain,
|
|
201
|
+
});
|
|
202
|
+
log.push(`\nDeployment complete!`);
|
|
203
|
+
log.push(`Preview URL : http://${params.project}.${types_1.PLATFORM_DOMAIN}`);
|
|
204
|
+
if (params.domain) {
|
|
205
|
+
log.push(`Custom domain: http://${params.domain} (point DNS A record to ${creds.host})`);
|
|
206
|
+
}
|
|
207
|
+
return { content: [{ type: 'text', text: log.join('\n') }] };
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
211
|
+
return { content: [{ type: 'text', text: `Error: ${msg}` }], isError: true };
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
ssh.disconnect();
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
// ─── Tool: add_subdomain ──────────────────────────────────────────────────────
|
|
218
|
+
server.tool('add_subdomain', 'Add or update an Nginx subdomain for an already-running service on the server.', {
|
|
219
|
+
host: zod_1.z.string().describe('Server IP address'),
|
|
220
|
+
port: zod_1.z.number().optional().describe('SSH port (default: 22)'),
|
|
221
|
+
username: zod_1.z.string().describe('SSH username'),
|
|
222
|
+
password: zod_1.z.string().describe('SSH password'),
|
|
223
|
+
project: zod_1.z.string().describe('Project name — becomes the subdomain: <project>.zisites.app'),
|
|
224
|
+
app_port: zod_1.z.number().describe('Port the app is listening on'),
|
|
225
|
+
domain: zod_1.z.string().optional().describe("Client's custom domain (optional)"),
|
|
226
|
+
}, async (params) => {
|
|
227
|
+
const creds = {
|
|
228
|
+
host: params.host,
|
|
229
|
+
port: params.port ?? 22,
|
|
230
|
+
username: params.username,
|
|
231
|
+
password: params.password,
|
|
232
|
+
location: 'global',
|
|
233
|
+
};
|
|
234
|
+
const ssh = new client_1.SSHClient(creds);
|
|
235
|
+
try {
|
|
236
|
+
await ssh.connect();
|
|
237
|
+
await (0, nginx_1.createSubdomain)(ssh, {
|
|
238
|
+
projectName: params.project,
|
|
239
|
+
appPort: params.app_port,
|
|
240
|
+
clientDomain: params.domain,
|
|
241
|
+
});
|
|
242
|
+
return {
|
|
243
|
+
content: [
|
|
244
|
+
{
|
|
245
|
+
type: 'text',
|
|
246
|
+
text: `Subdomain configured: http://${params.project}.${types_1.PLATFORM_DOMAIN}`,
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
253
|
+
return { content: [{ type: 'text', text: `Error: ${msg}` }], isError: true };
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
ssh.disconnect();
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
// ─── Start ───────────────────────────────────────────────────────────────────
|
|
260
|
+
async function main() {
|
|
261
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
262
|
+
await server.connect(transport);
|
|
263
|
+
process.stderr.write('ZiDeploy MCP server running\n');
|
|
264
|
+
}
|
|
265
|
+
main().catch((err) => {
|
|
266
|
+
process.stderr.write(`Fatal: ${err}\n`);
|
|
267
|
+
process.exit(1);
|
|
268
|
+
});
|
|
269
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ServerCredentials, DeployConfig } from '../types';
|
|
2
|
+
export declare function promptServerCredentials(defaults?: Partial<ServerCredentials>): Promise<ServerCredentials>;
|
|
3
|
+
export declare function promptDeployConfig(server: ServerCredentials): Promise<DeployConfig>;
|
|
4
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/prompts/credentials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAuC,MAAM,UAAU,CAAC;AAEhG,wBAAsB,uBAAuB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiD/G;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BzF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.promptServerCredentials = promptServerCredentials;
|
|
7
|
+
exports.promptDeployConfig = promptDeployConfig;
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
async function promptServerCredentials(defaults) {
|
|
11
|
+
const answers = await inquirer_1.default.prompt([
|
|
12
|
+
{
|
|
13
|
+
type: 'input',
|
|
14
|
+
name: 'host',
|
|
15
|
+
message: 'Server IP address:',
|
|
16
|
+
default: defaults?.host,
|
|
17
|
+
validate: (v) => /^[\d.]+$/.test(v) || 'Enter a valid IP address',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: 'number',
|
|
21
|
+
name: 'port',
|
|
22
|
+
message: 'SSH port:',
|
|
23
|
+
default: defaults?.port ?? 22,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'input',
|
|
27
|
+
name: 'username',
|
|
28
|
+
message: 'SSH username:',
|
|
29
|
+
default: defaults?.username ?? 'root',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'password',
|
|
33
|
+
name: 'password',
|
|
34
|
+
message: 'SSH password:',
|
|
35
|
+
mask: '*',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: 'list',
|
|
39
|
+
name: 'location',
|
|
40
|
+
message: 'Server location:',
|
|
41
|
+
choices: [
|
|
42
|
+
{ name: 'Iran (IR) — will configure local mirrors', value: 'ir' },
|
|
43
|
+
{ name: 'Global — use default registries', value: 'global' },
|
|
44
|
+
],
|
|
45
|
+
default: defaults?.location ?? 'global',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: 'list',
|
|
49
|
+
name: 'ubuntuVersion',
|
|
50
|
+
message: 'Ubuntu version:',
|
|
51
|
+
choices: Object.entries(types_1.UBUNTU_VERSION_NAMES).map(([value, name]) => ({ name, value })),
|
|
52
|
+
when: (ans) => ans['location'] === 'ir',
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
return answers;
|
|
56
|
+
}
|
|
57
|
+
async function promptDeployConfig(server) {
|
|
58
|
+
const answers = await inquirer_1.default.prompt([
|
|
59
|
+
{
|
|
60
|
+
type: 'input',
|
|
61
|
+
name: 'projectName',
|
|
62
|
+
message: 'Project folder name (e.g. parwindoor → parwindoor.zisites.app):',
|
|
63
|
+
validate: (v) => /^[a-z0-9-]+$/.test(v) || 'Use lowercase letters, numbers, and hyphens only',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'input',
|
|
67
|
+
name: 'clientDomain',
|
|
68
|
+
message: 'Client custom domain (e.g. zisite.com):',
|
|
69
|
+
validate: (v) => v.length > 0 || 'Domain is required',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'input',
|
|
73
|
+
name: 'localProjectPath',
|
|
74
|
+
message: 'Local path to project folder:',
|
|
75
|
+
validate: (v) => v.length > 0 || 'Path is required',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: 'number',
|
|
79
|
+
name: 'appPort',
|
|
80
|
+
message: 'Port the app will run on (inside server):',
|
|
81
|
+
default: 3000,
|
|
82
|
+
},
|
|
83
|
+
]);
|
|
84
|
+
return { server, ...answers };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/prompts/credentials.ts"],"names":[],"mappings":";;;;;AAGA,0DAiDC;AAED,gDA6BC;AAnFD,wDAAgC;AAChC,oCAAgG;AAEzF,KAAK,UAAU,uBAAuB,CAAC,QAAqC;IACjF,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI;YACvB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,0BAA0B;SAC1E;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE;SAC9B;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,MAAM;SACtC;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,GAAG;SACV;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,0CAA0C,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjE,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,QAAQ,EAAE;aAC7D;YACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,QAAQ;SACxC;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAG,MAAM,CAAC,OAAO,CAAC,4BAAoB,CAA+B,CAAC,GAAG,CAC9E,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACrC;YACD,IAAI,EAAE,CAAC,GAA4B,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI;SACjE;KACF,CAAC,CAAC;IAEH,OAAO,OAAuC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,MAAyB;IAChE,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,iEAAiE;YAC1E,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,kDAAkD;SACtG;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,yCAAyC;YAClD,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAoB;SAC9D;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,+BAA+B;YACxC,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB;SAC5D;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAkB,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SSHClient } from '../ssh/client';
|
|
2
|
+
import { ServerCredentials } from '../types';
|
|
3
|
+
export declare function installDocker(ssh: SSHClient, creds: ServerCredentials): Promise<void>;
|
|
4
|
+
export declare function installDockerCompose(ssh: SSHClient): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/setup/docker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC3F;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAexE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.installDocker = installDocker;
|
|
7
|
+
exports.installDockerCompose = installDockerCompose;
|
|
8
|
+
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const mirrors_1 = require("./mirrors");
|
|
10
|
+
async function installDocker(ssh, creds) {
|
|
11
|
+
const alreadyInstalled = await ssh.commandExists('docker');
|
|
12
|
+
if (alreadyInstalled) {
|
|
13
|
+
console.log(' Docker already installed, skipping.');
|
|
14
|
+
if (creds.location === 'ir') {
|
|
15
|
+
await (0, mirrors_1.configureDockerMirrors)(ssh);
|
|
16
|
+
}
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const spinner = (0, ora_1.default)('Installing Docker...').start();
|
|
20
|
+
try {
|
|
21
|
+
await ssh.sudo('apt-get install -y ca-certificates curl gnupg lsb-release');
|
|
22
|
+
await ssh.sudo('install -m 0755 -d /etc/apt/keyrings');
|
|
23
|
+
await ssh.sudo('curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc');
|
|
24
|
+
await ssh.sudo('chmod a+r /etc/apt/keyrings/docker.asc');
|
|
25
|
+
await ssh.sudo(`bash -c 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list'`);
|
|
26
|
+
await ssh.sudo('apt-get update -y');
|
|
27
|
+
await ssh.sudo('apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin');
|
|
28
|
+
await ssh.sudo('systemctl enable docker');
|
|
29
|
+
await ssh.sudo('systemctl start docker');
|
|
30
|
+
spinner.succeed('Docker installed');
|
|
31
|
+
if (creds.location === 'ir') {
|
|
32
|
+
await (0, mirrors_1.configureDockerMirrors)(ssh);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
spinner.fail('Failed to install Docker');
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function installDockerCompose(ssh) {
|
|
41
|
+
const alreadyInstalled = await ssh.commandExists('docker-compose');
|
|
42
|
+
if (alreadyInstalled)
|
|
43
|
+
return;
|
|
44
|
+
const spinner = (0, ora_1.default)('Installing Docker Compose...').start();
|
|
45
|
+
try {
|
|
46
|
+
await ssh.sudo('curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose');
|
|
47
|
+
await ssh.sudo('chmod +x /usr/local/bin/docker-compose');
|
|
48
|
+
spinner.succeed('Docker Compose installed');
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
spinner.fail('Failed to install Docker Compose');
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/setup/docker.ts"],"names":[],"mappings":";;;;;AAKA,sCAgCC;AAED,oDAeC;AAtDD,8CAAsB;AAGtB,uCAAmD;AAE5C,KAAK,UAAU,aAAa,CAAC,GAAc,EAAE,KAAwB;IAC1E,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAA,gCAAsB,EAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC5E,MAAM,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACvD,MAAM,GAAG,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QAC1G,MAAM,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACzD,MAAM,GAAG,CAAC,IAAI,CACZ,wOAAwO,CACzO,CAAC;QACF,MAAM,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpC,MAAM,GAAG,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;QACtH,MAAM,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC1C,MAAM,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEpC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAA,gCAAsB,EAAC,GAAG,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,GAAc;IACvD,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnE,IAAI,gBAAgB;QAAE,OAAO;IAE7B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,CACZ,+IAA+I,CAChJ,CAAC;QACF,MAAM,GAAG,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACzD,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SSHClient } from '../ssh/client';
|
|
2
|
+
import { ServerCredentials } from '../types';
|
|
3
|
+
export declare function configureUbuntuMirrors(ssh: SSHClient, creds: ServerCredentials): Promise<void>;
|
|
4
|
+
export declare function configureDockerMirrors(ssh: SSHClient): Promise<void>;
|
|
5
|
+
export declare function configureNpmMirror(ssh: SSHClient): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=mirrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mirrors.d.ts","sourceRoot":"","sources":["../../src/setup/mirrors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcpG;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1E;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE"}
|