Skip to content

API Reference

Complete reference for the AMPBridge service and backend communication.

AMPBridge Service

Central hub for all communication with the Neutralino.js backend.

Import

typescript
import { ampBridge } from '@/services/AMPBridge';

Singleton Access

typescript
// No need to instantiate - use the exported singleton
const bridge = ampBridge;

System APIs

ampBridge.version()

Get AMP Manager version info.

Returns:

typescript
{
  status: string;
  version: string;
  build: string;
  engine: string;
}

Example:

typescript
const info = await ampBridge.version();
// { status: 'ok', version: '1.0.0', build: '2026-03-07', engine: 'amp-manager' }

ampBridge.isAvailable()

Check if the AMP backend is available (running in Neutralino).

Returns: boolean

Example:

typescript
if (ampBridge.isAvailable()) {
  const status = await ampBridge.status();
} else {
  console.log('Running in browser dev mode');
}

ampBridge.isDevMode()

Check if running in development mode (browser localhost).

Returns: boolean

Example:

typescript
if (ampBridge.isDevMode()) {
  console.log('Dev mode - some features disabled');
}

ampBridge.status()

Get overall system status.

Returns: AmpResponse

ampBridge.runtimeStatus()

Get runtime status including Docker containers.

Returns: AmpResponse

ampBridge.envCheck()

Verify environment and get project root.

Returns:

typescript
{
  status: string;
  project_root: string;
  [key: string]: any;
}

Example:

typescript
const env = await ampBridge.envCheck();
// { status: 'ok', project_root: 'C:\\amp' }

ampBridge.clearCache()

Clear application cache.

Returns: AmpResponse

ampBridge.clearLogs()

Clear log files.

Returns: AmpResponse

Domain APIs

ampBridge.scanDomains()

Scan Windows hosts file for domain entries.

Returns: AmpResponse

ampBridge.listDomains()

List all configured domains.

Returns: AmpResponse

ampBridge.createDomain(name, options?)

Create a new local domain.

Parameters:

NameTypeDescription
namestringDomain name (without .local)
options{ scaffold?: boolean }Create scaffold files

Returns: AmpResponse

Example:

typescript
const result = await ampBridge.createDomain('myproject', { scaffold: true });

ampBridge.removeDomain(name)

Remove a domain.

Parameters:

NameTypeDescription
namestringDomain name to remove

Returns: AmpResponse

ampBridge.generateConfig(domain)

Regenerate domain configuration.

Parameters:

NameTypeDescription
domainstringDomain name

Returns: AmpResponse

Database APIs

ampBridge.dbQuery(query)

Execute database query via amp-tasks.bat.

Parameters:

NameTypeDescription
querystringQuery string (e.g., "LIST", "createDB")

Returns: AmpResponse

Example:

typescript
// List databases
const dbs = await ampBridge.dbQuery('LIST');

// Create database
await ampBridge.dbQuery('mydb|||user|||password');

// Delete database
await ampBridge.dbQuery('deletemydb');

Certificate APIs (CA)

ampBridge.caStatus()

Check Certificate Authority status.

Returns: AmpResponse

ampBridge.caReset()

Reset/reinstall CA certificate.

Returns: AmpResponse

ampBridge.caUninstall()

Uninstall CA certificate.

Returns: AmpResponse

ampBridge.regenerateSsl(domain)

Regenerate SSL for a domain.

Parameters:

NameTypeDescription
domainstringDomain name

Returns: AmpResponse

ampBridge.regenerateAllSsl()

Regenerate SSL for all domains.

Returns: AmpResponse

SSH Key APIs

ampBridge.sshKeyStatus()

Check SSH key status.

Returns:

typescript
AmpResponse & {
  key_exists: boolean;
  fingerprint?: string;
  public_key?: string;
  key_path?: string;
}

ampBridge.sshKeyGenerate(username)

Generate new SSH key pair.

Parameters:

NameTypeDescription
usernamestringUsername for key comment

Returns:

