diff --git a/api-1.json b/api-1.json new file mode 100644 index 000000000..b046379cc --- /dev/null +++ b/api-1.json @@ -0,0 +1,8403 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Hostinger API", + "description": "# Overview\nThe Hostinger API provides a comprehensive set of endpoints that allow developers\nto interact with Hostinger's services programmatically.\nThis API enables you to manage various aspects of your Hostinger account.\n\nThe Hostinger API is a (mostly) RESTful API that uses standard HTTP methods and status codes.\n# Authentication\nThe Hostinger API uses tokens for authentication. To authenticate your requests,\nyou need to include a valid bearer token in the Authorization header of your HTTP requests:\n```yaml\nAuthorization: Bearer YOUR_API_TOKEN\n```\nAPI tokens for individual users can be created and managed from\nthe [Account page](https://hpanel.hostinger.com/profile/api) of the Hostinger Panel.\nTokens will have same permissions as the owning user.\nOptionally, tokens can be set to expire after a certain period of time.\n# Rate Limiting\nTo ensure fair usage and prevent abuse,\nthe API enforces rate limits on the number of requests that can be made within a certain time period.\nIf you exceed the rate limit, you will receive a 429 Too Many Requests response.\nRate limit headers are included in the response to help you manage your requests.\nYour IP address might get temporarily blocked if you exceed the rate limit multiple times.\n# Parameters\nAll requests sent to API must have the content type `application/json`.\n`POST`, `PUT`, `PATCH` methods may include a JSON object in the request body.\nDocumentation provides required structure and examples of the object.\nSome endpoints require path parameters.\nThese parameters are included in the URL path and are marked with curly braces.\n# Pagination\nSome endpoints return a large number of items.\nTo make these responses more manageable, the API uses pagination.\nBy default, the API returns50 items per page.\n\n The page number can be specified using the `page` query parameter,\n for example: `/api/vps/v1/public-keys?page=2`\n# Errors\nThe Hostinger API uses standard HTTP status codes to indicate the success or failure of a request.\nIn case of an error, the API will return a JSON response with an `error` field,\ncontaining a human-readable error message.\nError responses also contain a `correlation_id` field\nwhich can be used to identify the request in case you need to contact support.\n# SDKs & Tools\nTo help you get started with the Hostinger API,we provide SDKs and tools in various programming languages.\nThe usage & documentation for each SDK can be found in the respective repositories:\n- Ansible - https://github.com/hostinger/ansible-collection-hostinger\n- CLI - https://github.com/hostinger/api-cli\n- n8n node - https://github.com/hostinger/api-n8n-node\n- MCP server - https://github.com/hostinger/api-mcp-server\n- PHP - https://github.com/hostinger/api-php-sdk\n- Python - https://github.com/hostinger/api-python-sdk\n- Terraform - https://github.com/hostinger/terraform-provider-hostinger\n- Node / TypeScript - https://github.com/hostinger/api-typescript-sdk\n- Postman collection - https://www.postman.com/hostinger-api\n- WHMCS module - https://github.com/hostinger/api-whmcs-plugin\n# Change log\nFor information on the latest changes to the API,\nplease refer to the [change log](https://github.com/hostinger/api/blob/main/CHANGELOG.md).\n# Support\nIf you have any questions, feedback or feature requests,\nplease create an [issue](https://github.com/hostinger/api/issues)\nor [discussion](https://github.com/hostinger/api/discussions) on the repository.\n\nFor any support take a look at our [Github Repository](https://github.com/hostinger/api/),\ndedicated to the Hostinger API.", + "contact": { + "name": "Hostinger", + "url": "https://developers.hostinger.com", + "email": "devs@hostinger.com" + }, + "version": "0.11.7", + "x-scalar-sdk-installation": [ + { + "lang": "Shell", + "description": "Install official CLI tool. Examples and usage instructions can be found in our [Github repository](https://github.com/hostinger/api-cli).", + "source": "hapi vps vm list" + }, + { + "lang": "PHP", + "description": "Install official PHP SDK. Examples and usage instructions can be found in our [Github repository](https://github.com/hostinger/api-php-sdk).", + "source": "composer require hostinger/api-php-sdk" + }, + { + "lang": "Python", + "description": "Install official Python SDK. Examples and usage instructions can be found in our [Github repository](https://github.com/hostinger/api-python-sdk).", + "source": "pip install hostinger_api" + }, + { + "lang": "Node", + "description": "Install official Node / Typescript SDK. Examples and usage instructions can be found in our [Github repository](https://github.com/hostinger/api-typescript-sdk).", + "source": "npm install hostinger-api-sdk" + } + ] + }, + "servers": [ + { + "url": "https://developers.hostinger.com", + "description": "Production API Server" + } + ], + "paths": { + "/api/billing/v1/catalog": { + "get": { + "tags": [ + "Billing: Catalog" + ], + "summary": "Get catalog item list", + "description": "Retrieve catalog items available for order.\n\nPrices in catalog items is displayed as cents (without floating point),\ne.g: float `17.99` is displayed as integer `1799`.\n\nUse this endpoint to view available services and pricing before placing orders.", + "operationId": "billing_getCatalogItemListV1", + "parameters": [ + { + "$ref": "#/components/parameters/category" + }, + { + "$ref": "#/components/parameters/name" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.Catalog.CatalogItemCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/billing/v1/payment-methods/{paymentMethodId}": { + "post": { + "tags": [ + "Billing: Payment methods" + ], + "summary": "Set default payment method", + "description": "Set the default payment method for your account.\n\nUse this endpoint to configure the primary payment method for future orders.", + "operationId": "billing_setDefaultPaymentMethodV1", + "parameters": [ + { + "$ref": "#/components/parameters/paymentMethodId" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "Billing: Payment methods" + ], + "summary": "Delete payment method", + "description": "Delete a payment method from your account.\n\nUse this endpoint to remove unused payment methods from user accounts.", + "operationId": "billing_deletePaymentMethodV1", + "parameters": [ + { + "$ref": "#/components/parameters/paymentMethodId" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/billing/v1/payment-methods": { + "get": { + "tags": [ + "Billing: Payment methods" + ], + "summary": "Get payment method list", + "description": "Retrieve available payment methods that can be used for placing new orders.\n\nIf you want to add new payment method,\nplease use [hPanel](https://hpanel.hostinger.com/billing/payment-methods).\n\nUse this endpoint to view available payment options before creating orders.", + "operationId": "billing_getPaymentMethodListV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.PaymentMethod.PaymentMethodCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/billing/v1/subscriptions": { + "get": { + "tags": [ + "Billing: Subscriptions" + ], + "summary": "Get subscription list", + "description": "Retrieve a list of all subscriptions associated with your account.\n\nUse this endpoint to monitor active services and billing status.", + "operationId": "billing_getSubscriptionListV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.Subscription.SubscriptionCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/disable": { + "delete": { + "tags": [ + "Billing: Subscriptions" + ], + "summary": "Disable auto-renewal", + "description": "Disable auto-renewal for a subscription.\n\nUse this endpoint when disable auto-renewal for a subscription.", + "operationId": "billing_disableAutoRenewalV1", + "parameters": [ + { + "$ref": "#/components/parameters/subscriptionId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.Subscription.SubscriptionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/billing/v1/subscriptions/{subscriptionId}/auto-renewal/enable": { + "patch": { + "tags": [ + "Billing: Subscriptions" + ], + "summary": "Enable auto-renewal", + "description": "Enable auto-renewal for a subscription.\n\nUse this endpoint when enable auto-renewal for a subscription.", + "operationId": "billing_enableAutoRenewalV1", + "parameters": [ + { + "$ref": "#/components/parameters/subscriptionId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.Subscription.SubscriptionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/dns/v1/snapshots/{domain}/{snapshotId}": { + "get": { + "tags": [ + "DNS: Snapshot" + ], + "summary": "Get DNS snapshot", + "description": "Retrieve particular DNS snapshot with contents of DNS zone records.\n\nUse this endpoint to view historical DNS configurations for domains.", + "operationId": "DNS_getDNSSnapshotV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + }, + { + "$ref": "#/components/parameters/snapshotId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Snapshot.SnapshotWithContentResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/dns/v1/snapshots/{domain}": { + "get": { + "tags": [ + "DNS: Snapshot" + ], + "summary": "Get DNS snapshot list", + "description": "Retrieve DNS snapshots for a domain.\n\nUse this endpoint to view available DNS backup points for restoration.", + "operationId": "DNS_getDNSSnapshotListV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Snapshot.SnapshotCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/dns/v1/snapshots/{domain}/{snapshotId}/restore": { + "post": { + "tags": [ + "DNS: Snapshot" + ], + "summary": "Restore DNS snapshot", + "description": "Restore DNS zone to the selected snapshot.\n\nUse this endpoint to revert domain DNS to a previous configuration.", + "operationId": "DNS_restoreDNSSnapshotV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + }, + { + "$ref": "#/components/parameters/snapshotId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/dns/v1/zones/{domain}": { + "get": { + "tags": [ + "DNS: Zone" + ], + "summary": "Get DNS records", + "description": "Retrieve DNS zone records for a specific domain.\n\nUse this endpoint to view current DNS configuration for domain management.", + "operationId": "DNS_getDNSRecordsV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Zone.RecordCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "put": { + "tags": [ + "DNS: Zone" + ], + "summary": "Update DNS records", + "description": "Update DNS records for the selected domain.\n\nUsing `overwrite = true` will replace existing records with the provided ones. \nOtherwise existing records will be updated and new records will be added.\n\nUse this endpoint to modify domain DNS configuration.", + "operationId": "DNS_updateDNSRecordsV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Zone.UpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "DNS: Zone" + ], + "summary": "Delete DNS records", + "description": "Delete DNS records for the selected domain.\n\nTo filter which records to delete, add the `name` of the record and `type` to the filter. \nMultiple filters can be provided with single request.\n\nIf you have multiple records with the same name and type, and you want to delete only part of them,\nrefer to the `Update zone records` endpoint.\n\nUse this endpoint to remove specific DNS records from domains.", + "operationId": "DNS_deleteDNSRecordsV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Zone.DestroyRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/dns/v1/zones/{domain}/reset": { + "post": { + "tags": [ + "DNS: Zone" + ], + "summary": "Reset DNS records", + "description": "Reset DNS zone to the default records.\n\nUse this endpoint to restore domain DNS to original configuration.", + "operationId": "DNS_resetDNSRecordsV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Zone.ResetRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/dns/v1/zones/{domain}/validate": { + "post": { + "tags": [ + "DNS: Zone" + ], + "summary": "Validate DNS records", + "description": "Validate DNS records prior to update for the selected domain.\n\nIf the validation is successful, the response will contain `200 Success` code.\nIf there is validation error, the response will fail with `422 Validation error` code.\n\nUse this endpoint to verify DNS record validity before applying changes.", + "operationId": "DNS_validateDNSRecordsV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DNS.V1.Zone.UpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/v2/direct/verifications/active": { + "get": { + "tags": [ + "Domain Access Verifier: Verifications" + ], + "summary": "Get domain verifications", + "description": "Retrieve a list of pending and completed domain verifications.", + "operationId": "v2_getDomainVerificationsDIRECT", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DomainAccessVerifier.V2.Verifications.ListRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DomainAccessVerifier.V2.Verifications.ActiveVerificationsCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/availability": { + "post": { + "tags": [ + "Domains: Availability" + ], + "summary": "Check domain availability", + "description": "Check availability of domain names across multiple TLDs.\n\nMultiple TLDs can be checked at once.\nIf you want alternative domains with response, provide only one TLD and set `with_alternatives` to `true`.\nTLDs should be provided without leading dot (e.g. `com`, `net`, `org`).\n\nEndpoint has rate limit of 10 requests per minute.\n\nUse this endpoint to verify domain availability before purchase.", + "operationId": "domains_checkDomainAvailabilityV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Availability.AvailabilityRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Availability.AvailabilityCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/forwarding/{domain}": { + "get": { + "tags": [ + "Domains: Forwarding" + ], + "summary": "Get domain forwarding", + "description": "Retrieve domain forwarding data.\n\nUse this endpoint to view current redirect configuration for domains.", + "operationId": "domains_getDomainForwardingV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Forwarding.ForwardingResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "Domains: Forwarding" + ], + "summary": "Delete domain forwarding", + "description": "Delete domain forwarding data.\n\nUse this endpoint to remove redirect configuration from domains.", + "operationId": "domains_deleteDomainForwardingV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/forwarding": { + "post": { + "tags": [ + "Domains: Forwarding" + ], + "summary": "Create domain forwarding", + "description": "Create domain forwarding configuration.\n\nUse this endpoint to set up domain redirects to other URLs.", + "operationId": "domains_createDomainForwardingV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Forwarding.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Forwarding.ForwardingResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/portfolio/{domain}/domain-lock": { + "put": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Enable domain lock", + "description": "Enable domain lock for the domain.\n\nWhen domain lock is enabled,\nthe domain cannot be transferred to another registrar without first disabling the lock.\n\nUse this endpoint to secure domains against unauthorized transfers.", + "operationId": "domains_enableDomainLockV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Disable domain lock", + "description": "Disable domain lock for the domain.\n\nDomain lock needs to be disabled before transferring the domain to another registrar.\n\nUse this endpoint to prepare domains for transfer to other registrars.", + "operationId": "domains_disableDomainLockV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/portfolio/{domain}": { + "get": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Get domain details", + "description": "Retrieve detailed information for specified domain.\n\nUse this endpoint to view comprehensive domain configuration and status.", + "operationId": "domains_getDomainDetailsV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Domain.DomainExtendedResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/portfolio": { + "get": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Get domain list", + "description": "Retrieve all domains associated with your account.\n\nUse this endpoint to view user's domain portfolio.", + "operationId": "domains_getDomainListV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Domain.DomainCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Purchase new domain", + "description": "Purchase and register a new domain name.\n\nIf registration fails, login to [hPanel](https://hpanel.hostinger.com/) and check domain registration status.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nIf no WHOIS information is provided, default contact information for that TLD will be used.\nBefore making request, ensure WHOIS information for desired TLD exists in your account.\n\nSome TLDs require `additional_details` to be provided and these will be validated before completing purchase.\n\nUse this endpoint to register new domains for users.", + "operationId": "domains_purchaseNewDomainV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Portfolio.PurchaseRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.Order.OrderResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/portfolio/{domain}/privacy-protection": { + "put": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Enable privacy protection", + "description": "Enable privacy protection for the domain.\n\nWhen privacy protection is enabled, domain owner's personal information is hidden from public WHOIS database.\n\nUse this endpoint to protect domain owner's personal information from public view.", + "operationId": "domains_enablePrivacyProtectionV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Disable privacy protection", + "description": "Disable privacy protection for the domain.\n\nWhen privacy protection is disabled, domain owner's personal information is visible in public WHOIS database.\n\nUse this endpoint to make domain owner's information publicly visible.", + "operationId": "domains_disablePrivacyProtectionV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/portfolio/{domain}/nameservers": { + "put": { + "tags": [ + "Domains: Portfolio" + ], + "summary": "Update domain nameservers", + "description": "Set nameservers for a specified domain.\n\nBe aware, that improper nameserver configuration can lead to the domain being unresolvable or unavailable.\n\nUse this endpoint to configure custom DNS hosting for domains.", + "operationId": "domains_updateDomainNameserversV1", + "parameters": [ + { + "$ref": "#/components/parameters/domain" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.Portfolio.UpdateNameserversRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/whois/{whoisId}": { + "get": { + "tags": [ + "Domains: WHOIS" + ], + "summary": "Get WHOIS profile", + "description": "Retrieve a WHOIS contact profile.\n\nUse this endpoint to view domain registration contact information.", + "operationId": "domains_getWHOISProfileV1", + "parameters": [ + { + "$ref": "#/components/parameters/whoisId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.WHOIS.ProfileResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "Domains: WHOIS" + ], + "summary": "Delete WHOIS profile", + "description": "Delete WHOIS contact profile.\n\nUse this endpoint to remove unused contact profiles from account.", + "operationId": "domains_deleteWHOISProfileV1", + "parameters": [ + { + "$ref": "#/components/parameters/whoisId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/whois": { + "get": { + "tags": [ + "Domains: WHOIS" + ], + "summary": "Get WHOIS profile list", + "description": "Retrieve WHOIS contact profiles.\n\nUse this endpoint to view available contact profiles for domain registration.", + "operationId": "domains_getWHOISProfileListV1", + "parameters": [ + { + "$ref": "#/components/parameters/tld" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.WHOIS.ProfileCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "Domains: WHOIS" + ], + "summary": "Create WHOIS profile", + "description": "Create WHOIS contact profile.\n\nUse this endpoint to add new contact information for domain registration.", + "operationId": "domains_createWHOISProfileV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.WHOIS.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.WHOIS.ProfileResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/domains/v1/whois/{whoisId}/usage": { + "get": { + "tags": [ + "Domains: WHOIS" + ], + "summary": "Get WHOIS profile usage", + "description": "Retrieve domain list where provided WHOIS contact profile is used.\n\nUse this endpoint to view which domains use specific contact profiles.", + "operationId": "domains_getWHOISProfileUsageV1", + "parameters": [ + { + "$ref": "#/components/parameters/whoisId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Domains.V1.WHOIS.ProfileUsageResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/hosting/v1/datacenters": { + "get": { + "tags": [ + "Hosting: Datacenters" + ], + "summary": "List available datacenters", + "description": "Retrieve a list of datacenters available for setting up hosting plans\nbased on available datacenter capacity and hosting plan of your order.\nThe first item in the list is the best match for your specific order\nrequirements.", + "operationId": "hosting_listAvailableDatacentersV1", + "parameters": [ + { + "$ref": "#/components/parameters/order_id_required" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Hosting.V1.Datacenter.DatacenterCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/hosting/v1/domains/free-subdomains": { + "post": { + "tags": [ + "Hosting: Domains" + ], + "summary": "Generate a free subdomain", + "description": "Generate a unique free subdomain that can be used for hosting services without purchasing custom domains.\nFree subdomains allow you to start using hosting services immediately\nand you can always connect a custom domain to your site later.", + "operationId": "hosting_generateAFreeSubdomainV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Hosting.V1.Domains.FreeSubdomainResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/hosting/v1/domains/verify-ownership": { + "post": { + "tags": [ + "Hosting: Domains" + ], + "summary": "Verify domain ownership", + "description": "Verify ownership of a single domain and return the verification status.\n\nUse this endpoint to check if a domain is accessible for you before using it for new websites.\nIf the domain is accessible, the response will have `is_accessible: true`.\nIf not, add the given TXT record to your domain's DNS records and try verifying again.\nKeep in mind that it may take up to 10 minutes for new TXT DNS records to propagate.\n\nSkip this verification when using Hostinger's free subdomains (*.hostingersite.com).", + "operationId": "hosting_verifyDomainOwnershipV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Hosting.V1.Domains.VerifyOwnershipRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Hosting.V1.Domains.DomainAccessResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/hosting/v1/orders": { + "get": { + "tags": [ + "Hosting: Orders" + ], + "summary": "List orders", + "description": "Retrieve a paginated list of orders accessible to the authenticated client.\n\nThis endpoint returns orders of your hosting accounts as well as orders\nof other client hosting accounts that have shared access with you.\n\nUse the available query parameters to filter results by order statuses\nor specific order IDs for more targeted results.", + "operationId": "hosting_listOrdersV1", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/statuses" + }, + { + "$ref": "#/components/parameters/order_ids" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/Hosting.V1.Orders.OrderCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/hosting/v1/websites": { + "get": { + "tags": [ + "Hosting: Websites" + ], + "summary": "List websites", + "description": "Retrieve a paginated list of websites (main and addon types) accessible to the authenticated client.\n\nThis endpoint returns websites from your hosting accounts as well as\nwebsites from other client hosting accounts that have shared access\nwith you.\n\nUse the available query parameters to filter results by username,\norder ID, enabled status, or domain name for more targeted results.", + "operationId": "hosting_listWebsitesV1", + "parameters": [ + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/per_page" + }, + { + "$ref": "#/components/parameters/username" + }, + { + "$ref": "#/components/parameters/order_id" + }, + { + "$ref": "#/components/parameters/is_enabled" + }, + { + "$ref": "#/components/parameters/domain_filter" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/Hosting.V1.Websites.WebsiteCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "Hosting: Websites" + ], + "summary": "Create website", + "description": "Create a new website for the authenticated client.\n\nProvide the domain name and associated order ID to create a new website.\nThe datacenter_code parameter is required when creating the first website\non a new hosting plan - this will set up and configure new hosting account\nin the selected datacenter.\n\nSubsequent websites will be hosted on the same datacenter automatically.\n\nWebsite creation takes up to a few minutes to complete. Check the\nwebsites list endpoint to see when your new website becomes available.", + "operationId": "hosting_createWebsiteV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Hosting.V1.Websites.CreateWebsiteRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/reach/v1/contacts/{uuid}": { + "delete": { + "tags": [ + "Reach: Contacts" + ], + "summary": "Delete a contact", + "description": "Delete a contact with the specified UUID.\n\nThis endpoint permanently removes a contact from the email marketing system.", + "operationId": "reach_deleteAContactV1", + "parameters": [ + { + "$ref": "#/components/parameters/uuid" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/reach/v1/contacts/groups": { + "get": { + "tags": [ + "Reach: Contacts" + ], + "summary": "List contact groups", + "description": "Get a list of all contact groups.\n\nThis endpoint returns a list of contact groups that can be used to organize contacts.", + "operationId": "reach_listContactGroupsV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Groups.ContactGroupCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "deprecated": true, + "x-scalar-ignore": true + } + }, + "/api/reach/v1/contacts": { + "get": { + "tags": [ + "Reach: Contacts" + ], + "summary": "List contacts", + "description": "Get a list of contacts, optionally filtered by group and subscription status.\n\nThis endpoint returns a paginated list of contacts with their basic information.\nYou can filter contacts by group UUID and subscription status.", + "operationId": "reach_listContactsV1", + "parameters": [ + { + "$ref": "#/components/parameters/group_uuid" + }, + { + "$ref": "#/components/parameters/subscription_status" + }, + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/Reach.V1.Contacts.ContactCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "Reach: Contacts" + ], + "summary": "Create a new contact", + "description": "Create a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled,\nthe contact will be created with a pending status and a confirmation email will be sent.", + "operationId": "reach_createANewContactV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "deprecated": true, + "x-scalar-ignore": true + } + }, + "/api/reach/v1/segmentation/segments": { + "get": { + "tags": [ + "Reach: Segments" + ], + "summary": "List segments", + "description": "Get a list of all contact segments.\n\nThis endpoint returns a list of contact segments that can be used to organize contacts.", + "operationId": "reach_listSegmentsV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.ContactSegmentCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "Reach: Segments" + ], + "summary": "Create a new contact segment", + "description": "Create a new contact segment.\n\nThis endpoint allows creating a new contact segment that can be used to organize contacts.\nThe segment can be configured with specific criteria like email, name, subscription status, etc.", + "operationId": "reach_createANewContactSegmentV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.SegmentResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/reach/v1/segmentation/segments/{segmentUuid}/contacts": { + "get": { + "tags": [ + "Reach: Segments" + ], + "summary": "List segment contacts", + "description": "Retrieve contacts associated with a specific segment.\n\nThis endpoint allows you to fetch and filter contacts that belong to a particular segment,\nidentified by its UUID.", + "operationId": "reach_listSegmentContactsV1", + "parameters": [ + { + "$ref": "#/components/parameters/segmentUuid" + }, + { + "$ref": "#/components/parameters/page" + }, + { + "$ref": "#/components/parameters/per_page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.SegmentationContactCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/reach/v1/segmentation/segments/{segmentUuid}": { + "get": { + "tags": [ + "Reach: Segments" + ], + "summary": "Get segment details", + "description": "Get details of a specific segment.\n\nThis endpoint retrieves information about a single segment identified by UUID.\nSegments are used to organize and group contacts based on specific criteria.", + "operationId": "reach_getSegmentDetailsV1", + "parameters": [ + { + "$ref": "#/components/parameters/segmentUuid" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.SegmentResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/reach/v1/profiles/{profileUuid}/contacts": { + "post": { + "tags": [ + "Reach: Contacts" + ], + "summary": "Create new contacts", + "description": "Create a new contact in the email marketing system.\n\nThis endpoint allows you to create a new contact with basic information like name, email, and surname.\n\nIf double opt-in is enabled, the contact will be created with a pending status\nand a confirmation email will be sent.", + "operationId": "reach_createNewContactsV1", + "parameters": [ + { + "$ref": "#/components/parameters/profileUuid" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Contacts.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/reach/v1/profiles": { + "get": { + "tags": [ + "Reach: Profiles" + ], + "summary": "List Profiles", + "description": "This endpoint returns all profiles available to the client, including their basic information.", + "operationId": "reach_listProfilesV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Reach.V1.Profiles.ProfileCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/data-centers": { + "get": { + "tags": [ + "VPS: Data centers" + ], + "summary": "Get data center list", + "description": "Retrieve all available data centers.\n\nUse this endpoint to view location options before deploying VPS instances.", + "operationId": "VPS_getDataCenterListV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.DataCenter.DataCenterCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/containers": { + "get": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Get project containers", + "description": "Retrieves a list of all containers belonging to a specific Docker Compose project on the virtual machine. \n\nThis endpoint returns detailed information about each container including\ntheir current status, port mappings, and runtime configuration.\n\nUse this to monitor the health and state of all services within your Docker Compose project.", + "operationId": "VPS_getProjectContainersV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContainerCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}": { + "get": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Get project contents", + "description": "Retrieves the complete project information including the docker-compose.yml\nfile contents, project metadata, and current deployment status.\n\nThis endpoint provides the full configuration and state details of a specific Docker Compose project. \n\nUse this to inspect project settings, review the compose file, or check the overall project health.", + "operationId": "VPS_getProjectContentsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContentResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/down": { + "delete": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Delete project", + "description": "Completely removes a Docker Compose project from the virtual machine, stopping all containers and cleaning up \nassociated resources including networks, volumes, and images. \n\nThis operation is irreversible and will delete all project data. \n\nUse this when you want to permanently remove a project and free up system resources.", + "operationId": "VPS_deleteProjectV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker": { + "get": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Get project list", + "description": "Retrieves a list of all Docker Compose projects currently deployed on the virtual machine. \n\nThis endpoint returns basic information about each project including name,\nstatus, file path and list of containers with details about their names,\nimage, status, health and ports. Container stats are omitted in this\nendpoint. If you need to get detailed information about container with\nstats included, use the `Get project containers` endpoint.\n\nUse this to get an overview of all Docker projects on your VPS instance.", + "operationId": "VPS_getProjectListV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ProjectCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + }, + "post": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Create new project", + "description": "Deploy new project from docker-compose.yaml contents or download contents from URL. \n\nURL can be Github repository url in format https://github.com/[user]/[repo]\nand it will be automatically resolved to docker-compose.yaml file in\nmaster branch. Any other URL provided must return docker-compose.yaml\nfile contents.\n\nIf project with the same name already exists, existing project will be replaced.", + "operationId": "VPS_createNewProjectV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.DockerManager.UpRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/logs": { + "get": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Get project logs", + "description": "Retrieves aggregated log entries from all services within a Docker Compose project. \n\nThis endpoint returns recent log output from each container, organized by service name with timestamps. \nThe response contains the last 300 log entries across all services. \n\nUse this for debugging, monitoring application behavior, and\ntroubleshooting issues across your entire project stack.", + "operationId": "VPS_getProjectLogsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.LogsCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/restart": { + "post": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Restart project", + "description": "Restarts all services in a Docker Compose project by stopping and starting\ncontainers in the correct dependency order.\n\nThis operation preserves data volumes and network configurations while refreshing the running containers. \n\nUse this to apply configuration changes or recover from service failures.", + "operationId": "VPS_restartProjectV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/start": { + "post": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Start project", + "description": "Starts all services in a Docker Compose project that are currently stopped. \n\nThis operation brings up containers in the correct dependency order as defined in the compose file. \n\nUse this to resume a project that was previously stopped or to start services after a system reboot.", + "operationId": "VPS_startProjectV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/stop": { + "post": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Stop project", + "description": "Stops all running services in a Docker Compose project while preserving\ncontainer configurations and data volumes.\n\nThis operation gracefully shuts down containers in reverse dependency order. \n\nUse this to temporarily halt a project without removing data or configurations.", + "operationId": "VPS_stopProjectV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/docker/{projectName}/update": { + "post": { + "tags": [ + "VPS: Docker Manager" + ], + "summary": "Update project", + "description": "Updates a Docker Compose project by pulling the latest image versions and\nrecreating containers with new configurations.\n\nThis operation preserves data volumes while applying changes from the compose file. \n\nUse this to deploy application updates, apply configuration changes, or\nrefresh container images to their latest versions.", + "operationId": "VPS_updateProjectV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/projectName" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-scalar-stability": "experimental" + } + }, + "/api/vps/v1/firewall/{firewallId}/activate/{virtualMachineId}": { + "post": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Activate firewall", + "description": "Activate a firewall for a specified virtual machine.\n\nOnly one firewall can be active for a virtual machine at a time.\n\nUse this endpoint to apply firewall rules to VPS instances.", + "operationId": "VPS_activateFirewallV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + }, + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/firewall/{firewallId}/deactivate/{virtualMachineId}": { + "post": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Deactivate firewall", + "description": "Deactivate a firewall for a specified virtual machine.\n\nUse this endpoint to remove firewall protection from VPS instances.", + "operationId": "VPS_deactivateFirewallV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + }, + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/firewall/{firewallId}": { + "get": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Get firewall details", + "description": "Retrieve firewall by its ID and rules associated with it.\n\nUse this endpoint to view specific firewall configuration and rules.", + "operationId": "VPS_getFirewallDetailsV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Delete firewall", + "description": "Delete a specified firewall.\n\nAny virtual machine that has this firewall activated will automatically have it deactivated.\n\nUse this endpoint to remove unused firewall configurations.", + "operationId": "VPS_deleteFirewallV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/firewall": { + "get": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Get firewall list", + "description": "Retrieve all available firewalls.\n\nUse this endpoint to view existing firewall configurations.", + "operationId": "VPS_getFirewallListV1", + "parameters": [ + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Create new firewall", + "description": "Create a new firewall.\n\nUse this endpoint to set up new firewall configurations for VPS security.", + "operationId": "VPS_createNewFirewallV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/firewall/{firewallId}/rules/{ruleId}": { + "put": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Update firewall rule", + "description": "Update a specific firewall rule from a specified firewall.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to modify existing firewall rules.", + "operationId": "VPS_updateFirewallRuleV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + }, + { + "$ref": "#/components/parameters/ruleId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.Rules.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallRuleResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Delete firewall rule", + "description": "Delete a specific firewall rule from a specified firewall.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to remove specific firewall rules.", + "operationId": "VPS_deleteFirewallRuleV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + }, + { + "$ref": "#/components/parameters/ruleId" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/firewall/{firewallId}/rules": { + "post": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Create firewall rule", + "description": "Create new firewall rule for a specified firewall.\n\nBy default, the firewall drops all incoming traffic,\nwhich means you must add accept rules for all ports you want to use.\n\nAny virtual machine that has this firewall activated will lose sync with the firewall\nand will have to be synced again manually.\n\nUse this endpoint to add new security rules to firewalls.", + "operationId": "VPS_createFirewallRuleV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.Rules.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallRuleResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/firewall/{firewallId}/sync/{virtualMachineId}": { + "post": { + "tags": [ + "VPS: Firewall" + ], + "summary": "Sync firewall", + "description": "Sync a firewall for a specified virtual machine.\n\nFirewall can lose sync with virtual machine if the firewall has new rules added, removed or updated.\n\nUse this endpoint to apply updated firewall rules to VPS instances.", + "operationId": "VPS_syncFirewallV1", + "parameters": [ + { + "$ref": "#/components/parameters/firewallId" + }, + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/post-install-scripts/{postInstallScriptId}": { + "get": { + "tags": [ + "VPS: Post-install scripts" + ], + "summary": "Get post-install script", + "description": "Retrieve post-install script by its ID.\n\nUse this endpoint to view specific automation script details.", + "operationId": "VPS_getPostInstallScriptV1", + "parameters": [ + { + "$ref": "#/components/parameters/postInstallScriptId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.PostInstallScriptResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "put": { + "tags": [ + "VPS: Post-install scripts" + ], + "summary": "Update post-install script", + "description": "Update a specific post-install script.\n\nUse this endpoint to modify existing automation scripts.", + "operationId": "VPS_updatePostInstallScriptV1", + "parameters": [ + { + "$ref": "#/components/parameters/postInstallScriptId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.PostInstallScriptResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Post-install scripts" + ], + "summary": "Delete post-install script", + "description": "Delete a post-install script from your account.\n \nUse this endpoint to remove unused automation scripts.", + "operationId": "VPS_deletePostInstallScriptV1", + "parameters": [ + { + "$ref": "#/components/parameters/postInstallScriptId" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/post-install-scripts": { + "get": { + "tags": [ + "VPS: Post-install scripts" + ], + "summary": "Get post-install scripts", + "description": "Retrieve post-install scripts associated with your account.\n\nUse this endpoint to view available automation scripts for VPS deployment.", + "operationId": "VPS_getPostInstallScriptsV1", + "parameters": [ + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.PostInstallScriptCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "VPS: Post-install scripts" + ], + "summary": "Create post-install script", + "description": "Add a new post-install script to your account, which can then be used after virtual machine installation.\n\nThe script contents will be saved to the file `/post_install` with executable attribute set\nand will be executed once virtual machine is installed.\nThe output of the script will be redirected to `/post_install.log`. Maximum script size is 48KB.\n\nUse this endpoint to create automation scripts for VPS setup tasks.", + "operationId": "VPS_createPostInstallScriptV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.PostInstallScriptResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/public-keys/attach/{virtualMachineId}": { + "post": { + "tags": [ + "VPS: Public Keys" + ], + "summary": "Attach public key", + "description": "Attach existing public keys from your account to a specified virtual machine.\n\nMultiple keys can be attached to a single virtual machine.\n\nUse this endpoint to enable SSH key authentication for VPS instances.", + "operationId": "VPS_attachPublicKeyV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PublicKey.AttachRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/public-keys/{publicKeyId}": { + "delete": { + "tags": [ + "VPS: Public Keys" + ], + "summary": "Delete public key", + "description": "Delete a public key from your account. \n\n**Deleting public key from account does not remove it from virtual machine** \n \nUse this endpoint to remove unused SSH keys from account.", + "operationId": "VPS_deletePublicKeyV1", + "parameters": [ + { + "$ref": "#/components/parameters/publicKeyId" + } + ], + "responses": { + "200": { + "description": "Success empty response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Common.SuccessEmptyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/public-keys": { + "get": { + "tags": [ + "VPS: Public Keys" + ], + "summary": "Get public keys", + "description": "Retrieve public keys associated with your account.\n\nUse this endpoint to view available SSH keys for VPS authentication.", + "operationId": "VPS_getPublicKeysV1", + "parameters": [ + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/VPS.V1.PublicKey.PublicKeyCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "VPS: Public Keys" + ], + "summary": "Create public key", + "description": "Add a new public key to your account.\n\nUse this endpoint to register SSH keys for VPS authentication.", + "operationId": "VPS_createPublicKeyV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PublicKey.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.PublicKey.PublicKeyResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/templates/{templateId}": { + "get": { + "tags": [ + "VPS: OS Templates" + ], + "summary": "Get template details", + "description": "Retrieve detailed information about a specific OS template for virtual machines.\n\nUse this endpoint to view specific template specifications before deployment.", + "operationId": "VPS_getTemplateDetailsV1", + "parameters": [ + { + "$ref": "#/components/parameters/templateId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Template.TemplateResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/templates": { + "get": { + "tags": [ + "VPS: OS Templates" + ], + "summary": "Get templates", + "description": "Retrieve available OS templates for virtual machines.\n\nUse this endpoint to view operating system options before creating or recreating VPS instances.", + "operationId": "VPS_getTemplatesV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Template.TemplateCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/actions/{actionId}": { + "get": { + "tags": [ + "VPS: Actions" + ], + "summary": "Get action details", + "description": "Retrieve detailed information about a specific action performed on a specified virtual machine.\n\nUse this endpoint to monitor specific VPS operation status and details.", + "operationId": "VPS_getActionDetailsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/actionId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/actions": { + "get": { + "tags": [ + "VPS: Actions" + ], + "summary": "Get actions", + "description": "Retrieve actions performed on a specified virtual machine.\n\nActions are operations or events that have been executed on the virtual\nmachine, such as starting, stopping, or modifying the machine. This endpoint\nallows you to view the history of these actions, providing details about\neach action, such as the action name, timestamp, and status.\n\nUse this endpoint to view VPS operation history and troubleshoot issues.", + "operationId": "VPS_getActionsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/public-keys": { + "get": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Get attached public keys", + "description": "Retrieve public keys attached to a specified virtual machine.\n\nUse this endpoint to view SSH keys configured for specific VPS instances.", + "operationId": "VPS_getAttachedPublicKeysV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/VPS.V1.PublicKey.PublicKeyCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/backups": { + "get": { + "tags": [ + "VPS: Backups" + ], + "summary": "Get backups", + "description": "Retrieve backups for a specified virtual machine.\n\nUse this endpoint to view available backup points for VPS data recovery.", + "operationId": "VPS_getBackupsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/page" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "properties": { + "data": { + "$ref": "#/components/schemas/VPS.V1.Backup.BackupCollection" + }, + "meta": { + "$ref": "#/components/schemas/Common.Schema.PaginationMetaSchema" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/backups/{backupId}/restore": { + "post": { + "tags": [ + "VPS: Backups" + ], + "summary": "Restore backup", + "description": "Restore a backup for a specified virtual machine.\n\nThe system will then initiate the restore process, which may take some time depending on the size of the backup.\n\n**All data on the virtual machine will be overwritten with the data from the backup.**\n\nUse this endpoint to recover VPS data from backup points.", + "operationId": "VPS_restoreBackupV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/backupId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/hostname": { + "put": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Set hostname", + "description": "Set hostname for a specified virtual machine.\n\nChanging hostname does not update PTR record automatically.\nIf you want your virtual machine to be reachable by a hostname, \nyou need to point your domain A/AAAA records to virtual machine IP as well.\n\nUse this endpoint to configure custom hostnames for VPS instances.", + "operationId": "VPS_setHostnameV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.HostnameUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Reset hostname", + "description": "Reset hostname and PTR record of a specified virtual machine to default value.\n\nUse this endpoint to restore default hostname configuration for VPS instances.", + "operationId": "VPS_resetHostnameV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}": { + "get": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Get virtual machine details", + "description": "Retrieve detailed information about a specified virtual machine.\n\nUse this endpoint to view comprehensive VPS configuration and status.", + "operationId": "VPS_getVirtualMachineDetailsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.VirtualMachineResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines": { + "get": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Get virtual machines", + "description": "Retrieve all available virtual machines.\n\nUse this endpoint to view available VPS instances.", + "operationId": "VPS_getVirtualMachinesV1", + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.VirtualMachineCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Purchase new virtual machine", + "description": "Purchase and setup a new virtual machine.\n\nIf virtual machine setup fails for any reason, login to\n[hPanel](https://hpanel.hostinger.com/) and complete the setup manually.\n\nIf no payment method is provided, your default payment method will be used automatically.\n\nUse this endpoint to create new VPS instances.", + "operationId": "VPS_purchaseNewVirtualMachineV1", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.PurchaseRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Billing.V1.Order.VirtualMachineOrderResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/monarx": { + "get": { + "tags": [ + "VPS: Malware scanner" + ], + "summary": "Get scan metrics", + "description": "Retrieve scan metrics for the [Monarx](https://www.monarx.com/) malware scanner\ninstalled on a specified virtual machine.\n\nThe scan metrics provide detailed information about malware scans performed\nby Monarx, including number of scans, detected threats, and other relevant\nstatistics. This information is useful for monitoring security status of the\nvirtual machine and assessing effectiveness of the malware scanner.\n\nUse this endpoint to monitor VPS security scan results and threat detection.", + "operationId": "VPS_getScanMetricsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Malware.MetricsResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "VPS: Malware scanner" + ], + "summary": "Install Monarx", + "description": "Install the Monarx malware scanner on a specified virtual machine.\n\n[Monarx](https://www.monarx.com/) is a security tool designed to detect and\nprevent malware infections on virtual machines. By installing Monarx, users\ncan enhance the security of their virtual machines, ensuring that they are\nprotected against malicious software.\n\nUse this endpoint to enable malware protection on VPS instances.", + "operationId": "VPS_installMonarxV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Malware scanner" + ], + "summary": "Uninstall Monarx", + "description": "Uninstall the Monarx malware scanner on a specified virtual machine.\n\nIf Monarx is not installed, the request will still be processed without any effect.\n\nUse this endpoint to remove malware scanner from VPS instances.", + "operationId": "VPS_uninstallMonarxV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/metrics": { + "get": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Get metrics", + "description": "Retrieve historical metrics for a specified virtual machine.\n\nIt includes the following metrics: \n- CPU usage\n- Memory usage\n- Disk usage\n- Network usage\n- Uptime\n\nUse this endpoint to monitor VPS performance and resource utilization over time.", + "operationId": "VPS_getMetricsV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "name": "date_from", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time", + "default": null, + "example": "2025-05-01T00:00:00Z" + } + }, + { + "name": "date_to", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time", + "default": null, + "example": "2025-06-01T00:00:00Z" + } + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + }, + "x-optic-ignore-example": true + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers": { + "put": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Set nameservers", + "description": "Set nameservers for a specified virtual machine.\n\nBe aware, that improper nameserver configuration can lead to the virtual\nmachine being unable to resolve domain names.\n\nUse this endpoint to configure custom DNS resolvers for VPS instances.", + "operationId": "VPS_setNameserversV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.NameserversUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/ptr/{ipAddressId}": { + "post": { + "tags": [ + "VPS: PTR records" + ], + "summary": "Create PTR record", + "description": "Create or update a PTR (Pointer) record for a specified virtual machine.\n\nUse this endpoint to configure reverse DNS lookup for VPS IP addresses.", + "operationId": "VPS_createPTRRecordV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/ipAddressId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.PTR.StoreRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: PTR records" + ], + "summary": "Delete PTR record", + "description": "Delete a PTR (Pointer) record for a specified virtual machine.\n\nOnce deleted, reverse DNS lookups to the virtual machine's IP address will\nno longer return the previously configured hostname.\n\nUse this endpoint to remove reverse DNS configuration from VPS instances.", + "operationId": "VPS_deletePTRRecordV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + }, + { + "$ref": "#/components/parameters/ipAddressId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/panel-password": { + "put": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Set panel password", + "description": "Set panel password for a specified virtual machine.\n\nIf virtual machine does not use panel OS, the request will still be processed without any effect.\nRequirements for password are same as in the [recreate virtual machine\nendpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate).\n\nUse this endpoint to configure control panel access credentials for VPS instances.", + "operationId": "VPS_setPanelPasswordV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.PanelPasswordUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery": { + "post": { + "tags": [ + "VPS: Recovery" + ], + "summary": "Start recovery mode", + "description": "Initiate recovery mode for a specified virtual machine.\n\nRecovery mode is a special state that allows users to perform system rescue operations, \nsuch as repairing file systems, recovering data, or troubleshooting issues that prevent the virtual machine \nfrom booting normally. \n\nVirtual machine will boot recovery disk image and original disk image will be mounted in `/mnt` directory.\n\nUse this endpoint to enable system rescue operations on VPS instances.", + "operationId": "VPS_startRecoveryModeV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.Recovery.StartRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Recovery" + ], + "summary": "Stop recovery mode", + "description": "Stop recovery mode for a specified virtual machine.\n\nIf virtual machine is not in recovery mode, this operation will fail.\n\nUse this endpoint to exit system rescue mode and return VPS to normal operation.", + "operationId": "VPS_stopRecoveryModeV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/recreate": { + "post": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Recreate virtual machine", + "description": "Recreate a virtual machine from scratch.\n\nThe recreation process involves reinstalling the operating system and\nresetting the virtual machine to its initial state.\nSnapshots, if there are any, will be deleted.\n\n## Password Requirements\nPassword will be checked against leaked password databases. \nRequirements for the password are:\n- At least 12 characters long\n- At least one uppercase letter\n- At least one lowercase letter\n- At least one number\n- Is not leaked publicly\n\n**This operation is irreversible and will result in the loss of all data stored on the virtual machine!**\n\nUse this endpoint to completely rebuild VPS instances with fresh OS installation.", + "operationId": "VPS_recreateVirtualMachineV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.RecreateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/restart": { + "post": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Restart virtual machine", + "description": "Restart a specified virtual machine by fully stopping and starting it.\n\nIf the virtual machine was stopped, it will be started.\n\nUse this endpoint to reboot VPS instances.", + "operationId": "VPS_restartVirtualMachineV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/root-password": { + "put": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Set root password", + "description": "Set root password for a specified virtual machine.\n\nRequirements for password are same as in the [recreate virtual machine\nendpoint](/#tag/vps-virtual-machine/POST/api/vps/v1/virtual-machines/{virtualMachineId}/recreate).\n\nUse this endpoint to update administrator credentials for VPS instances.", + "operationId": "VPS_setRootPasswordV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.RootPasswordUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/setup": { + "post": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Setup purchased virtual machine", + "description": "Setup newly purchased virtual machine with `initial` state.\n\nUse this endpoint to configure and initialize purchased VPS instances.", + "operationId": "VPS_setupPurchasedVirtualMachineV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.SetupRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.VirtualMachineResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "422": { + "$ref": "#/components/responses/Common.Response.UnprocessableContentResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot": { + "get": { + "tags": [ + "VPS: Snapshots" + ], + "summary": "Get snapshot", + "description": "Retrieve snapshot for a specified virtual machine.\n\nUse this endpoint to view current VPS snapshot information.", + "operationId": "VPS_getSnapshotV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Snapshot.SnapshotResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "post": { + "tags": [ + "VPS: Snapshots" + ], + "summary": "Create snapshot", + "description": "Create a snapshot of a specified virtual machine.\n\nA snapshot captures the state and data of the virtual machine at a specific point in time, \nallowing users to restore the virtual machine to that state if needed. \nThis operation is useful for backup purposes, system recovery, \nand testing changes without affecting the current state of the virtual machine.\n\n**Creating new snapshot will overwrite the existing snapshot!**\n\nUse this endpoint to capture VPS state for backup and recovery purposes.", + "operationId": "VPS_createSnapshotV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + }, + "delete": { + "tags": [ + "VPS: Snapshots" + ], + "summary": "Delete snapshot", + "description": "Delete a snapshot of a specified virtual machine.\n\nUse this endpoint to remove VPS snapshots.", + "operationId": "VPS_deleteSnapshotV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/snapshot/restore": { + "post": { + "tags": [ + "VPS: Snapshots" + ], + "summary": "Restore snapshot", + "description": "Restore a specified virtual machine to a previous state using a snapshot.\n\nRestoring from a snapshot allows users to revert the virtual machine to that state,\nwhich is useful for system recovery, undoing changes, or testing.\n\nUse this endpoint to revert VPS instances to previous saved states.", + "operationId": "VPS_restoreSnapshotV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/start": { + "post": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Start virtual machine", + "description": "Start a specified virtual machine.\n\nIf the virtual machine is already running, the request will still be processed without any effect.\n\nUse this endpoint to power on stopped VPS instances.", + "operationId": "VPS_startVirtualMachineV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + }, + "/api/vps/v1/virtual-machines/{virtualMachineId}/stop": { + "post": { + "tags": [ + "VPS: Virtual machine" + ], + "summary": "Stop virtual machine", + "description": "Stop a specified virtual machine.\n\nIf the virtual machine is already stopped, the request will still be processed without any effect.\n\nUse this endpoint to power off running VPS instances.", + "operationId": "VPS_stopVirtualMachineV1", + "parameters": [ + { + "$ref": "#/components/parameters/virtualMachineId" + } + ], + "responses": { + "200": { + "description": "Success response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Common.Response.UnauthorizedResponse" + }, + "500": { + "$ref": "#/components/responses/Common.Response.ErrorResponse" + } + } + } + } + }, + "components": { + "schemas": { + "Common.Schema.PaginationMetaSchema": { + "properties": { + "current_page": { + "type": "integer", + "example": 1 + }, + "per_page": { + "type": "integer", + "example": 15 + }, + "total": { + "type": "integer", + "example": 100 + } + }, + "type": "object", + "x-scalar-ignore": true + }, + "Billing.V1.Subscription.CancelRequest": { + "properties": { + "reason_code": { + "description": "Cancellation reason code", + "type": "string", + "enum": [ + "other" + ], + "example": "other", + "nullable": true + }, + "cancel_option": { + "description": "Cancellation option", + "type": "string", + "enum": [ + "immediately" + ], + "example": "immediately", + "nullable": true + } + }, + "type": "object" + }, + "DNS.V1.Zone.DestroyRequest": { + "required": [ + "filters" + ], + "properties": { + "filters": { + "description": "Filter records for deletion", + "type": "array", + "items": { + "required": [ + "name", + "type" + ], + "properties": { + "name": { + "description": "Name of the record", + "type": "string", + "example": "@" + }, + "type": { + "description": "Type of the record", + "type": "string", + "enum": [ + "A", + "AAAA", + "CNAME", + "ALIAS", + "MX", + "TXT", + "NS", + "SOA", + "SRV", + "CAA" + ], + "example": "A" + } + }, + "type": "object" + } + } + }, + "type": "object" + }, + "DNS.V1.Zone.ResetRequest": { + "properties": { + "sync": { + "description": "Determines if operation should be run synchronously", + "type": "boolean", + "default": true, + "example": true + }, + "reset_email_records": { + "description": "Determines if email records should be reset", + "type": "boolean", + "default": true, + "example": true + }, + "whitelisted_record_types": { + "description": "Specifies which record types to not reset", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "MX", + "TXT" + ] + } + }, + "type": "object" + }, + "DNS.V1.Zone.UpdateRequest": { + "required": [ + "zone" + ], + "properties": { + "overwrite": { + "description": "If `true`, resource records (RRs) matching name and type will be deleted and new RRs will be created,\notherwise resource records' ttl's are updated and new records are appended.\nIf no matching RRs are found, they are created.", + "type": "boolean", + "default": true, + "example": true + }, + "zone": { + "type": "array", + "items": { + "required": [ + "name", + "records", + "type" + ], + "properties": { + "name": { + "description": "Name of the record (use `@` for wildcard name)", + "type": "string", + "example": "www" + }, + "records": { + "description": "Records assigned to the name", + "type": "array", + "items": { + "required": [ + "content" + ], + "properties": { + "content": { + "description": "Content of the name record", + "type": "string", + "example": "mydomain.tld." + } + }, + "type": "object" + } + }, + "ttl": { + "description": "TTL (Time-To-Live) of the record", + "type": "integer", + "example": 14400 + }, + "type": { + "description": "Type of the record", + "type": "string", + "enum": [ + "A", + "AAAA", + "CNAME", + "ALIAS", + "MX", + "TXT", + "NS", + "SOA", + "SRV", + "CAA" + ], + "example": "A" + } + }, + "type": "object" + } + } + }, + "type": "object" + }, + "DomainAccessVerifier.V2.Verifications.ListRequest": { + "required": [ + "domains" + ], + "properties": { + "domains": { + "description": "The list of domains for which to get verification details for.", + "type": "array", + "items": { + "type": "string", + "example": "example.com" + } + } + }, + "type": "object" + }, + "Domains.V1.Availability.AvailabilityRequest": { + "required": [ + "domain", + "tlds" + ], + "properties": { + "domain": { + "description": "Domain name (without TLD)", + "type": "string", + "example": "mydomain" + }, + "tlds": { + "description": "TLDs list", + "type": "array", + "items": { + "description": "TLD without leading dot", + "type": "string" + }, + "example": [ + "com", + "net", + "org" + ] + }, + "with_alternatives": { + "description": "Should response include alternatives", + "type": "boolean", + "default": false, + "example": true + } + }, + "type": "object" + }, + "Domains.V1.Forwarding.StoreRequest": { + "required": [ + "domain", + "redirect_type", + "redirect_url" + ], + "properties": { + "domain": { + "description": "Domain name", + "type": "string", + "example": "mydomain.tld" + }, + "redirect_type": { + "description": "Redirect type", + "type": "string", + "enum": [ + "301", + "302" + ], + "example": "301", + "x-enum-descriptions": { + "301": "Permanent", + "302": "Temporary" + } + }, + "redirect_url": { + "description": "URL to forward domain to", + "type": "string", + "example": "https://forward.to.my.url" + } + }, + "type": "object" + }, + "Domains.V1.Portfolio.PurchaseRequest": { + "required": [ + "domain", + "item_id" + ], + "properties": { + "domain": { + "description": "Domain name", + "type": "string", + "example": "my-new-domain.tld" + }, + "item_id": { + "description": "Catalog price item ID", + "type": "string", + "example": "hostingercom-domain-com-usd-1y" + }, + "payment_method_id": { + "description": "Payment method ID, default will be used if not provided", + "type": "integer", + "example": 1327362 + }, + "domain_contacts": { + "description": "Domain contact information", + "properties": { + "owner_id": { + "description": "Owner contact WHOIS record ID", + "type": "integer", + "example": 741288 + }, + "admin_id": { + "description": "Administrative contact WHOIS record ID", + "type": "integer", + "example": 546123 + }, + "billing_id": { + "description": "Billing contact WHOIS record ID", + "type": "integer", + "example": 741288 + }, + "tech_id": { + "description": "Technical contact WHOIS record ID", + "type": "integer", + "example": 741288 + } + }, + "type": "object" + }, + "additional_details": { + "description": "Additional registration data, possible values depends on TLD", + "type": "object" + }, + "coupons": { + "description": "Discount coupon codes", + "type": "array", + "items": { + "example": [ + "Coupon 3" + ] + } + } + }, + "type": "object" + }, + "Domains.V1.Portfolio.UpdateNameserversRequest": { + "required": [ + "ns1", + "ns2" + ], + "properties": { + "ns1": { + "description": "First name server", + "type": "string", + "example": "ns1.some-nameserver.tld" + }, + "ns2": { + "description": "Second name server", + "type": "string", + "example": "ns2.some-nameserver.tld" + }, + "ns3": { + "description": "Third name server", + "type": "string", + "example": "ns3.some-nameserver.tld" + }, + "ns4": { + "description": "Fourth name server", + "type": "string", + "example": "ns4.some-nameserver.tld" + } + }, + "type": "object" + }, + "Domains.V1.WHOIS.StoreRequest": { + "required": [ + "tld", + "entity_type", + "country", + "whois_details" + ], + "properties": { + "tld": { + "description": "TLD of the domain (without leading dot)", + "type": "string", + "example": "com" + }, + "country": { + "description": "ISO 3166 2-letter country code", + "type": "string", + "example": "NL" + }, + "entity_type": { + "description": "Legal entity type", + "type": "string", + "enum": [ + "individual", + "organization" + ], + "example": "individual" + }, + "tld_details": { + "description": "TLD details", + "type": "object" + }, + "whois_details": { + "description": "WHOIS details", + "type": "object" + } + }, + "type": "object" + }, + "Hosting.V1.Datacenters.ListRequest": { + "required": [ + "order_id" + ], + "properties": { + "order_id": { + "type": "integer", + "example": 12345 + } + }, + "type": "object" + }, + "Hosting.V1.Domains.VerifyOwnershipRequest": { + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain to verify ownership for", + "type": "string", + "example": "example.com" + } + }, + "type": "object" + }, + "Hosting.V1.Websites.CreateWebsiteRequest": { + "required": [ + "domain", + "order_id" + ], + "properties": { + "domain": { + "description": "Domain name for the website. Cannot start with \"www.\"", + "type": "string", + "example": "example.com" + }, + "order_id": { + "description": "ID of the associated order", + "type": "integer", + "example": 12345 + }, + "datacenter_code": { + "description": "Datacenter code. This parameter is required when creating the first website on a new hosting plan.", + "type": "string", + "example": "us-east-1", + "nullable": true + } + }, + "type": "object" + }, + "Reach.V1.Contacts.Segments.StoreRequest": { + "required": [ + "name", + "conditions", + "logic" + ], + "properties": { + "name": { + "type": "string", + "example": "New segment name" + }, + "conditions": { + "type": "array", + "items": { + "properties": { + "operator": { + "type": "string", + "enum": [ + "equals", + "not_equals", + "contains", + "not_contains", + "gte", + "lte", + "exists", + "within_last_days", + "not_within_last_days", + "older_than_days", + "processed", + "not_processed", + "delivered", + "not_delivered", + "dropped", + "not_dropped", + "bounced", + "not_bounced", + "opened", + "not_opened", + "clicked", + "not_clicked", + "unsubscribed", + "not_unsubscribed" + ], + "example": "equals" + }, + "value": { + "oneOf": [ + { + "type": "string", + "example": "example@example.com" + }, + { + "type": "integer", + "example": 10 + } + ] + }, + "attribute": { + "type": "string", + "enum": [ + "note", + "comment", + "domain", + "integration", + "source", + "name", + "surname", + "email", + "subscribed_at", + "unsubscribed_at", + "subscription_status", + "processed", + "opened", + "clicked", + "delivered", + "bounced", + "unsubscribed", + "dropped", + "tag", + "campaigns" + ], + "example": "note" + } + }, + "type": "object" + }, + "maxItems": 5, + "minItems": 1 + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "example": "AND" + } + }, + "type": "object" + }, + "Reach.V1.Contacts.StoreRequest": { + "required": [ + "email" + ], + "properties": { + "email": { + "type": "string", + "example": "john.doe@example.com" + }, + "name": { + "type": "string", + "example": "John", + "nullable": true + }, + "surname": { + "type": "string", + "example": "Doe", + "nullable": true + }, + "note": { + "type": "string", + "maxLength": 75, + "example": "VIP customer", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.Firewall.Rules.StoreRequest": { + "required": [ + "protocol", + "port", + "source", + "source_detail" + ], + "properties": { + "protocol": { + "type": "string", + "enum": [ + "TCP", + "UDP", + "ICMP", + "GRE", + "any", + "ESP", + "AH", + "ICMPv6", + "SSH", + "HTTP", + "HTTPS", + "MySQL", + "PostgreSQL" + ], + "example": "TCP" + }, + "port": { + "description": "Port or port range, ex: 1024:2048", + "type": "string", + "example": "443" + }, + "source": { + "type": "string", + "enum": [ + "any", + "custom" + ], + "example": "any" + }, + "source_detail": { + "description": "IP range, CIDR, single IP or `any`", + "type": "string", + "example": "351.15.24.0/24" + } + }, + "type": "object" + }, + "VPS.V1.Firewall.StoreRequest": { + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "example": "My Firewall Group" + } + }, + "type": "object" + }, + "VPS.V1.PostInstallScript.StoreRequest": { + "required": [ + "name", + "content" + ], + "properties": { + "name": { + "description": "Name of the script", + "type": "string", + "example": "My Script" + }, + "content": { + "description": "Content of the script", + "type": "string", + "example": "#!/bin/bash\n\necho 'Hello, World!'" + } + }, + "type": "object" + }, + "VPS.V1.PublicKey.AttachRequest": { + "required": [ + "ids" + ], + "properties": { + "ids": { + "description": "Public Key IDs to attach", + "type": "array", + "items": { + "type": "integer" + }, + "example": [ + 18232, + 10230230 + ] + } + }, + "type": "object" + }, + "VPS.V1.PublicKey.StoreRequest": { + "required": [ + "name", + "key" + ], + "properties": { + "name": { + "type": "string", + "example": "My Public Key" + }, + "key": { + "type": "string", + "example": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..." + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.DockerManager.UpRequest": { + "required": [ + "project_name", + "content" + ], + "properties": { + "project_name": { + "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only", + "type": "string", + "maxLength": 64, + "minLength": 3, + "example": "my-project-1" + }, + "content": { + "description": "URL pointing to docker-compose.yaml file, Github repository or raw YAML content of the compose file", + "type": "string", + "maxLength": 8192 + }, + "environment": { + "description": "Project environment variables", + "type": "string", + "maxLength": 8192, + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.HostnameUpdateRequest": { + "required": [ + "hostname" + ], + "properties": { + "hostname": { + "type": "string", + "example": "my.server.tld" + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.MetricGetRequest": { + "required": [ + "date_from", + "date_to" + ], + "properties": { + "date_from": { + "type": "string", + "format": "date-time", + "example": "2025-05-01T00:00:00Z" + }, + "date_to": { + "type": "string", + "format": "date-time", + "example": "2025-06-01T00:00:00Z" + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.NameserversUpdateRequest": { + "required": [ + "ns1" + ], + "properties": { + "ns1": { + "type": "string", + "example": "4.3.2.1" + }, + "ns2": { + "type": "string", + "example": "1.2.3.4", + "nullable": true + }, + "ns3": { + "type": "string", + "example": "5.2.3.4", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.PTR.StoreRequest": { + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Pointer record domain", + "type": "string", + "example": "example.tld" + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.PanelPasswordUpdateRequest": { + "required": [ + "password" + ], + "properties": { + "password": { + "description": "Panel password for the virtual machine", + "type": "string", + "format": "password", + "minLength": 8, + "example": "oMeNRustosIO" + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.PurchaseRequest": { + "required": [ + "item_id", + "setup" + ], + "properties": { + "item_id": { + "description": "Catalog price item ID", + "type": "string", + "example": "hostingercom-vps-kvm2-usd-1m" + }, + "payment_method_id": { + "description": "Payment method ID, default will be used if not provided", + "type": "integer", + "example": 1327362 + }, + "setup": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.SetupRequest" + }, + "coupons": { + "description": "Discount coupon codes", + "type": "array", + "items": { + "example": [ + "Coupon 3" + ] + } + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.Recovery.StartRequest": { + "required": [ + "root_password" + ], + "properties": { + "root_password": { + "description": "Temporary root password for recovery mode", + "type": "string", + "example": "oMeNRustosIO" + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.RecreateRequest": { + "required": [ + "template_id" + ], + "properties": { + "template_id": { + "description": "Template ID", + "type": "integer", + "example": 1130 + }, + "password": { + "description": "Root password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response.", + "type": "string", + "format": "password", + "minLength": 12, + "example": "oMeNRustosIO" + }, + "panel_password": { + "description": "Panel password for the panel-based OS template. If not provided, random password will be generated.\nIf OS does not support panel_password this field will be ignored.\nPassword will not be shown in the response.", + "type": "string", + "format": "password", + "minLength": 12, + "example": "Mna58c17a4d" + }, + "post_install_script_id": { + "description": "Post-install script to execute after virtual machine was recreated", + "type": "integer", + "example": 6324 + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.RootPasswordUpdateRequest": { + "required": [ + "password" + ], + "properties": { + "password": { + "description": "Root password for the virtual machine", + "type": "string", + "format": "password", + "minLength": 12, + "example": "oMeNRustosIO" + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.SetupRequest": { + "required": [ + "data_center_id", + "template_id" + ], + "properties": { + "template_id": { + "description": "Template ID", + "type": "integer", + "example": 1130 + }, + "data_center_id": { + "description": "Data center ID", + "type": "integer", + "example": 19 + }, + "post_install_script_id": { + "description": "Post-install script ID", + "type": "integer", + "example": 6324 + }, + "password": { + "description": "Password for the virtual machine. If not provided, random password will be generated.\nPassword will not be shown in the response.", + "type": "string", + "format": "password", + "minLength": 12, + "example": "oMeNRustosIO" + }, + "hostname": { + "description": "Override default hostname of the virtual machine", + "type": "string", + "example": "my.server.tld" + }, + "install_monarx": { + "description": "Install Monarx malware scanner (if supported)", + "type": "boolean", + "default": false, + "example": false + }, + "enable_backups": { + "description": "Enable weekly backup schedule", + "type": "boolean", + "default": true, + "example": true + }, + "ns1": { + "description": "Name server 1", + "type": "string", + "example": "4.3.2.1" + }, + "ns2": { + "description": "Name server 2", + "type": "string", + "example": "1.2.3.4" + }, + "public_key": { + "description": "Use SSH key", + "properties": { + "name": { + "description": "Name of the SSH key", + "type": "string", + "example": "my-key" + }, + "key": { + "description": "Contents of the SSH key", + "type": "string", + "example": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2X..." + } + }, + "type": "object" + } + }, + "type": "object" + }, + "Billing.V1.Catalog.CatalogItemCollection": { + "description": "Array of [`Billing.V1.Catalog.CatalogItemResource`](#model/billingv1catalogcatalogitemresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Billing.V1.Catalog.CatalogItemResource" + } + }, + "Billing.V1.Catalog.CatalogItemPriceCollection": { + "description": "Array of [`Billing.V1.Catalog.CatalogItemPriceResource`](#model/billingv1catalogcatalogitempriceresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Billing.V1.Catalog.CatalogItemPriceResource" + } + }, + "Billing.V1.Catalog.CatalogItemPriceResource": { + "properties": { + "id": { + "description": "Price item ID", + "type": "string", + "example": "hostingercom-vps-kvm2-usd-1m" + }, + "name": { + "description": "Price item name", + "type": "string", + "example": "KVM 2 (billed every month)" + }, + "currency": { + "description": "Currency code", + "type": "string", + "example": "USD" + }, + "price": { + "description": "Price in cents", + "type": "integer", + "example": 1799 + }, + "first_period_price": { + "description": "First period price in cents", + "type": "integer", + "example": 899 + }, + "period": { + "description": "Period", + "type": "integer", + "example": 1 + }, + "period_unit": { + "description": "Period unit", + "type": "string", + "enum": [ + "day", + "week", + "month", + "year", + "none" + ], + "example": "day" + } + }, + "type": "object" + }, + "Billing.V1.Catalog.CatalogItemResource": { + "properties": { + "id": { + "description": "Catalog item ID", + "type": "string", + "example": "hostingercom-vps-kvm2" + }, + "name": { + "type": "string", + "example": "KVM 2" + }, + "category": { + "type": "string", + "example": "VPS" + }, + "metadata": { + "description": "\n Flexible key-value storage containing category-specific metadata for the catalog item.\n The structure and available fields vary depending on the item category.\n ", + "type": "object", + "example": { + "field": "value" + }, + "nullable": true + }, + "prices": { + "$ref": "#/components/schemas/Billing.V1.Catalog.CatalogItemPriceCollection" + } + }, + "type": "object" + }, + "Billing.V1.Order.OrderBillingAddressResource": { + "properties": { + "first_name": { + "type": "string", + "example": "John" + }, + "last_name": { + "type": "string", + "example": "Doe" + }, + "company": { + "type": "string", + "example": null, + "nullable": true + }, + "address_1": { + "type": "string", + "example": null, + "nullable": true + }, + "address_2": { + "type": "string", + "example": null, + "nullable": true + }, + "city": { + "type": "string", + "example": null, + "nullable": true + }, + "state": { + "type": "string", + "example": null, + "nullable": true + }, + "zip": { + "type": "string", + "example": null, + "nullable": true + }, + "country": { + "type": "string", + "example": "NL", + "nullable": true + }, + "phone": { + "type": "string", + "example": null, + "nullable": true + }, + "email": { + "type": "string", + "example": "john@doe.tld" + } + }, + "type": "object" + }, + "Billing.V1.Order.OrderResource": { + "properties": { + "id": { + "description": "Order ID", + "type": "integer", + "example": 2957086 + }, + "subscription_id": { + "description": "Subscription ID", + "type": "string", + "example": "Azz353Uhl1xC54pR0" + }, + "status": { + "type": "string", + "enum": [ + "completed", + "pending", + "processing", + "failed", + "refunded", + "cancelled", + "awaiting_payment", + "payment_initiated", + "fraud_refund" + ], + "example": "completed" + }, + "currency": { + "description": "Currency code", + "type": "string", + "example": "USD" + }, + "subtotal": { + "description": "Subtotal price (exc. VAT) in cents", + "type": "integer", + "example": 899 + }, + "total": { + "description": "Total price (inc. VAT) in cents", + "type": "integer", + "example": 1088 + }, + "billing_address": { + "$ref": "#/components/schemas/Billing.V1.Order.OrderBillingAddressResource" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z" + } + }, + "type": "object" + }, + "Billing.V1.Order.VirtualMachineOrderResource": { + "properties": { + "order": { + "$ref": "#/components/schemas/Billing.V1.Order.OrderResource" + }, + "virtual_machine": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.VirtualMachineResource" + } + }, + "type": "object" + }, + "Billing.V1.PaymentMethod.PaymentMethodCollection": { + "description": "Array of [`Billing.V1.PaymentMethod.PaymentMethodResource`](#model/billingv1paymentmethodpaymentmethodresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Billing.V1.PaymentMethod.PaymentMethodResource" + } + }, + "Billing.V1.PaymentMethod.PaymentMethodResource": { + "properties": { + "id": { + "description": "Payment method ID", + "type": "integer", + "example": 6523 + }, + "name": { + "type": "string", + "example": "Credit Card" + }, + "identifier": { + "type": "string", + "example": "1234*****6464" + }, + "payment_method": { + "type": "string", + "example": "card" + }, + "is_default": { + "type": "boolean", + "example": true + }, + "is_expired": { + "type": "boolean", + "example": false + }, + "is_suspended": { + "type": "boolean", + "example": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z" + } + }, + "type": "object" + }, + "Billing.V1.Subscription.SubscriptionCollection": { + "description": "Array of [`Billing.V1.Subscription.SubscriptionResource`](#model/billingv1subscriptionsubscriptionresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Billing.V1.Subscription.SubscriptionResource" + } + }, + "Billing.V1.Subscription.SubscriptionResource": { + "properties": { + "id": { + "description": "Subscription ID", + "type": "string", + "example": "Azz36nUfKX1S1MSF" + }, + "name": { + "type": "string", + "example": "KVM 1" + }, + "status": { + "type": "string", + "enum": [ + "active", + "paused", + "cancelled", + "not_renewing", + "transferred", + "in_trial", + "future" + ], + "example": "active" + }, + "billing_period": { + "type": "integer", + "example": 1 + }, + "billing_period_unit": { + "type": "string", + "example": "day" + }, + "currency_code": { + "type": "string", + "example": "USD" + }, + "total_price": { + "description": "Total price in cents", + "type": "integer", + "example": 1799 + }, + "renewal_price": { + "description": "Renewal price in cents", + "type": "integer", + "example": 1799 + }, + "is_auto_renewed": { + "type": "boolean", + "example": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z", + "nullable": true + }, + "next_billing_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-28T11:54:22Z", + "nullable": true + } + }, + "type": "object" + }, + "Common.SuccessEmptyResource": { + "properties": { + "message": { + "type": "string", + "example": "Request accepted" + } + }, + "type": "object", + "x-scalar-ignore": true + }, + "DNS.V1.Snapshot.SnapshotCollection": { + "description": "Array of [`DNS.V1.Snapshot.SnapshotResource`](#model/dnsv1snapshotsnapshotresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/DNS.V1.Snapshot.SnapshotResource" + } + }, + "DNS.V1.Snapshot.SnapshotResource": { + "properties": { + "id": { + "description": "Snapshot ID", + "type": "integer", + "example": 5341 + }, + "reason": { + "description": "Reason of the update", + "type": "string", + "example": "Zone records update request" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + } + }, + "type": "object" + }, + "DNS.V1.Snapshot.SnapshotWithContentResource": { + "properties": { + "id": { + "description": "Snapshot ID", + "type": "integer", + "example": 5341 + }, + "reason": { + "description": "Reason of the update", + "type": "string", + "example": "Zone records update request" + }, + "snapshot": { + "$ref": "#/components/schemas/DNS.V1.Zone.RecordCollection" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + } + }, + "type": "object" + }, + "DNS.V1.Zone.NameRecordCollection": { + "description": "Array of [`DNS.V1.Zone.NameRecordResource`](#model/dnsv1zonenamerecordresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/DNS.V1.Zone.NameRecordResource" + } + }, + "DNS.V1.Zone.NameRecordResource": { + "properties": { + "content": { + "description": "Content of the name record", + "type": "string", + "example": "mydomain.tld." + }, + "is_disabled": { + "description": "Flag to mark name record as disabled", + "type": "boolean", + "example": false + } + }, + "type": "object" + }, + "DNS.V1.Zone.RecordCollection": { + "description": "Array of [`DNS.V1.Zone.RecordResource`](#model/dnsv1zonerecordresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/DNS.V1.Zone.RecordResource" + } + }, + "DNS.V1.Zone.RecordResource": { + "properties": { + "name": { + "description": "Name of the record (use `@` for wildcard name)", + "type": "string", + "example": "www" + }, + "records": { + "$ref": "#/components/schemas/DNS.V1.Zone.NameRecordCollection" + }, + "ttl": { + "description": "TTL (Time-To-Live) of the record", + "type": "integer", + "example": 14400 + }, + "type": { + "description": "Type of the record", + "type": "string", + "enum": [ + "A", + "AAAA", + "CNAME", + "ALIAS", + "MX", + "TXT", + "NS", + "SOA", + "SRV", + "CAA" + ], + "example": "A" + } + }, + "type": "object" + }, + "DomainAccessVerifier.V2.Verifications.ActiveVerificationsCollection": { + "description": "Returns active verifications (PENDING and VERIFIED) grouped by status and domain. Includes last and next verification attempt dates and expiration for PENDING verifications.", + "properties": { + "data": { + "description": "List of active verifications by status. If no verifications are found, this will return an empty array.", + "properties": { + "PENDING": { + "description": "Pending verifications grouped by domain. Keys are domain names (e.g., \"pixel.tld\"). This property will not be returned if no pending verifications are found.", + "properties": { + "DOMAIN.TLD": { + "description": "Domain name (example). Contains verification types as properties.", + "properties": { + "VERIFICATION_TYPE": { + "description": "Verification type (\"NAMESERVERS\" or \"TXT\"). Only verification types that exist for this domain will be present.", + "properties": { + "records": { + "description": "Verification records", + "type": "array", + "items": { + "type": "string" + } + }, + "last_verification_attempt": { + "description": "Datetime when last verification attempt occurred", + "type": "string", + "example": "2025-08-05 13:15:00" + }, + "next_verification_attempt": { + "description": "Datetime when next verification attempt will occur", + "type": "string", + "example": "2025-08-05 14:30:00" + }, + "verification_expiration": { + "description": "Datetime when verification expires", + "type": "string", + "example": "2025-08-12 13:15:00" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "VERIFIED": { + "description": "Verified verifications grouped by domain. Keys are domain names (e.g., \"byte.tld\"). This property will not be returned if no verified verifications are found.", + "properties": { + "DOMAIN.TLD": { + "description": "Domain name (example). Contains verification types as properties.", + "properties": { + "VERIFICATION_TYPE": { + "description": "Verification type (e.g., \"NAMESERVERS\", \"TXT\"). Only verification types that exist for this domain will be present.", + "properties": { + "records": { + "description": "Verification records", + "type": "array", + "items": { + "type": "string" + } + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object", + "example": { + "data": { + "PENDING": { + "pixel.tld": { + "NAMESERVERS": { + "records": [ + "ns1.nameserver.com", + "ns2.nameserver.com" + ], + "last_verification_attempt": "2025-08-05 13:15:00", + "next_verification_attempt": "2025-08-05 14:30:00", + "verification_expiration": "2025-08-12 13:15:00" + }, + "TXT": { + "records": [ + "txt-verification-hash" + ], + "last_verification_attempt": "2025-08-05 14:45:00", + "next_verification_attempt": "2025-08-05 15:00:00", + "verification_expiration": "2025-08-12 14:45:00" + } + } + }, + "VERIFIED": { + "byte.tld": { + "TXT": { + "records": [ + "other-txt-verification-hash" + ] + } + } + } + } + } + }, + "Domains.V1.Availability.AvailabilityCollection": { + "description": "Array of [`Domains.V1.Availability.AvailabilityResource`](#model/domainsv1availabilityavailabilityresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Domains.V1.Availability.AvailabilityResource" + } + }, + "Domains.V1.Availability.AvailabilityResource": { + "properties": { + "domain": { + "description": "Domain name, `null` when not claimed free domain", + "type": "string", + "example": "mydomain.tld", + "nullable": true + }, + "is_available": { + "description": "`true` if domain is available for registration", + "type": "boolean", + "example": true + }, + "is_alternative": { + "description": "`true` if domain is provided as an alternative", + "type": "boolean", + "example": false + }, + "restriction": { + "description": "Special rules and/or restrictions applied for registering TLD", + "type": "string", + "nullable": true + } + }, + "type": "object" + }, + "Domains.V1.Domain.DomainCollection": { + "description": "Array of [`Domains.V1.Domain.DomainResource`](#model/domainsv1domaindomainresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Domains.V1.Domain.DomainResource" + } + }, + "Domains.V1.Domain.DomainExtendedResource": { + "properties": { + "domain": { + "description": "Domain name", + "type": "string", + "example": "mydomain.tld" + }, + "status": { + "description": "Status of the domain", + "type": "string", + "enum": [ + "active", + "pending_setup", + "expired", + "requested", + "pending_verification", + "deleted", + "suspended", + "failed" + ], + "example": "active" + }, + "message": { + "type": "string", + "nullable": true + }, + "is_privacy_protection_allowed": { + "description": "Is privacy protection allowed for the domain", + "type": "boolean", + "example": true + }, + "is_privacy_protected": { + "description": "Is privacy protection enabled for the domain", + "type": "boolean", + "example": false + }, + "is_lockable": { + "description": "Is domain allowed to be locked", + "type": "boolean", + "example": true + }, + "is_locked": { + "description": "Is domain locked", + "type": "boolean", + "example": true + }, + "name_servers": { + "description": "Name servers", + "properties": { + "ns1": { + "description": "Name server 1", + "type": "string", + "example": "ns1.example.tld" + }, + "ns2": { + "description": "Name server 2", + "type": "string", + "example": "ns2.example.tld" + } + }, + "type": "object", + "example": { + "ns1": "ns1.example.tld", + "ns2": "ns2.example.tld" + } + }, + "child_name_servers": { + "description": "Child name servers", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "ns1.example.tld": [ + "258.231.55.321", + "258.231.55.322" + ] + } + }, + "domain_contacts": { + "description": "WHOIS profiles", + "properties": { + "admin_id": { + "description": "Admin WHOIS profile ID", + "type": "integer", + "example": 114698 + }, + "owner_id": { + "description": "Owner WHOIS profile ID", + "type": "integer", + "example": 614698 + }, + "billing_id": { + "description": "Billing WHOIS profile ID", + "type": "integer", + "example": 154698 + }, + "tech_id": { + "description": "Technician WHOIS profile ID", + "type": "integer", + "example": 524248 + } + }, + "type": "object" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "60_days_lock_expires_at": { + "type": "string", + "format": "date-time", + "example": "2025-04-27T11:54:22Z", + "nullable": true + }, + "registered_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T12:54:22Z", + "nullable": true + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z", + "nullable": true + } + }, + "type": "object" + }, + "Domains.V1.Domain.DomainResource": { + "properties": { + "id": { + "description": "Domain ID", + "type": "integer", + "example": 13632 + }, + "domain": { + "description": "Domain name, `null` when not claimed free domain", + "type": "string", + "example": "mydomain.tld", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "domain", + "free_domain", + "domain_transfer", + "free_domain_transfer" + ], + "example": "domain" + }, + "status": { + "type": "string", + "enum": [ + "active", + "pending_setup", + "expired", + "requested", + "pending_verification", + "deleted", + "suspended", + "failed" + ], + "example": "active" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z", + "nullable": true + } + }, + "type": "object" + }, + "Domains.V1.Forwarding.ForwardingResource": { + "properties": { + "domain": { + "description": "Domain name", + "type": "string", + "example": "mydomain.tld", + "nullable": true + }, + "redirect_type": { + "description": "Redirect type", + "type": "string", + "enum": [ + "301", + "302" + ], + "example": "301", + "x-enum-descriptions": { + "301": "Permanent", + "302": "Temporary" + } + }, + "redirect_url": { + "description": "URL domain is forwarded to", + "type": "string", + "example": "https://forward.to.my.url" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z", + "nullable": true + } + }, + "type": "object" + }, + "Domains.V1.WHOIS.ProfileCollection": { + "description": "Array of [`Domains.V1.WHOIS.ProfileResource`](#model/domainsv1whoisprofileresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Domains.V1.WHOIS.ProfileResource" + } + }, + "Domains.V1.WHOIS.ProfileResource": { + "properties": { + "id": { + "description": "WHOIS Profile ID", + "type": "integer", + "example": 746263 + }, + "tld": { + "description": "TLD to which contact profile can be applied to", + "type": "string", + "example": "com" + }, + "country": { + "description": "ISO 3166 2-letter country code", + "type": "string", + "example": "NL" + }, + "entity_type": { + "description": "WHOIS profile entity type", + "type": "string", + "enum": [ + "individual", + "organization" + ], + "example": "individual" + }, + "whois_details": { + "description": "WHOIS profile details", + "type": "object", + "example": { + "first_name": "John", + "last_name": "Doe", + "email": "john@doe.tld" + } + }, + "tld_details": { + "description": "TLD details", + "type": "object" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-19T11:54:22Z" + } + }, + "type": "object" + }, + "Domains.V1.WHOIS.ProfileUsageResource": { + "description": "Array of domains", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "mydomain1.tld", + "mydomain2.tld" + ] + }, + "Hosting.V1.Datacenter.CoordinatesResource": { + "properties": { + "latitude": { + "description": "Latitude coordinate", + "type": "number", + "format": "float", + "example": 51.5074 + }, + "longitude": { + "description": "Longitude coordinate", + "type": "number", + "format": "float", + "example": 0.1278 + } + }, + "type": "object" + }, + "Hosting.V1.Datacenter.DatacenterCollection": { + "description": "Array of [`Hosting.V1.Datacenter.DatacenterResource`](#model/hostingv1datacenterdatacenterresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Hosting.V1.Datacenter.DatacenterResource" + } + }, + "Hosting.V1.Datacenter.DatacenterResource": { + "properties": { + "title": { + "description": "Data center title", + "type": "string", + "example": "Europe (UK)" + }, + "code": { + "description": "Data center code", + "type": "string", + "example": "uk-fast" + }, + "coordinates": { + "$ref": "#/components/schemas/Hosting.V1.Datacenter.CoordinatesResource" + } + }, + "type": "object" + }, + "Hosting.V1.Domains.DomainAccessResource": { + "properties": { + "domain": { + "description": "Domain name", + "type": "string", + "example": "example.com" + }, + "is_accessible": { + "description": "Whether domain is accessible", + "type": "boolean", + "example": false + }, + "txt_to_verify": { + "description": "TXT record for verification", + "type": "string", + "example": "example.com=example-verification-code" + } + }, + "type": "object" + }, + "Hosting.V1.Domains.FreeSubdomainResource": { + "properties": { + "domain": { + "description": "Generated free subdomain", + "type": "string", + "example": "palegreen-fox-548498.hostingersite.com" + } + }, + "type": "object" + }, + "Hosting.V1.NodeJs.BuildOptionsResource": { + "required": [ + "node_version", + "app_type", + "root_directory", + "output_directory", + "build_script", + "entry_file", + "package_manager", + "source_type", + "source_options" + ], + "properties": { + "node_version": { + "description": "Node.js version", + "type": "integer", + "example": 24 + }, + "app_type": { + "description": "Node.js application type", + "type": "string", + "enum": [ + "create-react-app", + "vite", + "angular", + "react", + "vue", + "parcel" + ], + "example": "vite", + "nullable": true + }, + "root_directory": { + "description": "Application root directory", + "type": "string", + "example": "src", + "nullable": true + }, + "output_directory": { + "description": "Build output directory", + "type": "string", + "example": "dist", + "nullable": true + }, + "build_script": { + "description": "The npm script to run to build the application", + "type": "string", + "example": "build", + "nullable": true + }, + "entry_file": { + "description": "The main entry point file for the application", + "type": "string", + "example": "server.js", + "nullable": true + }, + "package_manager": { + "description": "Package manager", + "type": "string", + "enum": [ + "npm", + "yarn", + "pnpm" + ], + "example": "npm", + "nullable": true + }, + "source_type": { + "description": "Source type for the build", + "type": "string", + "enum": [ + "archive" + ], + "example": "archive", + "nullable": true + }, + "source_options": { + "oneOf": [ + { + "$ref": "#/components/schemas/Hosting.V1.NodeJs.SourceOptionsResource" + } + ], + "nullable": true, + "description": "Source options, varies based on sourceType" + } + }, + "type": "object" + }, + "Hosting.V1.NodeJs.SourceOptionsResource": { + "properties": { + "archive_path": { + "description": "Present if sourceType is \"archive\"", + "type": "string", + "example": "archive.zip", + "nullable": true + } + }, + "type": "object" + }, + "Hosting.V1.Orders.OrderCollection": { + "description": "Array of [`Hosting.V1.Orders.OrderResource`](#model/hostingv1ordersorderresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Hosting.V1.Orders.OrderResource" + } + }, + "Hosting.V1.Orders.OrderResource": { + "properties": { + "id": { + "description": "Order ID", + "type": "integer", + "example": 12345 + }, + "client_id": { + "description": "Client ID", + "type": "integer", + "example": 67890 + }, + "subscription_id": { + "description": "Subscription ID", + "type": "string", + "example": "sub_abc123", + "nullable": true + }, + "created_at": { + "description": "Creation date", + "type": "string", + "format": "date-time", + "example": "2023-10-08T12:00:00+00:00" + }, + "plan": { + "$ref": "#/components/schemas/Hosting.V1.Orders.PlanResource" + }, + "status": { + "description": "Order status", + "type": "string", + "example": "active" + } + }, + "type": "object" + }, + "Hosting.V1.Orders.PlanResource": { + "properties": { + "name": { + "description": "Plan name", + "type": "string", + "example": "hostinger_business" + } + }, + "type": "object" + }, + "Hosting.V1.Websites.WebsiteCollection": { + "description": "Array of [`Hosting.V1.Websites.WebsiteResource`](#model/hostingv1websiteswebsiteresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Hosting.V1.Websites.WebsiteResource" + } + }, + "Hosting.V1.Websites.WebsiteResource": { + "properties": { + "domain": { + "description": "Website domain", + "type": "string", + "example": "example.com" + }, + "vhost_type": { + "description": "Virtual host type", + "type": "string", + "enum": [ + "main", + "addon", + "parked", + "subdomain" + ], + "example": "main" + }, + "is_enabled": { + "description": "Whether website is enabled", + "type": "boolean", + "example": true + }, + "username": { + "description": "Username", + "type": "string", + "example": "cl_user123" + }, + "client_id": { + "description": "Client ID", + "type": "integer", + "example": 67890 + }, + "order_id": { + "description": "Order ID", + "type": "integer", + "example": 12345 + }, + "created_at": { + "description": "Creation date", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:00+00:00" + }, + "root_directory": { + "description": "Root directory path", + "type": "string", + "example": "/home/u123456798/domains/example.com/public_html" + }, + "parent_domain": { + "description": "Parent domain", + "type": "string", + "example": "parent.com", + "nullable": true + } + }, + "type": "object" + }, + "Reach.V1.Contacts.ContactCollection": { + "description": "Array of [`Reach.V1.Contacts.ContactResource`](#model/reachv1contactscontactresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Reach.V1.Contacts.ContactResource" + } + }, + "Reach.V1.Contacts.ContactResource": { + "properties": { + "uuid": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "name": { + "type": "string", + "example": "John", + "nullable": true + }, + "surname": { + "type": "string", + "example": "Doe", + "nullable": true + }, + "email": { + "type": "string", + "example": "john.doe@example.com" + }, + "subscription_status": { + "type": "string", + "enum": [ + "subscribed", + "unsubscribed" + ], + "example": "subscribed" + }, + "subscribed_at": { + "type": "string", + "format": "date-time", + "example": "2023-01-01T00:00:00Z" + }, + "source": { + "type": "string", + "enum": [ + "sync", + "import", + "manual" + ], + "example": "sync", + "nullable": true + }, + "note": { + "type": "string", + "maxLength": 75, + "example": "VIP customer", + "nullable": true + } + }, + "type": "object" + }, + "Reach.V1.Contacts.Groups.ContactGroupCollection": { + "description": "Array of [`Reach.V1.Contacts.Groups.ContactGroupResource`](#model/reachv1contactsgroupscontactgroupresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Groups.ContactGroupResource" + } + }, + "Reach.V1.Contacts.Groups.ContactGroupResource": { + "properties": { + "uuid": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "title": { + "type": "string", + "example": "Newsletter Subscribers" + } + }, + "type": "object" + }, + "Reach.V1.Contacts.Segments.ContactSegmentCollection": { + "description": "Array of [`Reach.V1.Contacts.Segments.ContactSegmentResource`](#model/reachv1contactssegmentscontactsegmentresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.ContactSegmentResource" + } + }, + "Reach.V1.Contacts.Segments.ContactSegmentResource": { + "properties": { + "uuid": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "name": { + "type": "string", + "example": "Newsletter Subscribers" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + } + }, + "type": "object" + }, + "Reach.V1.Contacts.Segments.SegmentResource": { + "properties": { + "uuid": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "name": { + "type": "string", + "example": "Segment name" + }, + "query": { + "type": "array", + "items": {}, + "example": { + "conditions": [ + { + "attribute": "email", + "operator": "contains", + "value": "example.com" + } + ], + "logic": "and" + } + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + } + }, + "type": "object" + }, + "Reach.V1.Contacts.Segments.SegmentationContactCollection": { + "description": "Array of [`Reach.V1.Contacts.Segments.SegmentationContactResource`](#model/reachv1contactssegmentssegmentationcontactresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Reach.V1.Contacts.Segments.SegmentationContactResource" + } + }, + "Reach.V1.Contacts.Segments.SegmentationContactResource": { + "properties": { + "uuid": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "name": { + "type": "string", + "example": "John", + "nullable": true + }, + "surname": { + "type": "string", + "example": "Doe", + "nullable": true + }, + "email": { + "type": "string", + "example": "john.doe@example.com" + }, + "subscription_status": { + "type": "string", + "enum": [ + "subscribed", + "unsubscribed" + ], + "example": "subscribed" + }, + "subscribed_at": { + "type": "string", + "format": "date-time", + "example": "2023-01-01T00:00:00Z" + }, + "source": { + "type": "string", + "enum": [ + "sync", + "import", + "manual" + ], + "example": "sync", + "nullable": true + }, + "note": { + "type": "string", + "maxLength": 75, + "example": "VIP customer", + "nullable": true + } + }, + "type": "object" + }, + "Reach.V1.Profiles.ProfileCollection": { + "description": "Array of [`Reach.V1.Profiles.ProfileResource`](#model/reachv1profilesprofileresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/Reach.V1.Profiles.ProfileResource" + } + }, + "Reach.V1.Profiles.ProfileResource": { + "properties": { + "limits": { + "properties": { + "ai_messages_limit": { + "type": "integer", + "example": 10 + }, + "subscribers_limit": { + "type": "integer", + "example": 500 + }, + "emails_monthly_limit": { + "type": "integer", + "example": 3500 + }, + "ai_messages_additional": { + "type": "integer", + "example": 1096 + } + }, + "type": "object" + }, + "is_trial": { + "type": "boolean", + "example": false + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2027-10-21T05:38:23.000000Z" + }, + "resource_id": { + "type": "integer", + "example": 44340307 + }, + "status": { + "type": "string", + "example": "active" + }, + "profiles": { + "type": "array", + "items": { + "properties": { + "uuid": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "domain": { + "type": "string", + "example": "example.com" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2026-01-21T07:35:04.000000Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2026-01-21T07:35:04.000000Z" + } + }, + "type": "object" + } + } + }, + "type": "object" + }, + "VPS.V1.Action.ActionCollection": { + "description": "Array of [`VPS.V1.Action.ActionResource`](#model/vpsv1actionactionresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.Action.ActionResource" + } + }, + "VPS.V1.Action.ActionResource": { + "properties": { + "id": { + "description": "Action ID", + "type": "integer", + "example": 8123712 + }, + "name": { + "description": "Action name", + "type": "string", + "example": "action_name" + }, + "state": { + "description": "Action state", + "type": "string", + "enum": [ + "success", + "error", + "delayed", + "sent", + "created" + ], + "example": "success", + "x-enum-descriptions": { + "success": "Action was successful", + "error": "Action failed", + "delayed": "Action is delayed", + "sent": "Action was sent", + "created": "Action was created" + } + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:00Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:58:00Z" + } + }, + "type": "object" + }, + "VPS.V1.Backup.BackupCollection": { + "description": "Array of [`VPS.V1.Backup.BackupResource`](#model/vpsv1backupbackupresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.Backup.BackupResource" + } + }, + "VPS.V1.Backup.BackupResource": { + "properties": { + "id": { + "description": "Backup ID", + "type": "integer", + "example": 325 + }, + "size": { + "description": "Backup size in kilobytes", + "type": "integer", + "example": 15240192 + }, + "restore_time": { + "description": "Estimated backup restore time in seconds", + "type": "integer", + "example": 3600 + }, + "location": { + "description": "Location of the backup", + "type": "string", + "example": "nl-srv-nodebackups" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + } + }, + "type": "object" + }, + "VPS.V1.DataCenter.DataCenterCollection": { + "description": "Array of [`VPS.V1.DataCenter.DataCenterResource`](#model/vpsv1datacenterdatacenterresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.DataCenter.DataCenterResource" + } + }, + "VPS.V1.DataCenter.DataCenterResource": { + "properties": { + "id": { + "description": "Data center ID", + "type": "integer", + "example": 29 + }, + "name": { + "description": "Data center name", + "type": "string", + "example": "phx", + "nullable": true + }, + "location": { + "description": "Data center location country (two letter code)", + "type": "string", + "example": "us", + "nullable": true + }, + "city": { + "description": "Data center location city", + "type": "string", + "example": "Phoenix", + "nullable": true + }, + "continent": { + "description": "Data center location continent", + "type": "string", + "example": "North America", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.ContainerCollection": { + "description": "Array of [`VPS.V1.DockerManager.ContainerResource`](#model/vpsv1dockermanagercontainerresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContainerResource" + } + }, + "VPS.V1.DockerManager.ContainerPortCollection": { + "description": "Array of [`VPS.V1.DockerManager.ContainerPortResource`](#model/vpsv1dockermanagercontainerportresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContainerPortResource" + } + }, + "VPS.V1.DockerManager.ContainerPortResource": { + "properties": { + "type": { + "description": "Port mapping type - published (accessible from host), exposed (only internal), or range variants", + "type": "string", + "enum": [ + "published", + "published_range", + "exposed", + "exposed_range" + ], + "example": "published", + "x-enum-descriptions": { + "published": "\n A single port mapped from the host to the container (e.g., host:8080 -> container:80)\n ", + "published_range": "\n A range of ports mapped from the host to the container\n (e.g., host:8000-8010 -> container:3000-3010)\n ", + "exposed": "\n A single port made available for inter-container communication within Docker networks\n ", + "exposed_range": "\n A range of ports made available for inter-container communication within Docker networks\n " + } + }, + "protocol": { + "description": "Network protocol used for communication", + "type": "string", + "enum": [ + "tcp", + "udp" + ], + "example": "tcp" + }, + "host_ip": { + "description": "IP address on host where port is bound (null for exposed-only ports)", + "type": "string", + "example": "0.0.0.0", + "nullable": true + }, + "host_port": { + "description": "Port number on host machine (null for exposed-only or range ports)", + "type": "integer", + "example": 8080, + "nullable": true + }, + "container_port": { + "description": "Port number inside container (null for range ports)", + "type": "integer", + "example": 80, + "nullable": true + }, + "host_port_start": { + "description": "Starting port number in host port range (null for single ports)", + "type": "integer", + "nullable": true + }, + "host_port_end": { + "description": "Ending port number in host port range (null for single ports)", + "type": "integer", + "nullable": true + }, + "container_port_start": { + "description": "Starting port number in container port range (null for single ports)", + "type": "integer", + "nullable": true + }, + "container_port_end": { + "description": "Ending port number in container port range (null for single ports)", + "type": "integer", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.ContainerResource": { + "properties": { + "id": { + "description": "Unique container identifier (short form of Docker container ID)", + "type": "string", + "example": "bbd4c89e850d" + }, + "name": { + "description": "Container name as defined in docker-compose or assigned by Docker", + "type": "string", + "example": "nginx" + }, + "image": { + "description": "Docker image name and tag used to create this container", + "type": "string", + "example": "nginx:latest" + }, + "command": { + "description": "Command being executed inside the container (may be truncated with ...)", + "type": "string", + "example": "/docker-entrypoint.sh nginx -g daemon off;" + }, + "status": { + "description": "Human-readable container status including uptime, exit codes, or error information", + "type": "string", + "example": "Up 4 hours" + }, + "state": { + "description": "Programmatic container lifecycle state for automated processing", + "type": "string", + "enum": [ + "created", + "running", + "restarting", + "exited", + "paused", + "dead", + "stopping" + ], + "example": "running", + "x-enum-descriptions": { + "created": "Container has been created but never started", + "running": "Container is actively running and performing its tasks", + "restarting": "Container is in the process of being restarted", + "exited": "Container ran and completed/stopped", + "paused": "\n Container's processes have been paused, but container is still allocated\n ", + "dead": "\n Container that the daemon tried and failed to stop\n (usually due to the busy device or resource used by the container)\n ", + "stopping": "Container is in the process of being stopped" + } + }, + "health": { + "description": "Container health status", + "type": "string", + "enum": [ + "starting", + "healthy", + "unhealthy", + "" + ], + "example": "healthy", + "x-enum-descriptions": { + "": "\n No health check is configured for the container\n (this is the default when no HEALTHCHECK is defined)\n ", + "healthy": "\n The container has passed its health checks and is operating normally\n ", + "unhealthy": "\n The container has failed its health checks (exceeded the failure threshold)\n ", + "starting": "\n The container is still within its startup period (health checks are running but\n haven't passed the required number of consecutive checks yet)\n " + } + }, + "ports": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContainerPortCollection" + }, + "stats": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContainerStatsResource" + } + ], + "nullable": true, + "description": "Real-time resource usage statistics (only available for running containers)" + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.ContainerStatsResource": { + "properties": { + "cpu_percentage": { + "description": "CPU usage in percentage", + "type": "number", + "format": "float", + "example": 15.4 + }, + "memory_percentage": { + "description": "Memory usage in percentage", + "type": "number", + "format": "float", + "example": 0.4 + }, + "memory_used": { + "description": "Used memory in bytes", + "type": "number", + "format": "float", + "example": 66532147.2 + }, + "memory_total": { + "description": "Total available memory in bytes", + "type": "number", + "format": "float", + "example": 16771847290.88 + }, + "net_in": { + "description": "Inbound network traffic in bytes", + "type": "integer", + "example": 2110000 + }, + "net_out": { + "description": "Outbound network traffic in bytes", + "type": "integer", + "example": 30100 + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.ContentResource": { + "properties": { + "content": { + "description": "Contents of docker-compose file", + "type": "string", + "example": "services:\n my-app:\n image: nginx\n ports:\n - \"80:80\"\n my-db:\n image: mysql" + }, + "environment": { + "description": "Project environment variables", + "type": "string", + "example": "VARIABLE1=value1\nVARIABLE2=value2", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.LogEntryCollection": { + "description": "Array of [`VPS.V1.DockerManager.LogEntryResource`](#model/vpsv1dockermanagerlogentryresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.LogEntryResource" + } + }, + "VPS.V1.DockerManager.LogEntryResource": { + "properties": { + "timestamp": { + "description": "ISO 8601 formatted timestamp when the log entry was generated by the container", + "type": "string", + "example": "2024-01-15T10:30:45.123456Z" + }, + "line": { + "description": "Raw log message content as output by the application inside the container", + "type": "string", + "example": "127.0.0.1 - - [15/Jan/2024:10:30:45 +0000] \"GET / HTTP/1.1\" 200 612" + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.LogsCollection": { + "description": "Array of [`VPS.V1.DockerManager.LogsResource`](#model/vpsv1dockermanagerlogsresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.LogsResource" + } + }, + "VPS.V1.DockerManager.LogsResource": { + "properties": { + "service": { + "description": "Name of the Docker Compose service that generated these log entries", + "type": "string", + "example": "web" + }, + "entries": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.LogEntryCollection" + } + }, + "type": "object" + }, + "VPS.V1.DockerManager.ProjectCollection": { + "description": "Array of [`VPS.V1.DockerManager.ProjectResource`](#model/vpsv1dockermanagerprojectresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ProjectResource" + } + }, + "VPS.V1.DockerManager.ProjectResource": { + "properties": { + "name": { + "description": "Docker Compose project name (derived from directory name or compose file)", + "type": "string", + "example": "my-project" + }, + "status": { + "description": "Raw output from docker compose ps command showing service count and states", + "type": "string", + "example": "running(2)" + }, + "state": { + "description": "Derived project state parsed from the raw docker compose status", + "type": "string", + "enum": [ + "running", + "stopped", + "created", + "mixed", + "unknown" + ], + "example": "running", + "x-enum-descriptions": { + "running": "Project is running and all services are healthy", + "stopped": "Project is not running and all services are stopped", + "created": "Project is created and not built yet, services are not running", + "mixed": "Project is running with some services not healthy or not running", + "unknown": "Could not determine the state of the project" + } + }, + "path": { + "description": "Full filesystem path to the docker-compose.yml file", + "type": "string", + "example": "/docker/my-project/docker-compose.yaml" + }, + "containers": { + "$ref": "#/components/schemas/VPS.V1.DockerManager.ContainerCollection" + } + }, + "type": "object" + }, + "VPS.V1.Firewall.FirewallCollection": { + "description": "Array of [`VPS.V1.Firewall.FirewallResource`](#model/vpsv1firewallfirewallresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallResource" + } + }, + "VPS.V1.Firewall.FirewallResource": { + "properties": { + "id": { + "description": "Firewall ID", + "type": "integer", + "example": 65224 + }, + "name": { + "description": "Firewall name", + "type": "string", + "example": "HTTP and SSH only" + }, + "is_synced": { + "description": "Is current firewall synced with VPS", + "type": "boolean", + "example": false + }, + "rules": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallRuleCollection" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2021-09-01T12:00:00Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2021-09-01T12:00:00Z" + } + }, + "type": "object" + }, + "VPS.V1.Firewall.FirewallRuleCollection": { + "description": "Array of [`VPS.V1.Firewall.FirewallRuleResource`](#model/vpsv1firewallfirewallruleresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.Firewall.FirewallRuleResource" + } + }, + "VPS.V1.Firewall.FirewallRuleResource": { + "properties": { + "id": { + "description": "Firewall rule ID", + "type": "integer", + "example": 24541 + }, + "action": { + "description": "Firewall rule action", + "type": "string", + "enum": [ + "accept", + "drop" + ], + "example": "accept" + }, + "protocol": { + "description": "Firewall rule protocol", + "type": "string", + "enum": [ + "TCP", + "UDP", + "ICMP", + "GRE", + "any", + "ESP", + "AH", + "ICMPv6", + "SSH", + "HTTP", + "HTTPS", + "MySQL", + "PostgreSQL" + ], + "example": "TCP" + }, + "port": { + "description": "Firewall rule destination port: single or port range", + "type": "string", + "example": "1024:2048" + }, + "source": { + "description": "Firewall rule source. Can be `any` or `custom`", + "type": "string", + "example": "any" + }, + "source_detail": { + "description": "Firewall rule source detail. Can be `any` or IP address, CIDR or range", + "type": "string", + "example": "any" + } + }, + "type": "object" + }, + "VPS.V1.IPAddress.IPAddressCollection": { + "description": "Array of [`VPS.V1.IPAddress.IPAddressResource`](#model/vpsv1ipaddressipaddressresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.IPAddress.IPAddressResource" + } + }, + "VPS.V1.IPAddress.IPAddressResource": { + "properties": { + "id": { + "description": "IP address ID", + "type": "integer", + "example": 52347 + }, + "address": { + "description": "IP address: IPv4 or IPv6", + "type": "string", + "example": "213.331.273.15" + }, + "ptr": { + "description": "IP address PTR record", + "type": "string", + "example": "something.domain.tld", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.Malware.MetricsResource": { + "properties": { + "records": { + "description": "Records found during last scan", + "type": "integer", + "example": 1 + }, + "malicious": { + "description": "Malicious files found during last scan", + "type": "integer", + "example": 2 + }, + "compromised": { + "description": "Compromised files found during last scan", + "type": "integer", + "example": 3 + }, + "scanned_files": { + "description": "Total number of files scanned during last scan", + "type": "integer", + "example": 193218 + }, + "scan_started_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "scan_ended_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-27T11:54:22Z", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.Metrics.MetricsCollection": { + "properties": { + "cpu_usage": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsResource" + } + ], + "nullable": true, + "description": "CPU usage in percentage, 0 - 100%", + "type": "object", + "example": { + "unit": "%", + "usage": { + "1742269632": 1.45 + } + } + }, + "ram_usage": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsResource" + } + ], + "nullable": true, + "description": "RAM usage in bytes", + "type": "object", + "example": { + "unit": "bytes", + "usage": { + "1742269632": 554176512 + } + } + }, + "disk_space": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsResource" + } + ], + "nullable": true, + "description": "Disk space usage in bytes", + "type": "object", + "example": { + "unit": "bytes", + "usage": { + "1742269632": 2620018688 + } + } + }, + "outgoing_traffic": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsResource" + } + ], + "nullable": true, + "description": "Outgoing traffic in bytes", + "type": "object", + "example": { + "unit": "bytes", + "usage": { + "1742269632": 784800 + } + } + }, + "incoming_traffic": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsResource" + } + ], + "nullable": true, + "description": "Incoming traffic in bytes", + "type": "object", + "example": { + "unit": "bytes", + "usage": { + "1742269632": 8978400 + } + } + }, + "uptime": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Metrics.MetricsResource" + } + ], + "nullable": true, + "description": "Uptime in milliseconds", + "type": "object", + "example": { + "unit": "milliseconds", + "usage": { + "1742269632": 455248 + } + } + } + }, + "type": "object" + }, + "VPS.V1.Metrics.MetricsResource": { + "properties": { + "unit": { + "description": "Measurement unit", + "type": "string", + "example": "measurement-unit" + }, + "usage": { + "description": "Object, containing UNIX timestamps as a key and measurement as a value.", + "type": "object", + "example": { + "timestamp": 123 + } + } + }, + "type": "object" + }, + "VPS.V1.PostInstallScript.PostInstallScriptCollection": { + "description": "Array of [`VPS.V1.PostInstallScript.PostInstallScriptResource`](#model/vpsv1postinstallscriptpostinstallscriptresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.PostInstallScript.PostInstallScriptResource" + } + }, + "VPS.V1.PostInstallScript.PostInstallScriptResource": { + "properties": { + "id": { + "description": "Post-install script ID", + "type": "integer", + "example": 325 + }, + "name": { + "description": "Name of the script", + "type": "string", + "example": "My Setup Script" + }, + "content": { + "description": "Content of the script", + "type": "string", + "example": "#!/bin/bash\\napt-get update\\napt-get install -y nginx" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-19T11:54:22Z" + } + }, + "type": "object" + }, + "VPS.V1.PublicKey.PublicKeyCollection": { + "description": "Array of [`VPS.V1.PublicKey.PublicKeyResource`](#model/vpsv1publickeypublickeyresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.PublicKey.PublicKeyResource" + } + }, + "VPS.V1.PublicKey.PublicKeyResource": { + "properties": { + "id": { + "description": "Public key ID", + "type": "integer", + "example": 325 + }, + "name": { + "description": "Public key name", + "type": "string", + "example": "My public key" + }, + "key": { + "description": "Public key content", + "type": "string", + "example": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..." + } + }, + "type": "object" + }, + "VPS.V1.Snapshot.SnapshotResource": { + "properties": { + "id": { + "description": "Snapshot ID", + "type": "integer", + "example": 325 + }, + "restore_time": { + "description": "Estimated snapshot restore time in seconds", + "type": "integer", + "example": 1800 + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2025-02-27T11:54:22Z" + }, + "expires_at": { + "type": "string", + "format": "date-time", + "example": "2025-03-19T11:54:22Z" + } + }, + "type": "object" + }, + "VPS.V1.Template.TemplateCollection": { + "description": "Array of [`VPS.V1.Template.TemplateResource`](#model/vpsv1templatetemplateresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.Template.TemplateResource" + } + }, + "VPS.V1.Template.TemplateResource": { + "properties": { + "id": { + "description": "Template ID", + "type": "integer", + "example": 6523 + }, + "name": { + "description": "Template name", + "type": "string", + "example": "Ubuntu 20.04 LTS" + }, + "description": { + "description": "Template description", + "type": "string", + "example": "Ubuntu 20.04 LTS" + }, + "documentation": { + "description": "Link to official OS documentation", + "type": "string", + "example": "https://docs.ubuntu.com", + "nullable": true + } + }, + "type": "object" + }, + "VPS.V1.VirtualMachine.VirtualMachineCollection": { + "description": "Array of [`VPS.V1.VirtualMachine.VirtualMachineResource`](#model/vpsv1virtualmachinevirtualmachineresource)", + "type": "array", + "items": { + "$ref": "#/components/schemas/VPS.V1.VirtualMachine.VirtualMachineResource" + } + }, + "VPS.V1.VirtualMachine.VirtualMachineResource": { + "properties": { + "id": { + "description": "Virtual machine ID", + "type": "integer", + "example": 17923 + }, + "firewall_group_id": { + "description": "Active firewall ID, `null` if disabled", + "type": "integer", + "example": null, + "nullable": true + }, + "subscription_id": { + "description": "Subscription ID", + "type": "string", + "example": "Azz353Uhl1xC54pR0", + "nullable": true + }, + "data_center_id": { + "description": "Data center ID", + "type": "integer", + "example": 521, + "nullable": true + }, + "plan": { + "description": "VPS plan name", + "type": "string", + "example": "KVM 4", + "nullable": true + }, + "hostname": { + "type": "string", + "example": "srv17923.hstgr.cloud" + }, + "state": { + "type": "string", + "enum": [ + "running", + "starting", + "stopping", + "stopped", + "creating", + "initial", + "error", + "suspending", + "unsuspending", + "suspended", + "destroying", + "destroyed", + "recreating", + "restoring", + "recovery", + "stopping_recovery" + ], + "example": "running" + }, + "actions_lock": { + "type": "string", + "enum": [ + "unlocked", + "locked" + ], + "example": "unlocked" + }, + "cpus": { + "description": "CPUs count assigned to virtual machine", + "type": "integer", + "example": 4 + }, + "memory": { + "description": "Memory available to virtual machine (in megabytes)", + "type": "integer", + "example": 8192 + }, + "disk": { + "description": "Virtual machine disk size (in megabytes)", + "type": "integer", + "example": 51200 + }, + "bandwidth": { + "description": "Monthly internet traffic available to virtual machine (in megabytes)", + "type": "integer", + "example": 1073741824 + }, + "ns1": { + "description": "Primary DNS resolver", + "type": "string", + "example": "1.1.1.1", + "nullable": true + }, + "ns2": { + "description": "Secondary DNS resolver", + "type": "string", + "example": "8.8.8.8", + "nullable": true + }, + "ipv4": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.IPAddress.IPAddressCollection" + } + ], + "nullable": true, + "description": "IPv4 address of virtual machine" + }, + "ipv6": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.IPAddress.IPAddressCollection" + } + ], + "nullable": true, + "description": "IPv6 address of virtual machine, `null` if not assigned" + }, + "template": { + "oneOf": [ + { + "$ref": "#/components/schemas/VPS.V1.Template.TemplateResource" + } + ], + "nullable": true, + "description": "OS template installed in virtual machine" + }, + "created_at": { + "type": "string", + "format": "date-time", + "example": "2024-09-05T07:25:36.00000Z" + } + }, + "type": "object" + } + }, + "responses": { + "Common.Response.ErrorResponse": { + "description": "Error response", + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "Message of the error", + "type": "string", + "example": "Error message" + }, + "correlation_id": { + "description": "Request correlation ID", + "type": "string", + "example": "26a91bd9-f8c8-4a83-9df9-83e23d696fe3" + } + }, + "type": "object" + } + } + }, + "x-scalar-ignore": true + }, + "Common.Response.UnauthorizedResponse": { + "description": "Unauthenticated response", + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "Message of the error", + "type": "string", + "example": "Unauthenticated" + }, + "correlation_id": { + "description": "Request correlation ID", + "type": "string", + "example": "26a91bd9-f8c8-4a83-9df9-83e23d696fe3" + } + }, + "type": "object" + } + } + }, + "x-scalar-ignore": true + }, + "Common.Response.UnprocessableContentResponse": { + "description": "Validation error response", + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "description": "Validation error message", + "type": "string", + "example": "The name field is required. (and 1 more error)" + }, + "errors": { + "description": "Object of detailed errors for each field", + "properties": { + "field_1": { + "type": "array", + "items": {}, + "example": [ + "The field_1 field is required.", + "The field_1 must be a number." + ] + }, + "field_2": { + "type": "array", + "items": {}, + "example": [ + "The field_2 field is required.", + "The field_2 must be a string." + ] + } + }, + "type": "object" + }, + "correlation_id": { + "description": "Request correlation ID", + "type": "string", + "example": "26a91bd9-f8c8-4a83-9df9-83e23d696fe3" + } + }, + "type": "object" + } + } + }, + "x-scalar-ignore": true + } + }, + "parameters": { + "category": { + "name": "category", + "in": "query", + "description": "Filter catalog items by category", + "schema": { + "type": "string", + "enum": [ + "DOMAIN", + "VPS" + ], + "example": "VPS" + } + }, + "name": { + "name": "name", + "in": "query", + "description": "Filter catalog items by name. Use `*` for wildcard search, e.g. `.COM*` to find .com domain", + "schema": { + "type": "string", + "example": ".COM*" + } + }, + "paymentMethodId": { + "name": "paymentMethodId", + "in": "path", + "description": "Payment method ID", + "required": true, + "schema": { + "type": "integer", + "example": 9693613 + } + }, + "subscriptionId": { + "name": "subscriptionId", + "in": "path", + "description": "Subscription ID", + "required": true, + "schema": { + "type": "string", + "example": "Cxy353Uhl1xC54pG6" + } + }, + "domain": { + "name": "domain", + "in": "path", + "description": "Domain name", + "required": true, + "schema": { + "type": "string", + "example": "mydomain.tld" + } + }, + "page": { + "name": "page", + "in": "query", + "description": "Page number", + "required": false, + "schema": { + "type": "integer", + "example": 1 + } + }, + "per_page": { + "name": "per_page", + "in": "query", + "description": "Number of items per page", + "required": false, + "schema": { + "type": "integer", + "default": 25, + "maximum": 100, + "example": 25 + } + }, + "snapshotId": { + "name": "snapshotId", + "in": "path", + "description": "Snapshot ID", + "required": true, + "schema": { + "type": "integer", + "example": 53513053 + } + }, + "tld": { + "name": "tld", + "in": "query", + "description": "Filter by TLD (without leading dot)", + "schema": { + "type": "string", + "example": "com" + } + }, + "whoisId": { + "name": "whoisId", + "in": "path", + "description": "WHOIS ID", + "required": true, + "schema": { + "type": "integer", + "example": 564651 + } + }, + "build_uuid_path": { + "name": "uuid", + "in": "path", + "description": "Build UUID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "123e4567-e89b-12d3-a456-426614174000" + } + }, + "directory": { + "name": "directory", + "in": "query", + "description": "Directory path to check", + "required": false, + "schema": { + "type": "string", + "default": "", + "example": "blog" + } + }, + "domain_filter": { + "name": "domain", + "in": "query", + "description": "Filter by domain name (exact match)", + "required": false, + "schema": { + "type": "string", + "example": "example.com", + "nullable": true + } + }, + "is_enabled": { + "name": "is_enabled", + "in": "query", + "description": "Filter by enabled status", + "required": false, + "schema": { + "type": "boolean", + "example": true, + "nullable": true + } + }, + "order_id": { + "name": "order_id", + "in": "query", + "description": "Order ID", + "required": false, + "schema": { + "type": "integer", + "example": 123, + "nullable": true + } + }, + "order_ids": { + "name": "order_ids", + "in": "query", + "description": "Filter by specific order IDs", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "integer" + }, + "example": [ + 12345, + 67890 + ], + "nullable": true + } + }, + "statuses": { + "name": "statuses", + "in": "query", + "description": "Filter by order statuses", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "active", + "deleting", + "deleted", + "suspended" + ] + }, + "example": [ + "active", + "suspended" + ], + "nullable": true + } + }, + "order_id_required": { + "name": "order_id", + "in": "query", + "description": "Order ID", + "required": true, + "schema": { + "type": "integer", + "example": 123, + "nullable": false + } + }, + "username": { + "name": "username", + "in": "query", + "description": "Filter by specific username", + "required": false, + "schema": { + "type": "string", + "example": "cl_user123", + "nullable": true + } + }, + "username_path": { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "u123456789" + } + }, + "uuid": { + "name": "uuid", + "in": "path", + "description": "UUID of the contact to delete", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + "group_uuid": { + "name": "group_uuid", + "in": "query", + "description": "Filter contacts by group UUID", + "required": false, + "schema": { + "type": "string", + "example": "550e8400-e29b-41d4-a716-446655440000" + } + }, + "profileUuid": { + "name": "profileUuid", + "in": "path", + "description": "Profile uuid parameter", + "required": true, + "schema": { + "type": "string", + "example": "550e8400-e09b-41d4-a716-400055000000" + } + }, + "segmentUuid": { + "name": "segmentUuid", + "in": "path", + "description": "Segment uuid parameter", + "required": true, + "schema": { + "type": "string", + "example": "550e8400-e09b-41d4-a716-400055000000" + } + }, + "subscription_status": { + "name": "subscription_status", + "in": "query", + "description": "Filter contacts by subscription status", + "required": false, + "schema": { + "type": "string", + "enum": [ + "subscribed", + "unsubscribed" + ], + "example": "subscribed" + } + }, + "tokenId": { + "name": "tokenId", + "in": "path", + "description": "Token ID", + "required": true, + "schema": { + "type": "integer", + "example": 6409747 + } + }, + "actionId": { + "name": "actionId", + "in": "path", + "description": "Action ID", + "required": true, + "schema": { + "type": "integer", + "example": 8123712 + } + }, + "backupId": { + "name": "backupId", + "in": "path", + "description": "Backup ID", + "required": true, + "schema": { + "type": "integer", + "example": 8676502 + } + }, + "projectName": { + "name": "projectName", + "in": "path", + "description": "Docker Compose project name using alphanumeric characters, dashes, and underscores only", + "required": true, + "schema": { + "type": "string", + "maxLength": 64, + "minLength": 3, + "example": "my-docker-project" + } + }, + "firewallId": { + "name": "firewallId", + "in": "path", + "description": "Firewall ID", + "required": true, + "schema": { + "type": "integer", + "example": 9449049 + } + }, + "ruleId": { + "name": "ruleId", + "in": "path", + "description": "Firewall Rule ID", + "required": true, + "schema": { + "type": "integer", + "example": 8941182 + } + }, + "ipAddressId": { + "name": "ipAddressId", + "in": "path", + "description": "IP Address ID", + "required": true, + "schema": { + "type": "integer", + "example": 246547 + } + }, + "postInstallScriptId": { + "name": "postInstallScriptId", + "in": "path", + "description": "Post-install script ID", + "required": true, + "schema": { + "type": "integer", + "example": 9568314 + } + }, + "publicKeyId": { + "name": "publicKeyId", + "in": "path", + "description": "Public Key ID", + "required": true, + "schema": { + "type": "integer", + "example": 6672861 + } + }, + "templateId": { + "name": "templateId", + "in": "path", + "description": "Template ID", + "required": true, + "schema": { + "type": "integer", + "example": 2868928 + } + }, + "virtualMachineId": { + "name": "virtualMachineId", + "in": "path", + "description": "Virtual Machine ID", + "required": true, + "schema": { + "type": "integer", + "example": 1268054 + } + } + }, + "securitySchemes": { + "apiToken": { + "type": "http", + "description": "API Token authentication", + "scheme": "bearer" + } + } + }, + "security": [ + { + "apiToken": [] + } + ], + "tags": [ + { + "name": "Billing: Catalog", + "description": "Access a comprehensive catalog of service plans and\nsubscription options, complete with detailed pricing\nand features.", + "x-displayName": "Catalog" + }, + { + "name": "Billing: Payment methods", + "description": "Review and manage the payment methods linked to your\nHostinger account. Enjoy a secure and convenient overview\nfor handling billing and transactions.", + "x-displayName": "Payment methods" + }, + { + "name": "Billing: Subscriptions", + "description": "Manage your account's subscriptions by retrieving lists of\nactive and expired plans along with details such as\nactivation and expiration dates.", + "x-displayName": "Subscriptions" + }, + { + "name": "DNS: Snapshot", + "description": "Manage DNS snapshots for your domains.\nThis category includes endpoints for viewing and restoring\nsnapshots of your domain DNS zone.\nSnapshot is a point-in-time copy of your DNS zone, allowing you\nto restore your domain's DNS settings to a previous state.", + "x-displayName": "Snapshot" + }, + { + "name": "DNS: Zone", + "description": "Manage DNS zones and records for your domains. This category\nincludes endpoints for retrieving, updating, deleting DNS zone\nand it's associated records.\nThe DNS zone will be created once you purchase new domain\nat Hostinger.", + "x-displayName": "Zone" + }, + { + "name": "Domain Access Verifier: Verifications", + "description": "Manage domain verifications.\nThis category includes endpoints for retrieving active domain\nverifications, including verification status, records, and\nattempt dates.\nDomain verification allows you to prove ownership of domains\nthrough nameserver or TXT record verification methods.", + "x-displayName": "Verifications" + }, + { + "name": "Domains: Availability", + "description": "Check the availability of domain names across multiple TLDs.\nThis category allows you to verify if a specific domain name\nis available for registration.", + "x-displayName": "Availability" + }, + { + "name": "Domains: Forwarding", + "description": "Domain forwarding or redirect is an easy way to direct your\nwebsite visitors to another site or page, making it simple to\nmaintain your brand and keep your visitors engaged.", + "x-displayName": "Forwarding" + }, + { + "name": "Domains: Portfolio", + "description": "Retrieve and manage your domain portfolio. This category lets\nyou list all domains linked to your account, including their\ncreation and expiration details.", + "x-displayName": "Portfolio" + }, + { + "name": "Domains: WHOIS", + "description": "Manage WHOIS contact profiles for your domains. This category\nincludes endpoints for creating, updating, deleting, and\nretrieving WHOIS profiles.\nWHOIS profile stores registration data for domain names and\nis required for domain registration.", + "x-displayName": "WHOIS" + }, + { + "name": "Hosting: Datacenters", + "description": "Access information about available datacenters for hosting\nservices. This category provides details about data center\nlocations and capabilities to help you choose the optimal\nregion for your hosting needs.", + "x-displayName": "Datacenters" + }, + { + "name": "Hosting: Domains", + "description": "Manage domain-related hosting services and configurations.\nThis category includes endpoints for domain management,\nverification, and domain-specific hosting features.", + "x-displayName": "Domains" + }, + { + "name": "Hosting: Files", + "description": "Hosting: Files", + "x-displayName": "Files" + }, + { + "name": "Hosting: NodeJS", + "description": "Hosting: NodeJS", + "x-displayName": "NodeJS" + }, + { + "name": "Hosting: Orders", + "description": "Manage hosting service orders and subscriptions. This\ncategory provides access to order information, status\ntracking, and order management capabilities for hosting\nservices.", + "x-displayName": "Orders" + }, + { + "name": "Hosting: Websites", + "description": "Manage hosted websites and web applications. This category\nincludes endpoints for website deployment, configuration,\nmonitoring, and management of hosting resources.", + "x-displayName": "Websites" + }, + { + "name": "Hosting: Wordpress", + "description": "Hosting: Wordpress", + "x-displayName": "Wordpress" + }, + { + "name": "Reach: Contacts", + "description": "Manage your email contacts and contact groups. This category\nincludes endpoints for creating, deleting, and listing\ncontacts, as well as managing contact groups.", + "x-displayName": "Contacts" + }, + { + "name": "Reach: Segments", + "description": "Filter and segment your email contacts using various\ncriteria. This category includes endpoints for filtering\ncontacts by attributes, tags, and email addresses, as well\nas listing all available segments and retrieving contacts\nthat match specific attribute conditions.", + "x-displayName": "Segments" + }, + { + "name": "Reach: Profiles", + "description": "Reach: Profiles", + "x-displayName": "Profiles" + }, + { + "name": "VPS: Data centers", + "description": "Access information on available data centers, including\nlocation details, so you can choose the optimal region for\ndeploying your virtual machines.", + "x-displayName": "Data centers" + }, + { + "name": "VPS: Docker Manager", + "description": "Manage Docker Compose projects directly on your VPS\ninstances. This feature is only available for VPS instances\nusing Docker OS templates and is currently experimental -\nbreaking changes may occur in future updates.\nIt enables you to programmatically deploy projects from\ndocker-compose.yml files by providing either a URL (including\nGitHub repositories) or the compose file contents directly.\nControl project lifecycle (start/stop/restart/update/delete)\nand retrieve runtime information including container lists,\nproject details, and aggregated logs.\nAll operations are scoped to a specific virtual machine for\nmulti-tenant management.", + "x-displayName": "Docker Manager" + }, + { + "name": "VPS: Firewall", + "description": "Enhance network security with endpoints for creating,\nactivating, deactivating, syncing, updating, and deleting\nfirewalls and firewall rules for your virtual machines.\nThis firewall applies rules at the network level, so it will\ntake precedence over the virtual machine's internal firewall.\n\n**Access to firewall requires having at least one virtual machine.**", + "x-displayName": "Firewall" + }, + { + "name": "VPS: Post-install scripts", + "description": "This category allows you to create, update, delete, and\nretrieve scripts that can be used for automated tasks after\nthe operating system installation. Use case includes setting\nup software, configuring settings, or running custom commands.", + "x-displayName": "Post-install scripts" + }, + { + "name": "VPS: Public Keys", + "description": "Manage SSH keys for secure access. This category covers\nadding new public keys, attaching them to virtual machines,\nretrieving key lists, and deleting keys.", + "x-displayName": "Public Keys" + }, + { + "name": "VPS: OS Templates", + "description": "Retrieve details of operating system templates or list all\navailable templates to choose the right configuration when\ndeploying or recreating virtual machines.", + "x-displayName": "OS Templates" + }, + { + "name": "VPS: Actions", + "description": "Track and review operations performed on your virtual\nmachines. These endpoints provide details about specific\nactions—such as start, stop, or restart—including\ntimestamps and statuses.", + "x-displayName": "Actions" + }, + { + "name": "VPS: Virtual machine", + "description": "Core virtual machine management functionality. Endpoints in\nthis category let you retrieve machine details, configure\nsettings (hostname, nameservers, passwords), and perform\noperations like start, stop, restart, or recreate.", + "x-displayName": "Virtual machine" + }, + { + "name": "VPS: Backups", + "description": "Safeguard your data by managing backups. You can list\navailable backups or restore a virtual machine from a backup.", + "x-displayName": "Backups" + }, + { + "name": "VPS: Malware scanner", + "description": "Monitor your virtual machines' security using the Monarx\nmalware scanner. Retrieve scan metrics or install/uninstall\nthe scanner to help protect against malware threats.", + "x-displayName": "Malware scanner" + }, + { + "name": "VPS: PTR records", + "description": "Manage reverse DNS settings by creating or deleting PTR\nrecords for your virtual machines, ensuring that IP addresses\ncorrectly resolve to hostnames.", + "x-displayName": "PTR records" + }, + { + "name": "VPS: Recovery", + "description": "Initiate or stop recovery mode to perform system rescue\noperations. This category enables you to boot a virtual\nmachine into a state suitable for repairing file systems\nor recovering data.", + "x-displayName": "Recovery" + }, + { + "name": "VPS: Snapshots", + "description": "Create, restore, or delete snapshots that capture the state\nof your virtual machines at a given point, allowing you to\nquickly recover or test changes without affecting current\noperations.", + "x-displayName": "Snapshots" + } + ], + "x-tagGroups": [ + { + "name": "Billing", + "tags": [ + "Billing: Catalog", + "Billing: Payment methods", + "Billing: Subscriptions" + ] + }, + { + "name": "Domains", + "tags": [ + "Domains: Availability", + "Domains: Forwarding", + "Domains: Portfolio", + "Domains: WHOIS" + ] + }, + { + "name": "DNS", + "tags": [ + "DNS: Snapshot", + "DNS: Zone" + ] + }, + { + "name": "Domain Access Verifier", + "tags": [ + "Domain Access Verifier: Verifications" + ] + }, + { + "name": "Hosting", + "tags": [ + "Hosting: Datacenters", + "Hosting: Domains", + "Hosting: Files", + "Hosting: NodeJS", + "Hosting: Orders", + "Hosting: Websites", + "Hosting: Wordpress" + ] + }, + { + "name": "Reach", + "tags": [ + "Reach: Contacts", + "Reach: Segments", + "Reach: Profiles" + ] + }, + { + "name": "VPS", + "tags": [ + "VPS: Actions", + "VPS: Backups", + "VPS: Data centers", + "VPS: Docker Manager", + "VPS: PTR records", + "VPS: Firewall", + "VPS: Malware scanner", + "VPS: OS Templates", + "VPS: Post-install scripts", + "VPS: Public Keys", + "VPS: Recovery", + "VPS: Snapshots", + "VPS: Virtual machine" + ] + }, + { + "name": "Miscellaneous", + "tags": [ + "Models" + ] + } + ] +} \ No newline at end of file diff --git a/apps/dokploy/.env.example b/apps/dokploy/.env.example index 8f801196e..835764dc9 100644 --- a/apps/dokploy/.env.example +++ b/apps/dokploy/.env.example @@ -1,3 +1,6 @@ DATABASE_URL="postgres://dokploy:amukds4wi9001583845717ad2@localhost:5432/dokploy" PORT=3000 NODE_ENV=development + +# Managed Servers (Dokploy Cloud only) — API token from https://hpanel.hostinger.com/profile/api +HOSTINGER_API_KEY= diff --git a/apps/dokploy/components/dashboard/settings/billing/show-billing-invoices.tsx b/apps/dokploy/components/dashboard/settings/billing/show-billing-invoices.tsx index 67c15ee63..fb48b49c0 100644 --- a/apps/dokploy/components/dashboard/settings/billing/show-billing-invoices.tsx +++ b/apps/dokploy/components/dashboard/settings/billing/show-billing-invoices.tsx @@ -1,4 +1,4 @@ -import { CreditCard, FileText } from "lucide-react"; +import { CreditCard, FileText, Server } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; import { @@ -17,6 +17,11 @@ const navigationItems = [ href: "/dashboard/settings/billing", icon: CreditCard, }, + { + name: "Managed Servers", + href: "/dashboard/settings/managed-servers", + icon: Server, + }, { name: "Invoices", href: "/dashboard/settings/invoices", diff --git a/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx b/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx index acfd241ff..f392780a5 100644 --- a/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx +++ b/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx @@ -9,6 +9,7 @@ import { Loader2, MinusIcon, PlusIcon, + Server, ShieldCheck, } from "lucide-react"; import Link from "next/link"; @@ -82,6 +83,11 @@ const navigationItems = [ href: "/dashboard/settings/billing", icon: CreditCard, }, + { + name: "Managed Servers", + href: "/dashboard/settings/managed-servers", + icon: Server, + }, { name: "Invoices", href: "/dashboard/settings/invoices", diff --git a/apps/dokploy/components/dashboard/settings/billing/show-managed-servers.tsx b/apps/dokploy/components/dashboard/settings/billing/show-managed-servers.tsx new file mode 100644 index 000000000..825f613b3 --- /dev/null +++ b/apps/dokploy/components/dashboard/settings/billing/show-managed-servers.tsx @@ -0,0 +1,493 @@ +import { + AlertCircle, + CheckCircle2, + Clock, + CreditCard, + ExternalLink, + FileText, + Loader2, + Plus, + Server, + Trash2, + XCircle, +} from "lucide-react"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import { useState } from "react"; +import { toast } from "sonner"; +import { DialogAction } from "@/components/shared/dialog-action"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { Label } from "@/components/ui/label"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { cn } from "@/lib/utils"; +import { api } from "@/utils/api"; + +const navigationItems = [ + { + name: "Subscription", + href: "/dashboard/settings/billing", + icon: CreditCard, + }, + { + name: "Managed Servers", + href: "/dashboard/settings/managed-servers", + icon: Server, + }, + { + name: "Invoices", + href: "/dashboard/settings/invoices", + icon: FileText, + }, +]; + +const STATUS_MAP: Record< + string, + { + label: string; + icon: React.ReactNode; + variant: "default" | "secondary" | "destructive" | "outline"; + } +> = { + pending: { + label: "Pending", + icon: , + variant: "secondary", + }, + provisioning: { + label: "Provisioning", + icon: , + variant: "secondary", + }, + configuring: { + label: "Installing Dokploy", + icon: , + variant: "secondary", + }, + ready: { + label: "Ready", + icon: , + variant: "default", + }, + error: { + label: "Error", + icon: , + variant: "destructive", + }, + terminating: { + label: "Terminating", + icon: , + variant: "secondary", + }, + terminated: { + label: "Terminated", + icon: , + variant: "outline", + }, +}; + +function formatSpecs(cpus: number, memoryMb: number, diskMb: number, bandwidthMb: number) { + const bandwidthTb = bandwidthMb / 1024 / 1024; + const bandwidthLabel = bandwidthTb >= 1 ? `${bandwidthTb.toFixed(0)} TB` : `${Math.round(bandwidthMb / 1024)} GB`; + return `${cpus} vCPU · ${Math.round(memoryMb / 1024)} GB RAM · ${Math.round(diskMb / 1024)} GB NVMe · ${bandwidthLabel} bandwidth`; +} + +function centsToDisplay(cents: number) { + return (cents / 100).toFixed(2).replace(/\.00$/, ""); +} + +function OrderServerDialog({ onSuccess }: { onSuccess: () => void }) { + const [open, setOpen] = useState(false); + const [selectedPlan, setSelectedPlan] = useState(""); + const [selectedDc, setSelectedDc] = useState(""); + const [isAnnual, setIsAnnual] = useState(false); + + const { data: plans, isLoading: loadingPlans } = + api.managedServer.getPlans.useQuery(undefined, { enabled: open }); + const { data: dataCenters, isLoading: loadingDcs } = + api.managedServer.getDataCenters.useQuery(undefined, { enabled: open }); + + const isLoadingOptions = loadingPlans || loadingDcs; + + const purchase = api.managedServer.purchase.useMutation({ + onSuccess: () => { + toast.success("Server order placed! Provisioning will take ~5 minutes."); + setOpen(false); + onSuccess(); + }, + onError: (err) => { + toast.error(err.message); + }, + }); + + const plan = plans?.find((p) => p.id === selectedPlan); + + const displayPrice = (p: NonNullable) => + isAnnual + ? `$${centsToDisplay(p.dokployPriceCentsAnnual)}/yr` + : `$${centsToDisplay(p.dokployPriceCentsMonthly)}/mo`; + + const displayPriceSmall = (p: NonNullable) => + isAnnual + ? `$${centsToDisplay(Math.round(p.dokployPriceCentsAnnual / 12))}/mo billed annually` + : `$${centsToDisplay(p.dokployPriceCentsAnnual)}/yr if annual`; + + return ( + + + + + + + Order a Managed Server + + We'll provision and configure a server for you automatically. Ready + in ~5 minutes. + + + +
+ {isLoadingOptions ? ( +
+ +

Loading available plans...

+
+ ) : ( +
+ {/* Billing period toggle */} +
+ + +
+ + {/* Plan selector */} +
+ +
+ {plans?.map((p) => ( + + ))} +
+
+ + {/* Data center selector */} +
+ + +
+ + {plan && selectedDc && ( +
+
+ Plan + {plan.name} +
+
+ Billing + {isAnnual ? "Annual" : "Monthly"} +
+
+ Total + {displayPrice(plan)} +
+
+ )} + + +
+ )} +
+
+
+ ); +} + +export const ShowManagedServers = () => { + const router = useRouter(); + const utils = api.useUtils(); + + const { data: servers, isLoading } = api.managedServer.list.useQuery(); + + const syncStatus = api.managedServer.syncStatus.useMutation({ + onSuccess: () => utils.managedServer.list.invalidate(), + }); + + const deleteServer = api.managedServer.delete.useMutation({ + onSuccess: () => { + toast.success("Server terminated."); + utils.managedServer.list.invalidate(); + }, + onError: (err) => toast.error(err.message), + }); + + return ( +
+ +
+ + + + Billing + + + Manage your subscription and servers + + + + + +
+
+
+

Managed Servers

+

+ Servers provisioned and managed by Dokploy Cloud +

+
+ utils.managedServer.list.invalidate()} + /> +
+ + {isLoading ? ( +
+ +
+ ) : servers?.length === 0 ? ( +
+ +

No managed servers yet

+

+ Order a server and we'll provision and configure it for you + automatically. +

+
+ ) : ( +
+ {servers?.map((s) => { + const status = + STATUS_MAP[s.status] ?? STATUS_MAP.error!; + const isProvisioning = [ + "pending", + "provisioning", + "configuring", + ].includes(s.status); + const planLabel = s.plan + .split("-") + .slice(-2) + .join(" ") + .toUpperCase(); + + return ( +
+
+ +
+
+ + {planLabel} + + + {status?.icon} + {status?.label} + +
+

+ {s.hostname ?? ""} + {s.ipAddress ? ` · ${s.ipAddress}` : ""} +

+
+
+ +
+ {isProvisioning && ( + + )} + {s.status === "ready" && s.server && ( + + )} + + deleteServer.mutate({ + managedServerId: s.managedServerId, + }) + } + > + + +
+
+ ); + })} +
+ )} +
+
+
+
+
+ ); +}; diff --git a/apps/dokploy/drizzle/0166_lame_meltdown.sql b/apps/dokploy/drizzle/0166_lame_meltdown.sql new file mode 100644 index 000000000..5b6bb91ff --- /dev/null +++ b/apps/dokploy/drizzle/0166_lame_meltdown.sql @@ -0,0 +1,23 @@ +CREATE TYPE "public"."managedServerPlan" AS ENUM('kvm2', 'kvm4', 'kvm8');--> statement-breakpoint +CREATE TYPE "public"."managedServerStatus" AS ENUM('pending', 'provisioning', 'configuring', 'ready', 'error', 'terminating', 'terminated');--> statement-breakpoint +CREATE TABLE "managed_server" ( + "managedServerId" text PRIMARY KEY NOT NULL, + "organizationId" text NOT NULL, + "serverId" text, + "plan" "managedServerPlan" NOT NULL, + "status" "managedServerStatus" DEFAULT 'pending' NOT NULL, + "hostingerVmId" integer, + "hostingerSubscriptionId" text, + "dataCenterId" integer NOT NULL, + "ipAddress" text, + "hostname" text, + "stripeSubscriptionId" text, + "stripePriceId" text, + "rootPassword" text, + "errorMessage" text, + "createdAt" text NOT NULL, + "updatedAt" text NOT NULL +); +--> statement-breakpoint +ALTER TABLE "managed_server" ADD CONSTRAINT "managed_server_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "managed_server" ADD CONSTRAINT "managed_server_serverId_server_serverId_fk" FOREIGN KEY ("serverId") REFERENCES "public"."server"("serverId") ON DELETE set null ON UPDATE no action; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0167_cultured_captain_cross.sql b/apps/dokploy/drizzle/0167_cultured_captain_cross.sql new file mode 100644 index 000000000..c1699f5f2 --- /dev/null +++ b/apps/dokploy/drizzle/0167_cultured_captain_cross.sql @@ -0,0 +1,2 @@ +ALTER TABLE "managed_server" ALTER COLUMN "plan" SET DATA TYPE text;--> statement-breakpoint +DROP TYPE "public"."managedServerPlan"; \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0166_snapshot.json b/apps/dokploy/drizzle/meta/0166_snapshot.json new file mode 100644 index 000000000..6c74f4f2b --- /dev/null +++ b/apps/dokploy/drizzle/meta/0166_snapshot.json @@ -0,0 +1,8473 @@ +{ + "id": "386a1a9b-59a9-41ba-9e44-75b0c4e03437", + "prevId": "ef484e78-f78d-4c3f-ae4b-aa123dc77e61", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is2FAEnabled": { + "name": "is2FAEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "resetPasswordToken": { + "name": "resetPasswordToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resetPasswordExpiresAt": { + "name": "resetPasswordExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationToken": { + "name": "confirmationToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationExpiresAt": { + "name": "confirmationExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "config_id": { + "name": "config_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, + "reference_id": { + "name": "reference_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_reference_id_user_id_fk": { + "name": "apikey_reference_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "reference_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_default": { + "name": "is_default", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateProjects": { + "name": "canCreateProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToSSHKeys": { + "name": "canAccessToSSHKeys", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateServices": { + "name": "canCreateServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteProjects": { + "name": "canDeleteProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteServices": { + "name": "canDeleteServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToDocker": { + "name": "canAccessToDocker", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToAPI": { + "name": "canAccessToAPI", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToGitProviders": { + "name": "canAccessToGitProviders", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToTraefikFiles": { + "name": "canAccessToTraefikFiles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteEnvironments": { + "name": "canDeleteEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateEnvironments": { + "name": "canCreateEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "accesedProjects": { + "name": "accesedProjects", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedEnvironments": { + "name": "accessedEnvironments", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accesedServices": { + "name": "accesedServices", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedGitProviders": { + "name": "accessedGitProviders", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedServers": { + "name": "accessedServers", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner_id": { + "name": "owner_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_owner_id_user_id_fk": { + "name": "organization_owner_id_user_id_fk", + "tableFrom": "organization", + "tableTo": "user", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization_role": { + "name": "organization_role", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permission": { + "name": "permission", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organizationRole_organizationId_idx": { + "name": "organizationRole_organizationId_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "organizationRole_role_idx": { + "name": "organizationRole_role_idx", + "columns": [ + { + "expression": "role", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_role_organization_id_organization_id_fk": { + "name": "organization_role_organization_id_organization_id_fk", + "tableFrom": "organization_role", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ai": { + "name": "ai", + "schema": "", + "columns": { + "aiId": { + "name": "aiId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiUrl": { + "name": "apiUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isEnabled": { + "name": "isEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ai_organizationId_organization_id_fk": { + "name": "ai_organizationId_organization_id_fk", + "tableFrom": "ai", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.application": { + "name": "application", + "schema": "", + "columns": { + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewEnv": { + "name": "previewEnv", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewBuildArgs": { + "name": "previewBuildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewBuildSecrets": { + "name": "previewBuildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLabels": { + "name": "previewLabels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewWildcard": { + "name": "previewWildcard", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewPort": { + "name": "previewPort", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "previewHttps": { + "name": "previewHttps", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "previewPath": { + "name": "previewPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "previewCustomCertResolver": { + "name": "previewCustomCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLimit": { + "name": "previewLimit", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "isPreviewDeploymentsActive": { + "name": "isPreviewDeploymentsActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewRequireCollaboratorPermissions": { + "name": "previewRequireCollaboratorPermissions", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rollbackActive": { + "name": "rollbackActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "buildArgs": { + "name": "buildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildSecrets": { + "name": "buildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "subtitle": { + "name": "subtitle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "cleanCache": { + "name": "cleanCache", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildPath": { + "name": "buildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBuildPath": { + "name": "gitlabBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBuildPath": { + "name": "giteaBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBuildPath": { + "name": "bitbucketBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBuildPath": { + "name": "customGitBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerfile": { + "name": "dockerfile", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'Dockerfile'" + }, + "dockerContextPath": { + "name": "dockerContextPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerBuildStage": { + "name": "dockerBuildStage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dropBuildPath": { + "name": "dropBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "buildType": { + "name": "buildType", + "type": "buildType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'nixpacks'" + }, + "railpackVersion": { + "name": "railpackVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0.15.4'" + }, + "herokuVersion": { + "name": "herokuVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'24'" + }, + "publishDirectory": { + "name": "publishDirectory", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isStaticSpa": { + "name": "isStaticSpa", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "createEnvFile": { + "name": "createEnvFile", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackRegistryId": { + "name": "rollbackRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildRegistryId": { + "name": "buildRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "application", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_registryId_registry_registryId_fk": { + "name": "application_registryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "registryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_rollbackRegistryId_registry_registryId_fk": { + "name": "application_rollbackRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "rollbackRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_environmentId_environment_environmentId_fk": { + "name": "application_environmentId_environment_environmentId_fk", + "tableFrom": "application", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_githubId_github_githubId_fk": { + "name": "application_githubId_github_githubId_fk", + "tableFrom": "application", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_gitlabId_gitlab_gitlabId_fk": { + "name": "application_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "application", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_giteaId_gitea_giteaId_fk": { + "name": "application_giteaId_gitea_giteaId_fk", + "tableFrom": "application", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "application_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "application", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_serverId_server_serverId_fk": { + "name": "application_serverId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_buildServerId_server_serverId_fk": { + "name": "application_buildServerId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_buildRegistryId_registry_registryId_fk": { + "name": "application_buildRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "buildRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "application_appName_unique": { + "name": "application_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_log": { + "name": "audit_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_email": { + "name": "user_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_role": { + "name": "user_role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "resource_type": { + "name": "resource_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "resource_id": { + "name": "resource_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resource_name": { + "name": "resource_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "auditLog_organizationId_idx": { + "name": "auditLog_organizationId_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "auditLog_userId_idx": { + "name": "auditLog_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "auditLog_createdAt_idx": { + "name": "auditLog_createdAt_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "audit_log_organization_id_organization_id_fk": { + "name": "audit_log_organization_id_organization_id_fk", + "tableFrom": "audit_log", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "audit_log_user_id_user_id_fk": { + "name": "audit_log_user_id_user_id_fk", + "tableFrom": "audit_log", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup": { + "name": "backup", + "schema": "", + "columns": { + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schedule": { + "name": "schedule", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "database": { + "name": "database", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "backupType": { + "name": "backupType", + "type": "backupType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'database'" + }, + "databaseType": { + "name": "databaseType", + "type": "databaseType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_destinationId_destination_destinationId_fk": { + "name": "backup_destinationId_destination_destinationId_fk", + "tableFrom": "backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_composeId_compose_composeId_fk": { + "name": "backup_composeId_compose_composeId_fk", + "tableFrom": "backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_postgresId_postgres_postgresId_fk": { + "name": "backup_postgresId_postgres_postgresId_fk", + "tableFrom": "backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mariadbId_mariadb_mariadbId_fk": { + "name": "backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mysqlId_mysql_mysqlId_fk": { + "name": "backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mongoId_mongo_mongoId_fk": { + "name": "backup_mongoId_mongo_mongoId_fk", + "tableFrom": "backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_libsqlId_libsql_libsqlId_fk": { + "name": "backup_libsqlId_libsql_libsqlId_fk", + "tableFrom": "backup", + "tableTo": "libsql", + "columnsFrom": [ + "libsqlId" + ], + "columnsTo": [ + "libsqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_userId_user_id_fk": { + "name": "backup_userId_user_id_fk", + "tableFrom": "backup", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "backup_appName_unique": { + "name": "backup_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.bitbucket": { + "name": "bitbucket", + "schema": "", + "columns": { + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "bitbucketUsername": { + "name": "bitbucketUsername", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketEmail": { + "name": "bitbucketEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "appPassword": { + "name": "appPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketWorkspaceName": { + "name": "bitbucketWorkspaceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { + "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "bitbucket", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.certificate": { + "name": "certificate", + "schema": "", + "columns": { + "certificateId": { + "name": "certificateId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificateData": { + "name": "certificateData", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificatePath": { + "name": "certificatePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "autoRenew": { + "name": "autoRenew", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "certificate_organizationId_organization_id_fk": { + "name": "certificate_organizationId_organization_id_fk", + "tableFrom": "certificate", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "certificate_serverId_server_serverId_fk": { + "name": "certificate_serverId_server_serverId_fk", + "tableFrom": "certificate", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "certificate_certificatePath_unique": { + "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, + "columns": [ + "certificatePath" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.compose": { + "name": "compose", + "schema": "", + "columns": { + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeFile": { + "name": "composeFile", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceTypeCompose", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "composeType": { + "name": "composeType", + "type": "composeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'docker-compose'" + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "composePath": { + "name": "composePath", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'./docker-compose.yml'" + }, + "suffix": { + "name": "suffix", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "randomize": { + "name": "randomize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeployment": { + "name": "isolatedDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeploymentsVolume": { + "name": "isolatedDeploymentsVolume", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "composeStatus": { + "name": "composeStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "compose", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_environmentId_environment_environmentId_fk": { + "name": "compose_environmentId_environment_environmentId_fk", + "tableFrom": "compose", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "compose_githubId_github_githubId_fk": { + "name": "compose_githubId_github_githubId_fk", + "tableFrom": "compose", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_gitlabId_gitlab_gitlabId_fk": { + "name": "compose_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "compose", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "compose", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_giteaId_gitea_giteaId_fk": { + "name": "compose_giteaId_gitea_giteaId_fk", + "tableFrom": "compose", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_serverId_server_serverId_fk": { + "name": "compose_serverId_server_serverId_fk", + "tableFrom": "compose", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.deployment": { + "name": "deployment", + "schema": "", + "columns": { + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "deploymentStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'running'" + }, + "logPath": { + "name": "logPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pid": { + "name": "pid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isPreviewDeployment": { + "name": "isPreviewDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "startedAt": { + "name": "startedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "deployment_applicationId_application_applicationId_fk": { + "name": "deployment_applicationId_application_applicationId_fk", + "tableFrom": "deployment", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_composeId_compose_composeId_fk": { + "name": "deployment_composeId_compose_composeId_fk", + "tableFrom": "deployment", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_serverId_server_serverId_fk": { + "name": "deployment_serverId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "deployment", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_scheduleId_schedule_scheduleId_fk": { + "name": "deployment_scheduleId_schedule_scheduleId_fk", + "tableFrom": "deployment", + "tableTo": "schedule", + "columnsFrom": [ + "scheduleId" + ], + "columnsTo": [ + "scheduleId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_backupId_backup_backupId_fk": { + "name": "deployment_backupId_backup_backupId_fk", + "tableFrom": "deployment", + "tableTo": "backup", + "columnsFrom": [ + "backupId" + ], + "columnsTo": [ + "backupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_rollbackId_rollback_rollbackId_fk": { + "name": "deployment_rollbackId_rollback_rollbackId_fk", + "tableFrom": "deployment", + "tableTo": "rollback", + "columnsFrom": [ + "rollbackId" + ], + "columnsTo": [ + "rollbackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_volumeBackupId_volume_backup_volumeBackupId_fk": { + "name": "deployment_volumeBackupId_volume_backup_volumeBackupId_fk", + "tableFrom": "deployment", + "tableTo": "volume_backup", + "columnsFrom": [ + "volumeBackupId" + ], + "columnsTo": [ + "volumeBackupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_buildServerId_server_serverId_fk": { + "name": "deployment_buildServerId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.destination": { + "name": "destination", + "schema": "", + "columns": { + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "accessKey": { + "name": "accessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secretAccessKey": { + "name": "secretAccessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bucket": { + "name": "bucket", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "region": { + "name": "region", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "additionalFlags": { + "name": "additionalFlags", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "destination_organizationId_organization_id_fk": { + "name": "destination_organizationId_organization_id_fk", + "tableFrom": "destination", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.domain": { + "name": "domain", + "schema": "", + "columns": { + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "customEntrypoint": { + "name": "customEntrypoint", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domainType": { + "name": "domainType", + "type": "domainType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'application'" + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customCertResolver": { + "name": "customCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "internalPath": { + "name": "internalPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "stripPath": { + "name": "stripPath", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "middlewares": { + "name": "middlewares", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "domain_composeId_compose_composeId_fk": { + "name": "domain_composeId_compose_composeId_fk", + "tableFrom": "domain", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_applicationId_application_applicationId_fk": { + "name": "domain_applicationId_application_applicationId_fk", + "tableFrom": "domain", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "domain", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.environment": { + "name": "environment", + "schema": "", + "columns": { + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isDefault": { + "name": "isDefault", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "environment_projectId_project_projectId_fk": { + "name": "environment_projectId_project_projectId_fk", + "tableFrom": "environment", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.git_provider": { + "name": "git_provider", + "schema": "", + "columns": { + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerType": { + "name": "providerType", + "type": "gitProviderType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sharedWithOrganization": { + "name": "sharedWithOrganization", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "git_provider_organizationId_organization_id_fk": { + "name": "git_provider_organizationId_organization_id_fk", + "tableFrom": "git_provider", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "git_provider_userId_user_id_fk": { + "name": "git_provider_userId_user_id_fk", + "tableFrom": "git_provider", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitea": { + "name": "gitea", + "schema": "", + "columns": { + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "giteaUrl": { + "name": "giteaUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitea.com'" + }, + "giteaInternalUrl": { + "name": "giteaInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_secret": { + "name": "client_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "scopes": { + "name": "scopes", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'repo,repo:status,read:user,read:org'" + }, + "last_authenticated_at": { + "name": "last_authenticated_at", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "gitea_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitea_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitea", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.github": { + "name": "github", + "schema": "", + "columns": { + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "githubAppName": { + "name": "githubAppName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubAppId": { + "name": "githubAppId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "githubClientId": { + "name": "githubClientId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubClientSecret": { + "name": "githubClientSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubInstallationId": { + "name": "githubInstallationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubPrivateKey": { + "name": "githubPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubWebhookSecret": { + "name": "githubWebhookSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "github_gitProviderId_git_provider_gitProviderId_fk": { + "name": "github_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "github", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitlab": { + "name": "gitlab", + "schema": "", + "columns": { + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "gitlabUrl": { + "name": "gitlabUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitlab.com'" + }, + "gitlabInternalUrl": { + "name": "gitlabInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "application_id": { + "name": "application_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "group_name": { + "name": "group_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "gitlab_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitlab", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.libsql": { + "name": "libsql", + "schema": "", + "columns": { + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sqldNode": { + "name": "sqldNode", + "type": "sqldNode", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'primary'" + }, + "sqldPrimaryUrl": { + "name": "sqldPrimaryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableNamespaces": { + "name": "enableNamespaces", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "externalGRPCPort": { + "name": "externalGRPCPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "externalAdminPort": { + "name": "externalAdminPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "libsql_environmentId_environment_environmentId_fk": { + "name": "libsql_environmentId_environment_environmentId_fk", + "tableFrom": "libsql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "libsql_serverId_server_serverId_fk": { + "name": "libsql_serverId_server_serverId_fk", + "tableFrom": "libsql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "libsql_appName_unique": { + "name": "libsql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.managed_server": { + "name": "managed_server", + "schema": "", + "columns": { + "managedServerId": { + "name": "managedServerId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "plan": { + "name": "plan", + "type": "managedServerPlan", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "managedServerStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "hostingerVmId": { + "name": "hostingerVmId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hostingerSubscriptionId": { + "name": "hostingerSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dataCenterId": { + "name": "dataCenterId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripePriceId": { + "name": "stripePriceId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updatedAt": { + "name": "updatedAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "managed_server_organizationId_organization_id_fk": { + "name": "managed_server_organizationId_organization_id_fk", + "tableFrom": "managed_server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "managed_server_serverId_server_serverId_fk": { + "name": "managed_server_serverId_server_serverId_fk", + "tableFrom": "managed_server", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mariadb": { + "name": "mariadb", + "schema": "", + "columns": { + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mariadb_environmentId_environment_environmentId_fk": { + "name": "mariadb_environmentId_environment_environmentId_fk", + "tableFrom": "mariadb", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mariadb_serverId_server_serverId_fk": { + "name": "mariadb_serverId_server_serverId_fk", + "tableFrom": "mariadb", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mariadb_appName_unique": { + "name": "mariadb_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mongo": { + "name": "mongo", + "schema": "", + "columns": { + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'mongo:8'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "replicaSets": { + "name": "replicaSets", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "mongo_environmentId_environment_environmentId_fk": { + "name": "mongo_environmentId_environment_environmentId_fk", + "tableFrom": "mongo", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mongo_serverId_server_serverId_fk": { + "name": "mongo_serverId_server_serverId_fk", + "tableFrom": "mongo", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mongo_appName_unique": { + "name": "mongo_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mount": { + "name": "mount", + "schema": "", + "columns": { + "mountId": { + "name": "mountId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "mountType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "hostPath": { + "name": "hostPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "mountPath": { + "name": "mountPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mount_applicationId_application_applicationId_fk": { + "name": "mount_applicationId_application_applicationId_fk", + "tableFrom": "mount", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_composeId_compose_composeId_fk": { + "name": "mount_composeId_compose_composeId_fk", + "tableFrom": "mount", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_libsqlId_libsql_libsqlId_fk": { + "name": "mount_libsqlId_libsql_libsqlId_fk", + "tableFrom": "mount", + "tableTo": "libsql", + "columnsFrom": [ + "libsqlId" + ], + "columnsTo": [ + "libsqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mariadbId_mariadb_mariadbId_fk": { + "name": "mount_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "mount", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mongoId_mongo_mongoId_fk": { + "name": "mount_mongoId_mongo_mongoId_fk", + "tableFrom": "mount", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mysqlId_mysql_mysqlId_fk": { + "name": "mount_mysqlId_mysql_mysqlId_fk", + "tableFrom": "mount", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_postgresId_postgres_postgresId_fk": { + "name": "mount_postgresId_postgres_postgresId_fk", + "tableFrom": "mount", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_redisId_redis_redisId_fk": { + "name": "mount_redisId_redis_redisId_fk", + "tableFrom": "mount", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mysql": { + "name": "mysql", + "schema": "", + "columns": { + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mysql_environmentId_environment_environmentId_fk": { + "name": "mysql_environmentId_environment_environmentId_fk", + "tableFrom": "mysql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mysql_serverId_server_serverId_fk": { + "name": "mysql_serverId_server_serverId_fk", + "tableFrom": "mysql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mysql_appName_unique": { + "name": "mysql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custom": { + "name": "custom", + "schema": "", + "columns": { + "customId": { + "name": "customId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "headers": { + "name": "headers", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.discord": { + "name": "discord", + "schema": "", + "columns": { + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email": { + "name": "email", + "schema": "", + "columns": { + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "smtpServer": { + "name": "smtpServer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "smtpPort": { + "name": "smtpPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gotify": { + "name": "gotify", + "schema": "", + "columns": { + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appToken": { + "name": "appToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lark": { + "name": "lark", + "schema": "", + "columns": { + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mattermost": { + "name": "mattermost", + "schema": "", + "columns": { + "mattermostId": { + "name": "mattermostId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification": { + "name": "notification", + "schema": "", + "columns": { + "notificationId": { + "name": "notificationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appDeploy": { + "name": "appDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "appBuildError": { + "name": "appBuildError", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "databaseBackup": { + "name": "databaseBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "volumeBackup": { + "name": "volumeBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployRestart": { + "name": "dokployRestart", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployBackup": { + "name": "dokployBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerCleanup": { + "name": "dockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "serverThreshold": { + "name": "serverThreshold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "notificationType": { + "name": "notificationType", + "type": "notificationType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mattermostId": { + "name": "mattermostId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customId": { + "name": "customId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "teamsId": { + "name": "teamsId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "notification_slackId_slack_slackId_fk": { + "name": "notification_slackId_slack_slackId_fk", + "tableFrom": "notification", + "tableTo": "slack", + "columnsFrom": [ + "slackId" + ], + "columnsTo": [ + "slackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_telegramId_telegram_telegramId_fk": { + "name": "notification_telegramId_telegram_telegramId_fk", + "tableFrom": "notification", + "tableTo": "telegram", + "columnsFrom": [ + "telegramId" + ], + "columnsTo": [ + "telegramId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_discordId_discord_discordId_fk": { + "name": "notification_discordId_discord_discordId_fk", + "tableFrom": "notification", + "tableTo": "discord", + "columnsFrom": [ + "discordId" + ], + "columnsTo": [ + "discordId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_emailId_email_emailId_fk": { + "name": "notification_emailId_email_emailId_fk", + "tableFrom": "notification", + "tableTo": "email", + "columnsFrom": [ + "emailId" + ], + "columnsTo": [ + "emailId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_resendId_resend_resendId_fk": { + "name": "notification_resendId_resend_resendId_fk", + "tableFrom": "notification", + "tableTo": "resend", + "columnsFrom": [ + "resendId" + ], + "columnsTo": [ + "resendId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_gotifyId_gotify_gotifyId_fk": { + "name": "notification_gotifyId_gotify_gotifyId_fk", + "tableFrom": "notification", + "tableTo": "gotify", + "columnsFrom": [ + "gotifyId" + ], + "columnsTo": [ + "gotifyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_ntfyId_ntfy_ntfyId_fk": { + "name": "notification_ntfyId_ntfy_ntfyId_fk", + "tableFrom": "notification", + "tableTo": "ntfy", + "columnsFrom": [ + "ntfyId" + ], + "columnsTo": [ + "ntfyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_mattermostId_mattermost_mattermostId_fk": { + "name": "notification_mattermostId_mattermost_mattermostId_fk", + "tableFrom": "notification", + "tableTo": "mattermost", + "columnsFrom": [ + "mattermostId" + ], + "columnsTo": [ + "mattermostId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_customId_custom_customId_fk": { + "name": "notification_customId_custom_customId_fk", + "tableFrom": "notification", + "tableTo": "custom", + "columnsFrom": [ + "customId" + ], + "columnsTo": [ + "customId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_larkId_lark_larkId_fk": { + "name": "notification_larkId_lark_larkId_fk", + "tableFrom": "notification", + "tableTo": "lark", + "columnsFrom": [ + "larkId" + ], + "columnsTo": [ + "larkId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_pushoverId_pushover_pushoverId_fk": { + "name": "notification_pushoverId_pushover_pushoverId_fk", + "tableFrom": "notification", + "tableTo": "pushover", + "columnsFrom": [ + "pushoverId" + ], + "columnsTo": [ + "pushoverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_teamsId_teams_teamsId_fk": { + "name": "notification_teamsId_teams_teamsId_fk", + "tableFrom": "notification", + "tableTo": "teams", + "columnsFrom": [ + "teamsId" + ], + "columnsTo": [ + "teamsId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_organizationId_organization_id_fk": { + "name": "notification_organizationId_organization_id_fk", + "tableFrom": "notification", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ntfy": { + "name": "ntfy", + "schema": "", + "columns": { + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "topic": { + "name": "topic", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "accessToken": { + "name": "accessToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 3 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pushover": { + "name": "pushover", + "schema": "", + "columns": { + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userKey": { + "name": "userKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "retry": { + "name": "retry", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "expire": { + "name": "expire", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resend": { + "name": "resend", + "schema": "", + "columns": { + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slack": { + "name": "slack", + "schema": "", + "columns": { + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.teams": { + "name": "teams", + "schema": "", + "columns": { + "teamsId": { + "name": "teamsId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.telegram": { + "name": "telegram", + "schema": "", + "columns": { + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "botToken": { + "name": "botToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chatId": { + "name": "chatId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "messageThreadId": { + "name": "messageThreadId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.patch": { + "name": "patch", + "schema": "", + "columns": { + "patchId": { + "name": "patchId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "patchType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'update'" + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updatedAt": { + "name": "updatedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "patch_applicationId_application_applicationId_fk": { + "name": "patch_applicationId_application_applicationId_fk", + "tableFrom": "patch", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "patch_composeId_compose_composeId_fk": { + "name": "patch_composeId_compose_composeId_fk", + "tableFrom": "patch", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "patch_filepath_application_unique": { + "name": "patch_filepath_application_unique", + "nullsNotDistinct": false, + "columns": [ + "filePath", + "applicationId" + ] + }, + "patch_filepath_compose_unique": { + "name": "patch_filepath_compose_unique", + "nullsNotDistinct": false, + "columns": [ + "filePath", + "composeId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.port": { + "name": "port", + "schema": "", + "columns": { + "portId": { + "name": "portId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "publishedPort": { + "name": "publishedPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "publishMode": { + "name": "publishMode", + "type": "publishModeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'host'" + }, + "targetPort": { + "name": "targetPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "protocol": { + "name": "protocol", + "type": "protocolType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "port_applicationId_application_applicationId_fk": { + "name": "port_applicationId_application_applicationId_fk", + "tableFrom": "port", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.postgres": { + "name": "postgres", + "schema": "", + "columns": { + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "postgres_environmentId_environment_environmentId_fk": { + "name": "postgres_environmentId_environment_environmentId_fk", + "tableFrom": "postgres", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "postgres_serverId_server_serverId_fk": { + "name": "postgres_serverId_server_serverId_fk", + "tableFrom": "postgres", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "postgres_appName_unique": { + "name": "postgres_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.preview_deployments": { + "name": "preview_deployments", + "schema": "", + "columns": { + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestId": { + "name": "pullRequestId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestNumber": { + "name": "pullRequestNumber", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestURL": { + "name": "pullRequestURL", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestTitle": { + "name": "pullRequestTitle", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestCommentId": { + "name": "pullRequestCommentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "previewStatus": { + "name": "previewStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "preview_deployments_applicationId_application_applicationId_fk": { + "name": "preview_deployments_applicationId_application_applicationId_fk", + "tableFrom": "preview_deployments", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "preview_deployments_domainId_domain_domainId_fk": { + "name": "preview_deployments_domainId_domain_domainId_fk", + "tableFrom": "preview_deployments", + "tableTo": "domain", + "columnsFrom": [ + "domainId" + ], + "columnsTo": [ + "domainId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "preview_deployments_appName_unique": { + "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project": { + "name": "project", + "schema": "", + "columns": { + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": { + "project_organizationId_organization_id_fk": { + "name": "project_organizationId_organization_id_fk", + "tableFrom": "project", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redirect": { + "name": "redirect", + "schema": "", + "columns": { + "redirectId": { + "name": "redirectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "regex": { + "name": "regex", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "replacement": { + "name": "replacement", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permanent": { + "name": "permanent", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "redirect_applicationId_application_applicationId_fk": { + "name": "redirect_applicationId_application_applicationId_fk", + "tableFrom": "redirect", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redis": { + "name": "redis", + "schema": "", + "columns": { + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "redis_environmentId_environment_environmentId_fk": { + "name": "redis_environmentId_environment_environmentId_fk", + "tableFrom": "redis", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "redis_serverId_server_serverId_fk": { + "name": "redis_serverId_server_serverId_fk", + "tableFrom": "redis", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "redis_appName_unique": { + "name": "redis_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.registry": { + "name": "registry", + "schema": "", + "columns": { + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "registryName": { + "name": "registryName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "imagePrefix": { + "name": "imagePrefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "selfHosted": { + "name": "selfHosted", + "type": "RegistryType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'cloud'" + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "registry_organizationId_organization_id_fk": { + "name": "registry_organizationId_organization_id_fk", + "tableFrom": "registry", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.rollback": { + "name": "rollback", + "schema": "", + "columns": { + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fullContext": { + "name": "fullContext", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "rollback_deploymentId_deployment_deploymentId_fk": { + "name": "rollback_deploymentId_deployment_deploymentId_fk", + "tableFrom": "rollback", + "tableTo": "deployment", + "columnsFrom": [ + "deploymentId" + ], + "columnsTo": [ + "deploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.schedule": { + "name": "schedule", + "schema": "", + "columns": { + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shellType": { + "name": "shellType", + "type": "shellType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'bash'" + }, + "scheduleType": { + "name": "scheduleType", + "type": "scheduleType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "script": { + "name": "script", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "timezone": { + "name": "timezone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "schedule_applicationId_application_applicationId_fk": { + "name": "schedule_applicationId_application_applicationId_fk", + "tableFrom": "schedule", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_composeId_compose_composeId_fk": { + "name": "schedule_composeId_compose_composeId_fk", + "tableFrom": "schedule", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_serverId_server_serverId_fk": { + "name": "schedule_serverId_server_serverId_fk", + "tableFrom": "schedule", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_userId_user_id_fk": { + "name": "schedule_userId_user_id_fk", + "tableFrom": "schedule", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.security": { + "name": "security", + "schema": "", + "columns": { + "securityId": { + "name": "securityId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "security_applicationId_application_applicationId_fk": { + "name": "security_applicationId_application_applicationId_fk", + "tableFrom": "security", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "security_username_applicationId_unique": { + "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "applicationId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.server": { + "name": "server", + "schema": "", + "columns": { + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'root'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverStatus": { + "name": "serverStatus", + "type": "serverStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "serverType": { + "name": "serverType", + "type": "serverType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'deploy'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + } + }, + "indexes": {}, + "foreignKeys": { + "server_organizationId_organization_id_fk": { + "name": "server_organizationId_organization_id_fk", + "tableFrom": "server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "server_sshKeyId_ssh-key_sshKeyId_fk": { + "name": "server_sshKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "server", + "tableTo": "ssh-key", + "columnsFrom": [ + "sshKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ssh-key": { + "name": "ssh-key", + "schema": "", + "columns": { + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUsedAt": { + "name": "lastUsedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ssh-key_organizationId_organization_id_fk": { + "name": "ssh-key_organizationId_organization_id_fk", + "tableFrom": "ssh-key", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sso_provider": { + "name": "sso_provider", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oidc_config": { + "name": "oidc_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "saml_config": { + "name": "saml_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "sso_provider_organization_id_organization_id_fk": { + "name": "sso_provider_organization_id_organization_id_fk", + "tableFrom": "sso_provider", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project_tag": { + "name": "project_tag", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "tagId": { + "name": "tagId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "project_tag_projectId_project_projectId_fk": { + "name": "project_tag_projectId_project_projectId_fk", + "tableFrom": "project_tag", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "project_tag_tagId_tag_tagId_fk": { + "name": "project_tag_tagId_tag_tagId_fk", + "tableFrom": "project_tag", + "tableTo": "tag", + "columnsFrom": [ + "tagId" + ], + "columnsTo": [ + "tagId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_project_tag": { + "name": "unique_project_tag", + "nullsNotDistinct": false, + "columns": [ + "projectId", + "tagId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.tag": { + "name": "tag", + "schema": "", + "columns": { + "tagId": { + "name": "tagId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "color": { + "name": "color", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "tag_organizationId_organization_id_fk": { + "name": "tag_organizationId_organization_id_fk", + "tableFrom": "tag", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_org_tag_name": { + "name": "unique_org_tag_name", + "nullsNotDistinct": false, + "columns": [ + "organizationId", + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "firstName": { + "name": "firstName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "lastName": { + "name": "lastName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "isRegistered": { + "name": "isRegistered", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "expirationDate": { + "name": "expirationDate", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'user'" + }, + "enablePaidFeatures": { + "name": "enablePaidFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "allowImpersonation": { + "name": "allowImpersonation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enableEnterpriseFeatures": { + "name": "enableEnterpriseFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "licenseKey": { + "name": "licenseKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isValidEnterpriseLicense": { + "name": "isValidEnterpriseLicense", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "stripeCustomerId": { + "name": "stripeCustomerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serversQuantity": { + "name": "serversQuantity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "sendInvoiceNotifications": { + "name": "sendInvoiceNotifications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isEnterpriseCloud": { + "name": "isEnterpriseCloud", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "trustedOrigins": { + "name": "trustedOrigins", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "bookmarkedTemplates": { + "name": "bookmarkedTemplates", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volume_backup": { + "name": "volume_backup", + "schema": "", + "columns": { + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "turnOff": { + "name": "turnOff", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "volume_backup_applicationId_application_applicationId_fk": { + "name": "volume_backup_applicationId_application_applicationId_fk", + "tableFrom": "volume_backup", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_postgresId_postgres_postgresId_fk": { + "name": "volume_backup_postgresId_postgres_postgresId_fk", + "tableFrom": "volume_backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mariadbId_mariadb_mariadbId_fk": { + "name": "volume_backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "volume_backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mongoId_mongo_mongoId_fk": { + "name": "volume_backup_mongoId_mongo_mongoId_fk", + "tableFrom": "volume_backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mysqlId_mysql_mysqlId_fk": { + "name": "volume_backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_redisId_redis_redisId_fk": { + "name": "volume_backup_redisId_redis_redisId_fk", + "tableFrom": "volume_backup", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_libsqlId_libsql_libsqlId_fk": { + "name": "volume_backup_libsqlId_libsql_libsqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "libsql", + "columnsFrom": [ + "libsqlId" + ], + "columnsTo": [ + "libsqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_composeId_compose_composeId_fk": { + "name": "volume_backup_composeId_compose_composeId_fk", + "tableFrom": "volume_backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_destinationId_destination_destinationId_fk": { + "name": "volume_backup_destinationId_destination_destinationId_fk", + "tableFrom": "volume_backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.webServerSettings": { + "name": "webServerSettings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverIp": { + "name": "serverIp", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "letsEncryptEmail": { + "name": "letsEncryptEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sshPrivateKey": { + "name": "sshPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "logCleanupCron": { + "name": "logCleanupCron", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0 0 * * *'" + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + }, + "whitelabelingConfig": { + "name": "whitelabelingConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'{\"appName\":null,\"appDescription\":null,\"logoUrl\":null,\"faviconUrl\":null,\"customCss\":null,\"loginLogoUrl\":null,\"supportUrl\":null,\"docsUrl\":null,\"errorPageTitle\":null,\"errorPageDescription\":null,\"metaTitle\":null,\"footerText\":null}'::jsonb" + }, + "cleanupCacheApplications": { + "name": "cleanupCacheApplications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnPreviews": { + "name": "cleanupCacheOnPreviews", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnCompose": { + "name": "cleanupCacheOnCompose", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.buildType": { + "name": "buildType", + "schema": "public", + "values": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "public.sourceType": { + "name": "sourceType", + "schema": "public", + "values": [ + "docker", + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "public.backupType": { + "name": "backupType", + "schema": "public", + "values": [ + "database", + "compose" + ] + }, + "public.databaseType": { + "name": "databaseType", + "schema": "public", + "values": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server", + "libsql" + ] + }, + "public.composeType": { + "name": "composeType", + "schema": "public", + "values": [ + "docker-compose", + "stack" + ] + }, + "public.sourceTypeCompose": { + "name": "sourceTypeCompose", + "schema": "public", + "values": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "public.deploymentStatus": { + "name": "deploymentStatus", + "schema": "public", + "values": [ + "running", + "done", + "error", + "cancelled" + ] + }, + "public.domainType": { + "name": "domainType", + "schema": "public", + "values": [ + "compose", + "application", + "preview" + ] + }, + "public.gitProviderType": { + "name": "gitProviderType", + "schema": "public", + "values": [ + "github", + "gitlab", + "bitbucket", + "gitea" + ] + }, + "public.managedServerPlan": { + "name": "managedServerPlan", + "schema": "public", + "values": [ + "kvm2", + "kvm4", + "kvm8" + ] + }, + "public.managedServerStatus": { + "name": "managedServerStatus", + "schema": "public", + "values": [ + "pending", + "provisioning", + "configuring", + "ready", + "error", + "terminating", + "terminated" + ] + }, + "public.mountType": { + "name": "mountType", + "schema": "public", + "values": [ + "bind", + "volume", + "file" + ] + }, + "public.serviceType": { + "name": "serviceType", + "schema": "public", + "values": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose", + "libsql" + ] + }, + "public.notificationType": { + "name": "notificationType", + "schema": "public", + "values": [ + "slack", + "telegram", + "discord", + "email", + "resend", + "gotify", + "ntfy", + "mattermost", + "pushover", + "custom", + "lark", + "teams" + ] + }, + "public.patchType": { + "name": "patchType", + "schema": "public", + "values": [ + "create", + "update", + "delete" + ] + }, + "public.protocolType": { + "name": "protocolType", + "schema": "public", + "values": [ + "tcp", + "udp" + ] + }, + "public.publishModeType": { + "name": "publishModeType", + "schema": "public", + "values": [ + "ingress", + "host" + ] + }, + "public.RegistryType": { + "name": "RegistryType", + "schema": "public", + "values": [ + "selfHosted", + "cloud" + ] + }, + "public.scheduleType": { + "name": "scheduleType", + "schema": "public", + "values": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "public.shellType": { + "name": "shellType", + "schema": "public", + "values": [ + "bash", + "sh" + ] + }, + "public.serverStatus": { + "name": "serverStatus", + "schema": "public", + "values": [ + "active", + "inactive" + ] + }, + "public.serverType": { + "name": "serverType", + "schema": "public", + "values": [ + "deploy", + "build" + ] + }, + "public.applicationStatus": { + "name": "applicationStatus", + "schema": "public", + "values": [ + "idle", + "running", + "done", + "error" + ] + }, + "public.certificateType": { + "name": "certificateType", + "schema": "public", + "values": [ + "letsencrypt", + "none", + "custom" + ] + }, + "public.sqldNode": { + "name": "sqldNode", + "schema": "public", + "values": [ + "primary", + "replica" + ] + }, + "public.triggerType": { + "name": "triggerType", + "schema": "public", + "values": [ + "push", + "tag" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0167_snapshot.json b/apps/dokploy/drizzle/meta/0167_snapshot.json new file mode 100644 index 000000000..b4dea3b0c --- /dev/null +++ b/apps/dokploy/drizzle/meta/0167_snapshot.json @@ -0,0 +1,8463 @@ +{ + "id": "0c9bb0d3-9424-4b4f-ab24-810c09ce880d", + "prevId": "386a1a9b-59a9-41ba-9e44-75b0c4e03437", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is2FAEnabled": { + "name": "is2FAEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "resetPasswordToken": { + "name": "resetPasswordToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resetPasswordExpiresAt": { + "name": "resetPasswordExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationToken": { + "name": "confirmationToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "confirmationExpiresAt": { + "name": "confirmationExpiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.apikey": { + "name": "apikey", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "config_id": { + "name": "config_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'default'" + }, + "reference_id": { + "name": "reference_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refill_interval": { + "name": "refill_interval", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_enabled": { + "name": "rate_limit_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "rate_limit_time_window": { + "name": "rate_limit_time_window", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "rate_limit_max": { + "name": "rate_limit_max", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "request_count": { + "name": "request_count", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_request": { + "name": "last_request", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "apikey_reference_id_user_id_fk": { + "name": "apikey_reference_id_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "reference_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "inviter_id": { + "name": "inviter_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": [ + "inviter_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_default": { + "name": "is_default", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateProjects": { + "name": "canCreateProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToSSHKeys": { + "name": "canAccessToSSHKeys", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateServices": { + "name": "canCreateServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteProjects": { + "name": "canDeleteProjects", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteServices": { + "name": "canDeleteServices", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToDocker": { + "name": "canAccessToDocker", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToAPI": { + "name": "canAccessToAPI", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToGitProviders": { + "name": "canAccessToGitProviders", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canAccessToTraefikFiles": { + "name": "canAccessToTraefikFiles", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canDeleteEnvironments": { + "name": "canDeleteEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "canCreateEnvironments": { + "name": "canCreateEnvironments", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "accesedProjects": { + "name": "accesedProjects", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedEnvironments": { + "name": "accessedEnvironments", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accesedServices": { + "name": "accesedServices", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedGitProviders": { + "name": "accessedGitProviders", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + }, + "accessedServers": { + "name": "accessedServers", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner_id": { + "name": "owner_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_owner_id_user_id_fk": { + "name": "organization_owner_id_user_id_fk", + "tableFrom": "organization", + "tableTo": "user", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization_role": { + "name": "organization_role", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permission": { + "name": "permission", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organizationRole_organizationId_idx": { + "name": "organizationRole_organizationId_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "organizationRole_role_idx": { + "name": "organizationRole_role_idx", + "columns": [ + { + "expression": "role", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_role_organization_id_organization_id_fk": { + "name": "organization_role_organization_id_organization_id_fk", + "tableFrom": "organization_role", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.two_factor": { + "name": "two_factor", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "backup_codes": { + "name": "backup_codes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "two_factor_user_id_user_id_fk": { + "name": "two_factor_user_id_user_id_fk", + "tableFrom": "two_factor", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ai": { + "name": "ai", + "schema": "", + "columns": { + "aiId": { + "name": "aiId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiUrl": { + "name": "apiUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isEnabled": { + "name": "isEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ai_organizationId_organization_id_fk": { + "name": "ai_organizationId_organization_id_fk", + "tableFrom": "ai", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.application": { + "name": "application", + "schema": "", + "columns": { + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewEnv": { + "name": "previewEnv", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewBuildArgs": { + "name": "previewBuildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewBuildSecrets": { + "name": "previewBuildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLabels": { + "name": "previewLabels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "previewWildcard": { + "name": "previewWildcard", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewPort": { + "name": "previewPort", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "previewHttps": { + "name": "previewHttps", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "previewPath": { + "name": "previewPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "previewCustomCertResolver": { + "name": "previewCustomCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewLimit": { + "name": "previewLimit", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3 + }, + "isPreviewDeploymentsActive": { + "name": "isPreviewDeploymentsActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewRequireCollaboratorPermissions": { + "name": "previewRequireCollaboratorPermissions", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "rollbackActive": { + "name": "rollbackActive", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "buildArgs": { + "name": "buildArgs", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildSecrets": { + "name": "buildSecrets", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "subtitle": { + "name": "subtitle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "cleanCache": { + "name": "cleanCache", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildPath": { + "name": "buildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBuildPath": { + "name": "gitlabBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBuildPath": { + "name": "giteaBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBuildPath": { + "name": "bitbucketBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBuildPath": { + "name": "customGitBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerfile": { + "name": "dockerfile", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'Dockerfile'" + }, + "dockerContextPath": { + "name": "dockerContextPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerBuildStage": { + "name": "dockerBuildStage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dropBuildPath": { + "name": "dropBuildPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "buildType": { + "name": "buildType", + "type": "buildType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'nixpacks'" + }, + "railpackVersion": { + "name": "railpackVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0.15.4'" + }, + "herokuVersion": { + "name": "herokuVersion", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'24'" + }, + "publishDirectory": { + "name": "publishDirectory", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isStaticSpa": { + "name": "isStaticSpa", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "createEnvFile": { + "name": "createEnvFile", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackRegistryId": { + "name": "rollbackRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildRegistryId": { + "name": "buildRegistryId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "application", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_registryId_registry_registryId_fk": { + "name": "application_registryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "registryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_rollbackRegistryId_registry_registryId_fk": { + "name": "application_rollbackRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "rollbackRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_environmentId_environment_environmentId_fk": { + "name": "application_environmentId_environment_environmentId_fk", + "tableFrom": "application", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_githubId_github_githubId_fk": { + "name": "application_githubId_github_githubId_fk", + "tableFrom": "application", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_gitlabId_gitlab_gitlabId_fk": { + "name": "application_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "application", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_giteaId_gitea_giteaId_fk": { + "name": "application_giteaId_gitea_giteaId_fk", + "tableFrom": "application", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "application_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "application", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_serverId_server_serverId_fk": { + "name": "application_serverId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "application_buildServerId_server_serverId_fk": { + "name": "application_buildServerId_server_serverId_fk", + "tableFrom": "application", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "application_buildRegistryId_registry_registryId_fk": { + "name": "application_buildRegistryId_registry_registryId_fk", + "tableFrom": "application", + "tableTo": "registry", + "columnsFrom": [ + "buildRegistryId" + ], + "columnsTo": [ + "registryId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "application_appName_unique": { + "name": "application_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.audit_log": { + "name": "audit_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_email": { + "name": "user_email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_role": { + "name": "user_role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "resource_type": { + "name": "resource_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "resource_id": { + "name": "resource_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resource_name": { + "name": "resource_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "auditLog_organizationId_idx": { + "name": "auditLog_organizationId_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "auditLog_userId_idx": { + "name": "auditLog_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "auditLog_createdAt_idx": { + "name": "auditLog_createdAt_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "audit_log_organization_id_organization_id_fk": { + "name": "audit_log_organization_id_organization_id_fk", + "tableFrom": "audit_log", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "audit_log_user_id_user_id_fk": { + "name": "audit_log_user_id_user_id_fk", + "tableFrom": "audit_log", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.backup": { + "name": "backup", + "schema": "", + "columns": { + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schedule": { + "name": "schedule", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "database": { + "name": "database", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "backupType": { + "name": "backupType", + "type": "backupType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'database'" + }, + "databaseType": { + "name": "databaseType", + "type": "databaseType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metadata": { + "name": "metadata", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "backup_destinationId_destination_destinationId_fk": { + "name": "backup_destinationId_destination_destinationId_fk", + "tableFrom": "backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_composeId_compose_composeId_fk": { + "name": "backup_composeId_compose_composeId_fk", + "tableFrom": "backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_postgresId_postgres_postgresId_fk": { + "name": "backup_postgresId_postgres_postgresId_fk", + "tableFrom": "backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mariadbId_mariadb_mariadbId_fk": { + "name": "backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mysqlId_mysql_mysqlId_fk": { + "name": "backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_mongoId_mongo_mongoId_fk": { + "name": "backup_mongoId_mongo_mongoId_fk", + "tableFrom": "backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_libsqlId_libsql_libsqlId_fk": { + "name": "backup_libsqlId_libsql_libsqlId_fk", + "tableFrom": "backup", + "tableTo": "libsql", + "columnsFrom": [ + "libsqlId" + ], + "columnsTo": [ + "libsqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "backup_userId_user_id_fk": { + "name": "backup_userId_user_id_fk", + "tableFrom": "backup", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "backup_appName_unique": { + "name": "backup_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.bitbucket": { + "name": "bitbucket", + "schema": "", + "columns": { + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "bitbucketUsername": { + "name": "bitbucketUsername", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketEmail": { + "name": "bitbucketEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "appPassword": { + "name": "appPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketWorkspaceName": { + "name": "bitbucketWorkspaceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { + "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "bitbucket", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.certificate": { + "name": "certificate", + "schema": "", + "columns": { + "certificateId": { + "name": "certificateId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificateData": { + "name": "certificateData", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "certificatePath": { + "name": "certificatePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "autoRenew": { + "name": "autoRenew", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "certificate_organizationId_organization_id_fk": { + "name": "certificate_organizationId_organization_id_fk", + "tableFrom": "certificate", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "certificate_serverId_server_serverId_fk": { + "name": "certificate_serverId_server_serverId_fk", + "tableFrom": "certificate", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "certificate_certificatePath_unique": { + "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, + "columns": [ + "certificatePath" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.compose": { + "name": "compose", + "schema": "", + "columns": { + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeFile": { + "name": "composeFile", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sourceType": { + "name": "sourceType", + "type": "sourceTypeCompose", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "composeType": { + "name": "composeType", + "type": "composeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'docker-compose'" + }, + "repository": { + "name": "repository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "autoDeploy": { + "name": "autoDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "gitlabProjectId": { + "name": "gitlabProjectId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitlabRepository": { + "name": "gitlabRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabOwner": { + "name": "gitlabOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabBranch": { + "name": "gitlabBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabPathNamespace": { + "name": "gitlabPathNamespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepository": { + "name": "bitbucketRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketRepositorySlug": { + "name": "bitbucketRepositorySlug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketOwner": { + "name": "bitbucketOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketBranch": { + "name": "bitbucketBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaRepository": { + "name": "giteaRepository", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaOwner": { + "name": "giteaOwner", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaBranch": { + "name": "giteaBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitUrl": { + "name": "customGitUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitBranch": { + "name": "customGitBranch", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customGitSSHKeyId": { + "name": "customGitSSHKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "enableSubmodules": { + "name": "enableSubmodules", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "composePath": { + "name": "composePath", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'./docker-compose.yml'" + }, + "suffix": { + "name": "suffix", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "randomize": { + "name": "randomize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeployment": { + "name": "isolatedDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isolatedDeploymentsVolume": { + "name": "isolatedDeploymentsVolume", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "triggerType": { + "name": "triggerType", + "type": "triggerType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'push'" + }, + "composeStatus": { + "name": "composeStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "watchPaths": { + "name": "watchPaths", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "bitbucketId": { + "name": "bitbucketId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { + "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "compose", + "tableTo": "ssh-key", + "columnsFrom": [ + "customGitSSHKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_environmentId_environment_environmentId_fk": { + "name": "compose_environmentId_environment_environmentId_fk", + "tableFrom": "compose", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "compose_githubId_github_githubId_fk": { + "name": "compose_githubId_github_githubId_fk", + "tableFrom": "compose", + "tableTo": "github", + "columnsFrom": [ + "githubId" + ], + "columnsTo": [ + "githubId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_gitlabId_gitlab_gitlabId_fk": { + "name": "compose_gitlabId_gitlab_gitlabId_fk", + "tableFrom": "compose", + "tableTo": "gitlab", + "columnsFrom": [ + "gitlabId" + ], + "columnsTo": [ + "gitlabId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_bitbucketId_bitbucket_bitbucketId_fk": { + "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", + "tableFrom": "compose", + "tableTo": "bitbucket", + "columnsFrom": [ + "bitbucketId" + ], + "columnsTo": [ + "bitbucketId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_giteaId_gitea_giteaId_fk": { + "name": "compose_giteaId_gitea_giteaId_fk", + "tableFrom": "compose", + "tableTo": "gitea", + "columnsFrom": [ + "giteaId" + ], + "columnsTo": [ + "giteaId" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "compose_serverId_server_serverId_fk": { + "name": "compose_serverId_server_serverId_fk", + "tableFrom": "compose", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.deployment": { + "name": "deployment", + "schema": "", + "columns": { + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "deploymentStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'running'" + }, + "logPath": { + "name": "logPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pid": { + "name": "pid", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isPreviewDeployment": { + "name": "isPreviewDeployment", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "startedAt": { + "name": "startedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "finishedAt": { + "name": "finishedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "backupId": { + "name": "backupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "buildServerId": { + "name": "buildServerId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "deployment_applicationId_application_applicationId_fk": { + "name": "deployment_applicationId_application_applicationId_fk", + "tableFrom": "deployment", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_composeId_compose_composeId_fk": { + "name": "deployment_composeId_compose_composeId_fk", + "tableFrom": "deployment", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_serverId_server_serverId_fk": { + "name": "deployment_serverId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "deployment", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_scheduleId_schedule_scheduleId_fk": { + "name": "deployment_scheduleId_schedule_scheduleId_fk", + "tableFrom": "deployment", + "tableTo": "schedule", + "columnsFrom": [ + "scheduleId" + ], + "columnsTo": [ + "scheduleId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_backupId_backup_backupId_fk": { + "name": "deployment_backupId_backup_backupId_fk", + "tableFrom": "deployment", + "tableTo": "backup", + "columnsFrom": [ + "backupId" + ], + "columnsTo": [ + "backupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_rollbackId_rollback_rollbackId_fk": { + "name": "deployment_rollbackId_rollback_rollbackId_fk", + "tableFrom": "deployment", + "tableTo": "rollback", + "columnsFrom": [ + "rollbackId" + ], + "columnsTo": [ + "rollbackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_volumeBackupId_volume_backup_volumeBackupId_fk": { + "name": "deployment_volumeBackupId_volume_backup_volumeBackupId_fk", + "tableFrom": "deployment", + "tableTo": "volume_backup", + "columnsFrom": [ + "volumeBackupId" + ], + "columnsTo": [ + "volumeBackupId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "deployment_buildServerId_server_serverId_fk": { + "name": "deployment_buildServerId_server_serverId_fk", + "tableFrom": "deployment", + "tableTo": "server", + "columnsFrom": [ + "buildServerId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.destination": { + "name": "destination", + "schema": "", + "columns": { + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "accessKey": { + "name": "accessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secretAccessKey": { + "name": "secretAccessKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "bucket": { + "name": "bucket", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "region": { + "name": "region", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "additionalFlags": { + "name": "additionalFlags", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "destination_organizationId_organization_id_fk": { + "name": "destination_organizationId_organization_id_fk", + "tableFrom": "destination", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.domain": { + "name": "domain", + "schema": "", + "columns": { + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 3000 + }, + "customEntrypoint": { + "name": "customEntrypoint", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domainType": { + "name": "domainType", + "type": "domainType", + "typeSchema": "public", + "primaryKey": false, + "notNull": false, + "default": "'application'" + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customCertResolver": { + "name": "customCertResolver", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "internalPath": { + "name": "internalPath", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'/'" + }, + "stripPath": { + "name": "stripPath", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "middlewares": { + "name": "middlewares", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": { + "domain_composeId_compose_composeId_fk": { + "name": "domain_composeId_compose_composeId_fk", + "tableFrom": "domain", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_applicationId_application_applicationId_fk": { + "name": "domain_applicationId_application_applicationId_fk", + "tableFrom": "domain", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { + "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", + "tableFrom": "domain", + "tableTo": "preview_deployments", + "columnsFrom": [ + "previewDeploymentId" + ], + "columnsTo": [ + "previewDeploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.environment": { + "name": "environment", + "schema": "", + "columns": { + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isDefault": { + "name": "isDefault", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "environment_projectId_project_projectId_fk": { + "name": "environment_projectId_project_projectId_fk", + "tableFrom": "environment", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.git_provider": { + "name": "git_provider", + "schema": "", + "columns": { + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerType": { + "name": "providerType", + "type": "gitProviderType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'github'" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sharedWithOrganization": { + "name": "sharedWithOrganization", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "git_provider_organizationId_organization_id_fk": { + "name": "git_provider_organizationId_organization_id_fk", + "tableFrom": "git_provider", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "git_provider_userId_user_id_fk": { + "name": "git_provider_userId_user_id_fk", + "tableFrom": "git_provider", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitea": { + "name": "gitea", + "schema": "", + "columns": { + "giteaId": { + "name": "giteaId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "giteaUrl": { + "name": "giteaUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitea.com'" + }, + "giteaInternalUrl": { + "name": "giteaInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_secret": { + "name": "client_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "scopes": { + "name": "scopes", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'repo,repo:status,read:user,read:org'" + }, + "last_authenticated_at": { + "name": "last_authenticated_at", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "gitea_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitea_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitea", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.github": { + "name": "github", + "schema": "", + "columns": { + "githubId": { + "name": "githubId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "githubAppName": { + "name": "githubAppName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubAppId": { + "name": "githubAppId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "githubClientId": { + "name": "githubClientId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubClientSecret": { + "name": "githubClientSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubInstallationId": { + "name": "githubInstallationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubPrivateKey": { + "name": "githubPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "githubWebhookSecret": { + "name": "githubWebhookSecret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "github_gitProviderId_git_provider_gitProviderId_fk": { + "name": "github_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "github", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gitlab": { + "name": "gitlab", + "schema": "", + "columns": { + "gitlabId": { + "name": "gitlabId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "gitlabUrl": { + "name": "gitlabUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'https://gitlab.com'" + }, + "gitlabInternalUrl": { + "name": "gitlabInternalUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "application_id": { + "name": "application_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "group_name": { + "name": "group_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "gitProviderId": { + "name": "gitProviderId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "gitlab_gitProviderId_git_provider_gitProviderId_fk": { + "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", + "tableFrom": "gitlab", + "tableTo": "git_provider", + "columnsFrom": [ + "gitProviderId" + ], + "columnsTo": [ + "gitProviderId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.libsql": { + "name": "libsql", + "schema": "", + "columns": { + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "sqldNode": { + "name": "sqldNode", + "type": "sqldNode", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'primary'" + }, + "sqldPrimaryUrl": { + "name": "sqldPrimaryUrl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableNamespaces": { + "name": "enableNamespaces", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "externalGRPCPort": { + "name": "externalGRPCPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "externalAdminPort": { + "name": "externalAdminPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "libsql_environmentId_environment_environmentId_fk": { + "name": "libsql_environmentId_environment_environmentId_fk", + "tableFrom": "libsql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "libsql_serverId_server_serverId_fk": { + "name": "libsql_serverId_server_serverId_fk", + "tableFrom": "libsql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "libsql_appName_unique": { + "name": "libsql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.managed_server": { + "name": "managed_server", + "schema": "", + "columns": { + "managedServerId": { + "name": "managedServerId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "plan": { + "name": "plan", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "managedServerStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "hostingerVmId": { + "name": "hostingerVmId", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "hostingerSubscriptionId": { + "name": "hostingerSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dataCenterId": { + "name": "dataCenterId", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "hostname": { + "name": "hostname", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripePriceId": { + "name": "stripePriceId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "errorMessage": { + "name": "errorMessage", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updatedAt": { + "name": "updatedAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "managed_server_organizationId_organization_id_fk": { + "name": "managed_server_organizationId_organization_id_fk", + "tableFrom": "managed_server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "managed_server_serverId_server_serverId_fk": { + "name": "managed_server_serverId_server_serverId_fk", + "tableFrom": "managed_server", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mariadb": { + "name": "mariadb", + "schema": "", + "columns": { + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mariadb_environmentId_environment_environmentId_fk": { + "name": "mariadb_environmentId_environment_environmentId_fk", + "tableFrom": "mariadb", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mariadb_serverId_server_serverId_fk": { + "name": "mariadb_serverId_server_serverId_fk", + "tableFrom": "mariadb", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mariadb_appName_unique": { + "name": "mariadb_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mongo": { + "name": "mongo", + "schema": "", + "columns": { + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'mongo:8'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "replicaSets": { + "name": "replicaSets", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "mongo_environmentId_environment_environmentId_fk": { + "name": "mongo_environmentId_environment_environmentId_fk", + "tableFrom": "mongo", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mongo_serverId_server_serverId_fk": { + "name": "mongo_serverId_server_serverId_fk", + "tableFrom": "mongo", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mongo_appName_unique": { + "name": "mongo_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mount": { + "name": "mount", + "schema": "", + "columns": { + "mountId": { + "name": "mountId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "mountType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "hostPath": { + "name": "hostPath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "mountPath": { + "name": "mountPath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mount_applicationId_application_applicationId_fk": { + "name": "mount_applicationId_application_applicationId_fk", + "tableFrom": "mount", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_composeId_compose_composeId_fk": { + "name": "mount_composeId_compose_composeId_fk", + "tableFrom": "mount", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_libsqlId_libsql_libsqlId_fk": { + "name": "mount_libsqlId_libsql_libsqlId_fk", + "tableFrom": "mount", + "tableTo": "libsql", + "columnsFrom": [ + "libsqlId" + ], + "columnsTo": [ + "libsqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mariadbId_mariadb_mariadbId_fk": { + "name": "mount_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "mount", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mongoId_mongo_mongoId_fk": { + "name": "mount_mongoId_mongo_mongoId_fk", + "tableFrom": "mount", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_mysqlId_mysql_mysqlId_fk": { + "name": "mount_mysqlId_mysql_mysqlId_fk", + "tableFrom": "mount", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_postgresId_postgres_postgresId_fk": { + "name": "mount_postgresId_postgres_postgresId_fk", + "tableFrom": "mount", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mount_redisId_redis_redisId_fk": { + "name": "mount_redisId_redis_redisId_fk", + "tableFrom": "mount", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mysql": { + "name": "mysql", + "schema": "", + "columns": { + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "rootPassword": { + "name": "rootPassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "mysql_environmentId_environment_environmentId_fk": { + "name": "mysql_environmentId_environment_environmentId_fk", + "tableFrom": "mysql", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "mysql_serverId_server_serverId_fk": { + "name": "mysql_serverId_server_serverId_fk", + "tableFrom": "mysql", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "mysql_appName_unique": { + "name": "mysql_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.custom": { + "name": "custom", + "schema": "", + "columns": { + "customId": { + "name": "customId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "headers": { + "name": "headers", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.discord": { + "name": "discord", + "schema": "", + "columns": { + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email": { + "name": "email", + "schema": "", + "columns": { + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "smtpServer": { + "name": "smtpServer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "smtpPort": { + "name": "smtpPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.gotify": { + "name": "gotify", + "schema": "", + "columns": { + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appToken": { + "name": "appToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 5 + }, + "decoration": { + "name": "decoration", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.lark": { + "name": "lark", + "schema": "", + "columns": { + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.mattermost": { + "name": "mattermost", + "schema": "", + "columns": { + "mattermostId": { + "name": "mattermostId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notification": { + "name": "notification", + "schema": "", + "columns": { + "notificationId": { + "name": "notificationId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appDeploy": { + "name": "appDeploy", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "appBuildError": { + "name": "appBuildError", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "databaseBackup": { + "name": "databaseBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "volumeBackup": { + "name": "volumeBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployRestart": { + "name": "dokployRestart", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dokployBackup": { + "name": "dokployBackup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "dockerCleanup": { + "name": "dockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "serverThreshold": { + "name": "serverThreshold", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "notificationType": { + "name": "notificationType", + "type": "notificationType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "discordId": { + "name": "discordId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "emailId": { + "name": "emailId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "gotifyId": { + "name": "gotifyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mattermostId": { + "name": "mattermostId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "customId": { + "name": "customId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "larkId": { + "name": "larkId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "teamsId": { + "name": "teamsId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "notification_slackId_slack_slackId_fk": { + "name": "notification_slackId_slack_slackId_fk", + "tableFrom": "notification", + "tableTo": "slack", + "columnsFrom": [ + "slackId" + ], + "columnsTo": [ + "slackId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_telegramId_telegram_telegramId_fk": { + "name": "notification_telegramId_telegram_telegramId_fk", + "tableFrom": "notification", + "tableTo": "telegram", + "columnsFrom": [ + "telegramId" + ], + "columnsTo": [ + "telegramId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_discordId_discord_discordId_fk": { + "name": "notification_discordId_discord_discordId_fk", + "tableFrom": "notification", + "tableTo": "discord", + "columnsFrom": [ + "discordId" + ], + "columnsTo": [ + "discordId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_emailId_email_emailId_fk": { + "name": "notification_emailId_email_emailId_fk", + "tableFrom": "notification", + "tableTo": "email", + "columnsFrom": [ + "emailId" + ], + "columnsTo": [ + "emailId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_resendId_resend_resendId_fk": { + "name": "notification_resendId_resend_resendId_fk", + "tableFrom": "notification", + "tableTo": "resend", + "columnsFrom": [ + "resendId" + ], + "columnsTo": [ + "resendId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_gotifyId_gotify_gotifyId_fk": { + "name": "notification_gotifyId_gotify_gotifyId_fk", + "tableFrom": "notification", + "tableTo": "gotify", + "columnsFrom": [ + "gotifyId" + ], + "columnsTo": [ + "gotifyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_ntfyId_ntfy_ntfyId_fk": { + "name": "notification_ntfyId_ntfy_ntfyId_fk", + "tableFrom": "notification", + "tableTo": "ntfy", + "columnsFrom": [ + "ntfyId" + ], + "columnsTo": [ + "ntfyId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_mattermostId_mattermost_mattermostId_fk": { + "name": "notification_mattermostId_mattermost_mattermostId_fk", + "tableFrom": "notification", + "tableTo": "mattermost", + "columnsFrom": [ + "mattermostId" + ], + "columnsTo": [ + "mattermostId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_customId_custom_customId_fk": { + "name": "notification_customId_custom_customId_fk", + "tableFrom": "notification", + "tableTo": "custom", + "columnsFrom": [ + "customId" + ], + "columnsTo": [ + "customId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_larkId_lark_larkId_fk": { + "name": "notification_larkId_lark_larkId_fk", + "tableFrom": "notification", + "tableTo": "lark", + "columnsFrom": [ + "larkId" + ], + "columnsTo": [ + "larkId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_pushoverId_pushover_pushoverId_fk": { + "name": "notification_pushoverId_pushover_pushoverId_fk", + "tableFrom": "notification", + "tableTo": "pushover", + "columnsFrom": [ + "pushoverId" + ], + "columnsTo": [ + "pushoverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_teamsId_teams_teamsId_fk": { + "name": "notification_teamsId_teams_teamsId_fk", + "tableFrom": "notification", + "tableTo": "teams", + "columnsFrom": [ + "teamsId" + ], + "columnsTo": [ + "teamsId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_organizationId_organization_id_fk": { + "name": "notification_organizationId_organization_id_fk", + "tableFrom": "notification", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ntfy": { + "name": "ntfy", + "schema": "", + "columns": { + "ntfyId": { + "name": "ntfyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverUrl": { + "name": "serverUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "topic": { + "name": "topic", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "accessToken": { + "name": "accessToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 3 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.pushover": { + "name": "pushover", + "schema": "", + "columns": { + "pushoverId": { + "name": "pushoverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "userKey": { + "name": "userKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiToken": { + "name": "apiToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "retry": { + "name": "retry", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "expire": { + "name": "expire", + "type": "integer", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.resend": { + "name": "resend", + "schema": "", + "columns": { + "resendId": { + "name": "resendId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fromAddress": { + "name": "fromAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "toAddress": { + "name": "toAddress", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slack": { + "name": "slack", + "schema": "", + "columns": { + "slackId": { + "name": "slackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.teams": { + "name": "teams", + "schema": "", + "columns": { + "teamsId": { + "name": "teamsId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "webhookUrl": { + "name": "webhookUrl", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.telegram": { + "name": "telegram", + "schema": "", + "columns": { + "telegramId": { + "name": "telegramId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "botToken": { + "name": "botToken", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chatId": { + "name": "chatId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "messageThreadId": { + "name": "messageThreadId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.patch": { + "name": "patch", + "schema": "", + "columns": { + "patchId": { + "name": "patchId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "patchType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'update'" + }, + "filePath": { + "name": "filePath", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "updatedAt": { + "name": "updatedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "patch_applicationId_application_applicationId_fk": { + "name": "patch_applicationId_application_applicationId_fk", + "tableFrom": "patch", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "patch_composeId_compose_composeId_fk": { + "name": "patch_composeId_compose_composeId_fk", + "tableFrom": "patch", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "patch_filepath_application_unique": { + "name": "patch_filepath_application_unique", + "nullsNotDistinct": false, + "columns": [ + "filePath", + "applicationId" + ] + }, + "patch_filepath_compose_unique": { + "name": "patch_filepath_compose_unique", + "nullsNotDistinct": false, + "columns": [ + "filePath", + "composeId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.port": { + "name": "port", + "schema": "", + "columns": { + "portId": { + "name": "portId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "publishedPort": { + "name": "publishedPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "publishMode": { + "name": "publishMode", + "type": "publishModeType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'host'" + }, + "targetPort": { + "name": "targetPort", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "protocol": { + "name": "protocol", + "type": "protocolType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "port_applicationId_application_applicationId_fk": { + "name": "port_applicationId_application_applicationId_fk", + "tableFrom": "port", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.postgres": { + "name": "postgres", + "schema": "", + "columns": { + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseName": { + "name": "databaseName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databaseUser": { + "name": "databaseUser", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "databasePassword": { + "name": "databasePassword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "postgres_environmentId_environment_environmentId_fk": { + "name": "postgres_environmentId_environment_environmentId_fk", + "tableFrom": "postgres", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "postgres_serverId_server_serverId_fk": { + "name": "postgres_serverId_server_serverId_fk", + "tableFrom": "postgres", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "postgres_appName_unique": { + "name": "postgres_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.preview_deployments": { + "name": "preview_deployments", + "schema": "", + "columns": { + "previewDeploymentId": { + "name": "previewDeploymentId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestId": { + "name": "pullRequestId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestNumber": { + "name": "pullRequestNumber", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestURL": { + "name": "pullRequestURL", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestTitle": { + "name": "pullRequestTitle", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "pullRequestCommentId": { + "name": "pullRequestCommentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "previewStatus": { + "name": "previewStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "domainId": { + "name": "domainId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "preview_deployments_applicationId_application_applicationId_fk": { + "name": "preview_deployments_applicationId_application_applicationId_fk", + "tableFrom": "preview_deployments", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "preview_deployments_domainId_domain_domainId_fk": { + "name": "preview_deployments_domainId_domain_domainId_fk", + "tableFrom": "preview_deployments", + "tableTo": "domain", + "columnsFrom": [ + "domainId" + ], + "columnsTo": [ + "domainId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "preview_deployments_appName_unique": { + "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project": { + "name": "project", + "schema": "", + "columns": { + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": { + "project_organizationId_organization_id_fk": { + "name": "project_organizationId_organization_id_fk", + "tableFrom": "project", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redirect": { + "name": "redirect", + "schema": "", + "columns": { + "redirectId": { + "name": "redirectId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "regex": { + "name": "regex", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "replacement": { + "name": "replacement", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permanent": { + "name": "permanent", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "uniqueConfigKey": { + "name": "uniqueConfigKey", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "redirect_applicationId_application_applicationId_fk": { + "name": "redirect_applicationId_application_applicationId_fk", + "tableFrom": "redirect", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.redis": { + "name": "redis", + "schema": "", + "columns": { + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "dockerImage": { + "name": "dockerImage", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "args": { + "name": "args", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "env": { + "name": "env", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryReservation": { + "name": "memoryReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "memoryLimit": { + "name": "memoryLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuReservation": { + "name": "cpuReservation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cpuLimit": { + "name": "cpuLimit", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "externalPort": { + "name": "externalPort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationStatus": { + "name": "applicationStatus", + "type": "applicationStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'idle'" + }, + "healthCheckSwarm": { + "name": "healthCheckSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "restartPolicySwarm": { + "name": "restartPolicySwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "placementSwarm": { + "name": "placementSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "updateConfigSwarm": { + "name": "updateConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "rollbackConfigSwarm": { + "name": "rollbackConfigSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "modeSwarm": { + "name": "modeSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "labelsSwarm": { + "name": "labelsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "networkSwarm": { + "name": "networkSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "stopGracePeriodSwarm": { + "name": "stopGracePeriodSwarm", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "endpointSpecSwarm": { + "name": "endpointSpecSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "ulimitsSwarm": { + "name": "ulimitsSwarm", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "replicas": { + "name": "replicas", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "environmentId": { + "name": "environmentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "redis_environmentId_environment_environmentId_fk": { + "name": "redis_environmentId_environment_environmentId_fk", + "tableFrom": "redis", + "tableTo": "environment", + "columnsFrom": [ + "environmentId" + ], + "columnsTo": [ + "environmentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "redis_serverId_server_serverId_fk": { + "name": "redis_serverId_server_serverId_fk", + "tableFrom": "redis", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "redis_appName_unique": { + "name": "redis_appName_unique", + "nullsNotDistinct": false, + "columns": [ + "appName" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.registry": { + "name": "registry", + "schema": "", + "columns": { + "registryId": { + "name": "registryId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "registryName": { + "name": "registryName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "imagePrefix": { + "name": "imagePrefix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "registryUrl": { + "name": "registryUrl", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "selfHosted": { + "name": "selfHosted", + "type": "RegistryType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'cloud'" + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "registry_organizationId_organization_id_fk": { + "name": "registry_organizationId_organization_id_fk", + "tableFrom": "registry", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.rollback": { + "name": "rollback", + "schema": "", + "columns": { + "rollbackId": { + "name": "rollbackId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "deploymentId": { + "name": "deploymentId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "serial", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "fullContext": { + "name": "fullContext", + "type": "jsonb", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "rollback_deploymentId_deployment_deploymentId_fk": { + "name": "rollback_deploymentId_deployment_deploymentId_fk", + "tableFrom": "rollback", + "tableTo": "deployment", + "columnsFrom": [ + "deploymentId" + ], + "columnsTo": [ + "deploymentId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.schedule": { + "name": "schedule", + "schema": "", + "columns": { + "scheduleId": { + "name": "scheduleId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "shellType": { + "name": "shellType", + "type": "shellType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'bash'" + }, + "scheduleType": { + "name": "scheduleType", + "type": "scheduleType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "script": { + "name": "script", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "timezone": { + "name": "timezone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "schedule_applicationId_application_applicationId_fk": { + "name": "schedule_applicationId_application_applicationId_fk", + "tableFrom": "schedule", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_composeId_compose_composeId_fk": { + "name": "schedule_composeId_compose_composeId_fk", + "tableFrom": "schedule", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_serverId_server_serverId_fk": { + "name": "schedule_serverId_server_serverId_fk", + "tableFrom": "schedule", + "tableTo": "server", + "columnsFrom": [ + "serverId" + ], + "columnsTo": [ + "serverId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schedule_userId_user_id_fk": { + "name": "schedule_userId_user_id_fk", + "tableFrom": "schedule", + "tableTo": "user", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.security": { + "name": "security", + "schema": "", + "columns": { + "securityId": { + "name": "securityId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "security_applicationId_application_applicationId_fk": { + "name": "security_applicationId_application_applicationId_fk", + "tableFrom": "security", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "security_username_applicationId_unique": { + "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, + "columns": [ + "username", + "applicationId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.server": { + "name": "server", + "schema": "", + "columns": { + "serverId": { + "name": "serverId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'root'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serverStatus": { + "name": "serverStatus", + "type": "serverStatus", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "serverType": { + "name": "serverType", + "type": "serverType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'deploy'" + }, + "command": { + "name": "command", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + } + }, + "indexes": {}, + "foreignKeys": { + "server_organizationId_organization_id_fk": { + "name": "server_organizationId_organization_id_fk", + "tableFrom": "server", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "server_sshKeyId_ssh-key_sshKeyId_fk": { + "name": "server_sshKeyId_ssh-key_sshKeyId_fk", + "tableFrom": "server", + "tableTo": "ssh-key", + "columnsFrom": [ + "sshKeyId" + ], + "columnsTo": [ + "sshKeyId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ssh-key": { + "name": "ssh-key", + "schema": "", + "columns": { + "sshKeyId": { + "name": "sshKeyId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "lastUsedAt": { + "name": "lastUsedAt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "ssh-key_organizationId_organization_id_fk": { + "name": "ssh-key_organizationId_organization_id_fk", + "tableFrom": "ssh-key", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.sso_provider": { + "name": "sso_provider", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "issuer": { + "name": "issuer", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oidc_config": { + "name": "oidc_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "saml_config": { + "name": "saml_config", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "sso_provider_user_id_user_id_fk": { + "name": "sso_provider_user_id_user_id_fk", + "tableFrom": "sso_provider", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "sso_provider_organization_id_organization_id_fk": { + "name": "sso_provider_organization_id_organization_id_fk", + "tableFrom": "sso_provider", + "tableTo": "organization", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sso_provider_provider_id_unique": { + "name": "sso_provider_provider_id_unique", + "nullsNotDistinct": false, + "columns": [ + "provider_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project_tag": { + "name": "project_tag", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "projectId": { + "name": "projectId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "tagId": { + "name": "tagId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "project_tag_projectId_project_projectId_fk": { + "name": "project_tag_projectId_project_projectId_fk", + "tableFrom": "project_tag", + "tableTo": "project", + "columnsFrom": [ + "projectId" + ], + "columnsTo": [ + "projectId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "project_tag_tagId_tag_tagId_fk": { + "name": "project_tag_tagId_tag_tagId_fk", + "tableFrom": "project_tag", + "tableTo": "tag", + "columnsFrom": [ + "tagId" + ], + "columnsTo": [ + "tagId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_project_tag": { + "name": "unique_project_tag", + "nullsNotDistinct": false, + "columns": [ + "projectId", + "tagId" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.tag": { + "name": "tag", + "schema": "", + "columns": { + "tagId": { + "name": "tagId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "color": { + "name": "color", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organizationId": { + "name": "organizationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "tag_organizationId_organization_id_fk": { + "name": "tag_organizationId_organization_id_fk", + "tableFrom": "tag", + "tableTo": "organization", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_org_tag_name": { + "name": "unique_org_tag_name", + "nullsNotDistinct": false, + "columns": [ + "organizationId", + "name" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "firstName": { + "name": "firstName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "lastName": { + "name": "lastName", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "isRegistered": { + "name": "isRegistered", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "expirationDate": { + "name": "expirationDate", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "two_factor_enabled": { + "name": "two_factor_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'user'" + }, + "enablePaidFeatures": { + "name": "enablePaidFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "allowImpersonation": { + "name": "allowImpersonation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enableEnterpriseFeatures": { + "name": "enableEnterpriseFeatures", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "licenseKey": { + "name": "licenseKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "isValidEnterpriseLicense": { + "name": "isValidEnterpriseLicense", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "stripeCustomerId": { + "name": "stripeCustomerId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripeSubscriptionId": { + "name": "stripeSubscriptionId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "serversQuantity": { + "name": "serversQuantity", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "sendInvoiceNotifications": { + "name": "sendInvoiceNotifications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "isEnterpriseCloud": { + "name": "isEnterpriseCloud", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "trustedOrigins": { + "name": "trustedOrigins", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "bookmarkedTemplates": { + "name": "bookmarkedTemplates", + "type": "text[]", + "primaryKey": false, + "notNull": false, + "default": "ARRAY[]::text[]" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.volume_backup": { + "name": "volume_backup", + "schema": "", + "columns": { + "volumeBackupId": { + "name": "volumeBackupId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "volumeName": { + "name": "volumeName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceType": { + "name": "serviceType", + "type": "serviceType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'application'" + }, + "appName": { + "name": "appName", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "serviceName": { + "name": "serviceName", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "turnOff": { + "name": "turnOff", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cronExpression": { + "name": "cronExpression", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "keepLatestCount": { + "name": "keepLatestCount", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "applicationId": { + "name": "applicationId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "postgresId": { + "name": "postgresId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mariadbId": { + "name": "mariadbId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mongoId": { + "name": "mongoId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mysqlId": { + "name": "mysqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "redisId": { + "name": "redisId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "libsqlId": { + "name": "libsqlId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composeId": { + "name": "composeId", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "destinationId": { + "name": "destinationId", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "volume_backup_applicationId_application_applicationId_fk": { + "name": "volume_backup_applicationId_application_applicationId_fk", + "tableFrom": "volume_backup", + "tableTo": "application", + "columnsFrom": [ + "applicationId" + ], + "columnsTo": [ + "applicationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_postgresId_postgres_postgresId_fk": { + "name": "volume_backup_postgresId_postgres_postgresId_fk", + "tableFrom": "volume_backup", + "tableTo": "postgres", + "columnsFrom": [ + "postgresId" + ], + "columnsTo": [ + "postgresId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mariadbId_mariadb_mariadbId_fk": { + "name": "volume_backup_mariadbId_mariadb_mariadbId_fk", + "tableFrom": "volume_backup", + "tableTo": "mariadb", + "columnsFrom": [ + "mariadbId" + ], + "columnsTo": [ + "mariadbId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mongoId_mongo_mongoId_fk": { + "name": "volume_backup_mongoId_mongo_mongoId_fk", + "tableFrom": "volume_backup", + "tableTo": "mongo", + "columnsFrom": [ + "mongoId" + ], + "columnsTo": [ + "mongoId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_mysqlId_mysql_mysqlId_fk": { + "name": "volume_backup_mysqlId_mysql_mysqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "mysql", + "columnsFrom": [ + "mysqlId" + ], + "columnsTo": [ + "mysqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_redisId_redis_redisId_fk": { + "name": "volume_backup_redisId_redis_redisId_fk", + "tableFrom": "volume_backup", + "tableTo": "redis", + "columnsFrom": [ + "redisId" + ], + "columnsTo": [ + "redisId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_libsqlId_libsql_libsqlId_fk": { + "name": "volume_backup_libsqlId_libsql_libsqlId_fk", + "tableFrom": "volume_backup", + "tableTo": "libsql", + "columnsFrom": [ + "libsqlId" + ], + "columnsTo": [ + "libsqlId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_composeId_compose_composeId_fk": { + "name": "volume_backup_composeId_compose_composeId_fk", + "tableFrom": "volume_backup", + "tableTo": "compose", + "columnsFrom": [ + "composeId" + ], + "columnsTo": [ + "composeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "volume_backup_destinationId_destination_destinationId_fk": { + "name": "volume_backup_destinationId_destination_destinationId_fk", + "tableFrom": "volume_backup", + "tableTo": "destination", + "columnsFrom": [ + "destinationId" + ], + "columnsTo": [ + "destinationId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.webServerSettings": { + "name": "webServerSettings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "serverIp": { + "name": "serverIp", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "certificateType": { + "name": "certificateType", + "type": "certificateType", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'none'" + }, + "https": { + "name": "https", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "host": { + "name": "host", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "letsEncryptEmail": { + "name": "letsEncryptEmail", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sshPrivateKey": { + "name": "sshPrivateKey", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "enableDockerCleanup": { + "name": "enableDockerCleanup", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "logCleanupCron": { + "name": "logCleanupCron", + "type": "text", + "primaryKey": false, + "notNull": false, + "default": "'0 0 * * *'" + }, + "metricsConfig": { + "name": "metricsConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" + }, + "whitelabelingConfig": { + "name": "whitelabelingConfig", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'{\"appName\":null,\"appDescription\":null,\"logoUrl\":null,\"faviconUrl\":null,\"customCss\":null,\"loginLogoUrl\":null,\"supportUrl\":null,\"docsUrl\":null,\"errorPageTitle\":null,\"errorPageDescription\":null,\"metaTitle\":null,\"footerText\":null}'::jsonb" + }, + "cleanupCacheApplications": { + "name": "cleanupCacheApplications", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnPreviews": { + "name": "cleanupCacheOnPreviews", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "cleanupCacheOnCompose": { + "name": "cleanupCacheOnCompose", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.buildType": { + "name": "buildType", + "schema": "public", + "values": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "public.sourceType": { + "name": "sourceType", + "schema": "public", + "values": [ + "docker", + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "public.backupType": { + "name": "backupType", + "schema": "public", + "values": [ + "database", + "compose" + ] + }, + "public.databaseType": { + "name": "databaseType", + "schema": "public", + "values": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server", + "libsql" + ] + }, + "public.composeType": { + "name": "composeType", + "schema": "public", + "values": [ + "docker-compose", + "stack" + ] + }, + "public.sourceTypeCompose": { + "name": "sourceTypeCompose", + "schema": "public", + "values": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "public.deploymentStatus": { + "name": "deploymentStatus", + "schema": "public", + "values": [ + "running", + "done", + "error", + "cancelled" + ] + }, + "public.domainType": { + "name": "domainType", + "schema": "public", + "values": [ + "compose", + "application", + "preview" + ] + }, + "public.gitProviderType": { + "name": "gitProviderType", + "schema": "public", + "values": [ + "github", + "gitlab", + "bitbucket", + "gitea" + ] + }, + "public.managedServerStatus": { + "name": "managedServerStatus", + "schema": "public", + "values": [ + "pending", + "provisioning", + "configuring", + "ready", + "error", + "terminating", + "terminated" + ] + }, + "public.mountType": { + "name": "mountType", + "schema": "public", + "values": [ + "bind", + "volume", + "file" + ] + }, + "public.serviceType": { + "name": "serviceType", + "schema": "public", + "values": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose", + "libsql" + ] + }, + "public.notificationType": { + "name": "notificationType", + "schema": "public", + "values": [ + "slack", + "telegram", + "discord", + "email", + "resend", + "gotify", + "ntfy", + "mattermost", + "pushover", + "custom", + "lark", + "teams" + ] + }, + "public.patchType": { + "name": "patchType", + "schema": "public", + "values": [ + "create", + "update", + "delete" + ] + }, + "public.protocolType": { + "name": "protocolType", + "schema": "public", + "values": [ + "tcp", + "udp" + ] + }, + "public.publishModeType": { + "name": "publishModeType", + "schema": "public", + "values": [ + "ingress", + "host" + ] + }, + "public.RegistryType": { + "name": "RegistryType", + "schema": "public", + "values": [ + "selfHosted", + "cloud" + ] + }, + "public.scheduleType": { + "name": "scheduleType", + "schema": "public", + "values": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "public.shellType": { + "name": "shellType", + "schema": "public", + "values": [ + "bash", + "sh" + ] + }, + "public.serverStatus": { + "name": "serverStatus", + "schema": "public", + "values": [ + "active", + "inactive" + ] + }, + "public.serverType": { + "name": "serverType", + "schema": "public", + "values": [ + "deploy", + "build" + ] + }, + "public.applicationStatus": { + "name": "applicationStatus", + "schema": "public", + "values": [ + "idle", + "running", + "done", + "error" + ] + }, + "public.certificateType": { + "name": "certificateType", + "schema": "public", + "values": [ + "letsencrypt", + "none", + "custom" + ] + }, + "public.sqldNode": { + "name": "sqldNode", + "schema": "public", + "values": [ + "primary", + "replica" + ] + }, + "public.triggerType": { + "name": "triggerType", + "schema": "public", + "values": [ + "push", + "tag" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index 790d5a2a0..9f9b3c8a1 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -1163,6 +1163,20 @@ "when": 1775845419261, "tag": "0165_abnormal_greymalkin", "breakpoints": true + }, + { + "idx": 166, + "version": "7", + "when": 1777967101978, + "tag": "0166_lame_meltdown", + "breakpoints": true + }, + { + "idx": 167, + "version": "7", + "when": 1777967443440, + "tag": "0167_cultured_captain_cross", + "breakpoints": true } ] } \ No newline at end of file diff --git a/apps/dokploy/pages/dashboard/settings/managed-servers.tsx b/apps/dokploy/pages/dashboard/settings/managed-servers.tsx new file mode 100644 index 000000000..b0b7ddf73 --- /dev/null +++ b/apps/dokploy/pages/dashboard/settings/managed-servers.tsx @@ -0,0 +1,39 @@ +import { IS_CLOUD } from "@dokploy/server/constants"; +import { validateRequest } from "@dokploy/server/lib/auth"; +import type { GetServerSidePropsContext } from "next"; +import type { ReactElement } from "react"; +import { ShowManagedServers } from "@/components/dashboard/settings/billing/show-managed-servers"; +import { DashboardLayout } from "@/components/layouts/dashboard-layout"; + +const Page = () => { + return ; +}; + +export default Page; + +Page.getLayout = (page: ReactElement) => { + return {page}; +}; + +export async function getServerSideProps( + ctx: GetServerSidePropsContext, +) { + if (!IS_CLOUD) { + return { + redirect: { + permanent: false, + destination: "/dashboard/home", + }, + }; + } + const { user } = await validateRequest(ctx.req); + if (!user || user.role !== "owner") { + return { + redirect: { + permanent: false, + destination: "/", + }, + }; + } + return { props: {} }; +} diff --git a/apps/dokploy/server/api/root.ts b/apps/dokploy/server/api/root.ts index 0dbeaaaad..b97cd47cc 100644 --- a/apps/dokploy/server/api/root.ts +++ b/apps/dokploy/server/api/root.ts @@ -31,6 +31,7 @@ import { projectRouter } from "./routers/project"; import { auditLogRouter } from "./routers/proprietary/audit-log"; import { customRoleRouter } from "./routers/proprietary/custom-role"; import { licenseKeyRouter } from "./routers/proprietary/license-key"; +import { managedServerRouter } from "./routers/proprietary/managed-server"; import { ssoRouter } from "./routers/proprietary/sso"; import { whitelabelingRouter } from "./routers/proprietary/whitelabeling"; import { redirectsRouter } from "./routers/redirects"; @@ -102,6 +103,7 @@ export const appRouter = createTRPCRouter({ environment: environmentRouter, tag: tagRouter, patch: patchRouter, + managedServer: managedServerRouter, }); // export type definition of API diff --git a/apps/dokploy/server/api/routers/proprietary/managed-server.ts b/apps/dokploy/server/api/routers/proprietary/managed-server.ts new file mode 100644 index 000000000..493c08bcd --- /dev/null +++ b/apps/dokploy/server/api/routers/proprietary/managed-server.ts @@ -0,0 +1,247 @@ +import { + createServer, + IS_CLOUD, + serverSetup, +} from "@dokploy/server"; +import { + apiCreateManagedServer, + apiDeleteManagedServer, + apiFindOneManagedServer, +} from "@dokploy/server/db/schema/managed-server"; +import { + createManagedServer, + deleteManagedServer, + findManagedServerById, + findManagedServersByOrg, + updateManagedServer, +} from "@dokploy/server/services/managed-server"; +import { + getHostingerDataCenters, + getHostingerVm, + getManagedServerPlans, + purchaseHostingerVps, + stopHostingerVm, + UBUNTU_22_TEMPLATE_ID, +} from "@dokploy/server/utils/hostinger"; +import { TRPCError } from "@trpc/server"; +import { nanoid } from "nanoid"; +import { adminProcedure, createTRPCRouter } from "../../trpc"; + +export const managedServerRouter = createTRPCRouter({ + getPlans: adminProcedure.query(async () => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Managed servers are only available in Dokploy Cloud", + }); + } + return getManagedServerPlans(); + }), + + getDataCenters: adminProcedure.query(async () => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Managed servers are only available in Dokploy Cloud", + }); + } + return getHostingerDataCenters(); + }), + + list: adminProcedure.query(async ({ ctx }) => { + if (!IS_CLOUD) return []; + return findManagedServersByOrg(ctx.session.activeOrganizationId); + }), + + one: adminProcedure + .input(apiFindOneManagedServer) + .query(async ({ input, ctx }) => { + if (!IS_CLOUD) { + throw new TRPCError({ code: "BAD_REQUEST", message: "Cloud only" }); + } + const record = await findManagedServerById(input.managedServerId); + if (record.organizationId !== ctx.session.activeOrganizationId) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + return record; + }), + + purchase: adminProcedure + .input(apiCreateManagedServer) + .mutation(async ({ input, ctx }) => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Managed servers are only available in Dokploy Cloud", + }); + } + + const plans = await getManagedServerPlans(); + const plan = plans.find((p) => p.id === input.plan); + if (!plan) { + throw new TRPCError({ code: "BAD_REQUEST", message: "Invalid plan" }); + } + + const hostname = + `dokploy-${ctx.session.activeOrganizationId.slice(0, 8)}-${nanoid(6)}`.toLowerCase(); + + const managedRecord = await createManagedServer({ + organizationId: ctx.session.activeOrganizationId, + plan: input.plan, + dataCenterId: input.dataCenterId, + status: "provisioning", + }); + + const hostingerItemId = input.isAnnual + ? plan.hostingerItemIdAnnual + : plan.hostingerItemIdMonthly; + + provisionManagedServer( + managedRecord.managedServerId, + hostingerItemId, + input.dataCenterId, + hostname, + ctx.session.activeOrganizationId, + ).catch(async (err) => { + await updateManagedServer(managedRecord.managedServerId, { + status: "error", + errorMessage: err?.message ?? "Unknown error during provisioning", + }); + }); + + return managedRecord; + }), + + delete: adminProcedure + .input(apiDeleteManagedServer) + .mutation(async ({ input, ctx }) => { + if (!IS_CLOUD) { + throw new TRPCError({ code: "BAD_REQUEST", message: "Cloud only" }); + } + const record = await findManagedServerById(input.managedServerId); + if (record.organizationId !== ctx.session.activeOrganizationId) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + + await updateManagedServer(input.managedServerId, { + status: "terminating", + }); + + if (record.hostingerVmId) { + try { + await stopHostingerVm(record.hostingerVmId); + } catch (_) { + // Best-effort + } + } + + await deleteManagedServer(input.managedServerId); + return { ok: true }; + }), + + syncStatus: adminProcedure + .input(apiFindOneManagedServer) + .mutation(async ({ input, ctx }) => { + if (!IS_CLOUD) { + throw new TRPCError({ code: "BAD_REQUEST", message: "Cloud only" }); + } + const record = await findManagedServerById(input.managedServerId); + if (record.organizationId !== ctx.session.activeOrganizationId) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + if (!record.hostingerVmId) return record; + + const vm = await getHostingerVm(record.hostingerVmId); + const ipAddress = vm.ipv4?.[0]?.address ?? record.ipAddress; + + await updateManagedServer(input.managedServerId, { + ipAddress: ipAddress ?? undefined, + hostname: vm.hostname ?? undefined, + status: + vm.state === "running" + ? record.serverId + ? "ready" + : "configuring" + : record.status, + }); + + return findManagedServerById(input.managedServerId); + }), +}); + +async function provisionManagedServer( + managedServerId: string, + hostingerItemId: string, + dataCenterId: number, + hostname: string, + organizationId: string, +) { + const result = await purchaseHostingerVps({ + item_id: hostingerItemId, + payment_method_id: 0, + setup: { + template_id: UBUNTU_22_TEMPLATE_ID, + data_center_id: dataCenterId, + hostname, + enable_backups: false, + }, + coupons: [], + }); + + const vm = result.virtual_machine; + + await updateManagedServer(managedServerId, { + hostingerVmId: vm.id, + hostingerSubscriptionId: vm.subscription_id ?? undefined, + ipAddress: vm.ipv4?.[0]?.address ?? undefined, + hostname: vm.hostname ?? undefined, + status: "configuring", + }); + + await waitForVmRunning(vm.id!, managedServerId); + + const finalVm = await getHostingerVm(vm.id!); + const finalIp = finalVm.ipv4?.[0]?.address; + + if (!finalIp) { + throw new Error("VM is running but has no IPv4 address"); + } + + const serverRecord = await createServer( + { + name: `Managed • ${hostname}`, + description: "Managed server provisioned by Dokploy Cloud", + ipAddress: finalIp, + port: 22, + username: "root", + serverType: "deploy", + }, + organizationId, + ); + + await updateManagedServer(managedServerId, { + serverId: serverRecord.serverId, + ipAddress: finalIp, + }); + + await serverSetup(serverRecord.serverId); + + await updateManagedServer(managedServerId, { status: "ready" }); +} + +async function waitForVmRunning( + vmId: number, + _managedServerId: string, + maxAttempts = 30, + intervalMs = 10_000, +) { + for (let i = 0; i < maxAttempts; i++) { + await new Promise((r) => setTimeout(r, intervalMs)); + const vm = await getHostingerVm(vmId); + if (vm.state === "running") return; + if (vm.state === "error") { + throw new Error("VM entered error state"); + } + } + throw new Error("Timed out waiting for VM to become running"); +} diff --git a/packages/server/package.json b/packages/server/package.json index 1f519b494..ef804a000 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -61,6 +61,7 @@ "drizzle-dbml-generator": "0.10.0", "drizzle-orm": "0.45.1", "drizzle-zod": "0.5.1", + "hostinger-api-sdk": "^0.0.17", "lodash": "4.17.21", "micromatch": "4.0.8", "nanoid": "3.3.11", diff --git a/packages/server/src/db/schema/index.ts b/packages/server/src/db/schema/index.ts index a4e613a02..509cbdc9f 100644 --- a/packages/server/src/db/schema/index.ts +++ b/packages/server/src/db/schema/index.ts @@ -15,6 +15,7 @@ export * from "./gitea"; export * from "./github"; export * from "./gitlab"; export * from "./libsql"; +export * from "./managed-server"; export * from "./mariadb"; export * from "./mongo"; export * from "./mount"; diff --git a/packages/server/src/db/schema/managed-server.ts b/packages/server/src/db/schema/managed-server.ts new file mode 100644 index 000000000..67eb86e38 --- /dev/null +++ b/packages/server/src/db/schema/managed-server.ts @@ -0,0 +1,72 @@ +import { relations } from "drizzle-orm"; +import { integer, pgEnum, pgTable, text } from "drizzle-orm/pg-core"; +import { nanoid } from "nanoid"; +import { z } from "zod"; +import { organization } from "./account"; +import { server } from "./server"; + +export const managedServerStatus = pgEnum("managedServerStatus", [ + "pending", + "provisioning", + "configuring", + "ready", + "error", + "terminating", + "terminated", +]); + +export const managedServer = pgTable("managed_server", { + managedServerId: text("managedServerId") + .notNull() + .primaryKey() + .$defaultFn(() => nanoid()), + organizationId: text("organizationId") + .notNull() + .references(() => organization.id, { onDelete: "cascade" }), + serverId: text("serverId").references(() => server.serverId, { + onDelete: "set null", + }), + /** Hostinger catalog item id, e.g. "hostingercom-vps-kvm2" */ + plan: text("plan").notNull(), + status: managedServerStatus("status").notNull().default("pending"), + hostingerVmId: integer("hostingerVmId"), + hostingerSubscriptionId: text("hostingerSubscriptionId"), + dataCenterId: integer("dataCenterId").notNull(), + ipAddress: text("ipAddress"), + hostname: text("hostname"), + stripeSubscriptionId: text("stripeSubscriptionId"), + stripePriceId: text("stripePriceId"), + rootPassword: text("rootPassword"), + errorMessage: text("errorMessage"), + createdAt: text("createdAt") + .notNull() + .$defaultFn(() => new Date().toISOString()), + updatedAt: text("updatedAt") + .notNull() + .$defaultFn(() => new Date().toISOString()), +}); + +export const managedServerRelations = relations(managedServer, ({ one }) => ({ + organization: one(organization, { + fields: [managedServer.organizationId], + references: [organization.id], + }), + server: one(server, { + fields: [managedServer.serverId], + references: [server.serverId], + }), +})); + +export const apiCreateManagedServer = z.object({ + plan: z.string().min(1), + dataCenterId: z.number().int().positive(), + isAnnual: z.boolean().default(false), +}); + +export const apiFindOneManagedServer = z.object({ + managedServerId: z.string().min(1), +}); + +export const apiDeleteManagedServer = z.object({ + managedServerId: z.string().min(1), +}); diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 717c20246..6a41327c0 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -43,6 +43,7 @@ export * from "./services/registry"; export * from "./services/rollbacks"; export * from "./services/schedule"; export * from "./services/security"; +export * from "./services/managed-server"; export * from "./services/server"; export * from "./services/settings"; export * from "./services/ssh-key"; diff --git a/packages/server/src/services/managed-server.ts b/packages/server/src/services/managed-server.ts new file mode 100644 index 000000000..c61d3ad74 --- /dev/null +++ b/packages/server/src/services/managed-server.ts @@ -0,0 +1,54 @@ +import { db } from "@dokploy/server/db"; +import { managedServer } from "@dokploy/server/db/schema/managed-server"; +import { TRPCError } from "@trpc/server"; +import { eq } from "drizzle-orm"; + +export type ManagedServer = typeof managedServer.$inferSelect; + +export const createManagedServer = async ( + input: typeof managedServer.$inferInsert, +) => { + const record = await db + .insert(managedServer) + .values(input) + .returning() + .then((r) => r[0]); + if (!record) throw new TRPCError({ code: "INTERNAL_SERVER_ERROR" }); + return record; +}; + +export const findManagedServerById = async (managedServerId: string) => { + const record = await db.query.managedServer.findFirst({ + where: eq(managedServer.managedServerId, managedServerId), + with: { server: true }, + }); + if (!record) + throw new TRPCError({ code: "NOT_FOUND", message: "Managed server not found" }); + return record; +}; + +export const findManagedServersByOrg = async (organizationId: string) => { + return db.query.managedServer.findMany({ + where: eq(managedServer.organizationId, organizationId), + with: { server: true }, + orderBy: (t, { desc }) => [desc(t.createdAt)], + }); +}; + +export const updateManagedServer = async ( + managedServerId: string, + data: Partial, +) => { + return db + .update(managedServer) + .set({ ...data, updatedAt: new Date().toISOString() }) + .where(eq(managedServer.managedServerId, managedServerId)) + .returning() + .then((r) => r[0]); +}; + +export const deleteManagedServer = async (managedServerId: string) => { + return db + .delete(managedServer) + .where(eq(managedServer.managedServerId, managedServerId)); +}; diff --git a/packages/server/src/utils/hostinger.ts b/packages/server/src/utils/hostinger.ts new file mode 100644 index 000000000..b649c9407 --- /dev/null +++ b/packages/server/src/utils/hostinger.ts @@ -0,0 +1,155 @@ +import { + BillingCatalogApi, + Configuration, + VPSDataCentersApi, + VPSVirtualMachineApi, +} from "hostinger-api-sdk"; + +export type { + BillingV1CatalogCatalogItemResource as HostingerCatalogItem, + VPSV1DataCenterDataCenterResource as HostingerDataCenter, + VPSV1VirtualMachinePurchaseRequest as HostingerPurchaseRequest, + VPSV1VirtualMachineVirtualMachineResource as HostingerVM, +} from "hostinger-api-sdk"; + +// Correct base URL — api.hostinger.com returns 530, developers.hostinger.com is the real gateway +const HOSTINGER_BASE_PATH = "https://developers.hostinger.com"; + +function getConfig() { + const apiKey = process.env.HOSTINGER_API_KEY; + if (!apiKey) throw new Error("HOSTINGER_API_KEY is not set"); + return new Configuration({ + basePath: HOSTINGER_BASE_PATH, + accessToken: apiKey, + }); +} + +function getVmApi() { + return new VPSVirtualMachineApi(getConfig()); +} + +export async function getHostingerDataCenters() { + const api = new VPSDataCentersApi(getConfig()); + const res = await api.getDataCenterListV1(); + return res.data; +} + +export async function getHostingerVpsCatalog() { + const api = new BillingCatalogApi(getConfig()); + const res = await api.getCatalogItemListV1("VPS"); + return res.data; +} + +export async function purchaseHostingerVps( + body: import("hostinger-api-sdk").VPSV1VirtualMachinePurchaseRequest, +) { + const api = getVmApi(); + const res = await api.purchaseNewVirtualMachineV1(body); + return res.data; +} + +export async function getHostingerVm(vmId: number) { + const api = getVmApi(); + const res = await api.getVirtualMachineDetailsV1(vmId); + return res.data; +} + +export async function stopHostingerVm(vmId: number) { + const api = getVmApi(); + await api.stopVirtualMachineV1(vmId); +} + +/** Ubuntu 22.04 LTS template ID on Hostinger */ +export const UBUNTU_22_TEMPLATE_ID = 1009; + +/** + * Markup multiplier applied to Hostinger's catalog price to get Dokploy's user price. + * Hostinger KVM2 = ~$24.49/mo → Dokploy charges $45/mo (~84% markup). + */ +const MARKUP = 1.84; + +export interface ManagedServerPlan { + id: string; + name: string; + hostingerItemIdMonthly: string; + hostingerItemIdAnnual: string; + cpus: number; + memoryMb: number; + diskMb: number; + bandwidthMb: number; + /** Price in cents Hostinger charges us monthly */ + hostingerPriceCentsMonthly: number; + /** Price in cents we charge the user monthly */ + dokployPriceCentsMonthly: number; + /** Price in cents we charge the user annually */ + dokployPriceCentsAnnual: number; +} + +/** KVM plan IDs offered through Dokploy (excludes Game Panel plans) */ +const OFFERED_PLAN_IDS = ["hostingercom-vps-kvm1", "hostingercom-vps-kvm2", "hostingercom-vps-kvm4", "hostingercom-vps-kvm8"]; + +/** + * Fetches live VPS plans from Hostinger catalog and applies Dokploy markup. + * Only returns standard KVM plans (not Game Panel variants). + */ +export async function getManagedServerPlans(): Promise { + const catalog = await getHostingerVpsCatalog(); + + const plans: ManagedServerPlan[] = []; + + for (const item of catalog) { + if (!OFFERED_PLAN_IDS.includes(item.id ?? "")) continue; + + const meta = item.metadata as Record | null; + const cpus = Number(meta?.cpus ?? 0); + const memoryMb = Number(meta?.memory ?? 0); + const diskMb = Number(meta?.disk_space ?? 0); + const bandwidthMb = Number(meta?.bandwidth ?? 0); + + const monthlyPrice = item.prices?.find( + (p) => p.period === 1 && p.period_unit === "month", + ); + const annualPrice = item.prices?.find( + (p) => p.period === 1 && p.period_unit === "year", + ); + + if (!monthlyPrice) continue; + + const hostingerMonthly = monthlyPrice.price ?? 0; + const hostingerAnnual = annualPrice?.price ?? hostingerMonthly * 12; + + // Apply markup and round to nearest $0.50 (50 cents) + const dokployMonthly = Math.ceil((hostingerMonthly * MARKUP) / 50) * 50; + const dokployAnnual = Math.ceil((hostingerAnnual * MARKUP) / 50) * 50; + + // Derive hostinger item IDs for monthly and annual billing + const hostingerItemIdMonthly = monthlyPrice.id ?? `${item.id}-usd-1m`; + const hostingerItemIdAnnual = annualPrice?.id ?? `${item.id}-usd-1y`; + + // Map hostinger plan names to friendly names + const friendlyNames: Record = { + "hostingercom-vps-kvm1": "Starter", + "hostingercom-vps-kvm2": "Basic", + "hostingercom-vps-kvm4": "Growth", + "hostingercom-vps-kvm8": "Scale", + }; + + plans.push({ + id: item.id ?? "", + name: friendlyNames[item.id ?? ""] ?? item.name ?? item.id ?? "", + hostingerItemIdMonthly, + hostingerItemIdAnnual, + cpus, + memoryMb, + diskMb, + bandwidthMb, + hostingerPriceCentsMonthly: hostingerMonthly, + dokployPriceCentsMonthly: dokployMonthly, + dokployPriceCentsAnnual: dokployAnnual, + }); + } + + return plans; +} + +export type ManagedServerPlanId = string; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 132d3b20e..948ce001a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,10 +115,10 @@ importers: version: 2.0.30(zod@4.3.6) '@better-auth/api-key': specifier: 1.5.4 - version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(febde88eaf587188179e6ecc47119e50)) + version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(219be630f7f6fef2e235cef94eaddc25)) '@better-auth/sso': specifier: 1.5.4 - version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(febde88eaf587188179e6ecc47119e50))(better-call@2.0.2(zod@4.3.6)) + version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(219be630f7f6fef2e235cef94eaddc25))(better-call@2.0.2(zod@4.3.6)) '@codemirror/autocomplete': specifier: ^6.18.6 version: 6.20.0 @@ -280,7 +280,7 @@ importers: version: 5.1.1 better-auth: specifier: 1.5.4 - version: 1.5.4(febde88eaf587188179e6ecc47119e50) + version: 1.5.4(219be630f7f6fef2e235cef94eaddc25) bl: specifier: 6.0.11 version: 6.0.11 @@ -539,10 +539,10 @@ importers: version: 5.9.3 vite-tsconfig-paths: specifier: 4.3.2 - version: 4.3.2(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1)) + version: 4.3.2(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)) vitest: specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) apps/schedules: dependencies: @@ -630,10 +630,10 @@ importers: version: 2.0.30(zod@4.3.6) '@better-auth/api-key': specifier: 1.5.4 - version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(334901c35c1fcda64bb596793b2e4934)) + version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(8933545d763d3f096150f97f9213a424)) '@better-auth/sso': specifier: 1.5.4 - version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(334901c35c1fcda64bb596793b2e4934))(better-call@2.0.2(zod@4.3.6)) + version: 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(8933545d763d3f096150f97f9213a424))(better-call@2.0.2(zod@4.3.6)) '@better-auth/utils': specifier: 0.3.1 version: 0.3.1 @@ -672,7 +672,7 @@ importers: version: 5.1.1 better-auth: specifier: 1.5.4 - version: 1.5.4(334901c35c1fcda64bb596793b2e4934) + version: 1.5.4(8933545d763d3f096150f97f9213a424) better-call: specifier: 2.0.2 version: 2.0.2(zod@4.3.6) @@ -700,6 +700,9 @@ importers: drizzle-zod: specifier: 0.5.1 version: 0.5.1(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3)))(@types/pg@8.16.0)(better-sqlite3@12.6.2)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.18.0)(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3)))(zod@4.3.6) + hostinger-api-sdk: + specifier: ^0.0.17 + version: 0.0.17 lodash: specifier: 4.17.21 version: 4.17.21 @@ -775,7 +778,7 @@ importers: devDependencies: '@better-auth/cli': specifier: 1.4.21 - version: 1.4.21(@better-fetch/fetch@1.1.21)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(better-call@2.0.2(zod@4.3.6))(drizzle-kit@0.31.9)(jose@6.1.3)(kysely@0.28.11)(mongodb@7.1.0)(mysql2@3.15.3)(nanostores@1.1.1)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)) + version: 1.4.21(@better-fetch/fetch@1.1.21)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(better-call@2.0.2(zod@4.3.6))(drizzle-kit@0.31.9)(jose@6.1.3)(kysely@0.28.11)(mongodb@7.1.0)(mysql2@3.15.3)(nanostores@1.1.1)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1)) '@types/adm-zip': specifier: ^0.5.7 version: 0.5.7 @@ -3460,6 +3463,7 @@ packages: '@react-email/components@0.0.21': resolution: {integrity: sha512-fwGfH7FF+iuq+IdPcbEO5HoF0Pakk9big+fFW9+3kiyvbSNuo8Io1rhPTMLd8q41XomN4g7mgWovdAeS/8PHrA==} engines: {node: '>=18.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: react: ^18.2.0 @@ -5743,6 +5747,9 @@ packages: resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} engines: {node: '>=16.9.0'} + hostinger-api-sdk@0.0.17: + resolution: {integrity: sha512-PGIS2P4bwwvztlUHTdXYia7sAJsmDd9qsSE2tr8wDMAAjYow0J979w4dHcuHfC4ovo8nZoj3btqTDJtIIeSPYw==} + html-to-text@9.0.5: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} @@ -8618,21 +8625,21 @@ snapshots: '@balena/dockerignore@1.0.2': {} - '@better-auth/api-key@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(334901c35c1fcda64bb596793b2e4934))': + '@better-auth/api-key@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(219be630f7f6fef2e235cef94eaddc25))': dependencies: '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 - better-auth: 1.5.4(334901c35c1fcda64bb596793b2e4934) + better-auth: 1.5.4(219be630f7f6fef2e235cef94eaddc25) zod: 4.3.6 - '@better-auth/api-key@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(febde88eaf587188179e6ecc47119e50))': + '@better-auth/api-key@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(8933545d763d3f096150f97f9213a424))': dependencies: '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 - better-auth: 1.5.4(febde88eaf587188179e6ecc47119e50) + better-auth: 1.5.4(8933545d763d3f096150f97f9213a424) zod: 4.3.6 - '@better-auth/cli@1.4.21(@better-fetch/fetch@1.1.21)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(better-call@2.0.2(zod@4.3.6))(drizzle-kit@0.31.9)(jose@6.1.3)(kysely@0.28.11)(mongodb@7.1.0)(mysql2@3.15.3)(nanostores@1.1.1)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1))': + '@better-auth/cli@1.4.21(@better-fetch/fetch@1.1.21)(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(better-call@2.0.2(zod@4.3.6))(drizzle-kit@0.31.9)(jose@6.1.3)(kysely@0.28.11)(mongodb@7.1.0)(mysql2@3.15.3)(nanostores@1.1.1)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1))': dependencies: '@babel/core': 7.29.0 '@babel/preset-react': 7.28.5(@babel/core@7.29.0) @@ -8644,7 +8651,7 @@ snapshots: '@mrleebo/prisma-ast': 0.13.1 '@prisma/client': 5.22.0(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3)) '@types/pg': 8.16.0 - better-auth: 1.4.21(b1bc00b9e18c5e6af4e13b03fc4304ac) + better-auth: 1.4.21(db78b83f9b5449d160708cdf9d272aa3) better-sqlite3: 12.6.2 c12: 3.3.3 chalk: 5.6.2 @@ -8778,24 +8785,24 @@ snapshots: '@prisma/client': 5.22.0(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3)) prisma: 7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3) - '@better-auth/sso@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(334901c35c1fcda64bb596793b2e4934))(better-call@2.0.2(zod@4.3.6))': + '@better-auth/sso@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(219be630f7f6fef2e235cef94eaddc25))(better-call@2.0.2(zod@4.3.6))': dependencies: '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 - better-auth: 1.5.4(334901c35c1fcda64bb596793b2e4934) + better-auth: 1.5.4(219be630f7f6fef2e235cef94eaddc25) better-call: 2.0.2(zod@4.3.6) fast-xml-parser: 5.5.1 jose: 6.1.3 samlify: 2.10.2 zod: 4.3.6 - '@better-auth/sso@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(febde88eaf587188179e6ecc47119e50))(better-call@2.0.2(zod@4.3.6))': + '@better-auth/sso@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(better-auth@1.5.4(8933545d763d3f096150f97f9213a424))(better-call@2.0.2(zod@4.3.6))': dependencies: '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 - better-auth: 1.5.4(febde88eaf587188179e6ecc47119e50) + better-auth: 1.5.4(8933545d763d3f096150f97f9213a424) better-call: 2.0.2(zod@4.3.6) fast-xml-parser: 5.5.1 jose: 6.1.3 @@ -12275,6 +12282,7 @@ snapshots: magic-string: 0.30.21 optionalDependencies: vite: 7.3.1(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1) + optional: true '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1))': dependencies: @@ -12283,7 +12291,6 @@ snapshots: magic-string: 0.30.21 optionalDependencies: vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) - optional: true '@vitest/pretty-format@4.0.18': dependencies: @@ -12488,7 +12495,7 @@ snapshots: before-after-hook@2.2.3: {} - better-auth@1.4.21(b1bc00b9e18c5e6af4e13b03fc4304ac): + better-auth@1.4.21(db78b83f9b5449d160708cdf9d272aa3): dependencies: '@better-auth/core': 1.4.21(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) '@better-auth/telemetry': 1.4.21(@better-auth/core@1.4.21(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)) @@ -12514,9 +12521,9 @@ snapshots: prisma: 7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1) - better-auth@1.5.4(334901c35c1fcda64bb596793b2e4934): + better-auth@1.5.4(219be630f7f6fef2e235cef94eaddc25): dependencies: '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/drizzle-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3)))(@types/pg@8.16.0)(better-sqlite3@12.6.2)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.18.0)(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))) @@ -12551,7 +12558,7 @@ snapshots: transitivePeerDependencies: - '@cloudflare/workers-types' - better-auth@1.5.4(febde88eaf587188179e6ecc47119e50): + better-auth@1.5.4(8933545d763d3f096150f97f9213a424): dependencies: '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/drizzle-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@2.0.2(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3)))(@types/pg@8.16.0)(better-sqlite3@12.6.2)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.18.0)(postgres@3.4.4)(prisma@7.4.1(@types/react@18.3.5)(better-sqlite3@12.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.9.3))) @@ -13733,6 +13740,12 @@ snapshots: hono@4.12.2: {} + hostinger-api-sdk@0.0.17: + dependencies: + axios: 1.13.5 + transitivePeerDependencies: + - debug + html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 @@ -16309,13 +16322,13 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-tsconfig-paths@4.3.2(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1)): + vite-tsconfig-paths@4.3.2(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript @@ -16334,6 +16347,7 @@ snapshots: jiti: 1.21.7 tsx: 4.16.2 yaml: 2.8.1 + optional: true vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1): dependencies: @@ -16349,7 +16363,6 @@ snapshots: jiti: 2.6.1 tsx: 4.16.2 yaml: 2.8.1 - optional: true vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@1.21.7)(tsx@4.16.2)(yaml@2.8.1): dependencies: @@ -16388,6 +16401,7 @@ snapshots: - terser - tsx - yaml + optional: true vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(tsx@4.16.2)(yaml@2.8.1): dependencies: @@ -16426,7 +16440,6 @@ snapshots: - terser - tsx - yaml - optional: true w3c-keyname@2.2.8: {}