aspire2coolify 1.0.15 → 2.0.17

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 (44) hide show
  1. package/README.md +161 -35
  2. package/dist/api/coolify.d.ts +160 -0
  3. package/dist/api/coolify.d.ts.map +1 -0
  4. package/dist/api/coolify.js +107 -0
  5. package/dist/api/coolify.js.map +1 -0
  6. package/dist/api/deployer.d.ts +31 -0
  7. package/dist/api/deployer.d.ts.map +1 -0
  8. package/dist/api/deployer.js +291 -0
  9. package/dist/api/deployer.js.map +1 -0
  10. package/dist/api/index.d.ts +7 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +7 -0
  13. package/dist/api/index.js.map +1 -0
  14. package/dist/api/token.d.ts +44 -0
  15. package/dist/api/token.d.ts.map +1 -0
  16. package/dist/api/token.js +100 -0
  17. package/dist/api/token.js.map +1 -0
  18. package/dist/cli/index.js +93 -36
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/config/index.d.ts +2 -0
  21. package/dist/config/index.d.ts.map +1 -1
  22. package/dist/config/index.js +4 -3
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/generators/coolify/application.d.ts +8 -2
  25. package/dist/generators/coolify/application.d.ts.map +1 -1
  26. package/dist/generators/coolify/application.js +27 -42
  27. package/dist/generators/coolify/application.js.map +1 -1
  28. package/dist/generators/coolify/database.d.ts +8 -2
  29. package/dist/generators/coolify/database.d.ts.map +1 -1
  30. package/dist/generators/coolify/database.js +21 -21
  31. package/dist/generators/coolify/database.js.map +1 -1
  32. package/dist/generators/coolify/index.d.ts +4 -2
  33. package/dist/generators/coolify/index.d.ts.map +1 -1
  34. package/dist/generators/coolify/index.js +14 -30
  35. package/dist/generators/coolify/index.js.map +1 -1
  36. package/dist/generators/coolify/service.d.ts +9 -3
  37. package/dist/generators/coolify/service.d.ts.map +1 -1
  38. package/dist/generators/coolify/service.js +38 -53
  39. package/dist/generators/coolify/service.js.map +1 -1
  40. package/dist/models/coolify.d.ts +25 -20
  41. package/dist/models/coolify.d.ts.map +1 -1
  42. package/dist/models/coolify.js +49 -4
  43. package/dist/models/coolify.js.map +1 -1
  44. package/package.json +1 -1
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
  [![semantic-release](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
7
7
 
8
- CLI tool to convert .NET Aspire configurations to Coolify CLI commands.
8
+ CLI tool to convert .NET Aspire configurations to Coolify deployments using the Coolify REST API.
9
9
 
10
10
  ## Installation
11
11
 
@@ -20,6 +20,23 @@ npm install
20
20
  npm run build
21
21
  ```
22
22
 
23
+ ## Quick Start
24
+
25
+ ```bash
26
+ # 1. Initialize config file
27
+ aspire2coolify init
28
+
29
+ # 2. Set your Coolify credentials
30
+ export COOLIFY_API_URL=https://coolify.example.com
31
+ export COOLIFY_TOKEN=your-api-token
32
+
33
+ # 3. Deploy your Aspire app
34
+ aspire2coolify deploy ./AppHost/Program.cs \
35
+ --project-id your-project-uuid \
36
+ --server-id your-server-uuid \
37
+ --environment-name production
38
+ ```
39
+
23
40
  ## Usage
24
41
 
25
42
  ### Parse Command
@@ -35,7 +52,7 @@ aspire2coolify parse ./AppHost/Program.cs -o model.json
35
52
 
36
53
  ### Generate Command
37
54
 
38
- Generate Coolify CLI commands from an Aspire Program.cs file:
55
+ Generate a bash script with curl commands to deploy via the Coolify API:
39
56
 
40
57
  ```bash
41
58
  aspire2coolify generate ./AppHost/Program.cs
@@ -43,27 +60,57 @@ aspire2coolify generate ./AppHost/Program.cs
43
60
  # Output to file
44
61
  aspire2coolify generate ./AppHost/Program.cs -o deploy.sh
45
62
 
46
- # With Coolify project/server IDs
63
+ # With Coolify project/server IDs baked into the script
47
64
  aspire2coolify generate ./AppHost/Program.cs \
48
65
  --project-id proj-123 \
49
- --server-id srv-456
66
+ --server-id srv-456 \
67
+ --environment-name production
50
68
 
51
- # Output as JSON
69
+ # Output as JSON (API payloads)
52
70
  aspire2coolify generate ./AppHost/Program.cs --json
53
71
  ```
54
72
 
55
73
  ### Deploy Command
56
74
 
57
- Parse and execute Coolify commands (requires `coolify` CLI to be installed):
75
+ Deploy directly to Coolify via the REST API:
58
76
 
59
77
  ```bash
60
- # Dry run (shows commands without executing)
61
- aspire2coolify deploy ./AppHost/Program.cs --dry-run
78
+ # Set credentials via environment variables (recommended)
79
+ export COOLIFY_API_URL=https://coolify.example.com
80
+ export COOLIFY_TOKEN=your-api-token
62
81
 
63
- # Execute commands
64
- aspire2coolify deploy ./AppHost/Program.cs
82
+ # Dry run (shows what would be deployed)
83
+ aspire2coolify deploy ./AppHost/Program.cs --dry-run \
84
+ --project-id proj-123 \
85
+ --server-id srv-456 \
86
+ --environment-name production
87
+
88
+ # Execute deployment
89
+ aspire2coolify deploy ./AppHost/Program.cs \
90
+ --project-id proj-123 \
91
+ --server-id srv-456 \
92
+ --environment-name production
93
+
94
+ # Deploy and start resources immediately
95
+ aspire2coolify deploy ./AppHost/Program.cs \
96
+ --project-id proj-123 \
97
+ --server-id srv-456 \
98
+ --environment-name production \
99
+ --instant-deploy
65
100
  ```
66
101
 
102
+ #### Deploy Options
103
+
104
+ | Option | Description |
105
+ |--------|-------------|
106
+ | `--api-url <url>` | Coolify API URL (or use `COOLIFY_API_URL` env var) |
107
+ | `--token <token>` | Coolify API token (or use `COOLIFY_TOKEN` env var) |
108
+ | `--project-id <id>` | Coolify project UUID |
109
+ | `--server-id <id>` | Coolify server UUID |
110
+ | `--environment-name <name>` | Environment name (e.g., `production`, `staging`) |
111
+ | `--instant-deploy` | Deploy resources immediately after creation |
112
+ | `--dry-run` | Preview deployment without executing |
113
+
67
114
  ### Init Command
68
115
 
69
116
  Create a configuration file:
@@ -97,35 +144,73 @@ builder.AddNpmApp("svelte", "../VibeCode.SvelteKit")
97
144
  builder.Build().Run();
98
145
  ```
99
146
 
100
- ### Output (Coolify Commands)
147
+ ### Output (Coolify API Script)
101
148
 
102
149
  ```bash
103
150
  #!/bin/bash
104
151
  # Generated by aspire2coolify
152
+ # Coolify API deployment script
153
+ #
154
+ # Required environment variables:
155
+ # COOLIFY_API_URL - Your Coolify instance URL (e.g., https://coolify.example.com)
156
+ # COOLIFY_TOKEN - Your Coolify API token
157
+ #
158
+ # Usage:
159
+ # export COOLIFY_API_URL=https://coolify.example.com
160
+ # export COOLIFY_TOKEN=your-api-token
161
+ # ./deploy.sh
162
+
163
+ set -e
164
+
165
+ # Validate environment variables
166
+ if [ -z "$COOLIFY_API_URL" ]; then
167
+ echo "Error: COOLIFY_API_URL environment variable is not set"
168
+ exit 1
169
+ fi
170
+
171
+ if [ -z "$COOLIFY_TOKEN" ]; then
172
+ echo "Error: COOLIFY_TOKEN environment variable is not set"
173
+ exit 1
174
+ fi
175
+
176
+ echo "Deploying to Coolify at $COOLIFY_API_URL"
177
+ echo ""
105
178
 
106
179
  # Database: postgreServer (postgres)
107
- coolify \
108
- database:create \
109
- --name "postgreServer" \
110
- --type postgres \
111
- --image "pgvector/pgvector:pg17" \
112
- --public-port 5432
113
-
114
- # Database: db (postgres)
115
- coolify \
116
- database:create \
117
- --name "db" \
118
- --type postgres
180
+ echo "Creating postgreServer..."
181
+ curl -X POST "${COOLIFY_API_URL}/api/v1/databases/postgresql" \
182
+ -H "Authorization: Bearer ${COOLIFY_TOKEN}" \
183
+ -H "Content-Type: application/json" \
184
+ -d '{
185
+ "server_uuid": "${SERVER_UUID}",
186
+ "project_uuid": "${PROJECT_UUID}",
187
+ "environment_name": "${ENVIRONMENT_NAME}",
188
+ "name": "postgreServer",
189
+ "image": "pgvector/pgvector:pg17",
190
+ "is_public": true,
191
+ "public_port": 5432,
192
+ "instant_deploy": true
193
+ }'
194
+ echo ""
119
195
 
120
196
  # Application: svelte (npm)
121
- coolify \
122
- application:create \
123
- --name "svelte" \
124
- --build-pack dockerfile \
125
- --source "../VibeCode.SvelteKit" \
126
- --env "BODY_SIZE_LIMIT=10M" \
127
- --env "DATABASE_URL=${db.connectionString}" \
128
- --env "PORT=3000"
197
+ echo "Creating svelte..."
198
+ curl -X POST "${COOLIFY_API_URL}/api/v1/applications/dockerimage" \
199
+ -H "Authorization: Bearer ${COOLIFY_TOKEN}" \
200
+ -H "Content-Type: application/json" \
201
+ -d '{
202
+ "server_uuid": "${SERVER_UUID}",
203
+ "project_uuid": "${PROJECT_UUID}",
204
+ "environment_name": "${ENVIRONMENT_NAME}",
205
+ "docker_registry_image_name": "svelte",
206
+ "docker_registry_image_tag": "latest",
207
+ "name": "svelte",
208
+ "ports_exposes": "80",
209
+ "instant_deploy": false
210
+ }'
211
+ echo ""
212
+
213
+ echo "Deployment complete!"
129
214
  ```
130
215
 
131
216
  ## Configuration
@@ -135,20 +220,41 @@ Create an `aspire2coolify.config.js` file:
135
220
  ```javascript
136
221
  export default {
137
222
  coolify: {
138
- projectId: 'your-project-id',
139
- serverId: 'your-server-id',
140
- environmentId: 'your-environment-id',
223
+ // API connection
224
+ apiUrl: 'https://coolify.example.com',
225
+ token: 'your-api-token', // Or use COOLIFY_TOKEN env var (recommended)
226
+
227
+ // Deployment target
228
+ projectId: 'your-project-uuid',
229
+ serverId: 'your-server-uuid',
230
+ environmentName: 'production',
141
231
  },
142
232
  defaults: {
143
233
  buildPack: 'nixpacks',
144
234
  },
145
235
  output: {
146
236
  includeComments: true,
147
- format: 'shell',
237
+ format: 'shell', // 'shell' | 'json'
148
238
  },
149
239
  };
150
240
  ```
151
241
 
242
+ ### Environment Variables
243
+
244
+ | Variable | Description |
245
+ |----------|-------------|
246
+ | `COOLIFY_API_URL` | Your Coolify instance URL |
247
+ | `COOLIFY_TOKEN` | Your Coolify API token (from Keys & Tokens in Coolify) |
248
+
249
+ ### Credential Priority
250
+
251
+ Credentials are resolved in this order (highest to lowest priority):
252
+
253
+ 1. CLI flags (`--api-url`, `--token`)
254
+ 2. Environment variables (`COOLIFY_API_URL`, `COOLIFY_TOKEN`)
255
+ 3. Config file (`coolify.apiUrl`, `coolify.token`)
256
+ 4. Interactive prompt (for token, if running in a TTY)
257
+
152
258
  ## Supported Aspire Methods
153
259
 
154
260
  ### Databases
@@ -189,6 +295,19 @@ export default {
189
295
  - `PublishAsDockerFile()`
190
296
  - `RunAsContainer()`
191
297
 
298
+ ## API Reference
299
+
300
+ This tool uses the [Coolify REST API](https://coolify.io/docs/api-reference/api/) to create and manage resources:
301
+
302
+ | Resource | API Endpoint |
303
+ |----------|--------------|
304
+ | PostgreSQL | `POST /api/v1/databases/postgresql` |
305
+ | MySQL | `POST /api/v1/databases/mysql` |
306
+ | MongoDB | `POST /api/v1/databases/mongodb` |
307
+ | Redis | `POST /api/v1/databases/redis` |
308
+ | Services | `POST /api/v1/services` |
309
+ | Applications | `POST /api/v1/applications/dockerimage` |
310
+
192
311
  ## Development
193
312
 
194
313
  ```bash
@@ -203,4 +322,11 @@ npm test
203
322
 
204
323
  # Watch mode
205
324
  npm run dev
325
+
326
+ # Lint
327
+ npm run lint
206
328
  ```
329
+
330
+ ## License
331
+
332
+ MIT
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Coolify REST API client
3
+ */
4
+ export interface CoolifyApiConfig {
5
+ apiUrl: string;
6
+ token: string;
7
+ }
8
+ export interface CoolifyApiResponse<T = unknown> {
9
+ success: boolean;
10
+ data?: T;
11
+ error?: string;
12
+ }
13
+ export interface CreateDatabaseResponse {
14
+ uuid: string;
15
+ }
16
+ export interface CreateApplicationResponse {
17
+ uuid: string;
18
+ }
19
+ export interface CreateServiceResponse {
20
+ uuid: string;
21
+ domains: string[];
22
+ }
23
+ export interface PostgresDatabasePayload {
24
+ server_uuid: string;
25
+ project_uuid: string;
26
+ environment_name: string;
27
+ name?: string;
28
+ description?: string;
29
+ image?: string;
30
+ postgres_user?: string;
31
+ postgres_password?: string;
32
+ postgres_db?: string;
33
+ is_public?: boolean;
34
+ public_port?: number;
35
+ instant_deploy?: boolean;
36
+ }
37
+ export interface MysqlDatabasePayload {
38
+ server_uuid: string;
39
+ project_uuid: string;
40
+ environment_name: string;
41
+ name?: string;
42
+ description?: string;
43
+ image?: string;
44
+ mysql_user?: string;
45
+ mysql_password?: string;
46
+ mysql_database?: string;
47
+ mysql_root_password?: string;
48
+ is_public?: boolean;
49
+ public_port?: number;
50
+ instant_deploy?: boolean;
51
+ }
52
+ export interface MongoDbDatabasePayload {
53
+ server_uuid: string;
54
+ project_uuid: string;
55
+ environment_name: string;
56
+ name?: string;
57
+ description?: string;
58
+ image?: string;
59
+ mongo_initdb_root_username?: string;
60
+ mongo_initdb_root_password?: string;
61
+ mongo_initdb_database?: string;
62
+ is_public?: boolean;
63
+ public_port?: number;
64
+ instant_deploy?: boolean;
65
+ }
66
+ export interface RedisDatabasePayload {
67
+ server_uuid: string;
68
+ project_uuid: string;
69
+ environment_name: string;
70
+ name?: string;
71
+ description?: string;
72
+ image?: string;
73
+ redis_password?: string;
74
+ is_public?: boolean;
75
+ public_port?: number;
76
+ instant_deploy?: boolean;
77
+ }
78
+ export interface DockerImageApplicationPayload {
79
+ server_uuid: string;
80
+ project_uuid: string;
81
+ environment_name: string;
82
+ docker_registry_image_name: string;
83
+ docker_registry_image_tag?: string;
84
+ name?: string;
85
+ description?: string;
86
+ domains?: string;
87
+ ports_exposes?: string;
88
+ ports_mappings?: string;
89
+ instant_deploy?: boolean;
90
+ }
91
+ export interface DockerfileApplicationPayload {
92
+ server_uuid: string;
93
+ project_uuid: string;
94
+ environment_name: string;
95
+ dockerfile: string;
96
+ name: string;
97
+ description?: string;
98
+ domains?: string;
99
+ ports_exposes?: string;
100
+ ports_mappings?: string;
101
+ base_directory?: string;
102
+ instant_deploy?: boolean;
103
+ }
104
+ export interface ServicePayload {
105
+ server_uuid: string;
106
+ project_uuid: string;
107
+ environment_name: string;
108
+ type: string;
109
+ name: string;
110
+ description?: string;
111
+ instant_deploy?: boolean;
112
+ docker_compose_raw?: string;
113
+ }
114
+ export type DatabasePayload = PostgresDatabasePayload | MysqlDatabasePayload | MongoDbDatabasePayload | RedisDatabasePayload;
115
+ export type ApplicationPayload = DockerImageApplicationPayload | DockerfileApplicationPayload;
116
+ export declare class CoolifyApiClient {
117
+ private apiUrl;
118
+ private token;
119
+ constructor(config: CoolifyApiConfig);
120
+ private request;
121
+ /**
122
+ * Create a PostgreSQL database
123
+ */
124
+ createPostgresDatabase(payload: PostgresDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
125
+ /**
126
+ * Create a MySQL database
127
+ */
128
+ createMysqlDatabase(payload: MysqlDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
129
+ /**
130
+ * Create a MongoDB database
131
+ */
132
+ createMongoDatabase(payload: MongoDbDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
133
+ /**
134
+ * Create a Redis database
135
+ */
136
+ createRedisDatabase(payload: RedisDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
137
+ /**
138
+ * Create a MariaDB database
139
+ */
140
+ createMariaDbDatabase(payload: MysqlDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
141
+ /**
142
+ * Create a Docker image application
143
+ */
144
+ createDockerImageApplication(payload: DockerImageApplicationPayload): Promise<CoolifyApiResponse<CreateApplicationResponse>>;
145
+ /**
146
+ * Create a Dockerfile application
147
+ */
148
+ createDockerfileApplication(payload: DockerfileApplicationPayload): Promise<CoolifyApiResponse<CreateApplicationResponse>>;
149
+ /**
150
+ * Create a service (one-click services like RabbitMQ, MinIO, etc.)
151
+ */
152
+ createService(payload: ServicePayload): Promise<CoolifyApiResponse<CreateServiceResponse>>;
153
+ /**
154
+ * Test connection to the Coolify API
155
+ */
156
+ testConnection(): Promise<CoolifyApiResponse<{
157
+ version?: string;
158
+ }>>;
159
+ }
160
+ //# sourceMappingURL=coolify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coolify.d.ts","sourceRoot":"","sources":["../../src/api/coolify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Coolify REST API client
3
+ */
4
+ export class CoolifyApiClient {
5
+ apiUrl;
6
+ token;
7
+ constructor(config) {
8
+ // Remove trailing slash from API URL
9
+ this.apiUrl = config.apiUrl.replace(/\/+$/, '');
10
+ this.token = config.token;
11
+ }
12
+ async request(method, endpoint, body) {
13
+ const url = `${this.apiUrl}/api/v1${endpoint}`;
14
+ try {
15
+ const response = await fetch(url, {
16
+ method,
17
+ headers: {
18
+ Authorization: `Bearer ${this.token}`,
19
+ 'Content-Type': 'application/json',
20
+ Accept: 'application/json',
21
+ },
22
+ body: body ? JSON.stringify(body) : undefined,
23
+ });
24
+ if (!response.ok) {
25
+ const errorText = await response.text();
26
+ let errorMessage;
27
+ try {
28
+ const errorJson = JSON.parse(errorText);
29
+ errorMessage = errorJson.message || errorJson.error || errorText;
30
+ }
31
+ catch {
32
+ errorMessage = errorText || `HTTP ${response.status}: ${response.statusText}`;
33
+ }
34
+ return {
35
+ success: false,
36
+ error: errorMessage,
37
+ };
38
+ }
39
+ const data = (await response.json());
40
+ return {
41
+ success: true,
42
+ data,
43
+ };
44
+ }
45
+ catch (err) {
46
+ return {
47
+ success: false,
48
+ error: err instanceof Error ? err.message : String(err),
49
+ };
50
+ }
51
+ }
52
+ /**
53
+ * Create a PostgreSQL database
54
+ */
55
+ async createPostgresDatabase(payload) {
56
+ return this.request('POST', '/databases/postgresql', payload);
57
+ }
58
+ /**
59
+ * Create a MySQL database
60
+ */
61
+ async createMysqlDatabase(payload) {
62
+ return this.request('POST', '/databases/mysql', payload);
63
+ }
64
+ /**
65
+ * Create a MongoDB database
66
+ */
67
+ async createMongoDatabase(payload) {
68
+ return this.request('POST', '/databases/mongodb', payload);
69
+ }
70
+ /**
71
+ * Create a Redis database
72
+ */
73
+ async createRedisDatabase(payload) {
74
+ return this.request('POST', '/databases/redis', payload);
75
+ }
76
+ /**
77
+ * Create a MariaDB database
78
+ */
79
+ async createMariaDbDatabase(payload) {
80
+ return this.request('POST', '/databases/mariadb', payload);
81
+ }
82
+ /**
83
+ * Create a Docker image application
84
+ */
85
+ async createDockerImageApplication(payload) {
86
+ return this.request('POST', '/applications/dockerimage', payload);
87
+ }
88
+ /**
89
+ * Create a Dockerfile application
90
+ */
91
+ async createDockerfileApplication(payload) {
92
+ return this.request('POST', '/applications/dockerfile', payload);
93
+ }
94
+ /**
95
+ * Create a service (one-click services like RabbitMQ, MinIO, etc.)
96
+ */
97
+ async createService(payload) {
98
+ return this.request('POST', '/services', payload);
99
+ }
100
+ /**
101
+ * Test connection to the Coolify API
102
+ */
103
+ async testConnection() {
104
+ return this.request('GET', '/version');
105
+ }
106
+ }
107
+ //# sourceMappingURL=coolify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coolify.js","sourceRoot":"","sources":["../../src/api/coolify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Deployer - Deploys Aspire resources to Coolify via API
3
+ */
4
+ import type { AspireApp } from '../models/aspire.js';
5
+ import { CoolifyApiClient } from './coolify.js';
6
+ export interface DeployConfig {
7
+ projectUuid: string;
8
+ serverUuid: string;
9
+ environmentName: string;
10
+ instantDeploy?: boolean;
11
+ }
12
+ export interface DeployResult {
13
+ success: boolean;
14
+ resourceType: 'database' | 'service' | 'application';
15
+ name: string;
16
+ uuid?: string;
17
+ error?: string;
18
+ }
19
+ export interface DeploymentSummary {
20
+ results: DeployResult[];
21
+ successful: number;
22
+ failed: number;
23
+ }
24
+ /**
25
+ * Deploy an Aspire application model to Coolify
26
+ */
27
+ export declare function deployToCloudify(client: CoolifyApiClient, app: AspireApp, config: DeployConfig, options?: {
28
+ dryRun?: boolean;
29
+ onProgress?: (message: string) => void;
30
+ }): Promise<DeploymentSummary>;
31
+ //# sourceMappingURL=deployer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../../src/api/deployer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAC;AACrG,OAAO,EACL,gBAAgB,EAOjB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,GACL,OAAO,CAAC,iBAAiB,CAAC,CAwG5B"}