EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
setup-meshcentral.js
Go to the documentation of this file.
1const pool = require('./services/db');
2const MeshCentralAPI = require('./lib/meshcentral-api');
3
4const MESHCENTRAL_URL = process.env.MESHCENTRAL_URL || 'https://rmm-psa-meshcentral-aq48h.ondigitalocean.app';
5const MESHCENTRAL_USER = process.env.MESHCENTRAL_USERNAME || 'admin';
6const MESHCENTRAL_PASSWORD = process.env.MESHCENTRAL_PASSWORD || 'YOUR_PASSWORD';
7
8/**
9 *
10 * @param tenantId
11 */
12async function setupTenantMeshCentral(tenantId) {
13 console.log(`\nšŸ”§ Setting up MeshCentral for tenant: ${tenantId}`);
14
15 // Get tenant info
16 const tenantResult = await pool.query(
17 'SELECT name, meshcentral_group_id FROM tenants WHERE tenant_id = $1',
18 [tenantId]
19 );
20
21 if (tenantResult.rows.length === 0) {
22 throw new Error('Tenant not found');
23 }
24
25 const tenant = tenantResult.rows[0];
26 console.log(` Tenant name: ${tenant.name}`);
27
28 if (tenant.meshcentral_group_id) {
29 console.log(` āœ… Already configured with mesh ID: ${tenant.meshcentral_group_id}`);
30 return { meshId: tenant.meshcentral_group_id, created: false };
31 }
32
33 // Connect to MeshCentral
34 console.log(` Connecting to MeshCentral: ${MESHCENTRAL_URL}`);
35 const api = new MeshCentralAPI(MESHCENTRAL_URL);
36 await api.login(MESHCENTRAL_USER, MESHCENTRAL_PASSWORD);
37 console.log(` āœ… Connected as: ${MESHCENTRAL_USER}`);
38
39 // Create device group (mesh)
40 const meshName = `${tenant.name} Devices`;
41 console.log(` Creating device group: ${meshName}`);
42
43 const mesh = await api.createMesh(meshName, {
44 desc: `Device group for ${tenant.name}`,
45 flags: 0
46 });
47
48 if (!mesh || !mesh.meshid) {
49 throw new Error('Failed to create mesh');
50 }
51
52 console.log(` āœ… Created mesh: ${mesh.meshid}`);
53
54 // Store mesh ID in database
55 await pool.query(
56 'UPDATE tenants SET meshcentral_group_id = $1, meshcentral_setup_complete = true WHERE tenant_id = $2',
57 [mesh.meshid, tenantId]
58 );
59
60 console.log(` āœ… Updated database with mesh ID`);
61
62 return { meshId: mesh.meshid, created: true };
63}
64
65(async () => {
66 try {
67 const tenantId = '00000000-0000-0000-0000-000000000001';
68 const result = await setupTenantMeshCentral(tenantId);
69
70 console.log(`\nāœ… Setup complete!`);
71 console.log(` Mesh ID: ${result.meshId}`);
72 console.log(`\nšŸ“„ MeshAgent Installer URLs:`);
73 console.log(` Windows: ${MESHCENTRAL_URL}/meshagents?id=${result.meshId}&installflags=0&meshinstall=meshagent.exe`);
74 console.log(` Linux: ${MESHCENTRAL_URL}/meshagents?id=${result.meshId}&installflags=0&meshinstall=meshagent`);
75
76 } catch (err) {
77 console.error('\nāŒ Setup failed:', err.message);
78 console.error(err.stack);
79 } finally {
80 await pool.end();
81 process.exit(0);
82 }
83})();