typescript
AmpResponse & {
  key_path?: string;
  fingerprint?: string;
  public_key?: string;
}

OS APIs

ampBridge.os

Operating system operations.

typescript
ampBridge.os.open(url: string): Promise<void>
ampBridge.os.execCommand(command: string): Promise<{ exitCode: number; stdOut: string; stdErr: string }>
ampBridge.os.spawnProcess(command: string, options?: { cwd?: string; envs?: Record<string, string> }): Promise<{ id: number; pid: number }>
ampBridge.os.updateSpawnedProcess(id: number, action: string, data?: string): Promise<{ status: string }>
ampBridge.os.getSpawnedProcesses(): Promise<any[]>
ampBridge.os.getEnv(key: string): Promise<string>
ampBridge.os.getEnvs(): Promise<Record<string, string>>
ampBridge.os.showSaveDialog(title?: string, options?: any): Promise<string>
ampBridge.os.showOpenDialog(title?: string, options?: any): Promise<string[]>
ampBridge.os.showFolderDialog(title?: string, options?: any): Promise<string>

Filesystem APIs

ampBridge.fs

File system operations.

typescript
ampBridge.fs.readTextFile(path: string): Promise<string>
ampBridge.fs.writeTextFile(path: string, content: string): Promise<void>
ampBridge.fs.copyFile(source: string, dest: string): Promise<void>
ampBridge.fs.deleteFile(path: string): Promise<void>
ampBridge.fs.readDirectory(path: string): Promise<any[]>
ampBridge.fs.getFolderSize(path: string): Promise<string>
ampBridge.fs.createDirectory(path: string): Promise<void>
ampBridge.fs.remove(path: string): Promise<void>
ampBridge.fs.getAbsolutePath(path: string): Promise<string>

Angie APIs

ampBridge.angie

Angie web server operations.

typescript
ampBridge.angie.testConfig(): Promise<{ valid: boolean; output: string }>
ampBridge.angie.reload(): Promise<void>
ampBridge.angie.liveStatus(): Promise<AmpResponse>

Docker APIs

ampBridge.docker

Docker container operations.

typescript
ampBridge.docker.stats(): Promise<DockerStat[]>
ampBridge.docker.disk(): Promise<DockerDisk[]>
ampBridge.docker.info(): Promise<any>
ampBridge.docker.envMetrics(): Promise<AmpResponse>
ampBridge.docker.launchDesktop(): Promise<AmpResponse>
ampBridge.docker.startContainers(): Promise<AmpResponse>
ampBridge.docker.stopContainers(): Promise<AmpResponse>
ampBridge.docker.restartAngie(): Promise<AmpResponse>
ampBridge.docker.restartRuntime(): Promise<AmpResponse>
ampBridge.docker.restartFullStack(): Promise<AmpResponse>

Workflow APIs

ampBridge.workflow

Workflow execution commands.

typescript
ampBridge.workflow.npm(domain: string, cmd: string): Promise<AmpResponse>
ampBridge.workflow.node(domain: string, cmd: string): Promise<AmpResponse>
ampBridge.workflow.shell(domain: string, cmd: string): Promise<AmpResponse>
ampBridge.workflow.git(domain: string, cmd: string): Promise<AmpResponse>
ampBridge.workflow.sftpWithAmpKey(host: string, username: string, localPath: string, remotePath: string): Promise<AmpResponse>
ampBridge.workflow.sftpWithCustomKey(host: string, username: string, localPath: string, remotePath: string, keyContent: string): Promise<AmpResponse>
ampBridge.workflow.webhook(url: string, data: string): Promise<AmpResponse>

Event APIs

ampBridge.events

Neutralino event handling.

typescript
ampBridge.events.on(event: string, handler: (data: any) => void): void
ampBridge.events.off(event: string, handler: (data: any) => void): void
ampBridge.events.dispatch(event: string, data?: any): void

Window APIs

ampBridge.window

Window management.

