diff --git a/go/apps/ingress/services/router/service.go b/go/apps/ingress/services/router/service.go index f84ca5229c..03d443540c 100644 --- a/go/apps/ingress/services/router/service.go +++ b/go/apps/ingress/services/router/service.go @@ -100,8 +100,7 @@ func (s *service) SelectGateway(route *db.IngressRoute, gateways []db.Gateway) ( healthyByRegion := make(map[string]*db.Gateway) for i := range gateways { gw := &gateways[i] - if !gw.Health.Valid || - gw.Health.GatewaysHealth != db.GatewaysHealthHealthy { + if gw.Health != db.GatewaysHealthHealthy { continue } diff --git a/go/cmd/dev/seed/ingress.go b/go/cmd/dev/seed/ingress.go index bf1e1e6307..1b45f4caf5 100644 --- a/go/cmd/dev/seed/ingress.go +++ b/go/cmd/dev/seed/ingress.go @@ -127,7 +127,7 @@ func seedIngress(ctx context.Context, cmd *cli.Command) error { K8sServiceName: fmt.Sprintf("gateway-%s", slug), Region: region, Image: "unkey/gateway:local", - Health: db.NullGatewaysHealth{GatewaysHealth: db.GatewaysHealthHealthy, Valid: true}, + Health: db.GatewaysHealthHealthy, Replicas: 1, }) if err != nil && !db.IsDuplicateKeyError(err) { diff --git a/go/pkg/db/acme_challenge_find_by_token.sql_generated.go b/go/pkg/db/acme_challenge_find_by_token.sql_generated.go index 3567f241f6..82c2b30f38 100644 --- a/go/pkg/db/acme_challenge_find_by_token.sql_generated.go +++ b/go/pkg/db/acme_challenge_find_by_token.sql_generated.go @@ -10,7 +10,7 @@ import ( ) const findAcmeChallengeByToken = `-- name: FindAcmeChallengeByToken :one -SELECT domain_id, workspace_id, token, type, authorization, status, expires_at, created_at, updated_at FROM acme_challenges WHERE workspace_id = ? AND domain_id = ? AND token = ? +SELECT domain_id, workspace_id, token, challenge_type, authorization, status, expires_at, created_at, updated_at FROM acme_challenges WHERE workspace_id = ? AND domain_id = ? AND token = ? ` type FindAcmeChallengeByTokenParams struct { @@ -21,7 +21,7 @@ type FindAcmeChallengeByTokenParams struct { // FindAcmeChallengeByToken // -// SELECT domain_id, workspace_id, token, type, authorization, status, expires_at, created_at, updated_at FROM acme_challenges WHERE workspace_id = ? AND domain_id = ? AND token = ? +// SELECT domain_id, workspace_id, token, challenge_type, authorization, status, expires_at, created_at, updated_at FROM acme_challenges WHERE workspace_id = ? AND domain_id = ? AND token = ? func (q *Queries) FindAcmeChallengeByToken(ctx context.Context, db DBTX, arg FindAcmeChallengeByTokenParams) (AcmeChallenge, error) { row := db.QueryRowContext(ctx, findAcmeChallengeByToken, arg.WorkspaceID, arg.DomainID, arg.Token) var i AcmeChallenge @@ -29,7 +29,7 @@ func (q *Queries) FindAcmeChallengeByToken(ctx context.Context, db DBTX, arg Fin &i.DomainID, &i.WorkspaceID, &i.Token, - &i.Type, + &i.ChallengeType, &i.Authorization, &i.Status, &i.ExpiresAt, diff --git a/go/pkg/db/acme_challenge_insert.sql_generated.go b/go/pkg/db/acme_challenge_insert.sql_generated.go index 9f0b4da745..2925644c3f 100644 --- a/go/pkg/db/acme_challenge_insert.sql_generated.go +++ b/go/pkg/db/acme_challenge_insert.sql_generated.go @@ -17,7 +17,7 @@ INSERT INTO acme_challenges ( token, authorization, status, - type, + challenge_type, created_at, updated_at, expires_at @@ -35,15 +35,15 @@ INSERT INTO acme_challenges ( ` type InsertAcmeChallengeParams struct { - WorkspaceID string `db:"workspace_id"` - DomainID string `db:"domain_id"` - Token string `db:"token"` - Authorization string `db:"authorization"` - Status AcmeChallengesStatus `db:"status"` - Type AcmeChallengesType `db:"type"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` - ExpiresAt int64 `db:"expires_at"` + WorkspaceID string `db:"workspace_id"` + DomainID string `db:"domain_id"` + Token string `db:"token"` + Authorization string `db:"authorization"` + Status AcmeChallengesStatus `db:"status"` + ChallengeType AcmeChallengesChallengeType `db:"challenge_type"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` + ExpiresAt int64 `db:"expires_at"` } // InsertAcmeChallenge @@ -54,7 +54,7 @@ type InsertAcmeChallengeParams struct { // token, // authorization, // status, -// type, +// challenge_type, // created_at, // updated_at, // expires_at @@ -76,7 +76,7 @@ func (q *Queries) InsertAcmeChallenge(ctx context.Context, db DBTX, arg InsertAc arg.Token, arg.Authorization, arg.Status, - arg.Type, + arg.ChallengeType, arg.CreatedAt, arg.UpdatedAt, arg.ExpiresAt, diff --git a/go/pkg/db/acme_challenge_list_executable.sql_generated.go b/go/pkg/db/acme_challenge_list_executable.sql_generated.go index 1b68233534..86fa4bbafa 100644 --- a/go/pkg/db/acme_challenge_list_executable.sql_generated.go +++ b/go/pkg/db/acme_challenge_list_executable.sql_generated.go @@ -11,27 +11,27 @@ import ( ) const listExecutableChallenges = `-- name: ListExecutableChallenges :many -SELECT dc.workspace_id, dc.type, d.domain FROM acme_challenges dc +SELECT dc.workspace_id, dc.challenge_type, d.domain FROM acme_challenges dc JOIN custom_domains d ON dc.domain_id = d.id WHERE (dc.status = 'waiting' OR (dc.status = 'verified' AND dc.expires_at <= DATE_ADD(NOW(), INTERVAL 30 DAY))) -AND dc.type IN (/*SLICE:verification_types*/?) +AND dc.challenge_type IN (/*SLICE:verification_types*/?) ORDER BY d.created_at ASC ` type ListExecutableChallengesRow struct { - WorkspaceID string `db:"workspace_id"` - Type AcmeChallengesType `db:"type"` - Domain string `db:"domain"` + WorkspaceID string `db:"workspace_id"` + ChallengeType AcmeChallengesChallengeType `db:"challenge_type"` + Domain string `db:"domain"` } // ListExecutableChallenges // -// SELECT dc.workspace_id, dc.type, d.domain FROM acme_challenges dc +// SELECT dc.workspace_id, dc.challenge_type, d.domain FROM acme_challenges dc // JOIN custom_domains d ON dc.domain_id = d.id // WHERE (dc.status = 'waiting' OR (dc.status = 'verified' AND dc.expires_at <= DATE_ADD(NOW(), INTERVAL 30 DAY))) -// AND dc.type IN (/*SLICE:verification_types*/?) +// AND dc.challenge_type IN (/*SLICE:verification_types*/?) // ORDER BY d.created_at ASC -func (q *Queries) ListExecutableChallenges(ctx context.Context, db DBTX, verificationTypes []AcmeChallengesType) ([]ListExecutableChallengesRow, error) { +func (q *Queries) ListExecutableChallenges(ctx context.Context, db DBTX, verificationTypes []AcmeChallengesChallengeType) ([]ListExecutableChallengesRow, error) { query := listExecutableChallenges var queryParams []interface{} if len(verificationTypes) > 0 { @@ -50,7 +50,7 @@ func (q *Queries) ListExecutableChallenges(ctx context.Context, db DBTX, verific var items []ListExecutableChallengesRow for rows.Next() { var i ListExecutableChallengesRow - if err := rows.Scan(&i.WorkspaceID, &i.Type, &i.Domain); err != nil { + if err := rows.Scan(&i.WorkspaceID, &i.ChallengeType, &i.Domain); err != nil { return nil, err } items = append(items, i) diff --git a/go/pkg/db/bulk_acme_challenge_insert.sql_generated.go b/go/pkg/db/bulk_acme_challenge_insert.sql_generated.go index 3b4a3f100b..e18bfe990a 100644 --- a/go/pkg/db/bulk_acme_challenge_insert.sql_generated.go +++ b/go/pkg/db/bulk_acme_challenge_insert.sql_generated.go @@ -9,7 +9,7 @@ import ( ) // bulkInsertAcmeChallenge is the base query for bulk insert -const bulkInsertAcmeChallenge = `INSERT INTO acme_challenges ( workspace_id, domain_id, token, authorization, status, type, created_at, updated_at, expires_at ) VALUES %s` +const bulkInsertAcmeChallenge = `INSERT INTO acme_challenges ( workspace_id, domain_id, token, authorization, status, challenge_type, created_at, updated_at, expires_at ) VALUES %s` // InsertAcmeChallenges performs bulk insert in a single query func (q *BulkQueries) InsertAcmeChallenges(ctx context.Context, db DBTX, args []InsertAcmeChallengeParams) error { @@ -34,7 +34,7 @@ func (q *BulkQueries) InsertAcmeChallenges(ctx context.Context, db DBTX, args [] allArgs = append(allArgs, arg.Token) allArgs = append(allArgs, arg.Authorization) allArgs = append(allArgs, arg.Status) - allArgs = append(allArgs, arg.Type) + allArgs = append(allArgs, arg.ChallengeType) allArgs = append(allArgs, arg.CreatedAt) allArgs = append(allArgs, arg.UpdatedAt) allArgs = append(allArgs, arg.ExpiresAt) diff --git a/go/pkg/db/gateway_insert.sql_generated.go b/go/pkg/db/gateway_insert.sql_generated.go index b120a96b1b..15833b40f0 100644 --- a/go/pkg/db/gateway_insert.sql_generated.go +++ b/go/pkg/db/gateway_insert.sql_generated.go @@ -34,14 +34,14 @@ INSERT INTO gateways ( ` type InsertGatewayParams struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - EnvironmentID string `db:"environment_id"` - K8sServiceName string `db:"k8s_service_name"` - Region string `db:"region"` - Image string `db:"image"` - Health NullGatewaysHealth `db:"health"` - Replicas int32 `db:"replicas"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + EnvironmentID string `db:"environment_id"` + K8sServiceName string `db:"k8s_service_name"` + Region string `db:"region"` + Image string `db:"image"` + Health GatewaysHealth `db:"health"` + Replicas int32 `db:"replicas"` } // InsertGateway diff --git a/go/pkg/db/models_generated.go b/go/pkg/db/models_generated.go index 35381cc47c..231a63474b 100644 --- a/go/pkg/db/models_generated.go +++ b/go/pkg/db/models_generated.go @@ -13,90 +13,90 @@ import ( dbtype "github.com/unkeyed/unkey/go/pkg/db/types" ) -type AcmeChallengesStatus string +type AcmeChallengesChallengeType string const ( - AcmeChallengesStatusWaiting AcmeChallengesStatus = "waiting" - AcmeChallengesStatusPending AcmeChallengesStatus = "pending" - AcmeChallengesStatusVerified AcmeChallengesStatus = "verified" - AcmeChallengesStatusFailed AcmeChallengesStatus = "failed" + AcmeChallengesChallengeTypeHTTP01 AcmeChallengesChallengeType = "HTTP-01" + AcmeChallengesChallengeTypeDNS01 AcmeChallengesChallengeType = "DNS-01" ) -func (e *AcmeChallengesStatus) Scan(src interface{}) error { +func (e *AcmeChallengesChallengeType) Scan(src interface{}) error { switch s := src.(type) { case []byte: - *e = AcmeChallengesStatus(s) + *e = AcmeChallengesChallengeType(s) case string: - *e = AcmeChallengesStatus(s) + *e = AcmeChallengesChallengeType(s) default: - return fmt.Errorf("unsupported scan type for AcmeChallengesStatus: %T", src) + return fmt.Errorf("unsupported scan type for AcmeChallengesChallengeType: %T", src) } return nil } -type NullAcmeChallengesStatus struct { - AcmeChallengesStatus AcmeChallengesStatus - Valid bool // Valid is true if AcmeChallengesStatus is not NULL +type NullAcmeChallengesChallengeType struct { + AcmeChallengesChallengeType AcmeChallengesChallengeType + Valid bool // Valid is true if AcmeChallengesChallengeType is not NULL } // Scan implements the Scanner interface. -func (ns *NullAcmeChallengesStatus) Scan(value interface{}) error { +func (ns *NullAcmeChallengesChallengeType) Scan(value interface{}) error { if value == nil { - ns.AcmeChallengesStatus, ns.Valid = "", false + ns.AcmeChallengesChallengeType, ns.Valid = "", false return nil } ns.Valid = true - return ns.AcmeChallengesStatus.Scan(value) + return ns.AcmeChallengesChallengeType.Scan(value) } // Value implements the driver Valuer interface. -func (ns NullAcmeChallengesStatus) Value() (driver.Value, error) { +func (ns NullAcmeChallengesChallengeType) Value() (driver.Value, error) { if !ns.Valid { return nil, nil } - return string(ns.AcmeChallengesStatus), nil + return string(ns.AcmeChallengesChallengeType), nil } -type AcmeChallengesType string +type AcmeChallengesStatus string const ( - AcmeChallengesTypeHTTP01 AcmeChallengesType = "HTTP-01" - AcmeChallengesTypeDNS01 AcmeChallengesType = "DNS-01" + AcmeChallengesStatusWaiting AcmeChallengesStatus = "waiting" + AcmeChallengesStatusPending AcmeChallengesStatus = "pending" + AcmeChallengesStatusVerified AcmeChallengesStatus = "verified" + AcmeChallengesStatusFailed AcmeChallengesStatus = "failed" ) -func (e *AcmeChallengesType) Scan(src interface{}) error { +func (e *AcmeChallengesStatus) Scan(src interface{}) error { switch s := src.(type) { case []byte: - *e = AcmeChallengesType(s) + *e = AcmeChallengesStatus(s) case string: - *e = AcmeChallengesType(s) + *e = AcmeChallengesStatus(s) default: - return fmt.Errorf("unsupported scan type for AcmeChallengesType: %T", src) + return fmt.Errorf("unsupported scan type for AcmeChallengesStatus: %T", src) } return nil } -type NullAcmeChallengesType struct { - AcmeChallengesType AcmeChallengesType - Valid bool // Valid is true if AcmeChallengesType is not NULL +type NullAcmeChallengesStatus struct { + AcmeChallengesStatus AcmeChallengesStatus + Valid bool // Valid is true if AcmeChallengesStatus is not NULL } // Scan implements the Scanner interface. -func (ns *NullAcmeChallengesType) Scan(value interface{}) error { +func (ns *NullAcmeChallengesStatus) Scan(value interface{}) error { if value == nil { - ns.AcmeChallengesType, ns.Valid = "", false + ns.AcmeChallengesStatus, ns.Valid = "", false return nil } ns.Valid = true - return ns.AcmeChallengesType.Scan(value) + return ns.AcmeChallengesStatus.Scan(value) } // Value implements the driver Valuer interface. -func (ns NullAcmeChallengesType) Value() (driver.Value, error) { +func (ns NullAcmeChallengesStatus) Value() (driver.Value, error) { if !ns.Valid { return nil, nil } - return string(ns.AcmeChallengesType), nil + return string(ns.AcmeChallengesStatus), nil } type ApisAuthType string @@ -144,8 +144,8 @@ func (ns NullApisAuthType) Value() (driver.Value, error) { type CustomDomainsChallengeType string const ( - CustomDomainsChallengeTypeDns01 CustomDomainsChallengeType = "dns01" - CustomDomainsChallengeTypeHttp01 CustomDomainsChallengeType = "http01" + CustomDomainsChallengeTypeHTTP01 CustomDomainsChallengeType = "HTTP-01" + CustomDomainsChallengeTypeDNS01 CustomDomainsChallengeType = "DNS-01" ) func (e *CustomDomainsChallengeType) Scan(src interface{}) error { @@ -281,6 +281,7 @@ func (ns NullDeploymentsStatus) Value() (driver.Value, error) { type GatewaysHealth string const ( + GatewaysHealthUnknown GatewaysHealth = "unknown" GatewaysHealthPaused GatewaysHealth = "paused" GatewaysHealthHealthy GatewaysHealth = "healthy" GatewaysHealthUnhealthy GatewaysHealth = "unhealthy" @@ -624,15 +625,15 @@ func (ns NullWorkspacesPlan) Value() (driver.Value, error) { } type AcmeChallenge struct { - DomainID string `db:"domain_id"` - WorkspaceID string `db:"workspace_id"` - Token string `db:"token"` - Type AcmeChallengesType `db:"type"` - Authorization string `db:"authorization"` - Status AcmeChallengesStatus `db:"status"` - ExpiresAt int64 `db:"expires_at"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` + DomainID string `db:"domain_id"` + WorkspaceID string `db:"workspace_id"` + Token string `db:"token"` + ChallengeType AcmeChallengesChallengeType `db:"challenge_type"` + Authorization string `db:"authorization"` + Status AcmeChallengesStatus `db:"status"` + ExpiresAt int64 `db:"expires_at"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` } type AcmeUser struct { @@ -782,14 +783,14 @@ type Environment struct { } type Gateway struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - EnvironmentID string `db:"environment_id"` - K8sServiceName string `db:"k8s_service_name"` - Region string `db:"region"` - Image string `db:"image"` - Health NullGatewaysHealth `db:"health"` - Replicas int32 `db:"replicas"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + EnvironmentID string `db:"environment_id"` + K8sServiceName string `db:"k8s_service_name"` + Region string `db:"region"` + Image string `db:"image"` + Health GatewaysHealth `db:"health"` + Replicas int32 `db:"replicas"` } type Identity struct { diff --git a/go/pkg/db/querier_generated.go b/go/pkg/db/querier_generated.go index 5ea4b27d97..05ed0ac708 100644 --- a/go/pkg/db/querier_generated.go +++ b/go/pkg/db/querier_generated.go @@ -131,7 +131,7 @@ type Querier interface { DeleteRoleByID(ctx context.Context, db DBTX, roleID string) error //FindAcmeChallengeByToken // - // SELECT domain_id, workspace_id, token, type, authorization, status, expires_at, created_at, updated_at FROM acme_challenges WHERE workspace_id = ? AND domain_id = ? AND token = ? + // SELECT domain_id, workspace_id, token, challenge_type, authorization, status, expires_at, created_at, updated_at FROM acme_challenges WHERE workspace_id = ? AND domain_id = ? AND token = ? FindAcmeChallengeByToken(ctx context.Context, db DBTX, arg FindAcmeChallengeByTokenParams) (AcmeChallenge, error) //FindAcmeUserByWorkspaceID // @@ -941,7 +941,7 @@ type Querier interface { // token, // authorization, // status, - // type, + // challenge_type, // created_at, // updated_at, // expires_at @@ -1559,12 +1559,12 @@ type Querier interface { ListDirectPermissionsByKeyID(ctx context.Context, db DBTX, keyID string) ([]Permission, error) //ListExecutableChallenges // - // SELECT dc.workspace_id, dc.type, d.domain FROM acme_challenges dc + // SELECT dc.workspace_id, dc.challenge_type, d.domain FROM acme_challenges dc // JOIN custom_domains d ON dc.domain_id = d.id // WHERE (dc.status = 'waiting' OR (dc.status = 'verified' AND dc.expires_at <= DATE_ADD(NOW(), INTERVAL 30 DAY))) - // AND dc.type IN (/*SLICE:verification_types*/?) + // AND dc.challenge_type IN (/*SLICE:verification_types*/?) // ORDER BY d.created_at ASC - ListExecutableChallenges(ctx context.Context, db DBTX, verificationTypes []AcmeChallengesType) ([]ListExecutableChallengesRow, error) + ListExecutableChallenges(ctx context.Context, db DBTX, verificationTypes []AcmeChallengesChallengeType) ([]ListExecutableChallengesRow, error) //ListIdentities // // SELECT id, external_id, workspace_id, environment, meta, deleted, created_at, updated_at diff --git a/go/pkg/db/queries/acme_challenge_insert.sql b/go/pkg/db/queries/acme_challenge_insert.sql index e215b95822..4044dd6bde 100644 --- a/go/pkg/db/queries/acme_challenge_insert.sql +++ b/go/pkg/db/queries/acme_challenge_insert.sql @@ -5,7 +5,7 @@ INSERT INTO acme_challenges ( token, authorization, status, - type, + challenge_type, created_at, updated_at, expires_at diff --git a/go/pkg/db/queries/acme_challenge_list_executable.sql b/go/pkg/db/queries/acme_challenge_list_executable.sql index 2c1ac46843..0c63dcc54c 100644 --- a/go/pkg/db/queries/acme_challenge_list_executable.sql +++ b/go/pkg/db/queries/acme_challenge_list_executable.sql @@ -1,6 +1,6 @@ -- name: ListExecutableChallenges :many -SELECT dc.workspace_id, dc.type, d.domain FROM acme_challenges dc +SELECT dc.workspace_id, dc.challenge_type, d.domain FROM acme_challenges dc JOIN custom_domains d ON dc.domain_id = d.id WHERE (dc.status = 'waiting' OR (dc.status = 'verified' AND dc.expires_at <= DATE_ADD(NOW(), INTERVAL 30 DAY))) -AND dc.type IN (sqlc.slice(verification_types)) +AND dc.challenge_type IN (sqlc.slice(verification_types)) ORDER BY d.created_at ASC; diff --git a/go/pkg/db/schema.sql b/go/pkg/db/schema.sql index 4f4ed80110..c22919f689 100644 --- a/go/pkg/db/schema.sql +++ b/go/pkg/db/schema.sql @@ -393,7 +393,7 @@ CREATE TABLE `custom_domains` ( `id` varchar(128) NOT NULL, `workspace_id` varchar(256) NOT NULL, `domain` varchar(256) NOT NULL, - `challenge_type` enum('dns01','http01') NOT NULL DEFAULT 'http01', + `challenge_type` enum('HTTP-01','DNS-01') NOT NULL, `created_at` bigint NOT NULL, `updated_at` bigint, CONSTRAINT `custom_domains_id` PRIMARY KEY(`id`), @@ -404,7 +404,7 @@ CREATE TABLE `acme_challenges` ( `domain_id` varchar(255) NOT NULL, `workspace_id` varchar(255) NOT NULL, `token` varchar(255) NOT NULL, - `type` enum('HTTP-01','DNS-01') NOT NULL, + `challenge_type` enum('HTTP-01','DNS-01') NOT NULL, `authorization` varchar(255) NOT NULL, `status` enum('waiting','pending','verified','failed') NOT NULL, `expires_at` bigint NOT NULL, @@ -420,7 +420,7 @@ CREATE TABLE `gateways` ( `k8s_service_name` varchar(255) NOT NULL, `region` varchar(255) NOT NULL, `image` varchar(255) NOT NULL, - `health` enum('paused','healthy','unhealthy'), + `health` enum('unknown','paused','healthy','unhealthy') NOT NULL DEFAULT 'unknown', `replicas` int NOT NULL, CONSTRAINT `gateways_id` PRIMARY KEY(`id`) ); diff --git a/internal/db/src/schema/acme_challenges.ts b/internal/db/src/schema/acme_challenges.ts index 5004fb7cd8..6d59845756 100644 --- a/internal/db/src/schema/acme_challenges.ts +++ b/internal/db/src/schema/acme_challenges.ts @@ -4,24 +4,26 @@ import { customDomains } from "./custom_domains"; import { lifecycleDates } from "./util/lifecycle_dates"; import { workspaces } from "./workspaces"; +export const challengeType = mysqlEnum("challenge_type", ["HTTP-01", "DNS-01"]).notNull(); + export const acmeChallenges = mysqlTable( "acme_challenges", { domainId: varchar("domain_id", { length: 255 }).notNull(), workspaceId: varchar("workspace_id", { length: 255 }).notNull(), token: varchar("token", { length: 255 }).notNull(), - type: mysqlEnum("type", ["HTTP-01", "DNS-01"]).notNull(), + type: challengeType, authorization: varchar("authorization", { length: 255 }).notNull(), status: mysqlEnum("status", ["waiting", "pending", "verified", "failed"]).notNull(), expiresAt: bigint("expires_at", { mode: "number" }).notNull(), ...lifecycleDates, }, - (table) => ({ - pk: primaryKey({ columns: [table.domainId] }), - workspaceIdx: index("workspace_idx").on(table.workspaceId), - statusIdx: index("status_idx").on(table.status), - }), + (table) => [ + primaryKey({ columns: [table.domainId] }), + index("workspace_idx").on(table.workspaceId), + index("status_idx").on(table.status), + ], ); export const acmeChallengeRelations = relations(acmeChallenges, ({ one }) => ({ diff --git a/internal/db/src/schema/custom_domains.ts b/internal/db/src/schema/custom_domains.ts index 0f18c577d9..6aa4ec1487 100644 --- a/internal/db/src/schema/custom_domains.ts +++ b/internal/db/src/schema/custom_domains.ts @@ -1,4 +1,5 @@ -import { index, mysqlEnum, mysqlTable, uniqueIndex, varchar } from "drizzle-orm/mysql-core"; +import { index, mysqlTable, uniqueIndex, varchar } from "drizzle-orm/mysql-core"; +import { challengeType } from "./acme_challenges"; import { lifecycleDates } from "./util/lifecycle_dates"; export const customDomains = mysqlTable( @@ -8,7 +9,7 @@ export const customDomains = mysqlTable( workspaceId: varchar("workspace_id", { length: 256 }).notNull(), domain: varchar("domain", { length: 256 }).notNull(), - challengeType: mysqlEnum("challenge_type", ["dns01", "http01"]).notNull().default("http01"), + challengeType: challengeType, ...lifecycleDates, }, diff --git a/internal/db/src/schema/gateways.ts b/internal/db/src/schema/gateways.ts index de97f94600..c5028f39a9 100644 --- a/internal/db/src/schema/gateways.ts +++ b/internal/db/src/schema/gateways.ts @@ -19,7 +19,9 @@ export const gateways = mysqlTable( */ region: varchar("region", { length: 255 }).notNull(), image: varchar("image", { length: 255 }).notNull(), - health: mysqlEnum("health", ["paused", "healthy", "unhealthy"]), // needs better status types + health: mysqlEnum("health", ["unknown", "paused", "healthy", "unhealthy"]) + .notNull() + .default("unknown"), // needs better status types replicas: int("replicas").notNull(), }, (table) => [index("idx_environment_id").on(table.environmentId)],