app waspAi {
wasp: {
version: "^0.11.0"
},
title: "GPT Web App Generator ✨",
head: [
"",
"",
"",
""
],
dependencies: [
("prismjs", "^1.29.0"),
("react-accessible-treeview", "2.6.1"),
("react-icons", "4.10.1"),
("@zip.js/zip.js", "2.7.16"),
("async-mutex", "0.4.0"),
("@headlessui/react", "1.7.15"),
("@heroicons/react", "2.0.18"),
("react-parallax-tilt", "1.7.151"),
("timeago.js", "4.0.2"),
("@visx/mock-data", "3.0.0"),
("@visx/group", "3.0.0"),
("@visx/shape", "3.0.0"),
("@visx/scale", "3.2.0"),
("@visx/responsive", "3.0.0"),
("@visx/gradient", "3.0.0"),
("@visx/axis", "3.2.0"),
],
client: {
rootComponent: import { RootComponent } from "@client/RootComponent.jsx",
},
db: {
system: PostgreSQL
},
auth: {
userEntity: User,
externalAuthEntity: SocialLogin,
methods: {
google: {
configFn: import { getGoogleAuthConfig } from "@server/auth.js",
getUserFieldsFn: import { getUserFields } from "@server/auth.js",
}
},
onAuthFailedRedirectTo: "/login",
onAuthSucceededRedirectTo: "/stats"
}
}
route RootRoute { path: "/", to: MainPage }
page MainPage {
component: import Main from "@client/pages/MainPage.jsx"
}
route ResultRoute { path: "/result/:appId", to: ResultPage }
page ResultPage {
component: import { ResultPage } from "@client/pages/ResultPage.jsx"
}
route StatsRoute { path: "/stats", to: StatsPage }
page StatsPage {
component: import { Stats } from "@client/pages/StatsPage.jsx",
authRequired: true
}
route LoginRoute { path: "/login", to: LoginPage }
page LoginPage {
component: import { LoginPage } from "@client/pages/LoginPage.jsx",
}
action startGeneratingNewApp {
fn: import { startGeneratingNewApp } from "@server/operations.js",
entities: [
Project,
]
}
query getAppGenerationResult {
fn: import { getAppGenerationResult } from "@server/operations.js",
entities: [
Project
]
}
query getStats {
fn: import { getStats } from "@server/operations.js",
entities: [
Project
]
}
entity User {=psl
id Int @id @default(autoincrement())
email String @unique
externalAuthAssociations SocialLogin[]
projects Project[]
psl=}
entity SocialLogin {=psl
id String @id @default(uuid())
provider String
providerId String
userId Int
user User @relation(fields: [userId], references: [id])
psl=}
entity Project {=psl
id String @id @default(uuid())
name String
description String
primaryColor String @default("sky")
authMethod String @default("usernameAndPassword")
createdAt DateTime @default(now())
status String @default("pending")
userId Int?
user User? @relation(fields: [userId], references: [id])
files File[]
logs Log[]
psl=}
entity File {=psl
id String @id @default(uuid())
name String
content String
createdAt DateTime @default(now())
projectId String
project Project @relation(fields: [projectId], references: [id])
@@index([name, projectId])
psl=}
entity Log {=psl
id String @id @default(uuid())
content String
createdAt DateTime @default(now())
projectId String
project Project @relation(fields: [projectId], references: [id])
psl=}
job checkPendingAppsJob {
executor: PgBoss,
schedule: {
cron: "* * * * *",
},
perform: {
fn: import { checkForPendingApps } from "@server/jobs/checkForPendingApps.js"
},
entities: [Project]
}
job failStaleAppsJobs {
executor: PgBoss,
schedule: {
cron: "* * * * *",
},
perform: {
fn: import { failStaleGenerations } from "@server/jobs/failStaleGenerations.js",
},
entities: [Project, Log]
}
job generateAppJob {
executor: PgBoss,
perform: {
fn: import { generateApp } from "@server/jobs/generateApp.js",
},
entities: [
Project,
File,
Log
]
}