Files
2023-09-14 14:43:03 +01:00

1333 lines
36 KiB
Plaintext

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-1.1.x"]
}
model User {
id String @id @default(cuid())
email String @unique
authenticationMethod AuthenticationMethod
authenticationProfile Json?
authenticationExtraParams Json?
authIdentifier String? @unique
displayName String?
name String?
avatarUrl String?
admin Boolean @default(false)
isOnCloudWaitlist Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
featureCloud Boolean @default(false)
isOnHostedRepoWaitlist Boolean @default(false)
marketingEmails Boolean @default(true)
confirmedBasicDetails Boolean @default(false)
orgMemberships OrgMember[]
sentInvites OrgMemberInvite[]
apiVotes ApiIntegrationVote[]
invitationCode InvitationCode? @relation(fields: [invitationCodeId], references: [id])
invitationCodeId String?
}
// @deprecated This model is no longer used as the Cloud is out of private beta
// Leaving it here for now for historical reasons
model InvitationCode {
id String @id @default(cuid())
code String @unique
users User[]
createdAt DateTime @default(now())
}
enum AuthenticationMethod {
GITHUB
MAGIC_LINK
}
model Organization {
id String @id @default(cuid())
slug String @unique
title String
maximumExecutionTimePerRunInMs Int @default(900000) // 15 minutes
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
environments RuntimeEnvironment[]
connections IntegrationConnection[]
endpoints Endpoint[]
jobs Job[]
jobVersions JobVersion[]
events EventRecord[]
jobRuns JobRun[]
projects Project[]
members OrgMember[]
invites OrgMemberInvite[]
externalAccounts ExternalAccount[]
integrations Integration[]
sources TriggerSource[]
backgroundTasks BackgroundTask[]
backgroundTaskVersions BackgroundTaskVersion[]
}
model ExternalAccount {
id String @id @default(cuid())
identifier String
metadata Json?
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
connections IntegrationConnection[]
events EventRecord[]
runs JobRun[]
schedules ScheduleSource[]
triggerSources TriggerSource[]
missingConnections MissingConnection[]
@@unique([environmentId, identifier])
}
// This is a "global" table that store all the integration methods for all the integrations across all orgs
model IntegrationAuthMethod {
id String @id @default(cuid())
key String
name String
description String
type String
client Json?
config Json?
scopes Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
integrations Integration[]
definition IntegrationDefinition @relation(fields: [definitionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
definitionId String
help Json?
@@unique([definitionId, key])
}
model IntegrationDefinition {
id String @id
name String
instructions String?
description String?
icon String?
packageName String @default("")
authMethods IntegrationAuthMethod[]
Integration Integration[]
}
model Integration {
id String @id @default(cuid())
slug String
title String?
description String?
setupStatus IntegrationSetupStatus @default(COMPLETE)
authSource IntegrationAuthSource @default(HOSTED)
definition IntegrationDefinition @relation(fields: [definitionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
definitionId String
authMethod IntegrationAuthMethod? @relation(fields: [authMethodId], references: [id], onDelete: Cascade, onUpdate: Cascade)
authMethodId String?
connectionType ConnectionType @default(DEVELOPER)
scopes String[]
customClientReference SecretReference? @relation(fields: [customClientReferenceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
customClientReferenceId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
attempts ConnectionAttempt[]
connections IntegrationConnection[]
jobIntegrations JobIntegration[]
sources TriggerSource[]
missingConnections MissingConnection[]
RunConnection RunConnection[]
@@unique([organizationId, slug])
}
enum IntegrationAuthSource {
HOSTED
LOCAL
}
enum IntegrationSetupStatus {
MISSING_FIELDS
COMPLETE
}
model IntegrationConnection {
id String @id @default(cuid())
connectionType ConnectionType @default(DEVELOPER)
expiresAt DateTime?
metadata Json
scopes String[]
dataReference SecretReference @relation(fields: [dataReferenceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
dataReferenceId String
integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
integrationId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
externalAccount ExternalAccount? @relation(fields: [externalAccountId], references: [id], onDelete: Cascade, onUpdate: Cascade)
externalAccountId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
runConnections RunConnection[]
}
enum ConnectionType {
EXTERNAL
DEVELOPER
}
model ConnectionAttempt {
id String @id @default(cuid())
securityCode String?
redirectTo String @default("/")
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
integration Integration @relation(fields: [integrationId], references: [id])
integrationId String
}
model OrgMember {
id String @id @default(cuid())
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade)
userId String
role OrgMemberRole @default(MEMBER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
environments RuntimeEnvironment[]
@@unique([organizationId, userId])
}
enum OrgMemberRole {
ADMIN
MEMBER
}
model OrgMemberInvite {
id String @id @default(cuid())
token String @unique @default(cuid())
email String
role OrgMemberRole @default(MEMBER)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
inviter User @relation(fields: [inviterId], references: [id], onDelete: Cascade, onUpdate: Cascade)
inviterId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([organizationId, email])
}
model RuntimeEnvironment {
id String @id @default(cuid())
slug String
apiKey String @unique
pkApiKey String @unique
type RuntimeEnvironmentType @default(DEVELOPMENT)
autoEnableInternalSources Boolean @default(true)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
//when the org member is deleted, it will keep the environment but set it to null
orgMember OrgMember? @relation(fields: [orgMemberId], references: [id], onDelete: SetNull, onUpdate: Cascade)
orgMemberId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
endpoints Endpoint[]
jobVersions JobVersion[]
events EventRecord[]
jobRuns JobRun[]
requestDeliveries HttpSourceRequestDelivery[]
jobAliases JobAlias[]
JobQueue JobQueue[]
sources TriggerSource[]
eventDispatchers EventDispatcher[]
scheduleSources ScheduleSource[]
externalAccounts ExternalAccount[]
backgroundTaskVersions BackgroundTaskVersion[]
backgroundTaskAliases BackgroundTaskAlias[]
@@unique([projectId, slug, orgMemberId])
}
enum RuntimeEnvironmentType {
PRODUCTION
STAGING
DEVELOPMENT
PREVIEW
}
model Project {
id String @id @default(cuid())
slug String @unique
name String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
environments RuntimeEnvironment[]
endpoints Endpoint[]
jobs Job[]
jobVersion JobVersion[]
events EventRecord[]
runs JobRun[]
sources TriggerSource[]
backgroundTasks BackgroundTask[]
backgroundTaskVersions BackgroundTaskVersion[]
}
model Endpoint {
id String @id @default(cuid())
slug String
url String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
indexingHookIdentifier String?
jobVersions JobVersion[]
jobRuns JobRun[]
httpRequestDeliveries HttpSourceRequestDelivery[]
dynamictriggers DynamicTrigger[]
sources TriggerSource[]
indexings EndpointIndex[]
backgroundTaskVersions BackgroundTaskVersion[]
@@unique([environmentId, slug])
}
model EndpointIndex {
id String @id @default(cuid())
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
source EndpointIndexSource @default(MANUAL)
sourceData Json?
reason String?
data Json
stats Json
}
enum EndpointIndexSource {
MANUAL
API
INTERNAL
HOOK
}
model Job {
id String @id @default(cuid())
slug String
title String
internal Boolean @default(false)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
versions JobVersion[]
runs JobRun[]
integrations JobIntegration[]
aliases JobAlias[]
dynamicTriggers DynamicTrigger[]
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
deletedAt DateTime?
@@unique([projectId, slug])
}
model JobVersion {
id String @id @default(cuid())
version String
eventSpecification Json
properties Json?
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade, onUpdate: Cascade)
jobId String
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
queue JobQueue @relation(fields: [queueId], references: [id])
queueId String
startPosition JobStartPosition @default(INITIAL)
preprocessRuns Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
runs JobRun[]
integrations JobIntegration[]
aliases JobAlias[]
examples EventExample[]
dynamicTriggers DynamicTrigger[]
triggerSources TriggerSource[]
status JobVersionStatus @default(ACTIVE)
@@unique([jobId, version, environmentId])
}
enum JobVersionStatus {
ACTIVE
DISABLED
}
model EventExample {
id String @id @default(cuid())
slug String
name String
icon String?
payload Json?
jobVersion JobVersion @relation(fields: [jobVersionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
jobVersionId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([slug, jobVersionId])
}
model JobQueue {
id String @id @default(cuid())
name String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
jobCount Int @default(0)
maxJobs Int @default(100)
runs JobRun[]
jobVersion JobVersion[]
@@unique([environmentId, name])
}
model JobAlias {
id String @id @default(cuid())
name String @default("latest")
value String
version JobVersion @relation(fields: [versionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
versionId String
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade, onUpdate: Cascade)
jobId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
@@unique([jobId, environmentId, name])
}
model JobIntegration {
id String @id @default(cuid())
key String
version JobVersion @relation(fields: [versionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
versionId String
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade, onUpdate: Cascade)
jobId String
integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
integrationId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([versionId, key])
}
model RunConnection {
id String @id @default(cuid())
key String
authSource IntegrationAuthSource @default(HOSTED)
run JobRun @relation(fields: [runId], references: [id], onDelete: Cascade, onUpdate: Cascade)
runId String
connection IntegrationConnection? @relation(fields: [connectionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
connectionId String?
integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
integrationId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
tasks Task[]
@@unique([runId, key])
}
model DynamicTrigger {
id String @id @default(cuid())
type DynamicTriggerType @default(EVENT)
slug String
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
jobs Job[]
sources TriggerSource[]
scheduleSources ScheduleSource[]
registrations DynamicTriggerRegistration[]
sourceRegistrationJob JobVersion? @relation(fields: [sourceRegistrationJobId], references: [id], onDelete: Cascade, onUpdate: Cascade)
sourceRegistrationJobId String?
@@unique([endpointId, slug, type])
}
enum DynamicTriggerType {
EVENT
SCHEDULE
}
model EventDispatcher {
id String @id @default(cuid())
event String[]
source String
payloadFilter Json?
contextFilter Json?
manual Boolean @default(false)
dispatchableId String
dispatchable Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
enabled Boolean @default(true)
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
registrations DynamicTriggerRegistration[]
scheduleSources ScheduleSource[]
@@unique([dispatchableId, environmentId])
}
enum JobStartPosition {
INITIAL
LATEST
}
model EventRecord {
id String @id @default(cuid())
eventId String
name String
timestamp DateTime @default(now())
payload Json
context Json?
sourceContext Json?
source String @default("trigger.dev")
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
externalAccount ExternalAccount? @relation(fields: [externalAccountId], references: [id], onDelete: Cascade, onUpdate: Cascade)
externalAccountId String?
deliverAt DateTime @default(now())
deliveredAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
cancelledAt DateTime?
isTest Boolean @default(false)
runs JobRun[]
@@unique([eventId, environmentId])
}
model JobRun {
id String @id @default(cuid())
number Int
job Job @relation(fields: [jobId], references: [id], onDelete: Cascade, onUpdate: Cascade)
jobId String
version JobVersion @relation(fields: [versionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
versionId String
event EventRecord @relation(fields: [eventId], references: [id], onDelete: Cascade, onUpdate: Cascade)
eventId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
queue JobQueue @relation(fields: [queueId], references: [id])
queueId String
externalAccount ExternalAccount? @relation(fields: [externalAccountId], references: [id], onDelete: Cascade, onUpdate: Cascade)
externalAccountId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
queuedAt DateTime?
startedAt DateTime?
completedAt DateTime?
properties Json?
status JobRunStatus @default(PENDING)
output Json?
timedOutAt DateTime?
timedOutReason String?
executionCount Int @default(0)
executionDuration Int @default(0)
isTest Boolean @default(false)
preprocess Boolean @default(false)
tasks Task[]
runConnections RunConnection[]
missingConnections MissingConnection[]
executions JobRunExecution[]
}
enum JobRunStatus {
PENDING
QUEUED
WAITING_ON_CONNECTIONS
PREPROCESSING
STARTED
SUCCESS
FAILURE
TIMED_OUT
ABORTED
CANCELED
}
model JobRunExecution {
id String @id @default(cuid())
run JobRun @relation(fields: [runId], references: [id], onDelete: Cascade, onUpdate: Cascade)
runId String
retryCount Int @default(0)
retryLimit Int @default(0)
retryDelayInMs Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
startedAt DateTime?
completedAt DateTime?
error String?
reason JobRunExecutionReason @default(EXECUTE_JOB)
status JobRunExecutionStatus @default(PENDING)
resumeTask Task? @relation(fields: [resumeTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
resumeTaskId String?
graphileJobId String?
isRetry Boolean @default(false)
}
enum JobRunExecutionReason {
PREPROCESS
EXECUTE_JOB
}
enum JobRunExecutionStatus {
PENDING
STARTED
SUCCESS
FAILURE
}
model Task {
id String @id
idempotencyKey String
displayKey String?
name String
icon String?
status TaskStatus @default(PENDING)
delayUntil DateTime?
noop Boolean @default(false)
description String?
properties Json?
outputProperties Json?
params Json?
output Json?
error String?
redact Json?
style Json?
operation String?
startedAt DateTime?
completedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
run JobRun @relation(fields: [runId], references: [id], onDelete: Cascade, onUpdate: Cascade)
runId String
parent Task? @relation("TaskParent", fields: [parentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
parentId String?
runConnection RunConnection? @relation(fields: [runConnectionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
runConnectionId String?
children Task[] @relation("TaskParent")
executions JobRunExecution[]
attempts TaskAttempt[]
backgroundTaskOperation BackgroundTaskOperation?
@@unique([runId, idempotencyKey])
}
enum TaskStatus {
PENDING
WAITING
RUNNING
COMPLETED
ERRORED
CANCELED
}
model TaskAttempt {
id String @id @default(cuid())
number Int
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
taskId String
status TaskAttemptStatus @default(PENDING)
error String?
runAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([taskId, number])
}
enum TaskAttemptStatus {
PENDING
STARTED
COMPLETED
ERRORED
}
model SecretReference {
id String @id @default(cuid())
key String @unique
provider SecretStoreProvider @default(DATABASE)
connections IntegrationConnection[]
integrations Integration[]
triggerSources TriggerSource[]
backgroundTaskSecrets BackgroundTaskSecret[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum SecretStoreProvider {
DATABASE
AWS_PARAM_STORE
}
model SecretStore {
key String @unique
value Json
version String @default("1")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model TriggerSource {
id String @id @default(cuid())
key String
params Json?
channel TriggerChannel @default(HTTP)
channelData Json?
version String @default("1")
options TriggerSourceOption[]
metadata Json?
secretReference SecretReference @relation(fields: [secretReferenceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
secretReferenceId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
integrationId String
dynamicTrigger DynamicTrigger? @relation(fields: [dynamicTriggerId], references: [id], onDelete: Cascade, onUpdate: Cascade)
dynamicTriggerId String?
externalAccount ExternalAccount? @relation(fields: [externalAccountId], references: [id], onDelete: Cascade, onUpdate: Cascade)
externalAccountId String?
sourceRegistrationJob JobVersion? @relation(fields: [sourceRegistrationJobId], references: [id], onDelete: Cascade, onUpdate: Cascade)
sourceRegistrationJobId String?
dynamicSourceId String?
dynamicSourceMetadata Json?
active Boolean @default(false)
interactive Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
httpDeliveries HttpSourceRequestDelivery[]
registrations DynamicTriggerRegistration[]
@@unique([key, environmentId])
}
enum TriggerChannel {
HTTP
SQS
SMTP
}
model TriggerSourceOption {
id String @id @default(cuid())
name String
value String
source TriggerSource @relation(fields: [sourceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
sourceId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
registered Boolean @default(false)
@@unique([name, value, sourceId])
}
model DynamicTriggerRegistration {
id String @id @default(cuid())
key String
dynamicTrigger DynamicTrigger @relation(fields: [dynamicTriggerId], references: [id], onDelete: Cascade, onUpdate: Cascade)
dynamicTriggerId String
eventDispatcher EventDispatcher @relation(fields: [eventDispatcherId], references: [id], onDelete: Cascade, onUpdate: Cascade)
eventDispatcherId String
source TriggerSource @relation(fields: [sourceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
sourceId String
metadata Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([key, dynamicTriggerId])
}
model HttpSourceRequestDelivery {
id String @id @default(cuid())
url String
method String
headers Json
body Bytes?
source TriggerSource @relation(fields: [sourceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
sourceId String
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deliveredAt DateTime?
}
model ScheduleSource {
id String @id @default(cuid())
key String
schedule Json
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
dispatcher EventDispatcher @relation(fields: [dispatcherId], references: [id], onDelete: Cascade, onUpdate: Cascade)
dispatcherId String
lastEventTimestamp DateTime?
workerJobId String?
active Boolean @default(false)
metadata Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
dynamicTrigger DynamicTrigger? @relation(fields: [dynamicTriggerId], references: [id], onDelete: Cascade, onUpdate: Cascade)
dynamicTriggerId String?
externalAccount ExternalAccount? @relation(fields: [externalAccountId], references: [id], onDelete: Cascade, onUpdate: Cascade)
externalAccountId String?
@@unique([key, environmentId])
}
model MissingConnection {
id String @id @default(cuid())
resolved Boolean @default(false)
runs JobRun[]
integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
integrationId String
connectionType ConnectionType @default(DEVELOPER)
externalAccount ExternalAccount? @relation(fields: [externalAccountId], references: [id], onDelete: Cascade, onUpdate: Cascade)
externalAccountId String?
accountIdentifier String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([integrationId, connectionType, externalAccountId])
@@unique([integrationId, connectionType, accountIdentifier])
}
model ApiIntegrationVote {
id String @id @default(cuid())
apiIdentifier String
user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade)
userId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([apiIdentifier, userId])
}
model BackgroundTask {
id String @id @default(cuid())
slug String
title String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
versions BackgroundTaskVersion[]
aliases BackgroundTaskAlias[]
artifacts BackgroundTaskArtifact[]
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
deletedAt DateTime?
operations BackgroundTaskOperation[]
machines BackgroundTaskMachine[]
images BackgroundTaskImage[]
BackgroundTaskMachinePool BackgroundTaskMachinePool[]
@@unique([projectId, slug])
}
model BackgroundTaskVersion {
id String @id @default(cuid())
version String
cpu Int @default(1)
memory Int @default(256)
concurrency Int @default(1)
diskSize Int @default(1)
region String @default("iad")
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
endpoint Endpoint @relation(fields: [endpointId], references: [id], onDelete: Cascade, onUpdate: Cascade)
endpointId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade, onUpdate: Cascade)
organizationId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade)
projectId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
aliases BackgroundTaskAlias[]
secrets BackgroundTaskSecret[]
operations BackgroundTaskOperation[]
machines BackgroundTaskMachine[]
pools BackgroundTaskMachinePool[]
@@unique([backgroundTaskId, version, environmentId])
}
model BackgroundTaskAlias {
id String @id @default(cuid())
name String @default("latest")
value String
version BackgroundTaskVersion @relation(fields: [versionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
versionId String
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade)
environmentId String
@@unique([backgroundTaskId, environmentId, name])
}
model BackgroundTaskSecret {
id String @id @default(cuid())
key String
secretReference SecretReference @relation(fields: [secretReferenceId], references: [id], onDelete: Cascade, onUpdate: Cascade)
secretReferenceId String
backgroundTaskVersion BackgroundTaskVersion @relation(fields: [backgroundTaskVersionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskVersionId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([backgroundTaskVersionId, key])
}
model BackgroundTaskArtifact {
id String @id @default(cuid())
version String
fileName String
hash String
bundle String
sourcemap Json
nodeVersion String
dependencies Json
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
images BackgroundTaskImage[]
@@unique([backgroundTaskId, version, hash])
}
enum BackgroundTaskProviderStrategy {
FLY_IO
UNSUPPORTED
}
model BackgroundTaskImage {
id String @id @default(cuid())
provider BackgroundTaskProviderStrategy
name String
tag String
digest String
size Int
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
backgroundTaskArtifact BackgroundTaskArtifact @relation(fields: [backgroundTaskArtifactId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskArtifactId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
machines BackgroundTaskMachine[]
pools BackgroundTaskMachinePool[]
@@unique([backgroundTaskArtifactId, digest])
}
model BackgroundTaskMachine {
id String @id @default(cuid())
externalId String?
provider BackgroundTaskProviderStrategy
data Json?
status BackgroundTaskMachineStatus @default(PENDING)
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
backgroundTaskVersion BackgroundTaskVersion @relation(fields: [backgroundTaskVersionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskVersionId String
backgroundTaskImage BackgroundTaskImage @relation(fields: [backgroundTaskImageId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskImageId String
pool BackgroundTaskMachinePool @relation(fields: [poolId], references: [id], onDelete: Cascade, onUpdate: Cascade)
poolId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum BackgroundTaskMachineStatus {
PENDING
CREATED
STARTING
STARTED
STOPPING
STOPPED
DESTROYING
DESTROYED
REPLACING
}
model BackgroundTaskMachinePool {
id String @id @default(cuid())
provider BackgroundTaskProviderStrategy
region String
cpu Int @default(1)
memory Int @default(256)
concurrency Int @default(1)
diskSize Int @default(1)
image BackgroundTaskImage @relation(fields: [imageId], references: [id], onDelete: Cascade, onUpdate: Cascade)
imageId String
backgroundTaskVersion BackgroundTaskVersion @relation(fields: [backgroundTaskVersionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskVersionId String
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
machines BackgroundTaskMachine[]
operations BackgroundTaskOperation[]
@@unique([backgroundTaskVersionId, imageId])
}
model BackgroundTaskOperation {
id String @id @default(cuid())
backgroundTask BackgroundTask @relation(fields: [backgroundTaskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskId String
backgroundTaskVersion BackgroundTaskVersion @relation(fields: [backgroundTaskVersionId], references: [id], onDelete: Cascade, onUpdate: Cascade)
backgroundTaskVersionId String
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade, onUpdate: Cascade)
taskId String @unique
pool BackgroundTaskMachinePool? @relation(fields: [poolId], references: [id], onDelete: Cascade, onUpdate: Cascade)
poolId String?
payload Json
output Json?
error Json?
status BackgroundTaskOperationStatus @default(PENDING)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
startedAt DateTime?
endedAt DateTime?
}
enum BackgroundTaskOperationStatus {
PENDING
WAITING_ON_IMAGE
ASSIGNED_TO_POOL
STARTED
SUCCESS
FAILURE
}