# Komodo Write Module - Quick Reference
## Import
```typescript
import {
createServer, updateServer, deleteServer,
createDeployment, updateDeployment, deleteDeployment,
createStack, updateStack, deleteStack,
createBuild, updateBuild, deleteBuild,
createRepo, updateRepo, deleteRepo,
createProcedure, updateProcedure, deleteProcedure,
createAction, updateAction, deleteAction,
} from './src/modules/write.js';
```
## Server
```typescript
// Create
await createServer({
name: 'web-01',
address: '192.168.1.100',
port: 22,
tags: ['production']
});
// Update
await updateServer('server-id', { enabled: false });
// Delete
await deleteServer('server-id');
```
## Deployment
```typescript
// Create
await createDeployment({
name: 'api-service',
serverId: 'server-id',
image: 'myapp:latest',
ports: [{ host: 80, container: 3000 }],
restart: 'always'
});
// Update
await updateDeployment('deploy-id', { image: 'myapp:v2' });
// Delete
await deleteDeployment('deploy-id');
```
## Stack
```typescript
// Create
await createStack({
name: 'app-stack',
composeFile: 'version: "3.8"\nservices:\n web:\n image: nginx',
projectName: 'myapp'
});
// Update
await updateStack('stack-id', { enabled: false });
// Delete
await deleteStack('stack-id');
```
## Build
```typescript
// Create
await createBuild({
name: 'app-build',
repoId: 'repo-id',
dockerfile: './Dockerfile',
tags: ['latest']
});
// Update
await updateBuild('build-id', { target: 'production' });
// Delete
await deleteBuild('build-id');
```
## Repository
```typescript
// Create
await createRepo({
name: 'my-app',
url: 'https://github.com/user/repo.git',
branch: 'main',
credentials: { password: process.env.GH_TOKEN }
});
// Update
await updateRepo('repo-id', { branch: 'develop' });
// Delete
await deleteRepo('repo-id');
```
## Procedure
```typescript
// Create
await createProcedure({
name: 'backup',
steps: [
{ type: 'command', command: 'pg_dump db > backup.sql' },
{ type: 'script', script: 'aws s3 cp backup.sql s3://backups/' }
],
schedule: '0 2 * * *'
});
// Update
await updateProcedure('proc-id', { enabled: false });
// Delete
await deleteProcedure('proc-id');
```
## Action
```typescript
// Create
await createAction({
name: 'auto-deploy',
trigger: { type: 'webhook', webhookSecret: 'secret' },
action: { type: 'deployment', targetId: 'deploy-id' }
});
// Update
await updateAction('action-id', { enabled: false });
// Delete
await deleteAction('action-id');
```
## Validation
### Required Fields
| Resource | Required Fields |
|----------|----------------|
| Server | `name`, `address` |
| Deployment | `name`, `serverId` |
| Stack | `name`, `composeFile` |
| Build | `name`, `repoId` |
| Repo | `name`, `url` |
| Procedure | `name`, `steps` |
| Action | `name`, `trigger`, `action` |
### Enums
| Field | Valid Values |
|-------|-------------|
| `restart` | `no`, `always`, `on-failure`, `unless-stopped` |
| `step.type` | `command`, `script`, `api-call` |
| `trigger.type` | `manual`, `webhook`, `schedule`, `event` |
| `action.type` | `deployment`, `build`, `procedure`, `command` |
### Constraints
| Field | Constraint |
|-------|-----------|
| `port` | 1-65535 |
| `schedule` | Valid cron (5-6 parts) |
| `url` | Valid URL format |
| `steps` | Non-empty array |
## Error Handling
```typescript
try {
await createServer({ name: '', address: '' });
} catch (error) {
if (error instanceof ValidationError) {
console.error('Validation:', error.message);
} else {
console.error('API error:', error.message);
}
}
```
## Response Format
```typescript
// Success
{
success: true,
data: { id: '...', ... }
}
// Error
{
success: false,
error: 'Error message'
}
// Delete
{
success: true,
data: {
success: true,
message: 'Deleted',
deletedId: 'id'
}
}
```
## Environment Variables
```bash
KOMODO_URL=https://api.komodo.example.com
KOMODO_API_KEY=your-api-key
KOMODO_API_SECRET=your-api-secret
KOMODO_TIMEOUT=30000
```
## Common Patterns
### Create with Error Handling
```typescript
const server = await createServer({
name: 'web-01',
address: '192.168.1.100'
}).catch(err => {
console.error('Failed:', err.message);
return null;
});
```
### Update Multiple Fields
```typescript
await updateDeployment('deploy-id', {
image: 'myapp:v2',
environment: { NEW_VAR: 'value' },
enabled: true
});
```
### Batch Create
```typescript
const servers = await Promise.all([
createServer({ name: 'web-01', address: '192.168.1.101' }),
createServer({ name: 'web-02', address: '192.168.1.102' }),
createServer({ name: 'db-01', address: '192.168.1.103' })
]);
```
### Delete with Confirmation
```typescript
const confirm = await askUser('Delete server?');
if (confirm) {
await deleteServer('server-id');
}
```