import type {
RelayAgentActivityAggregateState,
RelayAgentActivityState,
RelayAgentAwarenessPreferences,
RelayManagedEndpointOrigin,
} from "@t3tools/contracts/relay";
import {
boolean,
index,
integer,
jsonb,
pgTable,
primaryKey,
text,
uniqueIndex,
varchar,
} from "drizzle-orm/pg-core";
export const relayMobileDevices = pgTable(
"relay_mobile_devices",
{
userId: varchar("user_id", { length: 255 }).notNull(),
deviceId: varchar("device_id", { length: 255 }).notNull(),
label: text("label").notNull().default("iOS device"),
platform: varchar("platform", { length: 16 }).notNull().$type<"ios" | "android">(),
iosMajorVersion: integer("ios_major_version"),
androidApiLevel: integer("android_api_level"),
appVersion: varchar("app_version", { length: 64 }),
bundleId: varchar("bundle_id", { length: 255 }),
apsEnvironment: varchar("aps_environment", { length: 16 }).$type<"sandbox" | "production">(),
pushToken: text("push_token"),
pushToStartToken: text("push_to_start_token"),
preferencesJson: jsonb("preferences_json").notNull().$type<RelayAgentAwarenessPreferences>(),
createdAt: varchar("created_at", { length: 64 }).notNull(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
},
(table) => [
primaryKey({ columns: [table.userId, table.deviceId] }),
uniqueIndex("idx_relay_mobile_devices_push_token").on(table.pushToken),
uniqueIndex("idx_relay_mobile_devices_push_to_start_token").on(table.pushToStartToken),
],
);
export const relayLiveActivities = pgTable(
"relay_live_activities",
{
userId: varchar("user_id", { length: 255 }).notNull(),
deviceId: varchar("device_id", { length: 255 }).notNull(),
activityPushToken: text("activity_push_token"),
remoteStartQueuedAt: varchar("remote_start_queued_at", { length: 64 }),
remoteStartedAt: varchar("remote_started_at", { length: 64 }),
endedAt: varchar("ended_at", { length: 64 }),
lastAggregateJson: jsonb("last_aggregate_json").$type<RelayAgentActivityAggregateState>(),
lastLiveActivityDeliveryAt: varchar("last_live_activity_delivery_at", { length: 64 }),
createdAt: varchar("created_at", { length: 64 }).notNull(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
},
(table) => [
primaryKey({ columns: [table.userId, table.deviceId] }),
uniqueIndex("idx_relay_live_activities_activity_push_token").on(table.activityPushToken),
],
);
export const relayEnvironmentLinks = pgTable(
"relay_environment_links",
{
userId: varchar("user_id", { length: 191 }).notNull(),
environmentId: varchar("environment_id", { length: 191 }).notNull(),
environmentLabel: text("environment_label").notNull().default("T3 Environment"),
environmentPublicKey: text("environment_public_key").notNull(),
endpointHttpBaseUrl: text("endpoint_http_base_url").notNull(),
endpointWsBaseUrl: text("endpoint_ws_base_url").notNull(),
endpointProviderKind: varchar("endpoint_provider_kind", { length: 32 }).notNull(),
notificationsEnabled: boolean("notifications_enabled").notNull().default(true),
liveActivitiesEnabled: boolean("live_activities_enabled").notNull().default(true),
managedTunnelsEnabled: boolean("managed_tunnels_enabled").notNull().default(false),
createdByDeviceId: varchar("created_by_device_id", { length: 191 }),
revokedAt: varchar("revoked_at", { length: 64 }),
createdAt: varchar("created_at", { length: 64 }).notNull(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
},
(table) => [
primaryKey({ columns: [table.userId, table.environmentId] }),
index("idx_relay_environment_links_environment").on(table.environmentId, table.revokedAt),
],
);
export const relayManagedEndpointAllocations = pgTable(
"relay_managed_endpoint_allocations",
{
userId: varchar("user_id", { length: 191 }).notNull(),
environmentId: varchar("environment_id", { length: 191 }).notNull(),
hostname: text("hostname").notNull(),
tunnelId: varchar("tunnel_id", { length: 191 }),
tunnelName: text("tunnel_name").notNull(),
dnsRecordId: varchar("dns_record_id", { length: 191 }),
readyAt: varchar("ready_at", { length: 64 }),
recoveryEnabledAt: varchar("recovery_enabled_at", { length: 64 }),
recoveryEnvironmentPublicKey: text("recovery_environment_public_key"),
origin: jsonb("origin").$type<RelayManagedEndpointOrigin>(),
generation: integer("generation").notNull().default(0),
createdAt: varchar("created_at", { length: 64 }).notNull(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
},
(table) => [
primaryKey({ columns: [table.userId, table.environmentId] }),
uniqueIndex("idx_relay_managed_endpoint_allocations_hostname").on(table.hostname),
uniqueIndex("idx_relay_managed_endpoint_allocations_tunnel_name").on(table.tunnelName),
],
);
export const relayManagedTunnelLimits = pgTable("relay_managed_tunnel_limits", {
userId: varchar("user_id", { length: 191 }).primaryKey(),
maxTunnels: integer("max_tunnels").notNull(),
createdAt: varchar("created_at", { length: 64 }).notNull(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
});
export const relayEnvironmentCredentials = pgTable(
"relay_environment_credentials",
{
credentialId: varchar("credential_id", { length: 64 }).primaryKey(),
environmentId: varchar("environment_id", { length: 191 }).notNull(),
environmentPublicKey: text("environment_public_key").notNull(),
credentialHash: varchar("credential_hash", { length: 191 }).notNull(),
revokedAt: varchar("revoked_at", { length: 64 }),
createdAt: varchar("created_at", { length: 64 }).notNull(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
},
(table) => [
uniqueIndex("idx_relay_environment_credentials_hash").on(table.credentialHash),
index("idx_relay_environment_credentials_environment").on(table.environmentId, table.revokedAt),
index("idx_relay_environment_credentials_environment_key").on(
table.environmentId,
table.environmentPublicKey,
table.revokedAt,
),
],
);
export const relayAgentActivityRows = pgTable(
"relay_agent_activity_rows",
{
environmentId: varchar("environment_id", { length: 191 }).notNull(),
environmentPublicKey: text("environment_public_key").notNull(),
threadId: varchar("thread_id", { length: 512 }).notNull(),
stateJson: jsonb("state_json").notNull().$type<RelayAgentActivityState>(),
updatedAt: varchar("updated_at", { length: 64 }).notNull(),
createdAt: varchar("created_at", { length: 64 }).notNull(),
},
(table) => [
primaryKey({ columns: [table.environmentId, table.environmentPublicKey, table.threadId] }),
index("idx_relay_agent_activity_rows_updated").on(table.updatedAt),
],
);
export const relayDeliveryAttempts = pgTable(
"relay_delivery_attempts",
{
id: varchar("id", { length: 36 }).primaryKey(),
createdAt: varchar("created_at", { length: 64 }).notNull(),
userId: varchar("user_id", { length: 255 }),
environmentId: varchar("environment_id", { length: 191 }),
threadId: varchar("thread_id", { length: 512 }),
deviceId: varchar("device_id", { length: 255 }),
kind: varchar("kind", { length: 64 }).notNull(),
sourceJobId: varchar("source_job_id", { length: 64 }),
tokenSuffix: varchar("token_suffix", { length: 16 }),
apnsStatus: integer("apns_status"),
apnsReason: text("apns_reason"),
apnsId: varchar("apns_id", { length: 128 }),
transportError: text("transport_error"),
},
(table) => [
index("idx_relay_delivery_attempts_environment").on(
table.environmentId,
table.threadId,
table.createdAt,
),
uniqueIndex("idx_relay_delivery_attempts_source_job").on(table.sourceJobId),
],
);
export const relayDpopProofs = pgTable(
"relay_dpop_proofs",
{
thumbprint: varchar("thumbprint", { length: 128 }).notNull(),
jti: varchar("jti", { length: 255 }).notNull(),
iat: integer("iat").notNull(),
expiresAt: varchar("expires_at", { length: 64 }).notNull(),
createdAt: varchar("created_at", { length: 64 }).notNull(),
},
(table) => [
primaryKey({ columns: [table.thumbprint, table.jti] }),
index("idx_relay_dpop_proofs_expires_at").on(table.expiresAt),
],
);