typescript
ampBridge.window.minimize(): void
ampBridge.window.maximize(): void
ampBridge.window.unmaximize(): void
ampBridge.window.isMaximized(): void
ampBridge.window.close(): void
ampBridge.window.setDraggableRegion(id: string): void

App APIs

ampBridge.app

Application control.

typescript
ampBridge.app.exit(): void

Service Layer

DatabaseService

typescript
import { databaseService } from '@/services/DatabaseService';

const databases = await databaseService.listDatabases();
await databaseService.createDatabase('mydb|||user|||pass');
await databaseService.deleteDatabase('mydb');
await databaseService.launchTool('https://localhost:8080', 'url');

Type Definitions

AmpResponse

typescript
interface AmpResponse {
  status: 'ok' | 'error';
  message?: string;
  details?: string;
  [key: string]: any;
}

DockerStat

typescript
interface DockerStat {
  name: string;
  cpu: string;
  memory: string;
  status: string;
}

DockerDisk

typescript
interface DockerDisk {
  name: string;
  size: string;
}

Usage Examples

Checking Backend Availability

typescript
if (ampBridge.isAvailable()) {
  const status = await ampBridge.status();
} else {
  console.log('Running in browser mode');
}

Running a Workflow Command

typescript
const result = await ampBridge.workflow.shell('mydomain.local', 'npm install');
if (result.status === 'ok') {
  console.log(result.message);
}

Reading a File

typescript
const content = await ampBridge.fs.readTextFile('C:\\amp\\config\\app.conf');

NeutralinoJS Freeze Prevention

AMP Manager includes safeguards against NeutralinoJS idle freezes:

startKeepalive(interval?)

Starts a heartbeat to prevent the app from hanging during idle periods.

typescript
import { startKeepalive } from '@/services/AMPBridge';

// Start heartbeat every 30 seconds (default)
startKeepalive(30000);

Note: The keepalive pings silently fail. If the backend becomes unresponsive, the serverOffline event fires and triggers a navigation to the login screen.

Diagnostic: Check browser console for [AMP] Keepalive logs to verify the heartbeat is firing.

serverOffline Event

When the NeutralinoJS backend becomes unresponsive (freeze detection), the app automatically navigates to / which triggers the login modal. This ensures:

  • User is prompted to re-authenticate after idle periods
  • No duplicate error messages
  • Clean session recovery

Diagnostic: Check browser console for [AMP] serverOffline event fired when disconnect occurs.

Troubleshooting Idle Freezes

If the app becomes unresponsive after idle:

  1. Open browser DevTools (F12) -> Console tab
  2. Look for [AMP] log messages:
    • [AMP] Keepalive starting with 30000ms interval - keepalive active
    • [AMP] Keepalive ping #N failed - backend not responding
    • [AMP] serverOffline event fired - critical disconnect detected
  3. Check NeutralinoJS logs in app data folder

execWithTimeout(command, timeout?)

Execute commands with automatic timeout to prevent hangs.

typescript
import { execWithTimeout } from '@/services/AMPBridge';

// Execute with 30 second timeout
const result = await execWithTimeout('docker ps', 30000);

isDevMode()

  • already documented above as ampBridge.isDevMode()

execWithRetry(fn, retries?, delayMs?)

Execute a backend call with retry logic.

typescript
import { execWithRetry } from '@/services/AMPBridge';

// Retry 3 times with exponential backoff
const result = await execWithRetry(() => ampBridge.status(), 3, 1000);

startKeepalive(intervalMs?)

Start heartbeat to prevent Windows suspension.

typescript
import { startKeepalive } from '@/services/AMPBridge';

startKeepalive(30000); // 30 second interval

stopKeepalive()

Stop the heartbeat keepalive.

typescript
import { stopKeepalive } from '@/services/AMPBridge';

stopKeepalive();

ampBridge.spawnWatchdog()

Spawn watchdog for zombie app recovery.

typescript
ampBridge.spawnWatchdog();
// Called automatically on app startup

See Also

AMP Manager
Released under the MIT License.