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.
Files changed (79) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +353 -0
  3. package/dist/api/client.d.ts +49 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +145 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/types.d.ts +256 -0
  8. package/dist/api/types.d.ts.map +1 -0
  9. package/dist/api/types.js +25 -0
  10. package/dist/api/types.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +3102 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/services/apps.d.ts +39 -0
  16. package/dist/services/apps.d.ts.map +1 -0
  17. package/dist/services/apps.js +83 -0
  18. package/dist/services/apps.js.map +1 -0
  19. package/dist/services/databases.d.ts +74 -0
  20. package/dist/services/databases.d.ts.map +1 -0
  21. package/dist/services/databases.js +120 -0
  22. package/dist/services/databases.js.map +1 -0
  23. package/dist/services/deployment.d.ts +57 -0
  24. package/dist/services/deployment.d.ts.map +1 -0
  25. package/dist/services/deployment.js +70 -0
  26. package/dist/services/deployment.js.map +1 -0
  27. package/dist/services/disks.d.ts +35 -0
  28. package/dist/services/disks.d.ts.map +1 -0
  29. package/dist/services/disks.js +88 -0
  30. package/dist/services/disks.js.map +1 -0
  31. package/dist/services/dns.d.ts +43 -0
  32. package/dist/services/dns.d.ts.map +1 -0
  33. package/dist/services/dns.js +80 -0
  34. package/dist/services/dns.js.map +1 -0
  35. package/dist/services/domains.d.ts +23 -0
  36. package/dist/services/domains.d.ts.map +1 -0
  37. package/dist/services/domains.js +42 -0
  38. package/dist/services/domains.js.map +1 -0
  39. package/dist/services/environment.d.ts +31 -0
  40. package/dist/services/environment.d.ts.map +1 -0
  41. package/dist/services/environment.js +59 -0
  42. package/dist/services/environment.js.map +1 -0
  43. package/dist/services/iaas.d.ts +80 -0
  44. package/dist/services/iaas.d.ts.map +1 -0
  45. package/dist/services/iaas.js +161 -0
  46. package/dist/services/iaas.js.map +1 -0
  47. package/dist/services/mail.d.ts +38 -0
  48. package/dist/services/mail.d.ts.map +1 -0
  49. package/dist/services/mail.js +65 -0
  50. package/dist/services/mail.js.map +1 -0
  51. package/dist/services/network.d.ts +19 -0
  52. package/dist/services/network.d.ts.map +1 -0
  53. package/dist/services/network.js +35 -0
  54. package/dist/services/network.js.map +1 -0
  55. package/dist/services/observability.d.ts +24 -0
  56. package/dist/services/observability.d.ts.map +1 -0
  57. package/dist/services/observability.js +41 -0
  58. package/dist/services/observability.js.map +1 -0
  59. package/dist/services/plans.d.ts +12 -0
  60. package/dist/services/plans.d.ts.map +1 -0
  61. package/dist/services/plans.js +17 -0
  62. package/dist/services/plans.js.map +1 -0
  63. package/dist/services/settings.d.ts +28 -0
  64. package/dist/services/settings.d.ts.map +1 -0
  65. package/dist/services/settings.js +37 -0
  66. package/dist/services/settings.js.map +1 -0
  67. package/dist/services/storage.d.ts +60 -0
  68. package/dist/services/storage.d.ts.map +1 -0
  69. package/dist/services/storage.js +96 -0
  70. package/dist/services/storage.js.map +1 -0
  71. package/dist/services/user.d.ts +32 -0
  72. package/dist/services/user.d.ts.map +1 -0
  73. package/dist/services/user.js +16 -0
  74. package/dist/services/user.js.map +1 -0
  75. package/dist/utils/errors.d.ts +30 -0
  76. package/dist/utils/errors.d.ts.map +1 -0
  77. package/dist/utils/errors.js +63 -0
  78. package/dist/utils/errors.js.map +1 -0
  79. 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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"}