app TodoTypescript { wasp: { version: "^0.15.0" }, title: "ToDo TypeScript", auth: { userEntity: User, methods: { usernameAndPassword: {}, // this is a very naive implementation, use 'email' in production instead //google: {}, //https://wasp-lang.dev/docs/integrations/google //gitHub: {}, //https://wasp-lang.dev/docs/integrations/github //email: {} //https://wasp-lang.dev/docs/guides/email-auth }, onAuthFailedRedirectTo: "/login", } } route RootRoute { path: "/", to: MainPage } page MainPage { authRequired: true, component: import { MainPage } from "@src/MainPage.tsx" } route LoginRoute { path: "/login", to: LoginPage } page LoginPage { component: import { LoginPage } from "@src/LoginPage.tsx" } route SignupRoute { path: "/signup", to: SignupPage } page SignupPage { component: import { SignupPage } from "@src/SignupPage.tsx" } query getTasks { // We specify the JS implementation of our query (which is an async JS function) // Even if you use TS and have a queries.ts file, you will still need to import it using the .js extension. // see here for more info: https://wasp-lang.dev/docs/tutorials/todo-app/03-listing-tasks#wasp-declaration fn: import { getTasks } from "@src/queries.js", // We tell Wasp that this query is doing something with the `Task` entity. With that, Wasp will // automatically refresh the results of this query when tasks change. entities: [Task] } action createTask { fn: import { createTask } from "@src/actions.js", entities: [Task] } action updateTask { fn: import { updateTask } from "@src/actions.js", entities: [Task] } action deleteTasks { fn: import { deleteTasks } from "@src/actions.js", entities: [Task], }