liara-mcp 0.1.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/LICENSE +22 -0
- package/README.md +353 -0
- package/dist/api/client.d.ts +49 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +145 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/types.d.ts +256 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +25 -0
- package/dist/api/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3102 -0
- package/dist/index.js.map +1 -0
- package/dist/services/apps.d.ts +39 -0
- package/dist/services/apps.d.ts.map +1 -0
- package/dist/services/apps.js +83 -0
- package/dist/services/apps.js.map +1 -0
- package/dist/services/databases.d.ts +74 -0
- package/dist/services/databases.d.ts.map +1 -0
- package/dist/services/databases.js +120 -0
- package/dist/services/databases.js.map +1 -0
- package/dist/services/deployment.d.ts +57 -0
- package/dist/services/deployment.d.ts.map +1 -0
- package/dist/services/deployment.js +70 -0
- package/dist/services/deployment.js.map +1 -0
- package/dist/services/disks.d.ts +35 -0
- package/dist/services/disks.d.ts.map +1 -0
- package/dist/services/disks.js +88 -0
- package/dist/services/disks.js.map +1 -0
- package/dist/services/dns.d.ts +43 -0
- package/dist/services/dns.d.ts.map +1 -0
- package/dist/services/dns.js +80 -0
- package/dist/services/dns.js.map +1 -0
- package/dist/services/domains.d.ts +23 -0
- package/dist/services/domains.d.ts.map +1 -0
- package/dist/services/domains.js +42 -0
- package/dist/services/domains.js.map +1 -0
- package/dist/services/environment.d.ts +31 -0
- package/dist/services/environment.d.ts.map +1 -0
- package/dist/services/environment.js +59 -0
- package/dist/services/environment.js.map +1 -0
- package/dist/services/iaas.d.ts +80 -0
- package/dist/services/iaas.d.ts.map +1 -0
- package/dist/services/iaas.js +161 -0
- package/dist/services/iaas.js.map +1 -0
- package/dist/services/mail.d.ts +38 -0
- package/dist/services/mail.d.ts.map +1 -0
- package/dist/services/mail.js +65 -0
- package/dist/services/mail.js.map +1 -0
- package/dist/services/network.d.ts +19 -0
- package/dist/services/network.d.ts.map +1 -0
- package/dist/services/network.js +35 -0
- package/dist/services/network.js.map +1 -0
- package/dist/services/observability.d.ts +24 -0
- package/dist/services/observability.d.ts.map +1 -0
- package/dist/services/observability.js +41 -0
- package/dist/services/observability.js.map +1 -0
- package/dist/services/plans.d.ts +12 -0
- package/dist/services/plans.d.ts.map +1 -0
- package/dist/services/plans.js +17 -0
- package/dist/services/plans.js.map +1 -0
- package/dist/services/settings.d.ts +28 -0
- package/dist/services/settings.d.ts.map +1 -0
- package/dist/services/settings.js +37 -0
- package/dist/services/settings.js.map +1 -0
- package/dist/services/storage.d.ts +60 -0
- package/dist/services/storage.d.ts.map +1 -0
- package/dist/services/storage.js +96 -0
- package/dist/services/storage.js.map +1 -0
- package/dist/services/user.d.ts +32 -0
- package/dist/services/user.d.ts.map +1 -0
- package/dist/services/user.js +16 -0
- package/dist/services/user.js.map +1 -0
- package/dist/utils/errors.d.ts +30 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +63 -0
- package/dist/utils/errors.js.map +1 -0
- package/package.json +67 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
# Liara MCP Server
|
|
2
|
+
|
|
3
|
+
A Model Context Protocol (MCP) server for the Liara cloud platform. This server enables AI assistants to deploy and manage applications, databases, and infrastructure on Liara through natural language.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### Current Capabilities
|
|
8
|
+
|
|
9
|
+
- **App Management**: Create, deploy, start, stop, restart, and delete apps across 14+ platforms
|
|
10
|
+
- **Environment Variables**: Set and update environment variables for apps
|
|
11
|
+
- **Deployment**: Deploy releases to apps
|
|
12
|
+
- **Database Management**: Create, manage, and backup databases (MySQL, PostgreSQL, MongoDB, Redis, etc.)
|
|
13
|
+
- **Object Storage**: Manage S3-compatible storage buckets
|
|
14
|
+
- **Plans**: List and view available resource plans
|
|
15
|
+
|
|
16
|
+
### Supported Platforms
|
|
17
|
+
|
|
18
|
+
Node.js, Next.js, Laravel, PHP, Django, Flask, .NET, Static sites, React, Angular, Vue, Docker, Python, Go
|
|
19
|
+
|
|
20
|
+
### Supported Databases
|
|
21
|
+
|
|
22
|
+
MariaDB, MySQL, PostgreSQL, MSSQL, MongoDB, Redis, ElasticSearch, RabbitMQ
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
### Via npm (Recommended)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Install globally
|
|
30
|
+
npm install -g liara-mcp
|
|
31
|
+
|
|
32
|
+
# Or install locally in your project
|
|
33
|
+
npm install liara-mcp
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### From Source
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Clone the repository
|
|
40
|
+
git clone https://github.com/YOUR_USERNAME/liara-mcp.git
|
|
41
|
+
cd liara-mcp
|
|
42
|
+
|
|
43
|
+
# Install dependencies
|
|
44
|
+
npm install
|
|
45
|
+
|
|
46
|
+
# Build the TypeScript code
|
|
47
|
+
npm run build
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Configuration
|
|
51
|
+
|
|
52
|
+
1. Copy the example environment file:
|
|
53
|
+
```bash
|
|
54
|
+
cp .env.example .env
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
2. Configure your Liara API credentials in `.env`:
|
|
58
|
+
```
|
|
59
|
+
LIARA_API_TOKEN=your_api_token_here
|
|
60
|
+
LIARA_TEAM_ID=optional_team_id
|
|
61
|
+
LIARA_API_BASE_URL=https://api.iran.liara.ir
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Getting Your API Token
|
|
65
|
+
|
|
66
|
+
1. Log in to [Liara Console](https://console.liara.ir)
|
|
67
|
+
2. Navigate to the API section in your account menu
|
|
68
|
+
3. Click "Create new key" to generate your API token
|
|
69
|
+
|
|
70
|
+
### Team ID (Optional)
|
|
71
|
+
|
|
72
|
+
If you're working with a team account, you can find your Team ID in the API section of the Liara console when viewing your team.
|
|
73
|
+
|
|
74
|
+
## Usage
|
|
75
|
+
|
|
76
|
+
### With MCP Client
|
|
77
|
+
|
|
78
|
+
#### If installed globally via npm:
|
|
79
|
+
|
|
80
|
+
Add to your MCP client configuration (e.g., Claude Desktop):
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"mcpServers": {
|
|
85
|
+
"liara": {
|
|
86
|
+
"command": "liara-mcp",
|
|
87
|
+
"env": {
|
|
88
|
+
"LIARA_API_TOKEN": "your_api_token_here"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### If installed locally or from source:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"mcpServers": {
|
|
100
|
+
"liara": {
|
|
101
|
+
"command": "node",
|
|
102
|
+
"args": ["/path/to/liara-mcp/dist/index.js"],
|
|
103
|
+
"env": {
|
|
104
|
+
"LIARA_API_TOKEN": "your_api_token_here"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Available Tools
|
|
112
|
+
|
|
113
|
+
#### App Management
|
|
114
|
+
- `liara_list_apps` - List all apps
|
|
115
|
+
- `liara_get_app` - Get app details
|
|
116
|
+
- `liara_create_app` - Create a new app
|
|
117
|
+
- `liara_delete_app` - Delete an app
|
|
118
|
+
- `liara_start_app` - Start an app
|
|
119
|
+
- `liara_stop_app` - Stop an app
|
|
120
|
+
- `liara_restart_app` - Restart an app
|
|
121
|
+
- `liara_resize_app` - Change app plan
|
|
122
|
+
|
|
123
|
+
#### Environment Variables
|
|
124
|
+
- `liara_set_env_vars` - Set multiple environment variables
|
|
125
|
+
- `liara_set_env_var` - Set a single environment variable
|
|
126
|
+
- `liara_get_env_vars` - Get all environment variables
|
|
127
|
+
- `liara_delete_env_var` - Delete an environment variable
|
|
128
|
+
- `liara_delete_env_vars` - Delete multiple environment variables
|
|
129
|
+
|
|
130
|
+
#### Deployment
|
|
131
|
+
- `liara_upload_source` - Upload source code for deployment
|
|
132
|
+
- `liara_deploy_release` - Deploy a release
|
|
133
|
+
- `liara_list_releases` - List all releases
|
|
134
|
+
- `liara_get_release` - Get release details
|
|
135
|
+
- `liara_rollback_release` - Rollback to a previous release
|
|
136
|
+
- `liara_list_sources` - List uploaded sources
|
|
137
|
+
- `liara_delete_source` - Delete an uploaded source
|
|
138
|
+
|
|
139
|
+
#### Database Management
|
|
140
|
+
- `liara_list_databases` - List all databases
|
|
141
|
+
- `liara_get_database` - Get database details
|
|
142
|
+
- `liara_create_database` - Create a new database
|
|
143
|
+
- `liara_delete_database` - Delete a database
|
|
144
|
+
- `liara_start_database` - Start a database
|
|
145
|
+
- `liara_stop_database` - Stop a database
|
|
146
|
+
- `liara_restart_database` - Restart a database
|
|
147
|
+
- `liara_resize_database` - Change database plan
|
|
148
|
+
- `liara_get_database_connection` - Get database connection info
|
|
149
|
+
- `liara_create_backup` - Create a database backup
|
|
150
|
+
- `liara_list_backups` - List database backups
|
|
151
|
+
- `liara_get_backup_download_url` - Get backup download URL
|
|
152
|
+
- `liara_restore_backup` - Restore database from backup
|
|
153
|
+
- `liara_delete_backup` - Delete a database backup
|
|
154
|
+
|
|
155
|
+
#### Object Storage
|
|
156
|
+
- `liara_list_buckets` - List all buckets
|
|
157
|
+
- `liara_get_bucket` - Get bucket details
|
|
158
|
+
- `liara_create_bucket` - Create a new bucket
|
|
159
|
+
- `liara_delete_bucket` - Delete a bucket
|
|
160
|
+
- `liara_get_bucket_credentials` - Get S3 credentials for a bucket
|
|
161
|
+
- `liara_list_objects` - List objects in a bucket
|
|
162
|
+
- `liara_upload_object` - Upload an object to a bucket
|
|
163
|
+
- `liara_get_object_download_url` - Get download URL for an object
|
|
164
|
+
- `liara_delete_object` - Delete an object from a bucket
|
|
165
|
+
- `liara_get_object_metadata` - Get metadata for an object
|
|
166
|
+
|
|
167
|
+
#### App Settings
|
|
168
|
+
- `liara_set_zero_downtime` - Enable/disable zero-downtime deployment
|
|
169
|
+
- `liara_set_default_subdomain` - Enable/disable default subdomain
|
|
170
|
+
- `liara_set_fixed_ip` - Enable/disable static IP
|
|
171
|
+
- `liara_set_read_only` - Enable/disable read-only mode
|
|
172
|
+
|
|
173
|
+
#### Disk Management
|
|
174
|
+
- `liara_list_disks` - List disks for an app
|
|
175
|
+
- `liara_get_disk` - Get disk details
|
|
176
|
+
- `liara_create_disk` - Create a new disk
|
|
177
|
+
- `liara_delete_disk` - Delete a disk
|
|
178
|
+
- `liara_resize_disk` - Resize a disk
|
|
179
|
+
- `liara_create_ftp_access` - Create FTP access for a disk
|
|
180
|
+
- `liara_list_ftp_accesses` - List FTP accesses for a disk
|
|
181
|
+
- `liara_delete_ftp_access` - Delete FTP access
|
|
182
|
+
|
|
183
|
+
#### DNS Management
|
|
184
|
+
- `liara_list_zones` - List all DNS zones
|
|
185
|
+
- `liara_get_zone` - Get zone details
|
|
186
|
+
- `liara_create_zone` - Create a DNS zone
|
|
187
|
+
- `liara_delete_zone` - Delete a DNS zone
|
|
188
|
+
- `liara_check_zone` - Check zone status
|
|
189
|
+
- `liara_list_dns_records` - List DNS records
|
|
190
|
+
- `liara_create_dns_record` - Create a DNS record
|
|
191
|
+
- `liara_get_dns_record` - Get DNS record details
|
|
192
|
+
- `liara_update_dns_record` - Update a DNS record
|
|
193
|
+
- `liara_delete_dns_record` - Delete a DNS record
|
|
194
|
+
|
|
195
|
+
#### Domain Management
|
|
196
|
+
- `liara_list_domains` - List all domains
|
|
197
|
+
- `liara_get_domain` - Get domain details
|
|
198
|
+
- `liara_add_domain` - Add a domain to an app
|
|
199
|
+
- `liara_remove_domain` - Remove a domain from an app
|
|
200
|
+
- `liara_check_domain` - Check domain status
|
|
201
|
+
|
|
202
|
+
#### Mail Server
|
|
203
|
+
- `liara_list_mail_servers` - List all mail servers
|
|
204
|
+
- `liara_get_mail_server` - Get mail server details
|
|
205
|
+
- `liara_create_mail_server` - Create a mail server
|
|
206
|
+
- `liara_delete_mail_server` - Delete a mail server
|
|
207
|
+
- `liara_start_mail_server` - Start a mail server
|
|
208
|
+
- `liara_stop_mail_server` - Stop a mail server
|
|
209
|
+
- `liara_restart_mail_server` - Restart a mail server
|
|
210
|
+
- `liara_send_email` - Send an email
|
|
211
|
+
|
|
212
|
+
#### Virtual Machines (IaaS)
|
|
213
|
+
- `liara_list_vms` - List all VMs
|
|
214
|
+
- `liara_get_vm` - Get VM details
|
|
215
|
+
- `liara_create_vm` - Create a new VM
|
|
216
|
+
- `liara_start_vm` - Start a VM
|
|
217
|
+
- `liara_stop_vm` - Stop a VM
|
|
218
|
+
- `liara_restart_vm` - Restart a VM
|
|
219
|
+
- `liara_shutdown_vm` - Shutdown a VM
|
|
220
|
+
- `liara_poweroff_vm` - Power off a VM
|
|
221
|
+
- `liara_delete_vm` - Delete a VM
|
|
222
|
+
- `liara_resize_vm` - Resize a VM
|
|
223
|
+
- `liara_create_snapshot` - Create a VM snapshot
|
|
224
|
+
- `liara_list_snapshots` - List VM snapshots
|
|
225
|
+
- `liara_restore_snapshot` - Restore VM from snapshot
|
|
226
|
+
- `liara_delete_snapshot` - Delete a VM snapshot
|
|
227
|
+
- `liara_attach_network` - Attach network to VM
|
|
228
|
+
- `liara_detach_network` - Detach network from VM
|
|
229
|
+
|
|
230
|
+
#### Network Management
|
|
231
|
+
- `liara_list_networks` - List all networks
|
|
232
|
+
- `liara_get_network` - Get network details
|
|
233
|
+
- `liara_create_network` - Create a network
|
|
234
|
+
- `liara_delete_network` - Delete a network
|
|
235
|
+
|
|
236
|
+
#### Observability
|
|
237
|
+
- `liara_get_metrics` - Get app metrics
|
|
238
|
+
- `liara_get_logs` - Get app logs
|
|
239
|
+
|
|
240
|
+
#### Plans
|
|
241
|
+
- `liara_list_plans` - List available plans
|
|
242
|
+
- `liara_get_plan` - Get plan details
|
|
243
|
+
|
|
244
|
+
#### User
|
|
245
|
+
- `liara_get_user` - Get user information
|
|
246
|
+
|
|
247
|
+
## Examples
|
|
248
|
+
|
|
249
|
+
### Example Conversations
|
|
250
|
+
|
|
251
|
+
**Create and deploy an app:**
|
|
252
|
+
```
|
|
253
|
+
User: Create a Node.js app called "my-api" with the basic plan
|
|
254
|
+
Assistant: [Uses liara_create_app tool]
|
|
255
|
+
|
|
256
|
+
User: Set the NODE_ENV to production for my-api
|
|
257
|
+
Assistant: [Uses liara_set_env_var tool]
|
|
258
|
+
|
|
259
|
+
User: Start the app
|
|
260
|
+
Assistant: [Uses liara_start_app tool]
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**Create a database:**
|
|
264
|
+
```
|
|
265
|
+
User: Create a PostgreSQL database called "my-db" with the starter plan
|
|
266
|
+
Assistant: [Uses liara_create_database tool]
|
|
267
|
+
|
|
268
|
+
User: Create a backup of my-db
|
|
269
|
+
Assistant: [Uses liara_create_backup tool]
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Manage storage:**
|
|
273
|
+
```
|
|
274
|
+
User: Create a bucket called "my-files"
|
|
275
|
+
Assistant: [Uses liara_create_bucket tool]
|
|
276
|
+
|
|
277
|
+
User: Get the S3 credentials for my-files
|
|
278
|
+
Assistant: [Uses liara_get_bucket_credentials tool]
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Development
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# Watch mode for development
|
|
285
|
+
npm run dev
|
|
286
|
+
|
|
287
|
+
# Type checking
|
|
288
|
+
npm run type-check
|
|
289
|
+
|
|
290
|
+
# Build
|
|
291
|
+
npm run build
|
|
292
|
+
|
|
293
|
+
# Clean build artifacts
|
|
294
|
+
npm run clean
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Project Structure
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
liara-mcp/
|
|
301
|
+
├── src/
|
|
302
|
+
│ ├── index.ts # MCP server entry point
|
|
303
|
+
│ ├── api/
|
|
304
|
+
│ │ ├── client.ts # Liara API client
|
|
305
|
+
│ │ └── types.ts # TypeScript types
|
|
306
|
+
│ ├── services/
|
|
307
|
+
│ │ ├── apps.ts # App management
|
|
308
|
+
│ │ ├── databases.ts # Database management
|
|
309
|
+
│ │ ├── storage.ts # Object storage
|
|
310
|
+
│ │ ├── deployment.ts # Deployment operations
|
|
311
|
+
│ │ ├── environment.ts # Environment variables
|
|
312
|
+
│ │ └── plans.ts # Plan information
|
|
313
|
+
│ └── utils/
|
|
314
|
+
│ └── errors.ts # Error handling & validation
|
|
315
|
+
├── package.json
|
|
316
|
+
├── tsconfig.json
|
|
317
|
+
└── README.md
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Error Handling
|
|
321
|
+
|
|
322
|
+
The server provides user-friendly error messages for common scenarios:
|
|
323
|
+
- Invalid API token
|
|
324
|
+
- Missing required parameters
|
|
325
|
+
- Resource not found
|
|
326
|
+
- API rate limiting
|
|
327
|
+
- Network connectivity issues
|
|
328
|
+
|
|
329
|
+
## Requirements
|
|
330
|
+
|
|
331
|
+
- Node.js >= 18.0.0
|
|
332
|
+
- Valid Liara API token
|
|
333
|
+
|
|
334
|
+
## License
|
|
335
|
+
|
|
336
|
+
MIT
|
|
337
|
+
|
|
338
|
+
## Resources
|
|
339
|
+
|
|
340
|
+
- [Liara Documentation](https://docs.liara.ir)
|
|
341
|
+
- [Liara API Reference](https://openapi.liara.ir)
|
|
342
|
+
- [Model Context Protocol](https://modelcontextprotocol.io)
|
|
343
|
+
|
|
344
|
+
## Contributing
|
|
345
|
+
|
|
346
|
+
Contributions are welcome! Please feel free to submit issues or pull requests.
|
|
347
|
+
|
|
348
|
+
## Support
|
|
349
|
+
|
|
350
|
+
For issues related to:
|
|
351
|
+
- This MCP server: Open an issue on GitHub
|
|
352
|
+
- Liara platform: Contact [Liara Support](https://liara.ir)
|
|
353
|
+
- MCP protocol: See [MCP Documentation](https://modelcontextprotocol.io)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for Liara API client
|
|
3
|
+
*/
|
|
4
|
+
export interface LiaraClientConfig {
|
|
5
|
+
apiToken: string;
|
|
6
|
+
teamId?: string;
|
|
7
|
+
baseURL?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Liara API client for making authenticated requests
|
|
11
|
+
*/
|
|
12
|
+
export declare class LiaraClient {
|
|
13
|
+
private client;
|
|
14
|
+
private teamId?;
|
|
15
|
+
constructor(config: LiaraClientConfig);
|
|
16
|
+
/**
|
|
17
|
+
* Handle API errors and convert to user-friendly messages
|
|
18
|
+
*/
|
|
19
|
+
private handleError;
|
|
20
|
+
/**
|
|
21
|
+
* Add team ID parameter to request if configured
|
|
22
|
+
*/
|
|
23
|
+
private addTeamId;
|
|
24
|
+
/**
|
|
25
|
+
* GET request
|
|
26
|
+
*/
|
|
27
|
+
get<T>(url: string, params?: any): Promise<T>;
|
|
28
|
+
/**
|
|
29
|
+
* POST request
|
|
30
|
+
*/
|
|
31
|
+
post<T>(url: string, data?: any, params?: any): Promise<T>;
|
|
32
|
+
/**
|
|
33
|
+
* PUT request
|
|
34
|
+
*/
|
|
35
|
+
put<T>(url: string, data?: any, params?: any): Promise<T>;
|
|
36
|
+
/**
|
|
37
|
+
* DELETE request
|
|
38
|
+
*/
|
|
39
|
+
delete<T>(url: string, params?: any): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* POST multipart/form-data request
|
|
42
|
+
*/
|
|
43
|
+
postFormData<T>(url: string, formData: any, params?: any): Promise<T>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a Liara API client from environment variables
|
|
47
|
+
*/
|
|
48
|
+
export declare function createLiaraClient(): LiaraClient;
|
|
49
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,EAAE,iBAAiB;IAuBrC;;OAEG;IACH,OAAO,CAAC,WAAW;IAyCnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAOnD;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAOhE;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAO/D;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAOtD;;OAEG;IACG,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;CAiB9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAY/C"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
/**
|
|
3
|
+
* Liara API client for making authenticated requests
|
|
4
|
+
*/
|
|
5
|
+
export class LiaraClient {
|
|
6
|
+
client;
|
|
7
|
+
teamId;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
const baseURL = config.baseURL || process.env.LIARA_API_BASE_URL || 'https://api.iran.liara.ir';
|
|
10
|
+
this.client = axios.create({
|
|
11
|
+
baseURL,
|
|
12
|
+
headers: {
|
|
13
|
+
'Authorization': `Bearer ${config.apiToken}`,
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
},
|
|
16
|
+
timeout: 30000, // 30 seconds
|
|
17
|
+
});
|
|
18
|
+
this.teamId = config.teamId;
|
|
19
|
+
// Add response interceptor for error handling
|
|
20
|
+
this.client.interceptors.response.use((response) => response, (error) => {
|
|
21
|
+
return Promise.reject(this.handleError(error));
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Handle API errors and convert to user-friendly messages
|
|
26
|
+
*/
|
|
27
|
+
handleError(error) {
|
|
28
|
+
if (error.response) {
|
|
29
|
+
const status = error.response.status;
|
|
30
|
+
const data = error.response.data;
|
|
31
|
+
let message = data?.message || data?.error || 'Unknown API error';
|
|
32
|
+
switch (status) {
|
|
33
|
+
case 401:
|
|
34
|
+
message = 'Authentication failed. Please check your API token.';
|
|
35
|
+
break;
|
|
36
|
+
case 403:
|
|
37
|
+
message = 'Access forbidden. You may not have permission for this operation.';
|
|
38
|
+
break;
|
|
39
|
+
case 404:
|
|
40
|
+
message = data?.message || 'Resource not found.';
|
|
41
|
+
break;
|
|
42
|
+
case 409:
|
|
43
|
+
message = data?.message || 'Conflict: Resource already exists or operation cannot be completed.';
|
|
44
|
+
break;
|
|
45
|
+
case 429:
|
|
46
|
+
message = 'Rate limit exceeded. Please try again later.';
|
|
47
|
+
break;
|
|
48
|
+
case 500:
|
|
49
|
+
case 502:
|
|
50
|
+
case 503:
|
|
51
|
+
message = 'Liara API is temporarily unavailable. Please try again later.';
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
const apiError = new Error(message);
|
|
55
|
+
apiError.statusCode = status;
|
|
56
|
+
apiError.originalError = data;
|
|
57
|
+
return apiError;
|
|
58
|
+
}
|
|
59
|
+
else if (error.request) {
|
|
60
|
+
return new Error('Unable to connect to Liara API. Please check your internet connection.');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return new Error(error.message || 'An unexpected error occurred.');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Add team ID parameter to request if configured
|
|
68
|
+
*/
|
|
69
|
+
addTeamId(params = {}) {
|
|
70
|
+
if (this.teamId) {
|
|
71
|
+
return { ...params, teamID: this.teamId };
|
|
72
|
+
}
|
|
73
|
+
return params;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* GET request
|
|
77
|
+
*/
|
|
78
|
+
async get(url, params) {
|
|
79
|
+
const response = await this.client.get(url, {
|
|
80
|
+
params: this.addTeamId(params)
|
|
81
|
+
});
|
|
82
|
+
return response.data;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* POST request
|
|
86
|
+
*/
|
|
87
|
+
async post(url, data, params) {
|
|
88
|
+
const response = await this.client.post(url, data, {
|
|
89
|
+
params: this.addTeamId(params)
|
|
90
|
+
});
|
|
91
|
+
return response.data;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* PUT request
|
|
95
|
+
*/
|
|
96
|
+
async put(url, data, params) {
|
|
97
|
+
const response = await this.client.put(url, data, {
|
|
98
|
+
params: this.addTeamId(params)
|
|
99
|
+
});
|
|
100
|
+
return response.data;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* DELETE request
|
|
104
|
+
*/
|
|
105
|
+
async delete(url, params) {
|
|
106
|
+
const response = await this.client.delete(url, {
|
|
107
|
+
params: this.addTeamId(params)
|
|
108
|
+
});
|
|
109
|
+
return response.data;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* POST multipart/form-data request
|
|
113
|
+
*/
|
|
114
|
+
async postFormData(url, formData, params) {
|
|
115
|
+
// form-data sets its own Content-Type with boundary, so we use its headers
|
|
116
|
+
const headers = formData.getHeaders ? formData.getHeaders() : {
|
|
117
|
+
'Content-Type': 'multipart/form-data',
|
|
118
|
+
};
|
|
119
|
+
const response = await this.client.post(url, formData, {
|
|
120
|
+
params: this.addTeamId(params),
|
|
121
|
+
headers: {
|
|
122
|
+
...headers,
|
|
123
|
+
'Authorization': this.client.defaults.headers['Authorization'],
|
|
124
|
+
},
|
|
125
|
+
maxContentLength: Infinity,
|
|
126
|
+
maxBodyLength: Infinity,
|
|
127
|
+
});
|
|
128
|
+
return response.data;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Create a Liara API client from environment variables
|
|
133
|
+
*/
|
|
134
|
+
export function createLiaraClient() {
|
|
135
|
+
const apiToken = process.env.LIARA_API_TOKEN;
|
|
136
|
+
if (!apiToken) {
|
|
137
|
+
throw new Error('LIARA_API_TOKEN environment variable is required');
|
|
138
|
+
}
|
|
139
|
+
return new LiaraClient({
|
|
140
|
+
apiToken,
|
|
141
|
+
teamId: process.env.LIARA_TEAM_ID,
|
|
142
|
+
baseURL: process.env.LIARA_API_BASE_URL,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|