From 71561724a5934b524147d9c9623ada583ec9116b Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Fri, 8 May 2026 19:31:40 +0700 Subject: [PATCH] Add Telegram bot login sessions --- .../3_add_telegram_bot_sessions/migration.sql | 37 + prisma/schema.prisma | 23 + src/auth/telegram-bot-login.ts | 189 + src/auth/telegram.ts | 28 +- src/config.ts | 5 + src/generated/prisma/edge.js | 29 +- src/generated/prisma/index-browser.js | 21 + src/generated/prisma/index.d.ts | 3274 ++++++++++++++++- src/generated/prisma/index.js | 29 +- src/generated/prisma/package.json | 2 +- src/generated/prisma/schema.prisma | 31 +- src/graphql/schema.ts | 27 + src/server.ts | 10 + 13 files changed, 3683 insertions(+), 22 deletions(-) create mode 100644 prisma/migrations/3_add_telegram_bot_sessions/migration.sql create mode 100644 src/auth/telegram-bot-login.ts diff --git a/prisma/migrations/3_add_telegram_bot_sessions/migration.sql b/prisma/migrations/3_add_telegram_bot_sessions/migration.sql new file mode 100644 index 0000000..70f315e --- /dev/null +++ b/prisma/migrations/3_add_telegram_bot_sessions/migration.sql @@ -0,0 +1,37 @@ +-- CreateTable +CREATE TABLE "UserSession" ( + "id" TEXT NOT NULL, + "tokenHash" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "expiresAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "UserSession_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TelegramLoginRequest" ( + "id" TEXT NOT NULL, + "tokenHash" TEXT NOT NULL, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "sessionToken" TEXT, + "userId" TEXT, + "expiresAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TelegramLoginRequest_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "UserSession_tokenHash_key" ON "UserSession"("tokenHash"); + +-- CreateIndex +CREATE UNIQUE INDEX "TelegramLoginRequest_tokenHash_key" ON "TelegramLoginRequest"("tokenHash"); + +-- AddForeignKey +ALTER TABLE "UserSession" ADD CONSTRAINT "UserSession_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TelegramLoginRequest" ADD CONSTRAINT "TelegramLoginRequest_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ab48d4d..bfc08d5 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -35,11 +35,34 @@ model User { lastName String? photoUrl String? languageCode String? + sessions UserSession[] + loginRequests TelegramLoginRequest[] voiceExperiences VoiceExperience[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } +model UserSession { + id String @id @default(cuid()) + tokenHash String @unique + userId String + user User @relation(fields: [userId], references: [id]) + expiresAt DateTime + createdAt DateTime @default(now()) +} + +model TelegramLoginRequest { + id String @id @default(cuid()) + tokenHash String @unique + status String @default("PENDING") + sessionToken String? + userId String? + user User? @relation(fields: [userId], references: [id]) + expiresAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + model VoiceExperience { id String @id @default(cuid()) placeId String diff --git a/src/auth/telegram-bot-login.ts b/src/auth/telegram-bot-login.ts new file mode 100644 index 0000000..34a5ca9 --- /dev/null +++ b/src/auth/telegram-bot-login.ts @@ -0,0 +1,189 @@ +import { randomBytes } from 'node:crypto'; + +import { config } from '../config.js'; +import { prisma } from '../prisma.js'; +import { + sha256Hex, + upsertTelegramUser, + type TelegramUserPayload, +} from './telegram.js'; + +type TelegramUpdate = { + message?: { + chat: { id: number }; + text?: string; + from?: TelegramBotUser; + }; +}; + +type TelegramBotUser = { + id: number; + is_bot?: boolean; + first_name?: string; + last_name?: string; + username?: string; + language_code?: string; +}; + +const loginPrefix = 'login_'; + +function randomToken() { + return randomBytes(32).toString('base64url'); +} + +function expiresIn(seconds: number) { + return new Date(Date.now() + seconds * 1000); +} + +function botApiUrl(method: string) { + if (!config.telegramMiniAppBotToken) { + throw new Error('TELEGRAM_MINI_APP_BOT_TOKEN is required.'); + } + + return `https://api.telegram.org/bot${config.telegramMiniAppBotToken}/${method}`; +} + +async function callTelegram(method: string, body: Record) { + const response = await fetch(botApiUrl(method), { + method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(body), + }); + + if (!response.ok) { + throw new Error(`Telegram ${method} failed with ${response.status}.`); + } + + const payload = (await response.json()) as { ok: boolean; description?: string }; + if (!payload.ok) { + throw new Error(payload.description ?? `Telegram ${method} failed.`); + } +} + +function userPayload(from: TelegramBotUser): TelegramUserPayload { + return { + id: from.id, + username: from.username, + firstName: from.first_name, + lastName: from.last_name, + languageCode: from.language_code, + }; +} + +async function sendLoginMessage(chatId: number, text: string, token?: string) { + const replyMarkup = token + ? { + inline_keyboard: [ + [ + { + text: 'Вернуться в MapFlow', + url: `${config.webAppUrl}?telegram_login=${encodeURIComponent(token)}`, + }, + ], + ], + } + : undefined; + + await callTelegram('sendMessage', { + chat_id: chatId, + text, + reply_markup: replyMarkup, + }); +} + +export async function createTelegramBotLogin() { + const token = randomToken(); + const expiresAt = expiresIn(config.botLoginMaxAgeSeconds); + + await prisma.telegramLoginRequest.create({ + data: { + tokenHash: sha256Hex(token), + expiresAt, + }, + }); + + return { + token, + botUrl: `https://t.me/${config.telegramBotUsername}?start=${loginPrefix}${token}`, + expiresAt: expiresAt.toISOString(), + }; +} + +export async function getTelegramBotLoginStatus(token: string) { + const request = await prisma.telegramLoginRequest.findUnique({ + where: { tokenHash: sha256Hex(token) }, + include: { user: true }, + }); + + if (!request) { + return { status: 'EXPIRED', sessionToken: null, user: null }; + } + + if (request.status === 'PENDING' && request.expiresAt <= new Date()) { + await prisma.telegramLoginRequest.update({ + where: { id: request.id }, + data: { status: 'EXPIRED' }, + }); + return { status: 'EXPIRED', sessionToken: null, user: null }; + } + + return { + status: request.status, + sessionToken: request.sessionToken, + user: request.user, + }; +} + +export async function handleTelegramBotWebhook( + update: TelegramUpdate, + secretToken?: string, +) { + if (config.telegramWebhookSecret && secretToken !== config.telegramWebhookSecret) { + throw new Error('Telegram webhook secret is invalid.'); + } + + const message = update.message; + const text = message?.text; + const from = message?.from; + const chatId = message?.chat.id; + if (!message || !text || !from || !chatId) { + return; + } + + const [command, payload] = text.split(' '); + if (command !== '/start' || !payload?.startsWith(loginPrefix)) { + await sendLoginMessage(chatId, 'Открой вход с сайта MapFlow.'); + return; + } + + const token = payload.slice(loginPrefix.length); + const request = await prisma.telegramLoginRequest.findUnique({ + where: { tokenHash: sha256Hex(token) }, + }); + + if (!request || request.status !== 'PENDING' || request.expiresAt <= new Date()) { + await sendLoginMessage(chatId, 'Ссылка входа устарела. Открой вход заново.'); + return; + } + + const user = await upsertTelegramUser(userPayload(from)); + const sessionToken = randomToken(); + await prisma.userSession.create({ + data: { + tokenHash: sha256Hex(sessionToken), + userId: user.id, + expiresAt: expiresIn(config.sessionMaxAgeSeconds), + }, + }); + + await prisma.telegramLoginRequest.update({ + where: { id: request.id }, + data: { + status: 'CONFIRMED', + sessionToken, + userId: user.id, + }, + }); + + await sendLoginMessage(chatId, 'Готово. Можно вернуться в MapFlow.', token); +} diff --git a/src/auth/telegram.ts b/src/auth/telegram.ts index c32e84f..81d8307 100644 --- a/src/auth/telegram.ts +++ b/src/auth/telegram.ts @@ -22,7 +22,7 @@ export type TelegramLoginData = { hash: string; }; -type TelegramUserPayload = { +export type TelegramUserPayload = { id: number; username?: string; firstName?: string; @@ -34,16 +34,21 @@ type TelegramUserPayload = { type TelegramAuthData = { telegramInitData?: string; telegramLoginData?: string; + mapflowSessionToken?: string; }; function hmacSha256(key: string | Buffer, value: string) { return createHmac('sha256', key).update(value).digest(); } -function sha256(value: string) { +export function sha256(value: string) { return createHash('sha256').update(value).digest(); } +export function sha256Hex(value: string) { + return createHash('sha256').update(value).digest('hex'); +} + function assertValidHash(receivedHash: string, expectedHash: Buffer, dataType: string) { const received = Buffer.from(receivedHash, 'hex'); if (received.length !== expectedHash.length) { @@ -134,7 +139,7 @@ function parseTelegramLoginJson(loginData: string) { return parseTelegramLoginData(JSON.parse(loginData) as TelegramLoginData); } -async function upsertTelegramUser(user: TelegramUserPayload) { +export async function upsertTelegramUser(user: TelegramUserPayload) { return prisma.user.upsert({ where: { telegramId: String(user.id) }, create: { @@ -163,7 +168,24 @@ export async function getOrCreateTelegramLoginUser(loginData: TelegramLoginData) return upsertTelegramUser(parseTelegramLoginData(loginData)); } +export async function getUserBySessionToken(sessionToken: string) { + const session = await prisma.userSession.findUnique({ + where: { tokenHash: sha256Hex(sessionToken) }, + include: { user: true }, + }); + + if (!session || session.expiresAt <= new Date()) { + throw new Error('Telegram authorization is required.'); + } + + return session.user; +} + export async function requireTelegramUser(authData: TelegramAuthData) { + if (authData.mapflowSessionToken) { + return getUserBySessionToken(authData.mapflowSessionToken); + } + if (authData.telegramInitData) { return upsertTelegramUser(parseTelegramInitData(authData.telegramInitData)); } diff --git a/src/config.ts b/src/config.ts index 51117db..1d542ca 100644 --- a/src/config.ts +++ b/src/config.ts @@ -10,7 +10,12 @@ export const config = { databaseUrl: process.env.DATABASE_URL ?? '', hatchetToken: process.env.HATCHET_CLIENT_TOKEN ?? '', telegramMiniAppBotToken: process.env.TELEGRAM_MINI_APP_BOT_TOKEN ?? '', + telegramBotUsername: process.env.TELEGRAM_BOT_USERNAME ?? 'carfteebot', + telegramWebhookSecret: process.env.TELEGRAM_WEBHOOK_SECRET ?? '', + webAppUrl: process.env.WEB_APP_URL ?? 'https://map.craftee.vn', telegramAuthMaxAgeSeconds: Number( process.env.TELEGRAM_AUTH_MAX_AGE_SECONDS ?? '86400', ), + sessionMaxAgeSeconds: Number(process.env.SESSION_MAX_AGE_SECONDS ?? '2592000'), + botLoginMaxAgeSeconds: Number(process.env.BOT_LOGIN_MAX_AGE_SECONDS ?? '300'), }; diff --git a/src/generated/prisma/edge.js b/src/generated/prisma/edge.js index 1435c1f..0f0d096 100644 --- a/src/generated/prisma/edge.js +++ b/src/generated/prisma/edge.js @@ -114,6 +114,25 @@ exports.Prisma.UserScalarFieldEnum = { updatedAt: 'updatedAt' }; +exports.Prisma.UserSessionScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt' +}; + +exports.Prisma.TelegramLoginRequestScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + status: 'status', + sessionToken: 'sessionToken', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + exports.Prisma.VoiceExperienceScalarFieldEnum = { id: 'id', placeId: 'placeId', @@ -164,6 +183,8 @@ exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { exports.Prisma.ModelName = { Place: 'Place', User: 'User', + UserSession: 'UserSession', + TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' }; /** @@ -174,14 +195,14 @@ const config = { "clientVersion": "7.8.0", "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n experiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n voiceExperiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n experiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n sessions UserSession[]\n loginRequests TelegramLoginRequest[]\n voiceExperiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel UserSession {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n}\n\nmodel TelegramLoginRequest {\n id String @id @default(cuid())\n tokenHash String @unique\n status String @default(\"PENDING\")\n sessionToken String?\n userId String?\n user User? @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" } -config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"UserSession\",\"relationName\":\"UserToUserSession\"},{\"name\":\"loginRequests\",\"kind\":\"object\",\"type\":\"TelegramLoginRequest\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSession\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TelegramLoginRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"voiceExperiences\",\"_count\",\"user\",\"experiences\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.aggregate\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "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-ACFEAQB-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_ACFHAQB-ACFJAACAAUkiSgEAgQEAIUuAAAAAAUxAAIIBACFNQACCAQAhCgYAAIQBACBDAQB-ACFFAQCBAQAhRgIAfwAhRwEAfgAhSQAAgAFJIkoBAIEBACFLgAAAAAFMQACCAQAhTUAAggEAIQoGAACGAQAgQwEAAAABRQEAAAABRgIAAAABRwEAAAABSQAAAEkCSgEAAAABS4AAAAABTEAAAAABTUAAAAABBBQAAKABADBuAAChAQAwcAAAowEAIHQAAI8BADABBwAAmAEAIAYEAACYAQAgYAAAeAAgYQAAeAAgYgAAeAAgYwAAeAAgZAAAeAAgCUMBAAAAAUUBAAAAAUYCAAAAAUcBAAAAAUkAAABJAkoBAAAAAUuAAAAAAUxAAAAAAU1AAAAAAQlDAQAAAAFEAQAAAAFGAgAAAAFHAQAAAAFJAAAASQJKAQAAAAFLgAAAAAFMQAAAAAFNQAAAAAEJQwEAAAABTEAAAAABTUAAAAABXwEAAAABYAEAAAABYQEAAAABYgEAAAABYwEAAAABZAEAAAABAgAAACMAIBQAAK4BACAHQwEAAAABTEAAAAABTUAAAAABaAEAAAABaQEAAAABaggAAAABawgAAAABAgAAAAEAIBQAALABACADAAAABwAgFAAArgEAIBUAALQBACALAAAABwAgDQAAtAEAIEMBAH4AIUxAAIIBACFNQACCAQAhXwEAfgAhYAEAgQEAIWEBAIEBACFiAQCBAQAhYwEAgQEAIWQBAIEBACEJQwEAfgAhTEAAggEAIU1AAIIBACFfAQB-ACFgAQCBAQAhYQEAgQEAIWIBAIEBACFjAQCBAQAhZAEAgQEAIQMAAAANACAUAACwAQAgFQAAtwEAIAkAAAANACANAAC3AQAgQwEAfgAhTEAAggEAIU1AAIIBACFoAQB-ACFpAQB-ACFqCACeAQAhawgAngEAIQdDAQB-ACFMQACCAQAhTUAAggEAIWgBAH4AIWkBAH4AIWoIAJ4BACFrCACeAQAhAgUABQcGAgIDAAEGCAMCBAkCBQAEAQQKAAEHCwAAAAAFBQAKGgALGwAMHAANHQAOAAAAAAAFBQAKGgALGwAMHAANHQAOAAADBQATHAAUHQAVAAAAAwUAExwAFB0AFQIDAAEGRQMCAwABBksDBQUAGhoAGxsAHBwAHR0AHgAAAAAABQUAGhoAGxsAHBwAHR0AHggCAQkMAQoPAQsQAQwRAQ4TAQ8VBhAWBxEYARIaBhMbCBYcARcdARgeBh4hCR8iDyAkAyElAyInAyMoAyQpAyUrAyYtBicuECgwAykyBiozESs0Ayw1Ay02Bi45Ei86FjA7AjE8AjI9AjM-AjQ_AjVBAjZDBjdEFzhHAjlJBjpKGDtMAjxNAj1OBj5RGT9SHw" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"user\",\"sessions\",\"loginRequests\",\"voiceExperiences\",\"_count\",\"experiences\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.aggregate\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"UserSession.findUnique\",\"UserSession.findUniqueOrThrow\",\"UserSession.findFirst\",\"UserSession.findFirstOrThrow\",\"UserSession.findMany\",\"UserSession.createOne\",\"UserSession.createMany\",\"UserSession.createManyAndReturn\",\"UserSession.updateOne\",\"UserSession.updateMany\",\"UserSession.updateManyAndReturn\",\"UserSession.upsertOne\",\"UserSession.deleteOne\",\"UserSession.deleteMany\",\"UserSession.groupBy\",\"UserSession.aggregate\",\"TelegramLoginRequest.findUnique\",\"TelegramLoginRequest.findUniqueOrThrow\",\"TelegramLoginRequest.findFirst\",\"TelegramLoginRequest.findFirstOrThrow\",\"TelegramLoginRequest.findMany\",\"TelegramLoginRequest.createOne\",\"TelegramLoginRequest.createMany\",\"TelegramLoginRequest.createManyAndReturn\",\"TelegramLoginRequest.updateOne\",\"TelegramLoginRequest.updateMany\",\"TelegramLoginRequest.updateManyAndReturn\",\"TelegramLoginRequest.upsertOne\",\"TelegramLoginRequest.deleteOne\",\"TelegramLoginRequest.deleteMany\",\"TelegramLoginRequest.groupBy\",\"TelegramLoginRequest.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tokenHash\",\"sessionToken\",\"expiresAt\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "qwIvUAsJAACoAQAgYgAArAEAMGMAABgAEGQAAKwBADBlAQAAAAFuQAClAQAhb0AApQEAIY0BAQAAAAGOAQEArQEAIY8BCACuAQAhkAEIAK4BACEBAAAAAQAgDwMAALcBACAEAACwAQAgYgAAswEAMGMAAAMAEGQAALMBADBlAQCtAQAhZgEArQEAIWcBAKQBACFoAgC0AQAhaQEArQEAIWsAALUBayJsAQCkAQAhbQAAtgEAIG5AAKUBACFvQAClAQAhBQMAAJMCACAEAACSAgAgZwAAuAEAIGwAALgBACBtAAC4AQAgDwMAALcBACAEAACwAQAgYgAAswEAMGMAAAMAEGQAALMBADBlAQAAAAFmAQCtAQAhZwEApAEAIWgCALQBACFpAQCtAQAhawAAtQFrImwBAKQBACFtAAC2AQAgbkAApQEAIW9AAKUBACEDAAAAAwAgAQAABAAwAgAABQAgDwUAAKYBACAGAACnAQAgBwAAqAEAIGIAAKMBADBjAAAHABBkAACjAQAwZQEArQEAIW5AAKUBACFvQAClAQAhhAEBAK0BACGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhAQAAAAcAIAkEAACyAQAgYgAAsQEAMGMAAAkAEGQAALEBADBlAQCtAQAhZwEArQEAIW5AAKUBACGBAQEArQEAIYMBQAClAQAhAQQAAJICACAJBAAAsgEAIGIAALEBADBjAAAJABBkAACxAQAwZQEAAAABZwEArQEAIW5AAKUBACGBAQEAAAABgwFAAKUBACEDAAAACQAgAQAACgAwAgAACwAgDAQAALABACBiAACvAQAwYwAADQAQZAAArwEAMGUBAK0BACFnAQCkAQAhawEArQEAIW5AAKUBACFvQAClAQAhgQEBAK0BACGCAQEApAEAIYMBQAClAQAhAwQAAJICACBnAAC4AQAgggEAALgBACAMBAAAsAEAIGIAAK8BADBjAAANABBkAACvAQAwZQEAAAABZwEApAEAIWsBAK0BACFuQAClAQAhb0AApQEAIYEBAQAAAAGCAQEApAEAIYMBQAClAQAhAwAAAA0AIAEAAA4AMAIAAA8AIAEAAAAHACADAAAAAwAgAQAABAAwAgAABQAgAQAAAAkAIAEAAAANACABAAAAAwAgAQAAAAMAIAEAAAABACALCQAAqAEAIGIAAKwBADBjAAAYABBkAACsAQAwZQEArQEAIW5AAKUBACFvQAClAQAhjQEBAK0BACGOAQEArQEAIY8BCACuAQAhkAEIAK4BACEBCQAAgAIAIAMAAAAYACABAAAZADACAAABACADAAAAGAAgAQAAGQAwAgAAAQAgAwAAABgAIAEAABkAMAIAAAEAIAgJAACRAgAgZQEAAAABbkAAAAABb0AAAAABjQEBAAAAAY4BAQAAAAGPAQgAAAABkAEIAAAAAQEPAAAdACAHZQEAAAABbkAAAAABb0AAAAABjQEBAAAAAY4BAQAAAAGPAQgAAAABkAEIAAAAAQEPAAAfADABDwAAHwAwCAkAAIcCACBlAQC-AQAhbkAAwgEAIW9AAMIBACGNAQEAvgEAIY4BAQC-AQAhjwEIAIYCACGQAQgAhgIAIQIAAAABACAPAAAiACAHZQEAvgEAIW5AAMIBACFvQADCAQAhjQEBAL4BACGOAQEAvgEAIY8BCACGAgAhkAEIAIYCACECAAAAGAAgDwAAJAAgAgAAABgAIA8AACQAIAMAAAABACAWAAAdACAXAAAiACABAAAAAQAgAQAAABgAIAUIAACBAgAgHAAAggIAIB0AAIUCACAeAACEAgAgHwAAgwIAIApiAACpAQAwYwAAKwAQZAAAqQEAMGUBAI0BACFuQACSAQAhb0AAkgEAIY0BAQCNAQAhjgEBAI0BACGPAQgAqgEAIZABCACqAQAhAwAAABgAIAEAACoAMBsAACsAIAMAAAAYACABAAAZADACAAABACAPBQAApgEAIAYAAKcBACAHAACoAQAgYgAAowEAMGMAAAcAEGQAAKMBADBlAQAAAAFuQAClAQAhb0AApQEAIYQBAQAAAAGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhAQAAAC4AIAEAAAAuACAIBQAA_gEAIAYAAP8BACAHAACAAgAghQEAALgBACCGAQAAuAEAIIcBAAC4AQAgiAEAALgBACCJAQAAuAEAIAMAAAAHACABAAAxADACAAAuACADAAAABwAgAQAAMQAwAgAALgAgAwAAAAcAIAEAADEAMAIAAC4AIAwFAAD7AQAgBgAA_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-AQAhZgEAvgEAIWcBAMEBACFoAgC_AQAhaQEAvgEAIWsAAMABayJsAQDBAQAhbYAAAAABbkAAwgEAIW9AAMIBACECAAAABQAgDwAAfwAgCmUBAL4BACFmAQC-AQAhZwEAwQEAIWgCAL8BACFpAQC-AQAhawAAwAFrImwBAMEBACFtgAAAAAFuQADCAQAhb0AAwgEAIQIAAAADACAPAACBAQAgAgAAAAMAIA8AAIEBACABAAAABwAgAwAAAAUAIBYAAHkAIBcAAH8AIAEAAAAFACABAAAAAwAgCAgAALkBACAcAAC6AQAgHQAAvQEAIB4AALwBACAfAAC7AQAgZwAAuAEAIGwAALgBACBtAAC4AQAgDWIAAIwBADBjAACJAQAQZAAAjAEAMGUBAI0BACFmAQCNAQAhZwEAjgEAIWgCAI8BACFpAQCNAQAhawAAkAFrImwBAI4BACFtAACRAQAgbkAAkgEAIW9AAJIBACEDAAAAAwAgAQAAiAEAMBsAAIkBACADAAAAAwAgAQAABAAwAgAABQAgDWIAAIwBADBjAACJAQAQZAAAjAEAMGUBAI0BACFmAQCNAQAhZwEAjgEAIWgCAI8BACFpAQCNAQAhawAAkAFrImwBAI4BACFtAACRAQAgbkAAkgEAIW9AAJIBACEOCAAAlAEAIB4AAJ8BACAfAACfAQAgcAEAAAABcQEAAAAEcgEAAAAEcwEAAAABdAEAAAABdQEAAAABdgEAAAABdwEAngEAIX4BAAAAAX8BAAAAAYABAQAAAAEOCAAAlgEAIB4AAJ0BACAfAACdAQAgcAEAAAABcQEAAAAFcgEAAAAFcwEAAAABdAEAAAABdQEAAAABdgEAAAABdwEAnAEAIX4BAAAAAX8BAAAAAYABAQAAAAENCAAAlAEAIBwAAJsBACAdAACUAQAgHgAAlAEAIB8AAJQBACBwAgAAAAFxAgAAAARyAgAAAARzAgAAAAF0AgAAAAF1AgAAAAF2AgAAAAF3AgCaAQAhBwgAAJQBACAeAACZAQAgHwAAmQEAIHAAAABrAnEAAABrCHIAAABrCHcAAJgBayIPCAAAlgEAIB4AAJcBACAfAACXAQAgcIAAAAABc4AAAAABdIAAAAABdYAAAAABdoAAAAABd4AAAAABeAEAAAABeQEAAAABegEAAAABe4AAAAABfIAAAAABfYAAAAABCwgAAJQBACAeAACVAQAgHwAAlQEAIHBAAAAAAXFAAAAABHJAAAAABHNAAAAAAXRAAAAAAXVAAAAAAXZAAAAAAXdAAJMBACELCAAAlAEAIB4AAJUBACAfAACVAQAgcEAAAAABcUAAAAAEckAAAAAEc0AAAAABdEAAAAABdUAAAAABdkAAAAABd0AAkwEAIQhwAgAAAAFxAgAAAARyAgAAAARzAgAAAAF0AgAAAAF1AgAAAAF2AgAAAAF3AgCUAQAhCHBAAAAAAXFAAAAABHJAAAAABHNAAAAAAXRAAAAAAXVAAAAAAXZAAAAAAXdAAJUBACEIcAIAAAABcQIAAAAFcgIAAAAFcwIAAAABdAIAAAABdQIAAAABdgIAAAABdwIAlgEAIQxwgAAAAAFzgAAAAAF0gAAAAAF1gAAAAAF2gAAAAAF3gAAAAAF4AQAAAAF5AQAAAAF6AQAAAAF7gAAAAAF8gAAAAAF9gAAAAAEHCAAAlAEAIB4AAJkBACAfAACZAQAgcAAAAGsCcQAAAGsIcgAAAGsIdwAAmAFrIgRwAAAAawJxAAAAawhyAAAAawh3AACZAWsiDQgAAJQBACAcAACbAQAgHQAAlAEAIB4AAJQBACAfAACUAQAgcAIAAAABcQIAAAAEcgIAAAAEcwIAAAABdAIAAAABdQIAAAABdgIAAAABdwIAmgEAIQhwCAAAAAFxCAAAAARyCAAAAARzCAAAAAF0CAAAAAF1CAAAAAF2CAAAAAF3CACbAQAhDggAAJYBACAeAACdAQAgHwAAnQEAIHABAAAAAXEBAAAABXIBAAAABXMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJwBACF-AQAAAAF_AQAAAAGAAQEAAAABC3ABAAAAAXEBAAAABXIBAAAABXMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ0BACF-AQAAAAF_AQAAAAGAAQEAAAABDggAAJQBACAeAACfAQAgHwAAnwEAIHABAAAAAXEBAAAABHIBAAAABHMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ4BACF-AQAAAAF_AQAAAAGAAQEAAAABC3ABAAAAAXEBAAAABHIBAAAABHMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ8BACF-AQAAAAF_AQAAAAGAAQEAAAABC2IAAKABADBjAABxABBkAACgAQAwZQEAjQEAIWcBAI4BACFrAQCNAQAhbkAAkgEAIW9AAJIBACGBAQEAjQEAIYIBAQCOAQAhgwFAAJIBACEIYgAAoQEAMGMAAFkAEGQAAKEBADBlAQCNAQAhZwEAjQEAIW5AAJIBACGBAQEAjQEAIYMBQACSAQAhDGIAAKIBADBjAABDABBkAACiAQAwZQEAjQEAIW5AAJIBACFvQACSAQAhhAEBAI0BACGFAQEAjgEAIYYBAQCOAQAhhwEBAI4BACGIAQEAjgEAIYkBAQCOAQAhDwUAAKYBACAGAACnAQAgBwAAqAEAIGIAAKMBADBjAAAHABBkAACjAQAwZQEArQEAIW5AAKUBACFvQAClAQAhhAEBAK0BACGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhC3ABAAAAAXEBAAAABXIBAAAABXMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ0BACF-AQAAAAF_AQAAAAGAAQEAAAABCHBAAAAAAXFAAAAABHJAAAAABHNAAAAAAXRAAAAAAXVAAAAAAXZAAAAAAXdAAJUBACEDigEAAAkAIIsBAAAJACCMAQAACQAgA4oBAAANACCLAQAADQAgjAEAAA0AIAOKAQAAAwAgiwEAAAMAIIwBAAADACAKYgAAqQEAMGMAACsAEGQAAKkBADBlAQCNAQAhbkAAkgEAIW9AAJIBACGNAQEAjQEAIY4BAQCNAQAhjwEIAKoBACGQAQgAqgEAIQ0IAACUAQAgHAAAmwEAIB0AAJsBACAeAACbAQAgHwAAmwEAIHAIAAAAAXEIAAAABHIIAAAABHMIAAAAAXQIAAAAAXUIAAAAAXYIAAAAAXcIAKsBACENCAAAlAEAIBwAAJsBACAdAACbAQAgHgAAmwEAIB8AAJsBACBwCAAAAAFxCAAAAARyCAAAAARzCAAAAAF0CAAAAAF1CAAAAAF2CAAAAAF3CACrAQAhCwkAAKgBACBiAACsAQAwYwAAGAAQZAAArAEAMGUBAK0BACFuQAClAQAhb0AApQEAIY0BAQCtAQAhjgEBAK0BACGPAQgArgEAIZABCACuAQAhC3ABAAAAAXEBAAAABHIBAAAABHMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ8BACF-AQAAAAF_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-AQAhZgEAvgEAIWgCAL8BACFpAQC-AQAhawAAwAFrImwBAMEBACFtgAAAAAFuQADCAQAhb0AAwgEAIQoDAADFAQAgZQEAAAABZgEAAAABaAIAAAABaQEAAAABawAAAGsCbAEAAAABbYAAAAABbkAAAAABb0AAAAABB2UBAAAAAWsBAAAAAW5AAAAAAW9AAAAAAYEBAQAAAAGCAQEAAAABgwFAAAAAAQIAAAAPACAWAADuAQAgAwAAAA8AIBYAAO4BACAXAADtAQAgAQ8AAJYCADAMBAAAsAEAIGIAAK8BADBjAAANABBkAACvAQAwZQEAAAABZwEApAEAIWsBAK0BACFuQAClAQAhb0AApQEAIYEBAQAAAAGCAQEApAEAIYMBQAClAQAhAgAAAA8AIA8AAO0BACACAAAA6wEAIA8AAOwBACALYgAA6gEAMGMAAOsBABBkAADqAQAwZQEArQEAIWcBAKQBACFrAQCtAQAhbkAApQEAIW9AAKUBACGBAQEArQEAIYIBAQCkAQAhgwFAAKUBACELYgAA6gEAMGMAAOsBABBkAADqAQAwZQEArQEAIWcBAKQBACFrAQCtAQAhbkAApQEAIW9AAKUBACGBAQEArQEAIYIBAQCkAQAhgwFAAKUBACEHZQEAvgEAIWsBAL4BACFuQADCAQAhb0AAwgEAIYEBAQC-AQAhggEBAMEBACGDAUAAwgEAIQdlAQC-AQAhawEAvgEAIW5AAMIBACFvQADCAQAhgQEBAL4BACGCAQEAwQEAIYMBQADCAQAhB2UBAAAAAWsBAAAAAW5AAAAAAW9AAAAAAYEBAQAAAAGCAQEAAAABgwFAAAAAAQRlAQAAAAFuQAAAAAGBAQEAAAABgwFAAAAAAQIAAAALACAWAAD6AQAgAwAAAAsAIBYAAPoBACAXAAD5AQAgAQ8AAJUCADAJBAAAsgEAIGIAALEBADBjAAAJABBkAACxAQAwZQEAAAABZwEArQEAIW5AAKUBACGBAQEAAAABgwFAAKUBACECAAAACwAgDwAA-QEAIAIAAAD3AQAgDwAA-AEAIAhiAAD2AQAwYwAA9wEAEGQAAPYBADBlAQCtAQAhZwEArQEAIW5AAKUBACGBAQEArQEAIYMBQAClAQAhCGIAAPYBADBjAAD3AQAQZAAA9gEAMGUBAK0BACFnAQCtAQAhbkAApQEAIYEBAQCtAQAhgwFAAKUBACEEZQEAvgEAIW5AAMIBACGBAQEAvgEAIYMBQADCAQAhBGUBAL4BACFuQADCAQAhgQEBAL4BACGDAUAAwgEAIQRlAQAAAAFuQAAAAAGBAQEAAAABgwFAAAAAAQQWAADvAQAwkwEAAPABADCVAQAA8gEAIJkBAADzAQAwBBYAAOMBADCTAQAA5AEAMJUBAADmAQAgmQEAAOcBADAEFgAA1wEAMJMBAADYAQAwlQEAANoBACCZAQAA2wEAMAAAAAAAAAAABZYBCAAAAAGcAQgAAAABnQEIAAAAAZ4BCAAAAAGfAQgAAAABCxYAAIgCADAXAACMAgAwkwEAAIkCADCUAQAAigIAMJUBAACLAgAglgEAANsBADCXAQAA2wEAMJgBAADbAQAwmQEAANsBADCaAQAAjQIAMJsBAADeAQAwCgQAAMYBACBlAQAAAAFnAQAAAAFoAgAAAAFpAQAAAAFrAAAAawJsAQAAAAFtgAAAAAFuQAAAAAFvQAAAAAECAAAABQAgFgAAkAIAIAMAAAAFACAWAACQAgAgFwAAjwIAIAEPAACUAgAwAgAAAAUAIA8AAI8CACACAAAA3wEAIA8AAI4CACAJZQEAvgEAIWcBAMEBACFoAgC_AQAhaQEAvgEAIWsAAMABayJsAQDBAQAhbYAAAAABbkAAwgEAIW9AAMIBACEKBAAAxAEAIGUBAL4BACFnAQDBAQAhaAIAvwEAIWkBAL4BACFrAADAAWsibAEAwQEAIW2AAAAAAW5AAMIBACFvQADCAQAhCgQAAMYBACBlAQAAAAFnAQAAAAFoAgAAAAFpAQAAAAFrAAAAawJsAQAAAAFtgAAAAAFuQAAAAAFvQAAAAAEEFgAAiAIAMJMBAACJAgAwlQEAAIsCACCZAQAA2wEAMAgFAAD-AQAgBgAA_wEAIAcAAIACACCFAQAAuAEAIIYBAAC4AQAghwEAALgBACCIAQAAuAEAIIkBAAC4AQAgAQkAAIACACAJZQEAAAABZwEAAAABaAIAAAABaQEAAAABawAAAGsCbAEAAAABbYAAAAABbkAAAAABb0AAAAABBGUBAAAAAW5AAAAAAYEBAQAAAAGDAUAAAAABB2UBAAAAAWsBAAAAAW5AAAAAAW9AAAAAAYEBAQAAAAGCAQEAAAABgwFAAAAAAQllAQAAAAFmAQAAAAFoAgAAAAFpAQAAAAFrAAAAawJsAQAAAAFtgAAAAAFuQAAAAAFvQAAAAAELBgAA_AEAIAcAAP0BACBlAQAAAAFuQAAAAAFvQAAAAAGEAQEAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAECAAAALgAgFgAAmAIAIAMAAAAHACAWAACYAgAgFwAAnAIAIA0AAAAHACAGAADVAQAgBwAA1gEAIA8AAJwCACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBgAA1QEAIAcAANYBACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBQAA-wEAIAcAAP0BACBlAQAAAAFuQAAAAAFvQAAAAAGEAQEAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAECAAAALgAgFgAAnQIAIAMAAAAHACAWAACdAgAgFwAAoQIAIA0AAAAHACAFAADUAQAgBwAA1gEAIA8AAKECACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBQAA1AEAIAcAANYBACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBQAA-wEAIAYAAPwBACBlAQAAAAFuQAAAAAFvQAAAAAGEAQEAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAECAAAALgAgFgAAogIAIAdlAQAAAAFuQAAAAAFvQAAAAAGNAQEAAAABjgEBAAAAAY8BCAAAAAGQAQgAAAABAgAAAAEAIBYAAKQCACADAAAABwAgFgAAogIAIBcAAKgCACANAAAABwAgBQAA1AEAIAYAANUBACAPAACoAgAgZQEAvgEAIW5AAMIBACFvQADCAQAhhAEBAL4BACGFAQEAwQEAIYYBAQDBAQAhhwEBAMEBACGIAQEAwQEAIYkBAQDBAQAhCwUAANQBACAGAADVAQAgZQEAvgEAIW5AAMIBACFvQADCAQAhhAEBAL4BACGFAQEAwQEAIYYBAQDBAQAhhwEBAMEBACGIAQEAwQEAIYkBAQDBAQAhAwAAABgAIBYAAKQCACAXAACrAgAgCQAAABgAIA8AAKsCACBlAQC-AQAhbkAAwgEAIW9AAMIBACGNAQEAvgEAIY4BAQC-AQAhjwEIAIYCACGQAQgAhgIAIQdlAQC-AQAhbkAAwgEAIW9AAMIBACGNAQEAvgEAIY4BAQC-AQAhjwEIAIYCACGQAQgAhgIAIQIIAAcJBgICAwABBAgDBAUMBAYQBQcSAggABgEEAAMBBBEDAwUTAAYUAAcVAAEJFgAAAAAFCAAMHAANHQAOHgAPHwAQAAAAAAAFCAAMHAANHQAOHgAPHwAQAAADCAAVHgAWHwAXAAAAAwgAFR4AFh8AFwEEAAMBBAADAwgAHB4AHR8AHgAAAAMIABweAB0fAB4BBGYDAQRsAwMIACMeACQfACUAAAADCAAjHgAkHwAlAgMAAQR-AwIDAAEEhAEDBQgAKhwAKx0ALB4ALR8ALgAAAAAABQgAKhwAKx0ALB4ALR8ALgoCAQsXAQwaAQ0bAQ4cARAeAREgCBIhCRMjARQlCBUmChgnARkoARopCCAsCyEtESIvAyMwAyQyAyUzAyY0Ayc2Ayg4CCk5Eio7Ays9CCw-Ey0_Ay5AAy9BCDBEFDFFGDJGBDNHBDRIBDVJBDZKBDdMBDhOCDlPGTpRBDtTCDxUGj1VBD5WBD9XCEBaG0FbH0JcBUNdBUReBUVfBUZgBUdiBUhkCEllIEpoBUtqCExrIU1tBU5uBU9vCFByIlFzJlJ0AlN1AlR2AlV3AlZ4Ald6Alh8CFl9J1qAAQJbggEIXIMBKF2FAQJehgECX4cBCGCKASlhiwEv" } config.compilerWasm = { getRuntime: async () => require('./query_compiler_fast_bg.js'), diff --git a/src/generated/prisma/index-browser.js b/src/generated/prisma/index-browser.js index a96b852..04c3716 100644 --- a/src/generated/prisma/index-browser.js +++ b/src/generated/prisma/index-browser.js @@ -142,6 +142,25 @@ exports.Prisma.UserScalarFieldEnum = { updatedAt: 'updatedAt' }; +exports.Prisma.UserSessionScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt' +}; + +exports.Prisma.TelegramLoginRequestScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + status: 'status', + sessionToken: 'sessionToken', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + exports.Prisma.VoiceExperienceScalarFieldEnum = { id: 'id', placeId: 'placeId', @@ -192,6 +211,8 @@ exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { exports.Prisma.ModelName = { Place: 'Place', User: 'User', + UserSession: 'UserSession', + TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' }; diff --git a/src/generated/prisma/index.d.ts b/src/generated/prisma/index.d.ts index 07ac4df..4186297 100644 --- a/src/generated/prisma/index.d.ts +++ b/src/generated/prisma/index.d.ts @@ -23,6 +23,16 @@ export type Place = $Result.DefaultSelection * */ export type User = $Result.DefaultSelection +/** + * Model UserSession + * + */ +export type UserSession = $Result.DefaultSelection +/** + * Model TelegramLoginRequest + * + */ +export type TelegramLoginRequest = $Result.DefaultSelection /** * Model VoiceExperience * @@ -191,6 +201,26 @@ export class PrismaClient< */ get user(): Prisma.UserDelegate; + /** + * `prisma.userSession`: Exposes CRUD operations for the **UserSession** model. + * Example usage: + * ```ts + * // Fetch zero or more UserSessions + * const userSessions = await prisma.userSession.findMany() + * ``` + */ + get userSession(): Prisma.UserSessionDelegate; + + /** + * `prisma.telegramLoginRequest`: Exposes CRUD operations for the **TelegramLoginRequest** model. + * Example usage: + * ```ts + * // Fetch zero or more TelegramLoginRequests + * const telegramLoginRequests = await prisma.telegramLoginRequest.findMany() + * ``` + */ + get telegramLoginRequest(): Prisma.TelegramLoginRequestDelegate; + /** * `prisma.voiceExperience`: Exposes CRUD operations for the **VoiceExperience** model. * Example usage: @@ -636,6 +666,8 @@ export namespace Prisma { export const ModelName: { Place: 'Place', User: 'User', + UserSession: 'UserSession', + TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' }; @@ -652,7 +684,7 @@ export namespace Prisma { omit: GlobalOmitOptions } meta: { - modelProps: "place" | "user" | "voiceExperience" + modelProps: "place" | "user" | "userSession" | "telegramLoginRequest" | "voiceExperience" txIsolationLevel: Prisma.TransactionIsolationLevel } model: { @@ -804,6 +836,154 @@ export namespace Prisma { } } } + UserSession: { + payload: Prisma.$UserSessionPayload + fields: Prisma.UserSessionFieldRefs + operations: { + findUnique: { + args: Prisma.UserSessionFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.UserSessionFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.UserSessionFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.UserSessionFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.UserSessionFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.UserSessionCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.UserSessionCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.UserSessionCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.UserSessionDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.UserSessionUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.UserSessionDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.UserSessionUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.UserSessionUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.UserSessionUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.UserSessionAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.UserSessionGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.UserSessionCountArgs + result: $Utils.Optional | number + } + } + } + TelegramLoginRequest: { + payload: Prisma.$TelegramLoginRequestPayload + fields: Prisma.TelegramLoginRequestFieldRefs + operations: { + findUnique: { + args: Prisma.TelegramLoginRequestFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.TelegramLoginRequestFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.TelegramLoginRequestFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.TelegramLoginRequestFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.TelegramLoginRequestFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.TelegramLoginRequestCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.TelegramLoginRequestCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.TelegramLoginRequestCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.TelegramLoginRequestDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.TelegramLoginRequestUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.TelegramLoginRequestDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.TelegramLoginRequestUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.TelegramLoginRequestUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.TelegramLoginRequestUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.TelegramLoginRequestAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.TelegramLoginRequestGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.TelegramLoginRequestCountArgs + result: $Utils.Optional | number + } + } + } VoiceExperience: { payload: Prisma.$VoiceExperiencePayload fields: Prisma.VoiceExperienceFieldRefs @@ -988,6 +1168,8 @@ export namespace Prisma { export type GlobalOmitConfig = { place?: PlaceOmit user?: UserOmit + userSession?: UserSessionOmit + telegramLoginRequest?: TelegramLoginRequestOmit voiceExperience?: VoiceExperienceOmit } @@ -1100,10 +1282,14 @@ export namespace Prisma { */ export type UserCountOutputType = { + sessions: number + loginRequests: number voiceExperiences: number } export type UserCountOutputTypeSelect = { + sessions?: boolean | UserCountOutputTypeCountSessionsArgs + loginRequests?: boolean | UserCountOutputTypeCountLoginRequestsArgs voiceExperiences?: boolean | UserCountOutputTypeCountVoiceExperiencesArgs } @@ -1118,6 +1304,20 @@ export namespace Prisma { select?: UserCountOutputTypeSelect | null } + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountSessionsArgs = { + where?: UserSessionWhereInput + } + + /** + * UserCountOutputType without action + */ + export type UserCountOutputTypeCountLoginRequestsArgs = { + where?: TelegramLoginRequestWhereInput + } + /** * UserCountOutputType without action */ @@ -2465,6 +2665,8 @@ export namespace Prisma { languageCode?: boolean createdAt?: boolean updatedAt?: boolean + sessions?: boolean | User$sessionsArgs + loginRequests?: boolean | User$loginRequestsArgs voiceExperiences?: boolean | User$voiceExperiencesArgs _count?: boolean | UserCountOutputTypeDefaultArgs }, ExtArgs["result"]["user"]> @@ -2507,6 +2709,8 @@ export namespace Prisma { export type UserOmit = $Extensions.GetOmit<"id" | "telegramId" | "username" | "firstName" | "lastName" | "photoUrl" | "languageCode" | "createdAt" | "updatedAt", ExtArgs["result"]["user"]> export type UserInclude = { + sessions?: boolean | User$sessionsArgs + loginRequests?: boolean | User$loginRequestsArgs voiceExperiences?: boolean | User$voiceExperiencesArgs _count?: boolean | UserCountOutputTypeDefaultArgs } @@ -2516,6 +2720,8 @@ export namespace Prisma { export type $UserPayload = { name: "User" objects: { + sessions: Prisma.$UserSessionPayload[] + loginRequests: Prisma.$TelegramLoginRequestPayload[] voiceExperiences: Prisma.$VoiceExperiencePayload[] } scalars: $Extensions.GetPayloadResult<{ @@ -2922,6 +3128,8 @@ export namespace Prisma { */ export interface Prisma__UserClient extends Prisma.PrismaPromise { readonly [Symbol.toStringTag]: "PrismaPromise" + sessions = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + loginRequests = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> voiceExperiences = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> /** * Attaches callbacks for the resolution and/or rejection of the Promise. @@ -3353,6 +3561,54 @@ export namespace Prisma { limit?: number } + /** + * User.sessions + */ + export type User$sessionsArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + where?: UserSessionWhereInput + orderBy?: UserSessionOrderByWithRelationInput | UserSessionOrderByWithRelationInput[] + cursor?: UserSessionWhereUniqueInput + take?: number + skip?: number + distinct?: UserSessionScalarFieldEnum | UserSessionScalarFieldEnum[] + } + + /** + * User.loginRequests + */ + export type User$loginRequestsArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + where?: TelegramLoginRequestWhereInput + orderBy?: TelegramLoginRequestOrderByWithRelationInput | TelegramLoginRequestOrderByWithRelationInput[] + cursor?: TelegramLoginRequestWhereUniqueInput + take?: number + skip?: number + distinct?: TelegramLoginRequestScalarFieldEnum | TelegramLoginRequestScalarFieldEnum[] + } + /** * User.voiceExperiences */ @@ -3396,6 +3652,2190 @@ export namespace Prisma { } + /** + * Model UserSession + */ + + export type AggregateUserSession = { + _count: UserSessionCountAggregateOutputType | null + _min: UserSessionMinAggregateOutputType | null + _max: UserSessionMaxAggregateOutputType | null + } + + export type UserSessionMinAggregateOutputType = { + id: string | null + tokenHash: string | null + userId: string | null + expiresAt: Date | null + createdAt: Date | null + } + + export type UserSessionMaxAggregateOutputType = { + id: string | null + tokenHash: string | null + userId: string | null + expiresAt: Date | null + createdAt: Date | null + } + + export type UserSessionCountAggregateOutputType = { + id: number + tokenHash: number + userId: number + expiresAt: number + createdAt: number + _all: number + } + + + export type UserSessionMinAggregateInputType = { + id?: true + tokenHash?: true + userId?: true + expiresAt?: true + createdAt?: true + } + + export type UserSessionMaxAggregateInputType = { + id?: true + tokenHash?: true + userId?: true + expiresAt?: true + createdAt?: true + } + + export type UserSessionCountAggregateInputType = { + id?: true + tokenHash?: true + userId?: true + expiresAt?: true + createdAt?: true + _all?: true + } + + export type UserSessionAggregateArgs = { + /** + * Filter which UserSession to aggregate. + */ + where?: UserSessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserSessions to fetch. + */ + orderBy?: UserSessionOrderByWithRelationInput | UserSessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: UserSessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserSessions from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserSessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned UserSessions + **/ + _count?: true | UserSessionCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: UserSessionMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: UserSessionMaxAggregateInputType + } + + export type GetUserSessionAggregateType = { + [P in keyof T & keyof AggregateUserSession]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type UserSessionGroupByArgs = { + where?: UserSessionWhereInput + orderBy?: UserSessionOrderByWithAggregationInput | UserSessionOrderByWithAggregationInput[] + by: UserSessionScalarFieldEnum[] | UserSessionScalarFieldEnum + having?: UserSessionScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: UserSessionCountAggregateInputType | true + _min?: UserSessionMinAggregateInputType + _max?: UserSessionMaxAggregateInputType + } + + export type UserSessionGroupByOutputType = { + id: string + tokenHash: string + userId: string + expiresAt: Date + createdAt: Date + _count: UserSessionCountAggregateOutputType | null + _min: UserSessionMinAggregateOutputType | null + _max: UserSessionMaxAggregateOutputType | null + } + + type GetUserSessionGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof UserSessionGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type UserSessionSelect = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["userSession"]> + + export type UserSessionSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["userSession"]> + + export type UserSessionSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + user?: boolean | UserDefaultArgs + }, ExtArgs["result"]["userSession"]> + + export type UserSessionSelectScalar = { + id?: boolean + tokenHash?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + } + + export type UserSessionOmit = $Extensions.GetOmit<"id" | "tokenHash" | "userId" | "expiresAt" | "createdAt", ExtArgs["result"]["userSession"]> + export type UserSessionInclude = { + user?: boolean | UserDefaultArgs + } + export type UserSessionIncludeCreateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + export type UserSessionIncludeUpdateManyAndReturn = { + user?: boolean | UserDefaultArgs + } + + export type $UserSessionPayload = { + name: "UserSession" + objects: { + user: Prisma.$UserPayload + } + scalars: $Extensions.GetPayloadResult<{ + id: string + tokenHash: string + userId: string + expiresAt: Date + createdAt: Date + }, ExtArgs["result"]["userSession"]> + composites: {} + } + + type UserSessionGetPayload = $Result.GetResult + + type UserSessionCountArgs = + Omit & { + select?: UserSessionCountAggregateInputType | true + } + + export interface UserSessionDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['UserSession'], meta: { name: 'UserSession' } } + /** + * Find zero or one UserSession that matches the filter. + * @param {UserSessionFindUniqueArgs} args - Arguments to find a UserSession + * @example + * // Get one UserSession + * const userSession = await prisma.userSession.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one UserSession that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {UserSessionFindUniqueOrThrowArgs} args - Arguments to find a UserSession + * @example + * // Get one UserSession + * const userSession = await prisma.userSession.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first UserSession that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionFindFirstArgs} args - Arguments to find a UserSession + * @example + * // Get one UserSession + * const userSession = await prisma.userSession.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first UserSession that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionFindFirstOrThrowArgs} args - Arguments to find a UserSession + * @example + * // Get one UserSession + * const userSession = await prisma.userSession.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more UserSessions that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all UserSessions + * const userSessions = await prisma.userSession.findMany() + * + * // Get first 10 UserSessions + * const userSessions = await prisma.userSession.findMany({ take: 10 }) + * + * // Only select the `id` + * const userSessionWithIdOnly = await prisma.userSession.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a UserSession. + * @param {UserSessionCreateArgs} args - Arguments to create a UserSession. + * @example + * // Create one UserSession + * const UserSession = await prisma.userSession.create({ + * data: { + * // ... data to create a UserSession + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many UserSessions. + * @param {UserSessionCreateManyArgs} args - Arguments to create many UserSessions. + * @example + * // Create many UserSessions + * const userSession = await prisma.userSession.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many UserSessions and returns the data saved in the database. + * @param {UserSessionCreateManyAndReturnArgs} args - Arguments to create many UserSessions. + * @example + * // Create many UserSessions + * const userSession = await prisma.userSession.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many UserSessions and only return the `id` + * const userSessionWithIdOnly = await prisma.userSession.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a UserSession. + * @param {UserSessionDeleteArgs} args - Arguments to delete one UserSession. + * @example + * // Delete one UserSession + * const UserSession = await prisma.userSession.delete({ + * where: { + * // ... filter to delete one UserSession + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one UserSession. + * @param {UserSessionUpdateArgs} args - Arguments to update one UserSession. + * @example + * // Update one UserSession + * const userSession = await prisma.userSession.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more UserSessions. + * @param {UserSessionDeleteManyArgs} args - Arguments to filter UserSessions to delete. + * @example + * // Delete a few UserSessions + * const { count } = await prisma.userSession.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more UserSessions. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many UserSessions + * const userSession = await prisma.userSession.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more UserSessions and returns the data updated in the database. + * @param {UserSessionUpdateManyAndReturnArgs} args - Arguments to update many UserSessions. + * @example + * // Update many UserSessions + * const userSession = await prisma.userSession.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more UserSessions and only return the `id` + * const userSessionWithIdOnly = await prisma.userSession.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one UserSession. + * @param {UserSessionUpsertArgs} args - Arguments to update or create a UserSession. + * @example + * // Update or create a UserSession + * const userSession = await prisma.userSession.upsert({ + * create: { + * // ... data to create a UserSession + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the UserSession we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__UserSessionClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of UserSessions. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionCountArgs} args - Arguments to filter UserSessions to count. + * @example + * // Count the number of UserSessions + * const count = await prisma.userSession.count({ + * where: { + * // ... the filter for the UserSessions we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a UserSession. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Subset): Prisma.PrismaPromise> + + /** + * Group by UserSession. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {UserSessionGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends UserSessionGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: UserSessionGroupByArgs['orderBy'] } + : { orderBy?: UserSessionGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + ByEmpty extends T['by'] extends never[] ? True : False, + InputErrors extends ByEmpty extends True + ? `Error: "by" must not be empty.` + : HavingValid extends False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: SubsetIntersection & InputErrors): {} extends InputErrors ? GetUserSessionGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the UserSession model + */ + readonly fields: UserSessionFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for UserSession. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ + export interface Prisma__UserSessionClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise + } + + + + + /** + * Fields of the UserSession model + */ + interface UserSessionFieldRefs { + readonly id: FieldRef<"UserSession", 'String'> + readonly tokenHash: FieldRef<"UserSession", 'String'> + readonly userId: FieldRef<"UserSession", 'String'> + readonly expiresAt: FieldRef<"UserSession", 'DateTime'> + readonly createdAt: FieldRef<"UserSession", 'DateTime'> + } + + + // Custom InputTypes + /** + * UserSession findUnique + */ + export type UserSessionFindUniqueArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * Filter, which UserSession to fetch. + */ + where: UserSessionWhereUniqueInput + } + + /** + * UserSession findUniqueOrThrow + */ + export type UserSessionFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * Filter, which UserSession to fetch. + */ + where: UserSessionWhereUniqueInput + } + + /** + * UserSession findFirst + */ + export type UserSessionFindFirstArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * Filter, which UserSession to fetch. + */ + where?: UserSessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserSessions to fetch. + */ + orderBy?: UserSessionOrderByWithRelationInput | UserSessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for UserSessions. + */ + cursor?: UserSessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserSessions from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserSessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserSessions. + */ + distinct?: UserSessionScalarFieldEnum | UserSessionScalarFieldEnum[] + } + + /** + * UserSession findFirstOrThrow + */ + export type UserSessionFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * Filter, which UserSession to fetch. + */ + where?: UserSessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserSessions to fetch. + */ + orderBy?: UserSessionOrderByWithRelationInput | UserSessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for UserSessions. + */ + cursor?: UserSessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserSessions from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserSessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserSessions. + */ + distinct?: UserSessionScalarFieldEnum | UserSessionScalarFieldEnum[] + } + + /** + * UserSession findMany + */ + export type UserSessionFindManyArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * Filter, which UserSessions to fetch. + */ + where?: UserSessionWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of UserSessions to fetch. + */ + orderBy?: UserSessionOrderByWithRelationInput | UserSessionOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing UserSessions. + */ + cursor?: UserSessionWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` UserSessions from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` UserSessions. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of UserSessions. + */ + distinct?: UserSessionScalarFieldEnum | UserSessionScalarFieldEnum[] + } + + /** + * UserSession create + */ + export type UserSessionCreateArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * The data needed to create a UserSession. + */ + data: XOR + } + + /** + * UserSession createMany + */ + export type UserSessionCreateManyArgs = { + /** + * The data used to create many UserSessions. + */ + data: UserSessionCreateManyInput | UserSessionCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * UserSession createManyAndReturn + */ + export type UserSessionCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelectCreateManyAndReturn | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * The data used to create many UserSessions. + */ + data: UserSessionCreateManyInput | UserSessionCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionIncludeCreateManyAndReturn | null + } + + /** + * UserSession update + */ + export type UserSessionUpdateArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * The data needed to update a UserSession. + */ + data: XOR + /** + * Choose, which UserSession to update. + */ + where: UserSessionWhereUniqueInput + } + + /** + * UserSession updateMany + */ + export type UserSessionUpdateManyArgs = { + /** + * The data used to update UserSessions. + */ + data: XOR + /** + * Filter which UserSessions to update + */ + where?: UserSessionWhereInput + /** + * Limit how many UserSessions to update. + */ + limit?: number + } + + /** + * UserSession updateManyAndReturn + */ + export type UserSessionUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * The data used to update UserSessions. + */ + data: XOR + /** + * Filter which UserSessions to update + */ + where?: UserSessionWhereInput + /** + * Limit how many UserSessions to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionIncludeUpdateManyAndReturn | null + } + + /** + * UserSession upsert + */ + export type UserSessionUpsertArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * The filter to search for the UserSession to update in case it exists. + */ + where: UserSessionWhereUniqueInput + /** + * In case the UserSession found by the `where` argument doesn't exist, create a new UserSession with this data. + */ + create: XOR + /** + * In case the UserSession was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * UserSession delete + */ + export type UserSessionDeleteArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + /** + * Filter which UserSession to delete. + */ + where: UserSessionWhereUniqueInput + } + + /** + * UserSession deleteMany + */ + export type UserSessionDeleteManyArgs = { + /** + * Filter which UserSessions to delete + */ + where?: UserSessionWhereInput + /** + * Limit how many UserSessions to delete. + */ + limit?: number + } + + /** + * UserSession without action + */ + export type UserSessionDefaultArgs = { + /** + * Select specific fields to fetch from the UserSession + */ + select?: UserSessionSelect | null + /** + * Omit specific fields from the UserSession + */ + omit?: UserSessionOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserSessionInclude | null + } + + + /** + * Model TelegramLoginRequest + */ + + export type AggregateTelegramLoginRequest = { + _count: TelegramLoginRequestCountAggregateOutputType | null + _min: TelegramLoginRequestMinAggregateOutputType | null + _max: TelegramLoginRequestMaxAggregateOutputType | null + } + + export type TelegramLoginRequestMinAggregateOutputType = { + id: string | null + tokenHash: string | null + status: string | null + sessionToken: string | null + userId: string | null + expiresAt: Date | null + createdAt: Date | null + updatedAt: Date | null + } + + export type TelegramLoginRequestMaxAggregateOutputType = { + id: string | null + tokenHash: string | null + status: string | null + sessionToken: string | null + userId: string | null + expiresAt: Date | null + createdAt: Date | null + updatedAt: Date | null + } + + export type TelegramLoginRequestCountAggregateOutputType = { + id: number + tokenHash: number + status: number + sessionToken: number + userId: number + expiresAt: number + createdAt: number + updatedAt: number + _all: number + } + + + export type TelegramLoginRequestMinAggregateInputType = { + id?: true + tokenHash?: true + status?: true + sessionToken?: true + userId?: true + expiresAt?: true + createdAt?: true + updatedAt?: true + } + + export type TelegramLoginRequestMaxAggregateInputType = { + id?: true + tokenHash?: true + status?: true + sessionToken?: true + userId?: true + expiresAt?: true + createdAt?: true + updatedAt?: true + } + + export type TelegramLoginRequestCountAggregateInputType = { + id?: true + tokenHash?: true + status?: true + sessionToken?: true + userId?: true + expiresAt?: true + createdAt?: true + updatedAt?: true + _all?: true + } + + export type TelegramLoginRequestAggregateArgs = { + /** + * Filter which TelegramLoginRequest to aggregate. + */ + where?: TelegramLoginRequestWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of TelegramLoginRequests to fetch. + */ + orderBy?: TelegramLoginRequestOrderByWithRelationInput | TelegramLoginRequestOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: TelegramLoginRequestWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` TelegramLoginRequests from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` TelegramLoginRequests. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned TelegramLoginRequests + **/ + _count?: true | TelegramLoginRequestCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: TelegramLoginRequestMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: TelegramLoginRequestMaxAggregateInputType + } + + export type GetTelegramLoginRequestAggregateType = { + [P in keyof T & keyof AggregateTelegramLoginRequest]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type TelegramLoginRequestGroupByArgs = { + where?: TelegramLoginRequestWhereInput + orderBy?: TelegramLoginRequestOrderByWithAggregationInput | TelegramLoginRequestOrderByWithAggregationInput[] + by: TelegramLoginRequestScalarFieldEnum[] | TelegramLoginRequestScalarFieldEnum + having?: TelegramLoginRequestScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: TelegramLoginRequestCountAggregateInputType | true + _min?: TelegramLoginRequestMinAggregateInputType + _max?: TelegramLoginRequestMaxAggregateInputType + } + + export type TelegramLoginRequestGroupByOutputType = { + id: string + tokenHash: string + status: string + sessionToken: string | null + userId: string | null + expiresAt: Date + createdAt: Date + updatedAt: Date + _count: TelegramLoginRequestCountAggregateOutputType | null + _min: TelegramLoginRequestMinAggregateOutputType | null + _max: TelegramLoginRequestMaxAggregateOutputType | null + } + + type GetTelegramLoginRequestGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof TelegramLoginRequestGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type TelegramLoginRequestSelect = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + status?: boolean + sessionToken?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | TelegramLoginRequest$userArgs + }, ExtArgs["result"]["telegramLoginRequest"]> + + export type TelegramLoginRequestSelectCreateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + status?: boolean + sessionToken?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | TelegramLoginRequest$userArgs + }, ExtArgs["result"]["telegramLoginRequest"]> + + export type TelegramLoginRequestSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + id?: boolean + tokenHash?: boolean + status?: boolean + sessionToken?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + updatedAt?: boolean + user?: boolean | TelegramLoginRequest$userArgs + }, ExtArgs["result"]["telegramLoginRequest"]> + + export type TelegramLoginRequestSelectScalar = { + id?: boolean + tokenHash?: boolean + status?: boolean + sessionToken?: boolean + userId?: boolean + expiresAt?: boolean + createdAt?: boolean + updatedAt?: boolean + } + + export type TelegramLoginRequestOmit = $Extensions.GetOmit<"id" | "tokenHash" | "status" | "sessionToken" | "userId" | "expiresAt" | "createdAt" | "updatedAt", ExtArgs["result"]["telegramLoginRequest"]> + export type TelegramLoginRequestInclude = { + user?: boolean | TelegramLoginRequest$userArgs + } + export type TelegramLoginRequestIncludeCreateManyAndReturn = { + user?: boolean | TelegramLoginRequest$userArgs + } + export type TelegramLoginRequestIncludeUpdateManyAndReturn = { + user?: boolean | TelegramLoginRequest$userArgs + } + + export type $TelegramLoginRequestPayload = { + name: "TelegramLoginRequest" + objects: { + user: Prisma.$UserPayload | null + } + scalars: $Extensions.GetPayloadResult<{ + id: string + tokenHash: string + status: string + sessionToken: string | null + userId: string | null + expiresAt: Date + createdAt: Date + updatedAt: Date + }, ExtArgs["result"]["telegramLoginRequest"]> + composites: {} + } + + type TelegramLoginRequestGetPayload = $Result.GetResult + + type TelegramLoginRequestCountArgs = + Omit & { + select?: TelegramLoginRequestCountAggregateInputType | true + } + + export interface TelegramLoginRequestDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['TelegramLoginRequest'], meta: { name: 'TelegramLoginRequest' } } + /** + * Find zero or one TelegramLoginRequest that matches the filter. + * @param {TelegramLoginRequestFindUniqueArgs} args - Arguments to find a TelegramLoginRequest + * @example + * // Get one TelegramLoginRequest + * const telegramLoginRequest = await prisma.telegramLoginRequest.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one TelegramLoginRequest that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {TelegramLoginRequestFindUniqueOrThrowArgs} args - Arguments to find a TelegramLoginRequest + * @example + * // Get one TelegramLoginRequest + * const telegramLoginRequest = await prisma.telegramLoginRequest.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first TelegramLoginRequest that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestFindFirstArgs} args - Arguments to find a TelegramLoginRequest + * @example + * // Get one TelegramLoginRequest + * const telegramLoginRequest = await prisma.telegramLoginRequest.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first TelegramLoginRequest that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestFindFirstOrThrowArgs} args - Arguments to find a TelegramLoginRequest + * @example + * // Get one TelegramLoginRequest + * const telegramLoginRequest = await prisma.telegramLoginRequest.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more TelegramLoginRequests that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all TelegramLoginRequests + * const telegramLoginRequests = await prisma.telegramLoginRequest.findMany() + * + * // Get first 10 TelegramLoginRequests + * const telegramLoginRequests = await prisma.telegramLoginRequest.findMany({ take: 10 }) + * + * // Only select the `id` + * const telegramLoginRequestWithIdOnly = await prisma.telegramLoginRequest.findMany({ select: { id: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a TelegramLoginRequest. + * @param {TelegramLoginRequestCreateArgs} args - Arguments to create a TelegramLoginRequest. + * @example + * // Create one TelegramLoginRequest + * const TelegramLoginRequest = await prisma.telegramLoginRequest.create({ + * data: { + * // ... data to create a TelegramLoginRequest + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many TelegramLoginRequests. + * @param {TelegramLoginRequestCreateManyArgs} args - Arguments to create many TelegramLoginRequests. + * @example + * // Create many TelegramLoginRequests + * const telegramLoginRequest = await prisma.telegramLoginRequest.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many TelegramLoginRequests and returns the data saved in the database. + * @param {TelegramLoginRequestCreateManyAndReturnArgs} args - Arguments to create many TelegramLoginRequests. + * @example + * // Create many TelegramLoginRequests + * const telegramLoginRequest = await prisma.telegramLoginRequest.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many TelegramLoginRequests and only return the `id` + * const telegramLoginRequestWithIdOnly = await prisma.telegramLoginRequest.createManyAndReturn({ + * select: { id: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a TelegramLoginRequest. + * @param {TelegramLoginRequestDeleteArgs} args - Arguments to delete one TelegramLoginRequest. + * @example + * // Delete one TelegramLoginRequest + * const TelegramLoginRequest = await prisma.telegramLoginRequest.delete({ + * where: { + * // ... filter to delete one TelegramLoginRequest + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one TelegramLoginRequest. + * @param {TelegramLoginRequestUpdateArgs} args - Arguments to update one TelegramLoginRequest. + * @example + * // Update one TelegramLoginRequest + * const telegramLoginRequest = await prisma.telegramLoginRequest.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more TelegramLoginRequests. + * @param {TelegramLoginRequestDeleteManyArgs} args - Arguments to filter TelegramLoginRequests to delete. + * @example + * // Delete a few TelegramLoginRequests + * const { count } = await prisma.telegramLoginRequest.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more TelegramLoginRequests. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many TelegramLoginRequests + * const telegramLoginRequest = await prisma.telegramLoginRequest.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more TelegramLoginRequests and returns the data updated in the database. + * @param {TelegramLoginRequestUpdateManyAndReturnArgs} args - Arguments to update many TelegramLoginRequests. + * @example + * // Update many TelegramLoginRequests + * const telegramLoginRequest = await prisma.telegramLoginRequest.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more TelegramLoginRequests and only return the `id` + * const telegramLoginRequestWithIdOnly = await prisma.telegramLoginRequest.updateManyAndReturn({ + * select: { id: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one TelegramLoginRequest. + * @param {TelegramLoginRequestUpsertArgs} args - Arguments to update or create a TelegramLoginRequest. + * @example + * // Update or create a TelegramLoginRequest + * const telegramLoginRequest = await prisma.telegramLoginRequest.upsert({ + * create: { + * // ... data to create a TelegramLoginRequest + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the TelegramLoginRequest we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__TelegramLoginRequestClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of TelegramLoginRequests. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestCountArgs} args - Arguments to filter TelegramLoginRequests to count. + * @example + * // Count the number of TelegramLoginRequests + * const count = await prisma.telegramLoginRequest.count({ + * where: { + * // ... the filter for the TelegramLoginRequests we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a TelegramLoginRequest. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Subset): Prisma.PrismaPromise> + + /** + * Group by TelegramLoginRequest. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {TelegramLoginRequestGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends TelegramLoginRequestGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: TelegramLoginRequestGroupByArgs['orderBy'] } + : { orderBy?: TelegramLoginRequestGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + ByEmpty extends T['by'] extends never[] ? True : False, + InputErrors extends ByEmpty extends True + ? `Error: "by" must not be empty.` + : HavingValid extends False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: SubsetIntersection & InputErrors): {} extends InputErrors ? GetTelegramLoginRequestGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the TelegramLoginRequest model + */ + readonly fields: TelegramLoginRequestFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for TelegramLoginRequest. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ + export interface Prisma__TelegramLoginRequestClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + user = {}>(args?: Subset>): Prisma__UserClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise + } + + + + + /** + * Fields of the TelegramLoginRequest model + */ + interface TelegramLoginRequestFieldRefs { + readonly id: FieldRef<"TelegramLoginRequest", 'String'> + readonly tokenHash: FieldRef<"TelegramLoginRequest", 'String'> + readonly status: FieldRef<"TelegramLoginRequest", 'String'> + readonly sessionToken: FieldRef<"TelegramLoginRequest", 'String'> + readonly userId: FieldRef<"TelegramLoginRequest", 'String'> + readonly expiresAt: FieldRef<"TelegramLoginRequest", 'DateTime'> + readonly createdAt: FieldRef<"TelegramLoginRequest", 'DateTime'> + readonly updatedAt: FieldRef<"TelegramLoginRequest", 'DateTime'> + } + + + // Custom InputTypes + /** + * TelegramLoginRequest findUnique + */ + export type TelegramLoginRequestFindUniqueArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * Filter, which TelegramLoginRequest to fetch. + */ + where: TelegramLoginRequestWhereUniqueInput + } + + /** + * TelegramLoginRequest findUniqueOrThrow + */ + export type TelegramLoginRequestFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * Filter, which TelegramLoginRequest to fetch. + */ + where: TelegramLoginRequestWhereUniqueInput + } + + /** + * TelegramLoginRequest findFirst + */ + export type TelegramLoginRequestFindFirstArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * Filter, which TelegramLoginRequest to fetch. + */ + where?: TelegramLoginRequestWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of TelegramLoginRequests to fetch. + */ + orderBy?: TelegramLoginRequestOrderByWithRelationInput | TelegramLoginRequestOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for TelegramLoginRequests. + */ + cursor?: TelegramLoginRequestWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` TelegramLoginRequests from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` TelegramLoginRequests. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of TelegramLoginRequests. + */ + distinct?: TelegramLoginRequestScalarFieldEnum | TelegramLoginRequestScalarFieldEnum[] + } + + /** + * TelegramLoginRequest findFirstOrThrow + */ + export type TelegramLoginRequestFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * Filter, which TelegramLoginRequest to fetch. + */ + where?: TelegramLoginRequestWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of TelegramLoginRequests to fetch. + */ + orderBy?: TelegramLoginRequestOrderByWithRelationInput | TelegramLoginRequestOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for TelegramLoginRequests. + */ + cursor?: TelegramLoginRequestWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` TelegramLoginRequests from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` TelegramLoginRequests. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of TelegramLoginRequests. + */ + distinct?: TelegramLoginRequestScalarFieldEnum | TelegramLoginRequestScalarFieldEnum[] + } + + /** + * TelegramLoginRequest findMany + */ + export type TelegramLoginRequestFindManyArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * Filter, which TelegramLoginRequests to fetch. + */ + where?: TelegramLoginRequestWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of TelegramLoginRequests to fetch. + */ + orderBy?: TelegramLoginRequestOrderByWithRelationInput | TelegramLoginRequestOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing TelegramLoginRequests. + */ + cursor?: TelegramLoginRequestWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` TelegramLoginRequests from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` TelegramLoginRequests. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of TelegramLoginRequests. + */ + distinct?: TelegramLoginRequestScalarFieldEnum | TelegramLoginRequestScalarFieldEnum[] + } + + /** + * TelegramLoginRequest create + */ + export type TelegramLoginRequestCreateArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * The data needed to create a TelegramLoginRequest. + */ + data: XOR + } + + /** + * TelegramLoginRequest createMany + */ + export type TelegramLoginRequestCreateManyArgs = { + /** + * The data used to create many TelegramLoginRequests. + */ + data: TelegramLoginRequestCreateManyInput | TelegramLoginRequestCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * TelegramLoginRequest createManyAndReturn + */ + export type TelegramLoginRequestCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelectCreateManyAndReturn | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * The data used to create many TelegramLoginRequests. + */ + data: TelegramLoginRequestCreateManyInput | TelegramLoginRequestCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestIncludeCreateManyAndReturn | null + } + + /** + * TelegramLoginRequest update + */ + export type TelegramLoginRequestUpdateArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * The data needed to update a TelegramLoginRequest. + */ + data: XOR + /** + * Choose, which TelegramLoginRequest to update. + */ + where: TelegramLoginRequestWhereUniqueInput + } + + /** + * TelegramLoginRequest updateMany + */ + export type TelegramLoginRequestUpdateManyArgs = { + /** + * The data used to update TelegramLoginRequests. + */ + data: XOR + /** + * Filter which TelegramLoginRequests to update + */ + where?: TelegramLoginRequestWhereInput + /** + * Limit how many TelegramLoginRequests to update. + */ + limit?: number + } + + /** + * TelegramLoginRequest updateManyAndReturn + */ + export type TelegramLoginRequestUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * The data used to update TelegramLoginRequests. + */ + data: XOR + /** + * Filter which TelegramLoginRequests to update + */ + where?: TelegramLoginRequestWhereInput + /** + * Limit how many TelegramLoginRequests to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestIncludeUpdateManyAndReturn | null + } + + /** + * TelegramLoginRequest upsert + */ + export type TelegramLoginRequestUpsertArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * The filter to search for the TelegramLoginRequest to update in case it exists. + */ + where: TelegramLoginRequestWhereUniqueInput + /** + * In case the TelegramLoginRequest found by the `where` argument doesn't exist, create a new TelegramLoginRequest with this data. + */ + create: XOR + /** + * In case the TelegramLoginRequest was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * TelegramLoginRequest delete + */ + export type TelegramLoginRequestDeleteArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + /** + * Filter which TelegramLoginRequest to delete. + */ + where: TelegramLoginRequestWhereUniqueInput + } + + /** + * TelegramLoginRequest deleteMany + */ + export type TelegramLoginRequestDeleteManyArgs = { + /** + * Filter which TelegramLoginRequests to delete + */ + where?: TelegramLoginRequestWhereInput + /** + * Limit how many TelegramLoginRequests to delete. + */ + limit?: number + } + + /** + * TelegramLoginRequest.user + */ + export type TelegramLoginRequest$userArgs = { + /** + * Select specific fields to fetch from the User + */ + select?: UserSelect | null + /** + * Omit specific fields from the User + */ + omit?: UserOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: UserInclude | null + where?: UserWhereInput + } + + /** + * TelegramLoginRequest without action + */ + export type TelegramLoginRequestDefaultArgs = { + /** + * Select specific fields to fetch from the TelegramLoginRequest + */ + select?: TelegramLoginRequestSelect | null + /** + * Omit specific fields from the TelegramLoginRequest + */ + omit?: TelegramLoginRequestOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: TelegramLoginRequestInclude | null + } + + /** * Model VoiceExperience */ @@ -4623,6 +7063,31 @@ export namespace Prisma { export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum] + export const UserSessionScalarFieldEnum: { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt' + }; + + export type UserSessionScalarFieldEnum = (typeof UserSessionScalarFieldEnum)[keyof typeof UserSessionScalarFieldEnum] + + + export const TelegramLoginRequestScalarFieldEnum: { + id: 'id', + tokenHash: 'tokenHash', + status: 'status', + sessionToken: 'sessionToken', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' + }; + + export type TelegramLoginRequestScalarFieldEnum = (typeof TelegramLoginRequestScalarFieldEnum)[keyof typeof TelegramLoginRequestScalarFieldEnum] + + export const VoiceExperienceScalarFieldEnum: { id: 'id', placeId: 'placeId', @@ -4852,6 +7317,8 @@ export namespace Prisma { languageCode?: StringNullableFilter<"User"> | string | null createdAt?: DateTimeFilter<"User"> | Date | string updatedAt?: DateTimeFilter<"User"> | Date | string + sessions?: UserSessionListRelationFilter + loginRequests?: TelegramLoginRequestListRelationFilter voiceExperiences?: VoiceExperienceListRelationFilter } @@ -4865,6 +7332,8 @@ export namespace Prisma { languageCode?: SortOrderInput | SortOrder createdAt?: SortOrder updatedAt?: SortOrder + sessions?: UserSessionOrderByRelationAggregateInput + loginRequests?: TelegramLoginRequestOrderByRelationAggregateInput voiceExperiences?: VoiceExperienceOrderByRelationAggregateInput } @@ -4881,6 +7350,8 @@ export namespace Prisma { languageCode?: StringNullableFilter<"User"> | string | null createdAt?: DateTimeFilter<"User"> | Date | string updatedAt?: DateTimeFilter<"User"> | Date | string + sessions?: UserSessionListRelationFilter + loginRequests?: TelegramLoginRequestListRelationFilter voiceExperiences?: VoiceExperienceListRelationFilter }, "id" | "telegramId"> @@ -4914,6 +7385,131 @@ export namespace Prisma { updatedAt?: DateTimeWithAggregatesFilter<"User"> | Date | string } + export type UserSessionWhereInput = { + AND?: UserSessionWhereInput | UserSessionWhereInput[] + OR?: UserSessionWhereInput[] + NOT?: UserSessionWhereInput | UserSessionWhereInput[] + id?: StringFilter<"UserSession"> | string + tokenHash?: StringFilter<"UserSession"> | string + userId?: StringFilter<"UserSession"> | string + expiresAt?: DateTimeFilter<"UserSession"> | Date | string + createdAt?: DateTimeFilter<"UserSession"> | Date | string + user?: XOR + } + + export type UserSessionOrderByWithRelationInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + user?: UserOrderByWithRelationInput + } + + export type UserSessionWhereUniqueInput = Prisma.AtLeast<{ + id?: string + tokenHash?: string + AND?: UserSessionWhereInput | UserSessionWhereInput[] + OR?: UserSessionWhereInput[] + NOT?: UserSessionWhereInput | UserSessionWhereInput[] + userId?: StringFilter<"UserSession"> | string + expiresAt?: DateTimeFilter<"UserSession"> | Date | string + createdAt?: DateTimeFilter<"UserSession"> | Date | string + user?: XOR + }, "id" | "tokenHash"> + + export type UserSessionOrderByWithAggregationInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + _count?: UserSessionCountOrderByAggregateInput + _max?: UserSessionMaxOrderByAggregateInput + _min?: UserSessionMinOrderByAggregateInput + } + + export type UserSessionScalarWhereWithAggregatesInput = { + AND?: UserSessionScalarWhereWithAggregatesInput | UserSessionScalarWhereWithAggregatesInput[] + OR?: UserSessionScalarWhereWithAggregatesInput[] + NOT?: UserSessionScalarWhereWithAggregatesInput | UserSessionScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"UserSession"> | string + tokenHash?: StringWithAggregatesFilter<"UserSession"> | string + userId?: StringWithAggregatesFilter<"UserSession"> | string + expiresAt?: DateTimeWithAggregatesFilter<"UserSession"> | Date | string + createdAt?: DateTimeWithAggregatesFilter<"UserSession"> | Date | string + } + + export type TelegramLoginRequestWhereInput = { + AND?: TelegramLoginRequestWhereInput | TelegramLoginRequestWhereInput[] + OR?: TelegramLoginRequestWhereInput[] + NOT?: TelegramLoginRequestWhereInput | TelegramLoginRequestWhereInput[] + id?: StringFilter<"TelegramLoginRequest"> | string + tokenHash?: StringFilter<"TelegramLoginRequest"> | string + status?: StringFilter<"TelegramLoginRequest"> | string + sessionToken?: StringNullableFilter<"TelegramLoginRequest"> | string | null + userId?: StringNullableFilter<"TelegramLoginRequest"> | string | null + expiresAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + createdAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + updatedAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + user?: XOR | null + } + + export type TelegramLoginRequestOrderByWithRelationInput = { + id?: SortOrder + tokenHash?: SortOrder + status?: SortOrder + sessionToken?: SortOrderInput | SortOrder + userId?: SortOrderInput | SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + user?: UserOrderByWithRelationInput + } + + export type TelegramLoginRequestWhereUniqueInput = Prisma.AtLeast<{ + id?: string + tokenHash?: string + AND?: TelegramLoginRequestWhereInput | TelegramLoginRequestWhereInput[] + OR?: TelegramLoginRequestWhereInput[] + NOT?: TelegramLoginRequestWhereInput | TelegramLoginRequestWhereInput[] + status?: StringFilter<"TelegramLoginRequest"> | string + sessionToken?: StringNullableFilter<"TelegramLoginRequest"> | string | null + userId?: StringNullableFilter<"TelegramLoginRequest"> | string | null + expiresAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + createdAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + updatedAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + user?: XOR | null + }, "id" | "tokenHash"> + + export type TelegramLoginRequestOrderByWithAggregationInput = { + id?: SortOrder + tokenHash?: SortOrder + status?: SortOrder + sessionToken?: SortOrderInput | SortOrder + userId?: SortOrderInput | SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + _count?: TelegramLoginRequestCountOrderByAggregateInput + _max?: TelegramLoginRequestMaxOrderByAggregateInput + _min?: TelegramLoginRequestMinOrderByAggregateInput + } + + export type TelegramLoginRequestScalarWhereWithAggregatesInput = { + AND?: TelegramLoginRequestScalarWhereWithAggregatesInput | TelegramLoginRequestScalarWhereWithAggregatesInput[] + OR?: TelegramLoginRequestScalarWhereWithAggregatesInput[] + NOT?: TelegramLoginRequestScalarWhereWithAggregatesInput | TelegramLoginRequestScalarWhereWithAggregatesInput[] + id?: StringWithAggregatesFilter<"TelegramLoginRequest"> | string + tokenHash?: StringWithAggregatesFilter<"TelegramLoginRequest"> | string + status?: StringWithAggregatesFilter<"TelegramLoginRequest"> | string + sessionToken?: StringNullableWithAggregatesFilter<"TelegramLoginRequest"> | string | null + userId?: StringNullableWithAggregatesFilter<"TelegramLoginRequest"> | string | null + expiresAt?: DateTimeWithAggregatesFilter<"TelegramLoginRequest"> | Date | string + createdAt?: DateTimeWithAggregatesFilter<"TelegramLoginRequest"> | Date | string + updatedAt?: DateTimeWithAggregatesFilter<"TelegramLoginRequest"> | Date | string + } + export type VoiceExperienceWhereInput = { AND?: VoiceExperienceWhereInput | VoiceExperienceWhereInput[] OR?: VoiceExperienceWhereInput[] @@ -5083,6 +7679,8 @@ export namespace Prisma { languageCode?: string | null createdAt?: Date | string updatedAt?: Date | string + sessions?: UserSessionCreateNestedManyWithoutUserInput + loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput } @@ -5096,6 +7694,8 @@ export namespace Prisma { languageCode?: string | null createdAt?: Date | string updatedAt?: Date | string + sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput + loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput } @@ -5109,6 +7709,8 @@ export namespace Prisma { languageCode?: NullableStringFieldUpdateOperationsInput | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUpdateManyWithoutUserNestedInput + loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput } @@ -5122,6 +7724,8 @@ export namespace Prisma { languageCode?: NullableStringFieldUpdateOperationsInput | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput + loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput } @@ -5161,6 +7765,137 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } + export type UserSessionCreateInput = { + id?: string + tokenHash: string + expiresAt: Date | string + createdAt?: Date | string + user: UserCreateNestedOneWithoutSessionsInput + } + + export type UserSessionUncheckedCreateInput = { + id?: string + tokenHash: string + userId: string + expiresAt: Date | string + createdAt?: Date | string + } + + export type UserSessionUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneRequiredWithoutSessionsNestedInput + } + + export type UserSessionUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserSessionCreateManyInput = { + id?: string + tokenHash: string + userId: string + expiresAt: Date | string + createdAt?: Date | string + } + + export type UserSessionUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserSessionUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type TelegramLoginRequestCreateInput = { + id?: string + tokenHash: string + status?: string + sessionToken?: string | null + expiresAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string + user?: UserCreateNestedOneWithoutLoginRequestsInput + } + + export type TelegramLoginRequestUncheckedCreateInput = { + id?: string + tokenHash: string + status?: string + sessionToken?: string | null + userId?: string | null + expiresAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type TelegramLoginRequestUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + user?: UserUpdateOneWithoutLoginRequestsNestedInput + } + + export type TelegramLoginRequestUncheckedUpdateInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + userId?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type TelegramLoginRequestCreateManyInput = { + id?: string + tokenHash: string + status?: string + sessionToken?: string | null + userId?: string | null + expiresAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type TelegramLoginRequestUpdateManyMutationInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type TelegramLoginRequestUncheckedUpdateManyInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + userId?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + export type VoiceExperienceCreateInput = { id?: string durationSeconds: number @@ -5400,11 +8135,31 @@ export namespace Prisma { not?: NestedStringNullableFilter<$PrismaModel> | string | null } + export type UserSessionListRelationFilter = { + every?: UserSessionWhereInput + some?: UserSessionWhereInput + none?: UserSessionWhereInput + } + + export type TelegramLoginRequestListRelationFilter = { + every?: TelegramLoginRequestWhereInput + some?: TelegramLoginRequestWhereInput + none?: TelegramLoginRequestWhereInput + } + export type SortOrderInput = { sort: SortOrder nulls?: NullsOrder } + export type UserSessionOrderByRelationAggregateInput = { + _count?: SortOrder + } + + export type TelegramLoginRequestOrderByRelationAggregateInput = { + _count?: SortOrder + } + export type UserCountOrderByAggregateInput = { id?: SortOrder telegramId?: SortOrder @@ -5459,6 +8214,73 @@ export namespace Prisma { _max?: NestedStringNullableFilter<$PrismaModel> } + export type UserScalarRelationFilter = { + is?: UserWhereInput + isNot?: UserWhereInput + } + + export type UserSessionCountOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + } + + export type UserSessionMaxOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + } + + export type UserSessionMinOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + } + + export type UserNullableScalarRelationFilter = { + is?: UserWhereInput | null + isNot?: UserWhereInput | null + } + + export type TelegramLoginRequestCountOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + status?: SortOrder + sessionToken?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type TelegramLoginRequestMaxOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + status?: SortOrder + sessionToken?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + + export type TelegramLoginRequestMinOrderByAggregateInput = { + id?: SortOrder + tokenHash?: SortOrder + status?: SortOrder + sessionToken?: SortOrder + userId?: SortOrder + expiresAt?: SortOrder + createdAt?: SortOrder + updatedAt?: SortOrder + } + export type IntFilter<$PrismaModel = never> = { equals?: number | IntFieldRefInput<$PrismaModel> in?: number[] | ListIntFieldRefInput<$PrismaModel> @@ -5505,11 +8327,6 @@ export namespace Prisma { isNot?: PlaceWhereInput } - export type UserNullableScalarRelationFilter = { - is?: UserWhereInput | null - isNot?: UserWhereInput | null - } - export type VoiceExperienceCountOrderByAggregateInput = { id?: SortOrder placeId?: SortOrder @@ -5665,6 +8482,20 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserSessionCreateNestedManyWithoutUserInput = { + create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] + createMany?: UserSessionCreateManyUserInputEnvelope + connect?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + } + + export type TelegramLoginRequestCreateNestedManyWithoutUserInput = { + create?: XOR | TelegramLoginRequestCreateWithoutUserInput[] | TelegramLoginRequestUncheckedCreateWithoutUserInput[] + connectOrCreate?: TelegramLoginRequestCreateOrConnectWithoutUserInput | TelegramLoginRequestCreateOrConnectWithoutUserInput[] + createMany?: TelegramLoginRequestCreateManyUserInputEnvelope + connect?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + } + export type VoiceExperienceCreateNestedManyWithoutUserInput = { create?: XOR | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[] connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[] @@ -5672,6 +8503,20 @@ export namespace Prisma { connect?: VoiceExperienceWhereUniqueInput | VoiceExperienceWhereUniqueInput[] } + export type UserSessionUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] + createMany?: UserSessionCreateManyUserInputEnvelope + connect?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + } + + export type TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput = { + create?: XOR | TelegramLoginRequestCreateWithoutUserInput[] | TelegramLoginRequestUncheckedCreateWithoutUserInput[] + connectOrCreate?: TelegramLoginRequestCreateOrConnectWithoutUserInput | TelegramLoginRequestCreateOrConnectWithoutUserInput[] + createMany?: TelegramLoginRequestCreateManyUserInputEnvelope + connect?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + } + export type VoiceExperienceUncheckedCreateNestedManyWithoutUserInput = { create?: XOR | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[] connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[] @@ -5683,6 +8528,34 @@ export namespace Prisma { set?: string | null } + export type UserSessionUpdateManyWithoutUserNestedInput = { + create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] + upsert?: UserSessionUpsertWithWhereUniqueWithoutUserInput | UserSessionUpsertWithWhereUniqueWithoutUserInput[] + createMany?: UserSessionCreateManyUserInputEnvelope + set?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + disconnect?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + delete?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + connect?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + update?: UserSessionUpdateWithWhereUniqueWithoutUserInput | UserSessionUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: UserSessionUpdateManyWithWhereWithoutUserInput | UserSessionUpdateManyWithWhereWithoutUserInput[] + deleteMany?: UserSessionScalarWhereInput | UserSessionScalarWhereInput[] + } + + export type TelegramLoginRequestUpdateManyWithoutUserNestedInput = { + create?: XOR | TelegramLoginRequestCreateWithoutUserInput[] | TelegramLoginRequestUncheckedCreateWithoutUserInput[] + connectOrCreate?: TelegramLoginRequestCreateOrConnectWithoutUserInput | TelegramLoginRequestCreateOrConnectWithoutUserInput[] + upsert?: TelegramLoginRequestUpsertWithWhereUniqueWithoutUserInput | TelegramLoginRequestUpsertWithWhereUniqueWithoutUserInput[] + createMany?: TelegramLoginRequestCreateManyUserInputEnvelope + set?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + disconnect?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + delete?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + connect?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + update?: TelegramLoginRequestUpdateWithWhereUniqueWithoutUserInput | TelegramLoginRequestUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: TelegramLoginRequestUpdateManyWithWhereWithoutUserInput | TelegramLoginRequestUpdateManyWithWhereWithoutUserInput[] + deleteMany?: TelegramLoginRequestScalarWhereInput | TelegramLoginRequestScalarWhereInput[] + } + export type VoiceExperienceUpdateManyWithoutUserNestedInput = { create?: XOR | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[] connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[] @@ -5697,6 +8570,34 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserSessionUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | UserSessionCreateWithoutUserInput[] | UserSessionUncheckedCreateWithoutUserInput[] + connectOrCreate?: UserSessionCreateOrConnectWithoutUserInput | UserSessionCreateOrConnectWithoutUserInput[] + upsert?: UserSessionUpsertWithWhereUniqueWithoutUserInput | UserSessionUpsertWithWhereUniqueWithoutUserInput[] + createMany?: UserSessionCreateManyUserInputEnvelope + set?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + disconnect?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + delete?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + connect?: UserSessionWhereUniqueInput | UserSessionWhereUniqueInput[] + update?: UserSessionUpdateWithWhereUniqueWithoutUserInput | UserSessionUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: UserSessionUpdateManyWithWhereWithoutUserInput | UserSessionUpdateManyWithWhereWithoutUserInput[] + deleteMany?: UserSessionScalarWhereInput | UserSessionScalarWhereInput[] + } + + export type TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput = { + create?: XOR | TelegramLoginRequestCreateWithoutUserInput[] | TelegramLoginRequestUncheckedCreateWithoutUserInput[] + connectOrCreate?: TelegramLoginRequestCreateOrConnectWithoutUserInput | TelegramLoginRequestCreateOrConnectWithoutUserInput[] + upsert?: TelegramLoginRequestUpsertWithWhereUniqueWithoutUserInput | TelegramLoginRequestUpsertWithWhereUniqueWithoutUserInput[] + createMany?: TelegramLoginRequestCreateManyUserInputEnvelope + set?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + disconnect?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + delete?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + connect?: TelegramLoginRequestWhereUniqueInput | TelegramLoginRequestWhereUniqueInput[] + update?: TelegramLoginRequestUpdateWithWhereUniqueWithoutUserInput | TelegramLoginRequestUpdateWithWhereUniqueWithoutUserInput[] + updateMany?: TelegramLoginRequestUpdateManyWithWhereWithoutUserInput | TelegramLoginRequestUpdateManyWithWhereWithoutUserInput[] + deleteMany?: TelegramLoginRequestScalarWhereInput | TelegramLoginRequestScalarWhereInput[] + } + export type VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput = { create?: XOR | VoiceExperienceCreateWithoutUserInput[] | VoiceExperienceUncheckedCreateWithoutUserInput[] connectOrCreate?: VoiceExperienceCreateOrConnectWithoutUserInput | VoiceExperienceCreateOrConnectWithoutUserInput[] @@ -5711,6 +8612,36 @@ export namespace Prisma { deleteMany?: VoiceExperienceScalarWhereInput | VoiceExperienceScalarWhereInput[] } + export type UserCreateNestedOneWithoutSessionsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutSessionsInput + connect?: UserWhereUniqueInput + } + + export type UserUpdateOneRequiredWithoutSessionsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutSessionsInput + upsert?: UserUpsertWithoutSessionsInput + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutSessionsInput> + } + + export type UserCreateNestedOneWithoutLoginRequestsInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutLoginRequestsInput + connect?: UserWhereUniqueInput + } + + export type UserUpdateOneWithoutLoginRequestsNestedInput = { + create?: XOR + connectOrCreate?: UserCreateOrConnectWithoutLoginRequestsInput + upsert?: UserUpsertWithoutLoginRequestsInput + disconnect?: UserWhereInput | boolean + delete?: UserWhereInput | boolean + connect?: UserWhereUniqueInput + update?: XOR, UserUncheckedUpdateWithoutLoginRequestsInput> + } + export type PlaceCreateNestedOneWithoutExperiencesInput = { create?: XOR connectOrCreate?: PlaceCreateOrConnectWithoutExperiencesInput @@ -6011,6 +8942,60 @@ export namespace Prisma { updatedAt?: DateTimeFilter<"VoiceExperience"> | Date | string } + export type UserSessionCreateWithoutUserInput = { + id?: string + tokenHash: string + expiresAt: Date | string + createdAt?: Date | string + } + + export type UserSessionUncheckedCreateWithoutUserInput = { + id?: string + tokenHash: string + expiresAt: Date | string + createdAt?: Date | string + } + + export type UserSessionCreateOrConnectWithoutUserInput = { + where: UserSessionWhereUniqueInput + create: XOR + } + + export type UserSessionCreateManyUserInputEnvelope = { + data: UserSessionCreateManyUserInput | UserSessionCreateManyUserInput[] + skipDuplicates?: boolean + } + + export type TelegramLoginRequestCreateWithoutUserInput = { + id?: string + tokenHash: string + status?: string + sessionToken?: string | null + expiresAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type TelegramLoginRequestUncheckedCreateWithoutUserInput = { + id?: string + tokenHash: string + status?: string + sessionToken?: string | null + expiresAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string + } + + export type TelegramLoginRequestCreateOrConnectWithoutUserInput = { + where: TelegramLoginRequestWhereUniqueInput + create: XOR + } + + export type TelegramLoginRequestCreateManyUserInputEnvelope = { + data: TelegramLoginRequestCreateManyUserInput | TelegramLoginRequestCreateManyUserInput[] + skipDuplicates?: boolean + } + export type VoiceExperienceCreateWithoutUserInput = { id?: string durationSeconds: number @@ -6045,6 +9030,63 @@ export namespace Prisma { skipDuplicates?: boolean } + export type UserSessionUpsertWithWhereUniqueWithoutUserInput = { + where: UserSessionWhereUniqueInput + update: XOR + create: XOR + } + + export type UserSessionUpdateWithWhereUniqueWithoutUserInput = { + where: UserSessionWhereUniqueInput + data: XOR + } + + export type UserSessionUpdateManyWithWhereWithoutUserInput = { + where: UserSessionScalarWhereInput + data: XOR + } + + export type UserSessionScalarWhereInput = { + AND?: UserSessionScalarWhereInput | UserSessionScalarWhereInput[] + OR?: UserSessionScalarWhereInput[] + NOT?: UserSessionScalarWhereInput | UserSessionScalarWhereInput[] + id?: StringFilter<"UserSession"> | string + tokenHash?: StringFilter<"UserSession"> | string + userId?: StringFilter<"UserSession"> | string + expiresAt?: DateTimeFilter<"UserSession"> | Date | string + createdAt?: DateTimeFilter<"UserSession"> | Date | string + } + + export type TelegramLoginRequestUpsertWithWhereUniqueWithoutUserInput = { + where: TelegramLoginRequestWhereUniqueInput + update: XOR + create: XOR + } + + export type TelegramLoginRequestUpdateWithWhereUniqueWithoutUserInput = { + where: TelegramLoginRequestWhereUniqueInput + data: XOR + } + + export type TelegramLoginRequestUpdateManyWithWhereWithoutUserInput = { + where: TelegramLoginRequestScalarWhereInput + data: XOR + } + + export type TelegramLoginRequestScalarWhereInput = { + AND?: TelegramLoginRequestScalarWhereInput | TelegramLoginRequestScalarWhereInput[] + OR?: TelegramLoginRequestScalarWhereInput[] + NOT?: TelegramLoginRequestScalarWhereInput | TelegramLoginRequestScalarWhereInput[] + id?: StringFilter<"TelegramLoginRequest"> | string + tokenHash?: StringFilter<"TelegramLoginRequest"> | string + status?: StringFilter<"TelegramLoginRequest"> | string + sessionToken?: StringNullableFilter<"TelegramLoginRequest"> | string | null + userId?: StringNullableFilter<"TelegramLoginRequest"> | string | null + expiresAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + createdAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + updatedAt?: DateTimeFilter<"TelegramLoginRequest"> | Date | string + } + export type VoiceExperienceUpsertWithWhereUniqueWithoutUserInput = { where: VoiceExperienceWhereUniqueInput update: XOR @@ -6061,6 +9103,150 @@ export namespace Prisma { data: XOR } + export type UserCreateWithoutSessionsInput = { + id?: string + telegramId: string + username?: string | null + firstName?: string | null + lastName?: string | null + photoUrl?: string | null + languageCode?: string | null + createdAt?: Date | string + updatedAt?: Date | string + loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput + voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput + } + + export type UserUncheckedCreateWithoutSessionsInput = { + id?: string + telegramId: string + username?: string | null + firstName?: string | null + lastName?: string | null + photoUrl?: string | null + languageCode?: string | null + createdAt?: Date | string + updatedAt?: Date | string + loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput + voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput + } + + export type UserCreateOrConnectWithoutSessionsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutSessionsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutSessionsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutSessionsInput = { + id?: StringFieldUpdateOperationsInput | string + telegramId?: StringFieldUpdateOperationsInput | string + username?: NullableStringFieldUpdateOperationsInput | string | null + firstName?: NullableStringFieldUpdateOperationsInput | string | null + lastName?: NullableStringFieldUpdateOperationsInput | string | null + photoUrl?: NullableStringFieldUpdateOperationsInput | string | null + languageCode?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput + voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput + } + + export type UserUncheckedUpdateWithoutSessionsInput = { + id?: StringFieldUpdateOperationsInput | string + telegramId?: StringFieldUpdateOperationsInput | string + username?: NullableStringFieldUpdateOperationsInput | string | null + firstName?: NullableStringFieldUpdateOperationsInput | string | null + lastName?: NullableStringFieldUpdateOperationsInput | string | null + photoUrl?: NullableStringFieldUpdateOperationsInput | string | null + languageCode?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput + voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput + } + + export type UserCreateWithoutLoginRequestsInput = { + id?: string + telegramId: string + username?: string | null + firstName?: string | null + lastName?: string | null + photoUrl?: string | null + languageCode?: string | null + createdAt?: Date | string + updatedAt?: Date | string + sessions?: UserSessionCreateNestedManyWithoutUserInput + voiceExperiences?: VoiceExperienceCreateNestedManyWithoutUserInput + } + + export type UserUncheckedCreateWithoutLoginRequestsInput = { + id?: string + telegramId: string + username?: string | null + firstName?: string | null + lastName?: string | null + photoUrl?: string | null + languageCode?: string | null + createdAt?: Date | string + updatedAt?: Date | string + sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput + voiceExperiences?: VoiceExperienceUncheckedCreateNestedManyWithoutUserInput + } + + export type UserCreateOrConnectWithoutLoginRequestsInput = { + where: UserWhereUniqueInput + create: XOR + } + + export type UserUpsertWithoutLoginRequestsInput = { + update: XOR + create: XOR + where?: UserWhereInput + } + + export type UserUpdateToOneWithWhereWithoutLoginRequestsInput = { + where?: UserWhereInput + data: XOR + } + + export type UserUpdateWithoutLoginRequestsInput = { + id?: StringFieldUpdateOperationsInput | string + telegramId?: StringFieldUpdateOperationsInput | string + username?: NullableStringFieldUpdateOperationsInput | string | null + firstName?: NullableStringFieldUpdateOperationsInput | string | null + lastName?: NullableStringFieldUpdateOperationsInput | string | null + photoUrl?: NullableStringFieldUpdateOperationsInput | string | null + languageCode?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUpdateManyWithoutUserNestedInput + voiceExperiences?: VoiceExperienceUpdateManyWithoutUserNestedInput + } + + export type UserUncheckedUpdateWithoutLoginRequestsInput = { + id?: StringFieldUpdateOperationsInput | string + telegramId?: StringFieldUpdateOperationsInput | string + username?: NullableStringFieldUpdateOperationsInput | string | null + firstName?: NullableStringFieldUpdateOperationsInput | string | null + lastName?: NullableStringFieldUpdateOperationsInput | string | null + photoUrl?: NullableStringFieldUpdateOperationsInput | string | null + languageCode?: NullableStringFieldUpdateOperationsInput | string | null + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput + voiceExperiences?: VoiceExperienceUncheckedUpdateManyWithoutUserNestedInput + } + export type PlaceCreateWithoutExperiencesInput = { id?: string googlePlaceId: string @@ -6096,6 +9282,8 @@ export namespace Prisma { languageCode?: string | null createdAt?: Date | string updatedAt?: Date | string + sessions?: UserSessionCreateNestedManyWithoutUserInput + loginRequests?: TelegramLoginRequestCreateNestedManyWithoutUserInput } export type UserUncheckedCreateWithoutVoiceExperiencesInput = { @@ -6108,6 +9296,8 @@ export namespace Prisma { languageCode?: string | null createdAt?: Date | string updatedAt?: Date | string + sessions?: UserSessionUncheckedCreateNestedManyWithoutUserInput + loginRequests?: TelegramLoginRequestUncheckedCreateNestedManyWithoutUserInput } export type UserCreateOrConnectWithoutVoiceExperiencesInput = { @@ -6167,6 +9357,8 @@ export namespace Prisma { languageCode?: NullableStringFieldUpdateOperationsInput | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUpdateManyWithoutUserNestedInput + loginRequests?: TelegramLoginRequestUpdateManyWithoutUserNestedInput } export type UserUncheckedUpdateWithoutVoiceExperiencesInput = { @@ -6179,6 +9371,8 @@ export namespace Prisma { languageCode?: NullableStringFieldUpdateOperationsInput | string | null createdAt?: DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + sessions?: UserSessionUncheckedUpdateManyWithoutUserNestedInput + loginRequests?: TelegramLoginRequestUncheckedUpdateManyWithoutUserNestedInput } export type VoiceExperienceCreateManyPlaceInput = { @@ -6229,6 +9423,23 @@ export namespace Prisma { updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string } + export type UserSessionCreateManyUserInput = { + id?: string + tokenHash: string + expiresAt: Date | string + createdAt?: Date | string + } + + export type TelegramLoginRequestCreateManyUserInput = { + id?: string + tokenHash: string + status?: string + sessionToken?: string | null + expiresAt: Date | string + createdAt?: Date | string + updatedAt?: Date | string + } + export type VoiceExperienceCreateManyUserInput = { id?: string placeId: string @@ -6241,6 +9452,57 @@ export namespace Prisma { updatedAt?: Date | string } + export type UserSessionUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserSessionUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type UserSessionUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type TelegramLoginRequestUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type TelegramLoginRequestUncheckedUpdateWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + + export type TelegramLoginRequestUncheckedUpdateManyWithoutUserInput = { + id?: StringFieldUpdateOperationsInput | string + tokenHash?: StringFieldUpdateOperationsInput | string + status?: StringFieldUpdateOperationsInput | string + sessionToken?: NullableStringFieldUpdateOperationsInput | string | null + expiresAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + } + export type VoiceExperienceUpdateWithoutUserInput = { id?: StringFieldUpdateOperationsInput | string durationSeconds?: IntFieldUpdateOperationsInput | number diff --git a/src/generated/prisma/index.js b/src/generated/prisma/index.js index a7903da..20482b3 100644 --- a/src/generated/prisma/index.js +++ b/src/generated/prisma/index.js @@ -115,6 +115,25 @@ exports.Prisma.UserScalarFieldEnum = { updatedAt: 'updatedAt' }; +exports.Prisma.UserSessionScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt' +}; + +exports.Prisma.TelegramLoginRequestScalarFieldEnum = { + id: 'id', + tokenHash: 'tokenHash', + status: 'status', + sessionToken: 'sessionToken', + userId: 'userId', + expiresAt: 'expiresAt', + createdAt: 'createdAt', + updatedAt: 'updatedAt' +}; + exports.Prisma.VoiceExperienceScalarFieldEnum = { id: 'id', placeId: 'placeId', @@ -165,6 +184,8 @@ exports.VoiceExperienceStatus = exports.$Enums.VoiceExperienceStatus = { exports.Prisma.ModelName = { Place: 'Place', User: 'User', + UserSession: 'UserSession', + TelegramLoginRequest: 'TelegramLoginRequest', VoiceExperience: 'VoiceExperience' }; /** @@ -175,14 +196,14 @@ const config = { "clientVersion": "7.8.0", "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n experiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n voiceExperiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" + "inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum VoiceExperienceStatus {\n UPLOADED\n TRANSCRIBING\n TRANSCRIBED\n ANALYZING\n ANALYZED\n FAILED\n}\n\nmodel Place {\n id String @id @default(cuid())\n googlePlaceId String @unique\n name String\n latitude Float\n longitude Float\n experiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel User {\n id String @id @default(cuid())\n telegramId String @unique\n username String?\n firstName String?\n lastName String?\n photoUrl String?\n languageCode String?\n sessions UserSession[]\n loginRequests TelegramLoginRequest[]\n voiceExperiences VoiceExperience[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel UserSession {\n id String @id @default(cuid())\n tokenHash String @unique\n userId String\n user User @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n}\n\nmodel TelegramLoginRequest {\n id String @id @default(cuid())\n tokenHash String @unique\n status String @default(\"PENDING\")\n sessionToken String?\n userId String?\n user User? @relation(fields: [userId], references: [id])\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel VoiceExperience {\n id String @id @default(cuid())\n placeId String\n place Place @relation(fields: [placeId], references: [id])\n userId String?\n user User? @relation(fields: [userId], references: [id])\n durationSeconds Int\n audioObjectKey String\n status VoiceExperienceStatus @default(UPLOADED)\n transcript String?\n analysis Json?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n" } -config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Place\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googlePlaceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"experiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"telegramId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"username\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"photoUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"languageCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessions\",\"kind\":\"object\",\"type\":\"UserSession\",\"relationName\":\"UserToUserSession\"},{\"name\":\"loginRequests\",\"kind\":\"object\",\"type\":\"TelegramLoginRequest\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"voiceExperiences\",\"kind\":\"object\",\"type\":\"VoiceExperience\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"UserSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSession\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TelegramLoginRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TelegramLoginRequestToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"VoiceExperience\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"place\",\"kind\":\"object\",\"type\":\"Place\",\"relationName\":\"PlaceToVoiceExperience\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToVoiceExperience\"},{\"name\":\"durationSeconds\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"audioObjectKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"VoiceExperienceStatus\"},{\"name\":\"transcript\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"analysis\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"voiceExperiences\",\"_count\",\"user\",\"experiences\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.aggregate\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "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-ACFEAQB-ACFFAQCBAQAhRgIAfwAhRwEAfgAhSQAAgAFJIkoBAIEBACFLgAAAAAFMQACCAQAhTUAAggEAIQIAAAAFACANAABGACAKQwEAfgAhRAEAfgAhRQEAgQEAIUYCAH8AIUcBAH4AIUkAAIABSSJKAQCBAQAhS4AAAAABTEAAggEAIU1AAIIBACECAAAAAwAgDQAASAAgAgAAAAMAIA0AAEgAIAEAAAAHACADAAAABQAgFAAAQAAgFQAARgAgAQAAAAUAIAEAAAADACAIBQAAeQAgGgAAegAgGwAAfQAgHAAAfAAgHQAAewAgRQAAeAAgSgAAeAAgSwAAeAAgDUAAAFMAMEEAAFAAEEIAAFMAMEMBAFQAIUQBAFQAIUUBAFUAIUYCAFYAIUcBAFQAIUkAAFdJIkoBAFUAIUsAAFgAIExAAFkAIU1AAFkAIQMAAAADACABAABPADAZAABQACADAAAAAwAgAQAABAAwAgAABQAgDUAAAFMAMEEAAFAAEEIAAFMAMEMBAFQAIUQBAFQAIUUBAFUAIUYCAFYAIUcBAFQAIUkAAFdJIkoBAFUAIUsAAFgAIExAAFkAIU1AAFkAIQ4FAABbACAcAABmACAdAABmACBOAQAAAAFPAQAAAARQAQAAAARRAQAAAAFSAQAAAAFTAQAAAAFUAQAAAAFVAQBlACFcAQAAAAFdAQAAAAFeAQAAAAEOBQAAXQAgHAAAZAAgHQAAZAAgTgEAAAABTwEAAAAFUAEAAAAFUQEAAAABUgEAAAABUwEAAAABVAEAAAABVQEAYwAhXAEAAAABXQEAAAABXgEAAAABDQUAAFsAIBoAAGIAIBsAAFsAIBwAAFsAIB0AAFsAIE4CAAAAAU8CAAAABFACAAAABFECAAAAAVICAAAAAVMCAAAAAVQCAAAAAVUCAGEAIQcFAABbACAcAABgACAdAABgACBOAAAASQJPAAAASQhQAAAASQhVAABfSSIPBQAAXQAgHAAAXgAgHQAAXgAgToAAAAABUYAAAAABUoAAAAABU4AAAAABVIAAAAABVYAAAAABVgEAAAABVwEAAAABWAEAAAABWYAAAAABWoAAAAABW4AAAAABCwUAAFsAIBwAAFwAIB0AAFwAIE5AAAAAAU9AAAAABFBAAAAABFFAAAAAAVJAAAAAAVNAAAAAAVRAAAAAAVVAAFoAIQsFAABbACAcAABcACAdAABcACBOQAAAAAFPQAAAAARQQAAAAARRQAAAAAFSQAAAAAFTQAAAAAFUQAAAAAFVQABaACEITgIAAAABTwIAAAAEUAIAAAAEUQIAAAABUgIAAAABUwIAAAABVAIAAAABVQIAWwAhCE5AAAAAAU9AAAAABFBAAAAABFFAAAAAAVJAAAAAAVNAAAAAAVRAAAAAAVVAAFwAIQhOAgAAAAFPAgAAAAVQAgAAAAVRAgAAAAFSAgAAAAFTAgAAAAFUAgAAAAFVAgBdACEMToAAAAABUYAAAAABUoAAAAABU4AAAAABVIAAAAABVYAAAAABVgEAAAABVwEAAAABWAEAAAABWYAAAAABWoAAAAABW4AAAAABBwUAAFsAIBwAAGAAIB0AAGAAIE4AAABJAk8AAABJCFAAAABJCFUAAF9JIgROAAAASQJPAAAASQhQAAAASQhVAABgSSINBQAAWwAgGgAAYgAgGwAAWwAgHAAAWwAgHQAAWwAgTgIAAAABTwIAAAAEUAIAAAAEUQIAAAABUgIAAAABUwIAAAABVAIAAAABVQIAYQAhCE4IAAAAAU8IAAAABFAIAAAABFEIAAAAAVIIAAAAAVMIAAAAAVQIAAAAAVUIAGIAIQ4FAABdACAcAABkACAdAABkACBOAQAAAAFPAQAAAAVQAQAAAAVRAQAAAAFSAQAAAAFTAQAAAAFUAQAAAAFVAQBjACFcAQAAAAFdAQAAAAFeAQAAAAELTgEAAAABTwEAAAAFUAEAAAAFUQEAAAABUgEAAAABUwEAAAABVAEAAAABVQEAZAAhXAEAAAABXQEAAAABXgEAAAABDgUAAFsAIBwAAGYAIB0AAGYAIE4BAAAAAU8BAAAABFABAAAABFEBAAAAAVIBAAAAAVMBAAAAAVQBAAAAAVUBAGUAIVwBAAAAAV0BAAAAAV4BAAAAAQtOAQAAAAFPAQAAAARQAQAAAARRAQAAAAFSAQAAAAFTAQAAAAFUAQAAAAFVAQBmACFcAQAAAAFdAQAAAAFeAQAAAAEMQAAAZwAwQQAAOAAQQgAAZwAwQwEAVAAhTEAAWQAhTUAAWQAhXwEAVAAhYAEAVQAhYQEAVQAhYgEAVQAhYwEAVQAhZAEAVQAhDQQAAGsAIEAAAGgAMEEAAAcAEEIAAGgAMEMBAHAAIUxAAGoAIU1AAGoAIV8BAHAAIWABAGkAIWEBAGkAIWIBAGkAIWMBAGkAIWQBAGkAIQtOAQAAAAFPAQAAAAVQAQAAAAVRAQAAAAFSAQAAAAFTAQAAAAFUAQAAAAFVAQBkACFcAQAAAAFdAQAAAAFeAQAAAAEITkAAAAABT0AAAAAEUEAAAAAEUUAAAAABUkAAAAABU0AAAAABVEAAAAABVUAAXAAhA2UAAAMAIGYAAAMAIGcAAAMAIApAAABsADBBAAAgABBCAABsADBDAQBUACFMQABZACFNQABZACFoAQBUACFpAQBUACFqCABtACFrCABtACENBQAAWwAgGgAAYgAgGwAAYgAgHAAAYgAgHQAAYgAgTggAAAABTwgAAAAEUAgAAAAEUQgAAAABUggAAAABUwgAAAABVAgAAAABVQgAbgAhDQUAAFsAIBoAAGIAIBsAAGIAIBwAAGIAIB0AAGIAIE4IAAAAAU8IAAAABFAIAAAABFEIAAAAAVIIAAAAAVMIAAAAAVQIAAAAAVUIAG4AIQsHAABrACBAAABvADBBAAANABBCAABvADBDAQBwACFMQABqACFNQABqACFoAQBwACFpAQBwACFqCABxACFrCABxACELTgEAAAABTwEAAAAEUAEAAAAEUQEAAAABUgEAAAABUwEAAAABVAEAAAABVQEAZgAhXAEAAAABXQEAAAABXgEAAAABCE4IAAAAAU8IAAAABFAIAAAABFEIAAAAAVIIAAAAAVMIAAAAAVQIAAAAAVUIAGIAIQ8DAAB2ACAGAAB3ACBAAAByADBBAAADABBCAAByADBDAQBwACFEAQBwACFFAQBpACFGAgBzACFHAQBwACFJAAB0SSJKAQBpACFLAAB1ACBMQABqACFNQABqACEITgIAAAABTwIAAAAEUAIAAAAEUQIAAAABUgIAAAABUwIAAAABVAIAAAABVQIAWwAhBE4AAABJAk8AAABJCFAAAABJCFUAAGBJIgxOgAAAAAFRgAAAAAFSgAAAAAFTgAAAAAFUgAAAAAFVgAAAAAFWAQAAAAFXAQAAAAFYAQAAAAFZgAAAAAFagAAAAAFbgAAAAAENBwAAawAgQAAAbwAwQQAADQAQQgAAbwAwQwEAcAAhTEAAagAhTUAAagAhaAEAcAAhaQEAcAAhaggAcQAhawgAcQAhbAAADQAgbQAADQAgDwQAAGsAIEAAAGgAMEEAAAcAEEIAAGgAMEMBAHAAIUxAAGoAIU1AAGoAIV8BAHAAIWABAGkAIWEBAGkAIWIBAGkAIWMBAGkAIWQBAGkAIWwAAAcAIG0AAAcAIAAAAAAAAAFxAQAAAAEFcQIAAAABdwIAAAABeAIAAAABeQIAAAABegIAAAABAXEAAABJAgFxAQAAAAEBcUAAAAABBRQAALABACAVAAC2AQAgbgAAsQEAIG8AALUBACB0AAABACAHFAAArgEAIBUAALMBACBuAACvAQAgbwAAsgEAIHIAAAcAIHMAAAcAIHQAACMAIAMUAACwAQAgbgAAsQEAIHQAAAEAIAMUAACuAQAgbgAArwEAIHQAACMAIAAAAAsUAACLAQAwFQAAkAEAMG4AAIwBADBvAACNAQAwcAAAjgEAIHEAAI8BADByAACPAQAwcwAAjwEAMHQAAI8BADB1AACRAQAwdgAAkgEAMAoDAACFAQAgQwEAAAABRAEAAAABRgIAAAABRwEAAAABSQAAAEkCSgEAAAABS4AAAAABTEAAAAABTUAAAAABAgAAAAUAIBQAAJYBACADAAAABQAgFAAAlgEAIBUAAJUBACABDQAArQEAMA8DAAB2ACAGAAB3ACBAAAByADBBAAADABBCAAByADBDAQAAAAFEAQBwACFFAQBpACFGAgBzACFHAQBwACFJAAB0SSJKAQBpACFLAAB1ACBMQABqACFNQABqACECAAAABQAgDQAAlQEAIAIAAACTAQAgDQAAlAEAIA1AAACSAQAwQQAAkwEAEEIAAJIBADBDAQBwACFEAQBwACFFAQBpACFGAgBzACFHAQBwACFJAAB0SSJKAQBpACFLAAB1ACBMQABqACFNQABqACENQAAAkgEAMEEAAJMBABBCAACSAQAwQwEAcAAhRAEAcAAhRQEAaQAhRgIAcwAhRwEAcAAhSQAAdEkiSgEAaQAhSwAAdQAgTEAAagAhTUAAagAhCUMBAH4AIUQBAH4AIUYCAH8AIUcBAH4AIUkAAIABSSJKAQCBAQAhS4AAAAABTEAAggEAIU1AAIIBACEKAwAAgwEAIEMBAH4AIUQBAH4AIUYCAH8AIUcBAH4AIUkAAIABSSJKAQCBAQAhS4AAAAABTEAAggEAIU1AAIIBACEKAwAAhQEAIEMBAAAAAUQBAAAAAUYCAAAAAUcBAAAAAUkAAABJAkoBAAAAAUuAAAAAAUxAAAAAAU1AAAAAAQQUAACLAQAwbgAAjAEAMHAAAI4BACB0AACPAQAwAAAAAAAABXEIAAAAAXcIAAAAAXgIAAAAAXkIAAAAAXoIAAAAAQsUAACgAQAwFQAApAEAMG4AAKEBADBvAACiAQAwcAAAowEAIHEAAI8BADByAACPAQAwcwAAjwEAMHQAAI8BADB1AAClAQAwdgAAkgEAMAoGAACGAQAgQwEAAAABRQEAAAABRgIAAAABRwEAAAABSQAAAEkCSgEAAAABS4AAAAABTEAAAAABTUAAAAABAgAAAAUAIBQAAKgBACADAAAABQAgFAAAqAEAIBUAAKcBACABDQAArAEAMAIAAAAFACANAACnAQAgAgAAAJMBACANAACmAQAgCUMBAH4AIUUBAIEBACFGAgB_ACFHAQB-ACFJAACAAUkiSgEAgQEAIUuAAAAAAUxAAIIBACFNQACCAQAhCgYAAIQBACBDAQB-ACFFAQCBAQAhRgIAfwAhRwEAfgAhSQAAgAFJIkoBAIEBACFLgAAAAAFMQACCAQAhTUAAggEAIQoGAACGAQAgQwEAAAABRQEAAAABRgIAAAABRwEAAAABSQAAAEkCSgEAAAABS4AAAAABTEAAAAABTUAAAAABBBQAAKABADBuAAChAQAwcAAAowEAIHQAAI8BADABBwAAmAEAIAYEAACYAQAgYAAAeAAgYQAAeAAgYgAAeAAgYwAAeAAgZAAAeAAgCUMBAAAAAUUBAAAAAUYCAAAAAUcBAAAAAUkAAABJAkoBAAAAAUuAAAAAAUxAAAAAAU1AAAAAAQlDAQAAAAFEAQAAAAFGAgAAAAFHAQAAAAFJAAAASQJKAQAAAAFLgAAAAAFMQAAAAAFNQAAAAAEJQwEAAAABTEAAAAABTUAAAAABXwEAAAABYAEAAAABYQEAAAABYgEAAAABYwEAAAABZAEAAAABAgAAACMAIBQAAK4BACAHQwEAAAABTEAAAAABTUAAAAABaAEAAAABaQEAAAABaggAAAABawgAAAABAgAAAAEAIBQAALABACADAAAABwAgFAAArgEAIBUAALQBACALAAAABwAgDQAAtAEAIEMBAH4AIUxAAIIBACFNQACCAQAhXwEAfgAhYAEAgQEAIWEBAIEBACFiAQCBAQAhYwEAgQEAIWQBAIEBACEJQwEAfgAhTEAAggEAIU1AAIIBACFfAQB-ACFgAQCBAQAhYQEAgQEAIWIBAIEBACFjAQCBAQAhZAEAgQEAIQMAAAANACAUAACwAQAgFQAAtwEAIAkAAAANACANAAC3AQAgQwEAfgAhTEAAggEAIU1AAIIBACFoAQB-ACFpAQB-ACFqCACeAQAhawgAngEAIQdDAQB-ACFMQACCAQAhTUAAggEAIWgBAH4AIWkBAH4AIWoIAJ4BACFrCACeAQAhAgUABQcGAgIDAAEGCAMCBAkCBQAEAQQKAAEHCwAAAAAFBQAKGgALGwAMHAANHQAOAAAAAAAFBQAKGgALGwAMHAANHQAOAAADBQATHAAUHQAVAAAAAwUAExwAFB0AFQIDAAEGRQMCAwABBksDBQUAGhoAGxsAHBwAHR0AHgAAAAAABQUAGhoAGxsAHBwAHR0AHggCAQkMAQoPAQsQAQwRAQ4TAQ8VBhAWBxEYARIaBhMbCBYcARcdARgeBh4hCR8iDyAkAyElAyInAyMoAyQpAyUrAyYtBicuECgwAykyBiozESs0Ayw1Ay02Bi45Ei86FjA7AjE8AjI9AjM-AjQ_AjVBAjZDBjdEFzhHAjlJBjpKGDtMAjxNAj1OBj5RGT9SHw" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"place\",\"user\",\"sessions\",\"loginRequests\",\"voiceExperiences\",\"_count\",\"experiences\",\"Place.findUnique\",\"Place.findUniqueOrThrow\",\"Place.findFirst\",\"Place.findFirstOrThrow\",\"Place.findMany\",\"data\",\"Place.createOne\",\"Place.createMany\",\"Place.createManyAndReturn\",\"Place.updateOne\",\"Place.updateMany\",\"Place.updateManyAndReturn\",\"create\",\"update\",\"Place.upsertOne\",\"Place.deleteOne\",\"Place.deleteMany\",\"having\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"Place.groupBy\",\"Place.aggregate\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"User.createOne\",\"User.createMany\",\"User.createManyAndReturn\",\"User.updateOne\",\"User.updateMany\",\"User.updateManyAndReturn\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"User.groupBy\",\"User.aggregate\",\"UserSession.findUnique\",\"UserSession.findUniqueOrThrow\",\"UserSession.findFirst\",\"UserSession.findFirstOrThrow\",\"UserSession.findMany\",\"UserSession.createOne\",\"UserSession.createMany\",\"UserSession.createManyAndReturn\",\"UserSession.updateOne\",\"UserSession.updateMany\",\"UserSession.updateManyAndReturn\",\"UserSession.upsertOne\",\"UserSession.deleteOne\",\"UserSession.deleteMany\",\"UserSession.groupBy\",\"UserSession.aggregate\",\"TelegramLoginRequest.findUnique\",\"TelegramLoginRequest.findUniqueOrThrow\",\"TelegramLoginRequest.findFirst\",\"TelegramLoginRequest.findFirstOrThrow\",\"TelegramLoginRequest.findMany\",\"TelegramLoginRequest.createOne\",\"TelegramLoginRequest.createMany\",\"TelegramLoginRequest.createManyAndReturn\",\"TelegramLoginRequest.updateOne\",\"TelegramLoginRequest.updateMany\",\"TelegramLoginRequest.updateManyAndReturn\",\"TelegramLoginRequest.upsertOne\",\"TelegramLoginRequest.deleteOne\",\"TelegramLoginRequest.deleteMany\",\"TelegramLoginRequest.groupBy\",\"TelegramLoginRequest.aggregate\",\"VoiceExperience.findUnique\",\"VoiceExperience.findUniqueOrThrow\",\"VoiceExperience.findFirst\",\"VoiceExperience.findFirstOrThrow\",\"VoiceExperience.findMany\",\"VoiceExperience.createOne\",\"VoiceExperience.createMany\",\"VoiceExperience.createManyAndReturn\",\"VoiceExperience.updateOne\",\"VoiceExperience.updateMany\",\"VoiceExperience.updateManyAndReturn\",\"VoiceExperience.upsertOne\",\"VoiceExperience.deleteOne\",\"VoiceExperience.deleteMany\",\"VoiceExperience.groupBy\",\"VoiceExperience.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"placeId\",\"userId\",\"durationSeconds\",\"audioObjectKey\",\"VoiceExperienceStatus\",\"status\",\"transcript\",\"analysis\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"contains\",\"startsWith\",\"endsWith\",\"tokenHash\",\"sessionToken\",\"expiresAt\",\"telegramId\",\"username\",\"firstName\",\"lastName\",\"photoUrl\",\"languageCode\",\"every\",\"some\",\"none\",\"googlePlaceId\",\"name\",\"latitude\",\"longitude\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "qwIvUAsJAACoAQAgYgAArAEAMGMAABgAEGQAAKwBADBlAQAAAAFuQAClAQAhb0AApQEAIY0BAQAAAAGOAQEArQEAIY8BCACuAQAhkAEIAK4BACEBAAAAAQAgDwMAALcBACAEAACwAQAgYgAAswEAMGMAAAMAEGQAALMBADBlAQCtAQAhZgEArQEAIWcBAKQBACFoAgC0AQAhaQEArQEAIWsAALUBayJsAQCkAQAhbQAAtgEAIG5AAKUBACFvQAClAQAhBQMAAJMCACAEAACSAgAgZwAAuAEAIGwAALgBACBtAAC4AQAgDwMAALcBACAEAACwAQAgYgAAswEAMGMAAAMAEGQAALMBADBlAQAAAAFmAQCtAQAhZwEApAEAIWgCALQBACFpAQCtAQAhawAAtQFrImwBAKQBACFtAAC2AQAgbkAApQEAIW9AAKUBACEDAAAAAwAgAQAABAAwAgAABQAgDwUAAKYBACAGAACnAQAgBwAAqAEAIGIAAKMBADBjAAAHABBkAACjAQAwZQEArQEAIW5AAKUBACFvQAClAQAhhAEBAK0BACGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhAQAAAAcAIAkEAACyAQAgYgAAsQEAMGMAAAkAEGQAALEBADBlAQCtAQAhZwEArQEAIW5AAKUBACGBAQEArQEAIYMBQAClAQAhAQQAAJICACAJBAAAsgEAIGIAALEBADBjAAAJABBkAACxAQAwZQEAAAABZwEArQEAIW5AAKUBACGBAQEAAAABgwFAAKUBACEDAAAACQAgAQAACgAwAgAACwAgDAQAALABACBiAACvAQAwYwAADQAQZAAArwEAMGUBAK0BACFnAQCkAQAhawEArQEAIW5AAKUBACFvQAClAQAhgQEBAK0BACGCAQEApAEAIYMBQAClAQAhAwQAAJICACBnAAC4AQAgggEAALgBACAMBAAAsAEAIGIAAK8BADBjAAANABBkAACvAQAwZQEAAAABZwEApAEAIWsBAK0BACFuQAClAQAhb0AApQEAIYEBAQAAAAGCAQEApAEAIYMBQAClAQAhAwAAAA0AIAEAAA4AMAIAAA8AIAEAAAAHACADAAAAAwAgAQAABAAwAgAABQAgAQAAAAkAIAEAAAANACABAAAAAwAgAQAAAAMAIAEAAAABACALCQAAqAEAIGIAAKwBADBjAAAYABBkAACsAQAwZQEArQEAIW5AAKUBACFvQAClAQAhjQEBAK0BACGOAQEArQEAIY8BCACuAQAhkAEIAK4BACEBCQAAgAIAIAMAAAAYACABAAAZADACAAABACADAAAAGAAgAQAAGQAwAgAAAQAgAwAAABgAIAEAABkAMAIAAAEAIAgJAACRAgAgZQEAAAABbkAAAAABb0AAAAABjQEBAAAAAY4BAQAAAAGPAQgAAAABkAEIAAAAAQEPAAAdACAHZQEAAAABbkAAAAABb0AAAAABjQEBAAAAAY4BAQAAAAGPAQgAAAABkAEIAAAAAQEPAAAfADABDwAAHwAwCAkAAIcCACBlAQC-AQAhbkAAwgEAIW9AAMIBACGNAQEAvgEAIY4BAQC-AQAhjwEIAIYCACGQAQgAhgIAIQIAAAABACAPAAAiACAHZQEAvgEAIW5AAMIBACFvQADCAQAhjQEBAL4BACGOAQEAvgEAIY8BCACGAgAhkAEIAIYCACECAAAAGAAgDwAAJAAgAgAAABgAIA8AACQAIAMAAAABACAWAAAdACAXAAAiACABAAAAAQAgAQAAABgAIAUIAACBAgAgHAAAggIAIB0AAIUCACAeAACEAgAgHwAAgwIAIApiAACpAQAwYwAAKwAQZAAAqQEAMGUBAI0BACFuQACSAQAhb0AAkgEAIY0BAQCNAQAhjgEBAI0BACGPAQgAqgEAIZABCACqAQAhAwAAABgAIAEAACoAMBsAACsAIAMAAAAYACABAAAZADACAAABACAPBQAApgEAIAYAAKcBACAHAACoAQAgYgAAowEAMGMAAAcAEGQAAKMBADBlAQAAAAFuQAClAQAhb0AApQEAIYQBAQAAAAGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhAQAAAC4AIAEAAAAuACAIBQAA_gEAIAYAAP8BACAHAACAAgAghQEAALgBACCGAQAAuAEAIIcBAAC4AQAgiAEAALgBACCJAQAAuAEAIAMAAAAHACABAAAxADACAAAuACADAAAABwAgAQAAMQAwAgAALgAgAwAAAAcAIAEAADEAMAIAAC4AIAwFAAD7AQAgBgAA_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-AQAhZgEAvgEAIWcBAMEBACFoAgC_AQAhaQEAvgEAIWsAAMABayJsAQDBAQAhbYAAAAABbkAAwgEAIW9AAMIBACECAAAABQAgDwAAfwAgCmUBAL4BACFmAQC-AQAhZwEAwQEAIWgCAL8BACFpAQC-AQAhawAAwAFrImwBAMEBACFtgAAAAAFuQADCAQAhb0AAwgEAIQIAAAADACAPAACBAQAgAgAAAAMAIA8AAIEBACABAAAABwAgAwAAAAUAIBYAAHkAIBcAAH8AIAEAAAAFACABAAAAAwAgCAgAALkBACAcAAC6AQAgHQAAvQEAIB4AALwBACAfAAC7AQAgZwAAuAEAIGwAALgBACBtAAC4AQAgDWIAAIwBADBjAACJAQAQZAAAjAEAMGUBAI0BACFmAQCNAQAhZwEAjgEAIWgCAI8BACFpAQCNAQAhawAAkAFrImwBAI4BACFtAACRAQAgbkAAkgEAIW9AAJIBACEDAAAAAwAgAQAAiAEAMBsAAIkBACADAAAAAwAgAQAABAAwAgAABQAgDWIAAIwBADBjAACJAQAQZAAAjAEAMGUBAI0BACFmAQCNAQAhZwEAjgEAIWgCAI8BACFpAQCNAQAhawAAkAFrImwBAI4BACFtAACRAQAgbkAAkgEAIW9AAJIBACEOCAAAlAEAIB4AAJ8BACAfAACfAQAgcAEAAAABcQEAAAAEcgEAAAAEcwEAAAABdAEAAAABdQEAAAABdgEAAAABdwEAngEAIX4BAAAAAX8BAAAAAYABAQAAAAEOCAAAlgEAIB4AAJ0BACAfAACdAQAgcAEAAAABcQEAAAAFcgEAAAAFcwEAAAABdAEAAAABdQEAAAABdgEAAAABdwEAnAEAIX4BAAAAAX8BAAAAAYABAQAAAAENCAAAlAEAIBwAAJsBACAdAACUAQAgHgAAlAEAIB8AAJQBACBwAgAAAAFxAgAAAARyAgAAAARzAgAAAAF0AgAAAAF1AgAAAAF2AgAAAAF3AgCaAQAhBwgAAJQBACAeAACZAQAgHwAAmQEAIHAAAABrAnEAAABrCHIAAABrCHcAAJgBayIPCAAAlgEAIB4AAJcBACAfAACXAQAgcIAAAAABc4AAAAABdIAAAAABdYAAAAABdoAAAAABd4AAAAABeAEAAAABeQEAAAABegEAAAABe4AAAAABfIAAAAABfYAAAAABCwgAAJQBACAeAACVAQAgHwAAlQEAIHBAAAAAAXFAAAAABHJAAAAABHNAAAAAAXRAAAAAAXVAAAAAAXZAAAAAAXdAAJMBACELCAAAlAEAIB4AAJUBACAfAACVAQAgcEAAAAABcUAAAAAEckAAAAAEc0AAAAABdEAAAAABdUAAAAABdkAAAAABd0AAkwEAIQhwAgAAAAFxAgAAAARyAgAAAARzAgAAAAF0AgAAAAF1AgAAAAF2AgAAAAF3AgCUAQAhCHBAAAAAAXFAAAAABHJAAAAABHNAAAAAAXRAAAAAAXVAAAAAAXZAAAAAAXdAAJUBACEIcAIAAAABcQIAAAAFcgIAAAAFcwIAAAABdAIAAAABdQIAAAABdgIAAAABdwIAlgEAIQxwgAAAAAFzgAAAAAF0gAAAAAF1gAAAAAF2gAAAAAF3gAAAAAF4AQAAAAF5AQAAAAF6AQAAAAF7gAAAAAF8gAAAAAF9gAAAAAEHCAAAlAEAIB4AAJkBACAfAACZAQAgcAAAAGsCcQAAAGsIcgAAAGsIdwAAmAFrIgRwAAAAawJxAAAAawhyAAAAawh3AACZAWsiDQgAAJQBACAcAACbAQAgHQAAlAEAIB4AAJQBACAfAACUAQAgcAIAAAABcQIAAAAEcgIAAAAEcwIAAAABdAIAAAABdQIAAAABdgIAAAABdwIAmgEAIQhwCAAAAAFxCAAAAARyCAAAAARzCAAAAAF0CAAAAAF1CAAAAAF2CAAAAAF3CACbAQAhDggAAJYBACAeAACdAQAgHwAAnQEAIHABAAAAAXEBAAAABXIBAAAABXMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJwBACF-AQAAAAF_AQAAAAGAAQEAAAABC3ABAAAAAXEBAAAABXIBAAAABXMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ0BACF-AQAAAAF_AQAAAAGAAQEAAAABDggAAJQBACAeAACfAQAgHwAAnwEAIHABAAAAAXEBAAAABHIBAAAABHMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ4BACF-AQAAAAF_AQAAAAGAAQEAAAABC3ABAAAAAXEBAAAABHIBAAAABHMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ8BACF-AQAAAAF_AQAAAAGAAQEAAAABC2IAAKABADBjAABxABBkAACgAQAwZQEAjQEAIWcBAI4BACFrAQCNAQAhbkAAkgEAIW9AAJIBACGBAQEAjQEAIYIBAQCOAQAhgwFAAJIBACEIYgAAoQEAMGMAAFkAEGQAAKEBADBlAQCNAQAhZwEAjQEAIW5AAJIBACGBAQEAjQEAIYMBQACSAQAhDGIAAKIBADBjAABDABBkAACiAQAwZQEAjQEAIW5AAJIBACFvQACSAQAhhAEBAI0BACGFAQEAjgEAIYYBAQCOAQAhhwEBAI4BACGIAQEAjgEAIYkBAQCOAQAhDwUAAKYBACAGAACnAQAgBwAAqAEAIGIAAKMBADBjAAAHABBkAACjAQAwZQEArQEAIW5AAKUBACFvQAClAQAhhAEBAK0BACGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhC3ABAAAAAXEBAAAABXIBAAAABXMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ0BACF-AQAAAAF_AQAAAAGAAQEAAAABCHBAAAAAAXFAAAAABHJAAAAABHNAAAAAAXRAAAAAAXVAAAAAAXZAAAAAAXdAAJUBACEDigEAAAkAIIsBAAAJACCMAQAACQAgA4oBAAANACCLAQAADQAgjAEAAA0AIAOKAQAAAwAgiwEAAAMAIIwBAAADACAKYgAAqQEAMGMAACsAEGQAAKkBADBlAQCNAQAhbkAAkgEAIW9AAJIBACGNAQEAjQEAIY4BAQCNAQAhjwEIAKoBACGQAQgAqgEAIQ0IAACUAQAgHAAAmwEAIB0AAJsBACAeAACbAQAgHwAAmwEAIHAIAAAAAXEIAAAABHIIAAAABHMIAAAAAXQIAAAAAXUIAAAAAXYIAAAAAXcIAKsBACENCAAAlAEAIBwAAJsBACAdAACbAQAgHgAAmwEAIB8AAJsBACBwCAAAAAFxCAAAAARyCAAAAARzCAAAAAF0CAAAAAF1CAAAAAF2CAAAAAF3CACrAQAhCwkAAKgBACBiAACsAQAwYwAAGAAQZAAArAEAMGUBAK0BACFuQAClAQAhb0AApQEAIY0BAQCtAQAhjgEBAK0BACGPAQgArgEAIZABCACuAQAhC3ABAAAAAXEBAAAABHIBAAAABHMBAAAAAXQBAAAAAXUBAAAAAXYBAAAAAXcBAJ8BACF-AQAAAAF_AQAAAAGAAQEAAAABCHAIAAAAAXEIAAAABHIIAAAABHMIAAAAAXQIAAAAAXUIAAAAAXYIAAAAAXcIAJsBACEMBAAAsAEAIGIAAK8BADBjAAANABBkAACvAQAwZQEArQEAIWcBAKQBACFrAQCtAQAhbkAApQEAIW9AAKUBACGBAQEArQEAIYIBAQCkAQAhgwFAAKUBACERBQAApgEAIAYAAKcBACAHAACoAQAgYgAAowEAMGMAAAcAEGQAAKMBADBlAQCtAQAhbkAApQEAIW9AAKUBACGEAQEArQEAIYUBAQCkAQAhhgEBAKQBACGHAQEApAEAIYgBAQCkAQAhiQEBAKQBACGRAQAABwAgkgEAAAcAIAkEAACyAQAgYgAAsQEAMGMAAAkAEGQAALEBADBlAQCtAQAhZwEArQEAIW5AAKUBACGBAQEArQEAIYMBQAClAQAhEQUAAKYBACAGAACnAQAgBwAAqAEAIGIAAKMBADBjAAAHABBkAACjAQAwZQEArQEAIW5AAKUBACFvQAClAQAhhAEBAK0BACGFAQEApAEAIYYBAQCkAQAhhwEBAKQBACGIAQEApAEAIYkBAQCkAQAhkQEAAAcAIJIBAAAHACAPAwAAtwEAIAQAALABACBiAACzAQAwYwAAAwAQZAAAswEAMGUBAK0BACFmAQCtAQAhZwEApAEAIWgCALQBACFpAQCtAQAhawAAtQFrImwBAKQBACFtAAC2AQAgbkAApQEAIW9AAKUBACEIcAIAAAABcQIAAAAEcgIAAAAEcwIAAAABdAIAAAABdQIAAAABdgIAAAABdwIAlAEAIQRwAAAAawJxAAAAawhyAAAAawh3AACZAWsiDHCAAAAAAXOAAAAAAXSAAAAAAXWAAAAAAXaAAAAAAXeAAAAAAXgBAAAAAXkBAAAAAXoBAAAAAXuAAAAAAXyAAAAAAX2AAAAAAQ0JAACoAQAgYgAArAEAMGMAABgAEGQAAKwBADBlAQCtAQAhbkAApQEAIW9AAKUBACGNAQEArQEAIY4BAQCtAQAhjwEIAK4BACGQAQgArgEAIZEBAAAYACCSAQAAGAAgAAAAAAAAAZYBAQAAAAEFlgECAAAAAZwBAgAAAAGdAQIAAAABngECAAAAAZ8BAgAAAAEBlgEAAABrAgGWAQEAAAABAZYBQAAAAAEFFgAApAIAIBcAAKoCACCTAQAApQIAIJQBAACpAgAgmQEAAAEAIAcWAACiAgAgFwAApwIAIJMBAACjAgAglAEAAKYCACCXAQAABwAgmAEAAAcAIJkBAAAuACADFgAApAIAIJMBAAClAgAgmQEAAAEAIAMWAACiAgAgkwEAAKMCACCZAQAALgAgAAAABxYAAJ0CACAXAACgAgAgkwEAAJ4CACCUAQAAnwIAIJcBAAAHACCYAQAABwAgmQEAAC4AIAMWAACdAgAgkwEAAJ4CACCZAQAALgAgAAAABRYAAJgCACAXAACbAgAgkwEAAJkCACCUAQAAmgIAIJkBAAAuACADFgAAmAIAIJMBAACZAgAgmQEAAC4AIAAAAAsWAADvAQAwFwAA9AEAMJMBAADwAQAwlAEAAPEBADCVAQAA8gEAIJYBAADzAQAwlwEAAPMBADCYAQAA8wEAMJkBAADzAQAwmgEAAPUBADCbAQAA9gEAMAsWAADjAQAwFwAA6AEAMJMBAADkAQAwlAEAAOUBADCVAQAA5gEAIJYBAADnAQAwlwEAAOcBADCYAQAA5wEAMJkBAADnAQAwmgEAAOkBADCbAQAA6gEAMAsWAADXAQAwFwAA3AEAMJMBAADYAQAwlAEAANkBADCVAQAA2gEAIJYBAADbAQAwlwEAANsBADCYAQAA2wEAMJkBAADbAQAwmgEAAN0BADCbAQAA3gEAMAoDAADFAQAgZQEAAAABZgEAAAABaAIAAAABaQEAAAABawAAAGsCbAEAAAABbYAAAAABbkAAAAABb0AAAAABAgAAAAUAIBYAAOIBACADAAAABQAgFgAA4gEAIBcAAOEBACABDwAAlwIAMA8DAAC3AQAgBAAAsAEAIGIAALMBADBjAAADABBkAACzAQAwZQEAAAABZgEArQEAIWcBAKQBACFoAgC0AQAhaQEArQEAIWsAALUBayJsAQCkAQAhbQAAtgEAIG5AAKUBACFvQAClAQAhAgAAAAUAIA8AAOEBACACAAAA3wEAIA8AAOABACANYgAA3gEAMGMAAN8BABBkAADeAQAwZQEArQEAIWYBAK0BACFnAQCkAQAhaAIAtAEAIWkBAK0BACFrAAC1AWsibAEApAEAIW0AALYBACBuQAClAQAhb0AApQEAIQ1iAADeAQAwYwAA3wEAEGQAAN4BADBlAQCtAQAhZgEArQEAIWcBAKQBACFoAgC0AQAhaQEArQEAIWsAALUBayJsAQCkAQAhbQAAtgEAIG5AAKUBACFvQAClAQAhCWUBAL4BACFmAQC-AQAhaAIAvwEAIWkBAL4BACFrAADAAWsibAEAwQEAIW2AAAAAAW5AAMIBACFvQADCAQAhCgMAAMMBACBlAQC-AQAhZgEAvgEAIWgCAL8BACFpAQC-AQAhawAAwAFrImwBAMEBACFtgAAAAAFuQADCAQAhb0AAwgEAIQoDAADFAQAgZQEAAAABZgEAAAABaAIAAAABaQEAAAABawAAAGsCbAEAAAABbYAAAAABbkAAAAABb0AAAAABB2UBAAAAAWsBAAAAAW5AAAAAAW9AAAAAAYEBAQAAAAGCAQEAAAABgwFAAAAAAQIAAAAPACAWAADuAQAgAwAAAA8AIBYAAO4BACAXAADtAQAgAQ8AAJYCADAMBAAAsAEAIGIAAK8BADBjAAANABBkAACvAQAwZQEAAAABZwEApAEAIWsBAK0BACFuQAClAQAhb0AApQEAIYEBAQAAAAGCAQEApAEAIYMBQAClAQAhAgAAAA8AIA8AAO0BACACAAAA6wEAIA8AAOwBACALYgAA6gEAMGMAAOsBABBkAADqAQAwZQEArQEAIWcBAKQBACFrAQCtAQAhbkAApQEAIW9AAKUBACGBAQEArQEAIYIBAQCkAQAhgwFAAKUBACELYgAA6gEAMGMAAOsBABBkAADqAQAwZQEArQEAIWcBAKQBACFrAQCtAQAhbkAApQEAIW9AAKUBACGBAQEArQEAIYIBAQCkAQAhgwFAAKUBACEHZQEAvgEAIWsBAL4BACFuQADCAQAhb0AAwgEAIYEBAQC-AQAhggEBAMEBACGDAUAAwgEAIQdlAQC-AQAhawEAvgEAIW5AAMIBACFvQADCAQAhgQEBAL4BACGCAQEAwQEAIYMBQADCAQAhB2UBAAAAAWsBAAAAAW5AAAAAAW9AAAAAAYEBAQAAAAGCAQEAAAABgwFAAAAAAQRlAQAAAAFuQAAAAAGBAQEAAAABgwFAAAAAAQIAAAALACAWAAD6AQAgAwAAAAsAIBYAAPoBACAXAAD5AQAgAQ8AAJUCADAJBAAAsgEAIGIAALEBADBjAAAJABBkAACxAQAwZQEAAAABZwEArQEAIW5AAKUBACGBAQEAAAABgwFAAKUBACECAAAACwAgDwAA-QEAIAIAAAD3AQAgDwAA-AEAIAhiAAD2AQAwYwAA9wEAEGQAAPYBADBlAQCtAQAhZwEArQEAIW5AAKUBACGBAQEArQEAIYMBQAClAQAhCGIAAPYBADBjAAD3AQAQZAAA9gEAMGUBAK0BACFnAQCtAQAhbkAApQEAIYEBAQCtAQAhgwFAAKUBACEEZQEAvgEAIW5AAMIBACGBAQEAvgEAIYMBQADCAQAhBGUBAL4BACFuQADCAQAhgQEBAL4BACGDAUAAwgEAIQRlAQAAAAFuQAAAAAGBAQEAAAABgwFAAAAAAQQWAADvAQAwkwEAAPABADCVAQAA8gEAIJkBAADzAQAwBBYAAOMBADCTAQAA5AEAMJUBAADmAQAgmQEAAOcBADAEFgAA1wEAMJMBAADYAQAwlQEAANoBACCZAQAA2wEAMAAAAAAAAAAABZYBCAAAAAGcAQgAAAABnQEIAAAAAZ4BCAAAAAGfAQgAAAABCxYAAIgCADAXAACMAgAwkwEAAIkCADCUAQAAigIAMJUBAACLAgAglgEAANsBADCXAQAA2wEAMJgBAADbAQAwmQEAANsBADCaAQAAjQIAMJsBAADeAQAwCgQAAMYBACBlAQAAAAFnAQAAAAFoAgAAAAFpAQAAAAFrAAAAawJsAQAAAAFtgAAAAAFuQAAAAAFvQAAAAAECAAAABQAgFgAAkAIAIAMAAAAFACAWAACQAgAgFwAAjwIAIAEPAACUAgAwAgAAAAUAIA8AAI8CACACAAAA3wEAIA8AAI4CACAJZQEAvgEAIWcBAMEBACFoAgC_AQAhaQEAvgEAIWsAAMABayJsAQDBAQAhbYAAAAABbkAAwgEAIW9AAMIBACEKBAAAxAEAIGUBAL4BACFnAQDBAQAhaAIAvwEAIWkBAL4BACFrAADAAWsibAEAwQEAIW2AAAAAAW5AAMIBACFvQADCAQAhCgQAAMYBACBlAQAAAAFnAQAAAAFoAgAAAAFpAQAAAAFrAAAAawJsAQAAAAFtgAAAAAFuQAAAAAFvQAAAAAEEFgAAiAIAMJMBAACJAgAwlQEAAIsCACCZAQAA2wEAMAgFAAD-AQAgBgAA_wEAIAcAAIACACCFAQAAuAEAIIYBAAC4AQAghwEAALgBACCIAQAAuAEAIIkBAAC4AQAgAQkAAIACACAJZQEAAAABZwEAAAABaAIAAAABaQEAAAABawAAAGsCbAEAAAABbYAAAAABbkAAAAABb0AAAAABBGUBAAAAAW5AAAAAAYEBAQAAAAGDAUAAAAABB2UBAAAAAWsBAAAAAW5AAAAAAW9AAAAAAYEBAQAAAAGCAQEAAAABgwFAAAAAAQllAQAAAAFmAQAAAAFoAgAAAAFpAQAAAAFrAAAAawJsAQAAAAFtgAAAAAFuQAAAAAFvQAAAAAELBgAA_AEAIAcAAP0BACBlAQAAAAFuQAAAAAFvQAAAAAGEAQEAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAECAAAALgAgFgAAmAIAIAMAAAAHACAWAACYAgAgFwAAnAIAIA0AAAAHACAGAADVAQAgBwAA1gEAIA8AAJwCACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBgAA1QEAIAcAANYBACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBQAA-wEAIAcAAP0BACBlAQAAAAFuQAAAAAFvQAAAAAGEAQEAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAECAAAALgAgFgAAnQIAIAMAAAAHACAWAACdAgAgFwAAoQIAIA0AAAAHACAFAADUAQAgBwAA1gEAIA8AAKECACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBQAA1AEAIAcAANYBACBlAQC-AQAhbkAAwgEAIW9AAMIBACGEAQEAvgEAIYUBAQDBAQAhhgEBAMEBACGHAQEAwQEAIYgBAQDBAQAhiQEBAMEBACELBQAA-wEAIAYAAPwBACBlAQAAAAFuQAAAAAFvQAAAAAGEAQEAAAABhQEBAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAECAAAALgAgFgAAogIAIAdlAQAAAAFuQAAAAAFvQAAAAAGNAQEAAAABjgEBAAAAAY8BCAAAAAGQAQgAAAABAgAAAAEAIBYAAKQCACADAAAABwAgFgAAogIAIBcAAKgCACANAAAABwAgBQAA1AEAIAYAANUBACAPAACoAgAgZQEAvgEAIW5AAMIBACFvQADCAQAhhAEBAL4BACGFAQEAwQEAIYYBAQDBAQAhhwEBAMEBACGIAQEAwQEAIYkBAQDBAQAhCwUAANQBACAGAADVAQAgZQEAvgEAIW5AAMIBACFvQADCAQAhhAEBAL4BACGFAQEAwQEAIYYBAQDBAQAhhwEBAMEBACGIAQEAwQEAIYkBAQDBAQAhAwAAABgAIBYAAKQCACAXAACrAgAgCQAAABgAIA8AAKsCACBlAQC-AQAhbkAAwgEAIW9AAMIBACGNAQEAvgEAIY4BAQC-AQAhjwEIAIYCACGQAQgAhgIAIQdlAQC-AQAhbkAAwgEAIW9AAMIBACGNAQEAvgEAIY4BAQC-AQAhjwEIAIYCACGQAQgAhgIAIQIIAAcJBgICAwABBAgDBAUMBAYQBQcSAggABgEEAAMBBBEDAwUTAAYUAAcVAAEJFgAAAAAFCAAMHAANHQAOHgAPHwAQAAAAAAAFCAAMHAANHQAOHgAPHwAQAAADCAAVHgAWHwAXAAAAAwgAFR4AFh8AFwEEAAMBBAADAwgAHB4AHR8AHgAAAAMIABweAB0fAB4BBGYDAQRsAwMIACMeACQfACUAAAADCAAjHgAkHwAlAgMAAQR-AwIDAAEEhAEDBQgAKhwAKx0ALB4ALR8ALgAAAAAABQgAKhwAKx0ALB4ALR8ALgoCAQsXAQwaAQ0bAQ4cARAeAREgCBIhCRMjARQlCBUmChgnARkoARopCCAsCyEtESIvAyMwAyQyAyUzAyY0Ayc2Ayg4CCk5Eio7Ays9CCw-Ey0_Ay5AAy9BCDBEFDFFGDJGBDNHBDRIBDVJBDZKBDdMBDhOCDlPGTpRBDtTCDxUGj1VBD5WBD9XCEBaG0FbH0JcBUNdBUReBUVfBUZgBUdiBUhkCEllIEpoBUtqCExrIU1tBU5uBU9vCFByIlFzJlJ0AlN1AlR2AlV3AlZ4Ald6Alh8CFl9J1qAAQJbggEIXIMBKF2FAQJehgECX4cBCGCKASlhiwEv" } config.compilerWasm = { getRuntime: async () => require('./query_compiler_fast_bg.js'), diff --git a/src/generated/prisma/package.json b/src/generated/prisma/package.json index a215de3..6b13b6d 100644 --- a/src/generated/prisma/package.json +++ b/src/generated/prisma/package.json @@ -1,5 +1,5 @@ { - "name": "prisma-client-359590a92aedb32557346cd24ba7dd77e7dd4a806bf36f6641715b1b22de87e3", + "name": "prisma-client-37c1b83274036b18947b6108de6a4d4254d7d73ddef2fb10ea1aa825e682d461", "main": "index.js", "types": "index.d.ts", "browser": "default.js", diff --git a/src/generated/prisma/schema.prisma b/src/generated/prisma/schema.prisma index 6745daa..1ae98bf 100644 --- a/src/generated/prisma/schema.prisma +++ b/src/generated/prisma/schema.prisma @@ -28,16 +28,39 @@ model Place { } model User { - id String @id @default(cuid()) - telegramId String @unique + id String @id @default(cuid()) + telegramId String @unique username String? firstName String? lastName String? photoUrl String? languageCode String? + sessions UserSession[] + loginRequests TelegramLoginRequest[] voiceExperiences VoiceExperience[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model UserSession { + id String @id @default(cuid()) + tokenHash String @unique + userId String + user User @relation(fields: [userId], references: [id]) + expiresAt DateTime + createdAt DateTime @default(now()) +} + +model TelegramLoginRequest { + id String @id @default(cuid()) + tokenHash String @unique + status String @default("PENDING") + sessionToken String? + userId String? + user User? @relation(fields: [userId], references: [id]) + expiresAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt } model VoiceExperience { diff --git a/src/graphql/schema.ts b/src/graphql/schema.ts index cba376a..a1972f6 100644 --- a/src/graphql/schema.ts +++ b/src/graphql/schema.ts @@ -5,12 +5,17 @@ import { requireTelegramUser, type TelegramLoginData, } from '../auth/telegram.js'; +import { + createTelegramBotLogin, + getTelegramBotLoginStatus, +} from '../auth/telegram-bot-login.js'; import { listPlaces, listVoiceExperiences } from './places.js'; import { createVoiceExperience } from './voice-experiences.js'; export type GraphqlContext = { telegramInitData?: string; telegramLoginData?: string; + mapflowSessionToken?: string; }; export const schema = /* GraphQL */ ` @@ -83,13 +88,28 @@ export const schema = /* GraphQL */ ` user: User! } + type TelegramBotLoginPayload { + token: String! + botUrl: String! + expiresAt: String! + } + + type TelegramBotLoginStatus { + status: String! + sessionToken: String + user: User + } + type Query { health: String! + me: User! + telegramBotLoginStatus(token: String!): TelegramBotLoginStatus! places: [Place!]! voiceExperiences: [VoiceExperience!]! } type Mutation { + startTelegramBotLogin: TelegramBotLoginPayload! authenticateTelegram(input: AuthenticateTelegramInput!): AuthPayload! authenticateTelegramLogin(input: AuthenticateTelegramLoginInput!): AuthPayload! createVoiceExperience(input: CreateVoiceExperienceInput!): VoiceExperience! @@ -100,6 +120,12 @@ export const resolvers = { JSON: GraphQLJSONObject, Query: { health: () => 'ok', + me: async (_: unknown, __: unknown, context: unknown) => { + const graphqlContext = context as GraphqlContext; + return requireTelegramUser(graphqlContext); + }, + telegramBotLoginStatus: async (_: unknown, args: { token: string }) => + getTelegramBotLoginStatus(args.token), places: async (_: unknown, __: unknown, context: unknown) => { const graphqlContext = context as GraphqlContext; await requireTelegramUser(graphqlContext); @@ -112,6 +138,7 @@ export const resolvers = { }, }, Mutation: { + startTelegramBotLogin: async () => createTelegramBotLogin(), authenticateTelegram: async ( _: unknown, args: { input: { initData: string } }, diff --git a/src/server.ts b/src/server.ts index 9e14125..9305dac 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,6 +4,7 @@ import mercurius from 'mercurius'; import { config } from './config.js'; import { prisma } from './prisma.js'; import { resolvers, schema } from './graphql/schema.js'; +import { handleTelegramBotWebhook } from './auth/telegram-bot-login.js'; const app = Fastify({ logger: true }); @@ -14,15 +15,24 @@ app.register(mercurius, { context: async (request) => { const initDataHeader = request.headers['x-telegram-init-data']; const loginDataHeader = request.headers['x-telegram-login-data']; + const sessionTokenHeader = request.headers['x-mapflow-session-token']; return { telegramInitData: Array.isArray(initDataHeader) ? initDataHeader[0] : initDataHeader, telegramLoginData: Array.isArray(loginDataHeader) ? loginDataHeader[0] : loginDataHeader, + mapflowSessionToken: Array.isArray(sessionTokenHeader) ? sessionTokenHeader[0] : sessionTokenHeader, }; }, }); app.get('/health', async () => ({ ok: true })); +app.post('/telegram/webhook', async (request, reply) => { + const secretHeader = request.headers['x-telegram-bot-api-secret-token']; + const secretToken = Array.isArray(secretHeader) ? secretHeader[0] : secretHeader; + await handleTelegramBotWebhook(request.body as never, secretToken); + return reply.send({ ok: true }); +}); + app.addHook('onClose', async () => { await prisma.$disconnect(); });