{"version":3,"file":"parser-Br9VrHoL.mjs","names":["$Class.getPrismaClientClass","config","Config"],"sources":["../src/lib/config.ts","../src/prisma/prisma/internal/class.ts","../src/prisma/prisma/internal/prismaNamespace.ts","../src/prisma/prisma/client.ts","../src/lib/db.ts","../src/lib/emoji.ts","../src/lib/parser.ts"],"sourcesContent":["import { init } from '@sentry/node';\nimport { readFileSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\ninit({\n    dsn:\n        process.env.SENTRY_DSN ||\n        'https://5e4630d58e5f4c778ce22140c53b3684@glitch.sebbo.net/9',\n});\n\nlet dir = dirname(fileURLToPath(import.meta.url));\nif (dir.endsWith('/dist')) {\n    dir = resolve(dir, '..', 'src');\n} else {\n    dir = resolve(dir, '..');\n}\n\nfunction src(path?: string) {\n    return resolve(dir, path || '');\n}\n\nlet version: string | undefined;\ntry {\n    const pkg = JSON.parse(readFileSync(src('../package.json'), 'utf8'));\n    version = pkg.version;\n} catch (error) {\n    console.log('Failed getting tgtg-ical version:');\n    console.error(error);\n}\n\nexport default {\n    baseMail: process.env.BASE_MAIL || '@tgtg-ical.sebbo.net',\n    baseUrl: process.env.BASE_URL || 'https://tgtg-ical.sebbo.net',\n    src,\n    version,\n};\n","\n/* !!! This is code generated by Prisma. Do not edit directly. !!! */\n/* eslint-disable */\n// biome-ignore-all lint: generated file\n// @ts-nocheck \n/*\n * WARNING: This is an internal file that is subject to change!\n *\n * 🛑 Under no circumstances should you import this file directly! 🛑\n *\n * Please import the `PrismaClient` class from the `client.ts` file instead.\n */\n\nimport * as runtime from \"@prisma/client/runtime/client\"\nimport type * as Prisma from \"./prismaNamespace.js\"\n\n\nconst config: runtime.GetPrismaClientConfig = {\n  \"previewFeatures\": [],\n  \"clientVersion\": \"7.8.0\",\n  \"engineVersion\": \"3c6e192761c0362d496ed980de936e2f3cebcd3a\",\n  \"activeProvider\": \"mysql\",\n  \"inlineSchema\": \"// This is your Prisma schema file,\\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\\n\\ngenerator client {\\n  provider            = \\\"prisma-client\\\"\\n  output              = \\\"./prisma\\\"\\n  importFileExtension = \\\"js\\\"\\n}\\n\\ndatasource db {\\n  provider = \\\"mysql\\\"\\n}\\n\\nmodel User {\\n  id         String   @id @default(uuid())\\n  prefix     String   @unique\\n  createdAt  DateTime @default(now())\\n  lastSeenAt DateTime @default(now())\\n  event      Event[]\\n}\\n\\nmodel Event {\\n  id         String    @id @default(uuid())\\n  orderId    String    @unique\\n  from       DateTime\\n  to         DateTime\\n  amount     Int\\n  price      Int\\n  user       User      @relation(fields: [userId], references: [id])\\n  userId     String\\n  location   Location  @relation(fields: [locationId], references: [id])\\n  locationId String\\n  createdAt  DateTime  @default(now())\\n  orderedAt  DateTime\\n  invoicedAt DateTime?\\n  canceledAt DateTime?\\n}\\n\\nmodel Location {\\n  id        String   @id @default(uuid())\\n  name      String\\n  address   String\\n  latitude  Float?\\n  longitude Float?\\n  emoji     String?  @db.VarChar(16)\\n  createdAt DateTime @default(now())\\n  event     Event[]\\n}\\n\\nmodel Mail {\\n  id        String    @id @default(uuid())\\n  raw       String    @db.MediumText\\n  error     String?   @db.MediumText\\n  errorId   String?\\n  version   String?\\n  createdAt DateTime  @default(now())\\n  erroredAt DateTime?\\n}\\n\",\n  \"runtimeDataModel\": {\n    \"models\": {},\n    \"enums\": {},\n    \"types\": {}\n  },\n  \"parameterizationSchema\": {\n    \"strings\": [],\n    \"graph\": \"\"\n  }\n}\n\nconfig.runtimeDataModel = JSON.parse(\"{\\\"models\\\":{\\\"User\\\":{\\\"fields\\\":[{\\\"name\\\":\\\"id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"prefix\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"createdAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"lastSeenAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"event\\\",\\\"kind\\\":\\\"object\\\",\\\"type\\\":\\\"Event\\\",\\\"relationName\\\":\\\"EventToUser\\\"}],\\\"dbName\\\":null},\\\"Event\\\":{\\\"fields\\\":[{\\\"name\\\":\\\"id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"orderId\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"from\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"to\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"amount\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"Int\\\"},{\\\"name\\\":\\\"price\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"Int\\\"},{\\\"name\\\":\\\"user\\\",\\\"kind\\\":\\\"object\\\",\\\"type\\\":\\\"User\\\",\\\"relationName\\\":\\\"EventToUser\\\"},{\\\"name\\\":\\\"userId\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"location\\\",\\\"kind\\\":\\\"object\\\",\\\"type\\\":\\\"Location\\\",\\\"relationName\\\":\\\"EventToLocation\\\"},{\\\"name\\\":\\\"locationId\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"createdAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"orderedAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"invoicedAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"canceledAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"}],\\\"dbName\\\":null},\\\"Location\\\":{\\\"fields\\\":[{\\\"name\\\":\\\"id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"address\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"latitude\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"Float\\\"},{\\\"name\\\":\\\"longitude\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"Float\\\"},{\\\"name\\\":\\\"emoji\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"createdAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"event\\\",\\\"kind\\\":\\\"object\\\",\\\"type\\\":\\\"Event\\\",\\\"relationName\\\":\\\"EventToLocation\\\"}],\\\"dbName\\\":null},\\\"Mail\\\":{\\\"fields\\\":[{\\\"name\\\":\\\"id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"raw\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"error\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"errorId\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"version\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"String\\\"},{\\\"name\\\":\\\"createdAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"},{\\\"name\\\":\\\"erroredAt\\\",\\\"kind\\\":\\\"scalar\\\",\\\"type\\\":\\\"DateTime\\\"}],\\\"dbName\\\":null}},\\\"enums\\\":{},\\\"types\\\":{}}\")\nconfig.parameterizationSchema = {\n  strings: JSON.parse(\"[\\\"where\\\",\\\"orderBy\\\",\\\"cursor\\\",\\\"user\\\",\\\"event\\\",\\\"_count\\\",\\\"location\\\",\\\"User.findUnique\\\",\\\"User.findUniqueOrThrow\\\",\\\"User.findFirst\\\",\\\"User.findFirstOrThrow\\\",\\\"User.findMany\\\",\\\"data\\\",\\\"User.createOne\\\",\\\"User.createMany\\\",\\\"User.updateOne\\\",\\\"User.updateMany\\\",\\\"create\\\",\\\"update\\\",\\\"User.upsertOne\\\",\\\"User.deleteOne\\\",\\\"User.deleteMany\\\",\\\"having\\\",\\\"_min\\\",\\\"_max\\\",\\\"User.groupBy\\\",\\\"User.aggregate\\\",\\\"Event.findUnique\\\",\\\"Event.findUniqueOrThrow\\\",\\\"Event.findFirst\\\",\\\"Event.findFirstOrThrow\\\",\\\"Event.findMany\\\",\\\"Event.createOne\\\",\\\"Event.createMany\\\",\\\"Event.updateOne\\\",\\\"Event.updateMany\\\",\\\"Event.upsertOne\\\",\\\"Event.deleteOne\\\",\\\"Event.deleteMany\\\",\\\"_avg\\\",\\\"_sum\\\",\\\"Event.groupBy\\\",\\\"Event.aggregate\\\",\\\"Location.findUnique\\\",\\\"Location.findUniqueOrThrow\\\",\\\"Location.findFirst\\\",\\\"Location.findFirstOrThrow\\\",\\\"Location.findMany\\\",\\\"Location.createOne\\\",\\\"Location.createMany\\\",\\\"Location.updateOne\\\",\\\"Location.updateMany\\\",\\\"Location.upsertOne\\\",\\\"Location.deleteOne\\\",\\\"Location.deleteMany\\\",\\\"Location.groupBy\\\",\\\"Location.aggregate\\\",\\\"Mail.findUnique\\\",\\\"Mail.findUniqueOrThrow\\\",\\\"Mail.findFirst\\\",\\\"Mail.findFirstOrThrow\\\",\\\"Mail.findMany\\\",\\\"Mail.createOne\\\",\\\"Mail.createMany\\\",\\\"Mail.updateOne\\\",\\\"Mail.updateMany\\\",\\\"Mail.upsertOne\\\",\\\"Mail.deleteOne\\\",\\\"Mail.deleteMany\\\",\\\"Mail.groupBy\\\",\\\"Mail.aggregate\\\",\\\"AND\\\",\\\"OR\\\",\\\"NOT\\\",\\\"id\\\",\\\"raw\\\",\\\"error\\\",\\\"errorId\\\",\\\"version\\\",\\\"createdAt\\\",\\\"erroredAt\\\",\\\"equals\\\",\\\"in\\\",\\\"notIn\\\",\\\"lt\\\",\\\"lte\\\",\\\"gt\\\",\\\"gte\\\",\\\"not\\\",\\\"contains\\\",\\\"startsWith\\\",\\\"endsWith\\\",\\\"search\\\",\\\"name\\\",\\\"address\\\",\\\"latitude\\\",\\\"longitude\\\",\\\"emoji\\\",\\\"every\\\",\\\"some\\\",\\\"none\\\",\\\"orderId\\\",\\\"from\\\",\\\"to\\\",\\\"amount\\\",\\\"price\\\",\\\"userId\\\",\\\"locationId\\\",\\\"orderedAt\\\",\\\"invoicedAt\\\",\\\"canceledAt\\\",\\\"prefix\\\",\\\"lastSeenAt\\\",\\\"is\\\",\\\"isNot\\\",\\\"_relevance\\\",\\\"connectOrCreate\\\",\\\"upsert\\\",\\\"createMany\\\",\\\"set\\\",\\\"disconnect\\\",\\\"delete\\\",\\\"connect\\\",\\\"updateMany\\\",\\\"deleteMany\\\",\\\"increment\\\",\\\"decrement\\\",\\\"multiply\\\",\\\"divide\\\"]\"),\n  graph: \"zAEfOAgEAAB7ACBHAACBAQAwSAAACwAQSQAAgQEAMEoBAAAAAU9AAHMAIW8BAAAAAXBAAHMAIQEAAAABACARAwAAhAEAIAYAAIUBACBHAACCAQAwSAAAAwAQSQAAggEAMEoBAHEAIU9AAHMAIWUBAHEAIWZAAHMAIWdAAHMAIWgCAIMBACFpAgCDAQAhagEAcQAhawEAcQAhbEAAcwAhbUAAdAAhbkAAdAAhBQMAAL4BACAGAAC_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_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_ACAoAABqACBRAgAAAAFSAgAAAARTAgAAAARUAgAAAAFVAgAAAAFWAgAAAAFXAgAAAAFYAgB-ACENBQAAagAgFwAAagAgGAAAagAgJwAAfwAgKAAAagAgUQIAAAABUgIAAAAEUwIAAAAEVAIAAAABVQIAAAABVgIAAAABVwIAAAABWAIAfgAhCFEIAAAAAVIIAAAABFMIAAAABFQIAAAAAVUIAAAAAVYIAAAAAVcIAAAAAVgIAH8AIQdHAACAAQAwSAAAHAAQSQAAgAEAMEoBAGIAIU9AAGQAIW8BAGIAIXBAAGQAIQgEAAB7ACBHAACBAQAwSAAACwAQSQAAgQEAMEoBAHEAIU9AAHMAIW8BAHEAIXBAAHMAIREDAACEAQAgBgAAhQEAIEcAAIIBADBIAAADABBJAACCAQAwSgEAcQAhT0AAcwAhZQEAcQAhZkAAcwAhZ0AAcwAhaAIAgwEAIWkCAIMBACFqAQBxACFrAQBxACFsQABzACFtQAB0ACFuQAB0ACEIUQIAAAABUgIAAAAEUwIAAAAEVAIAAAABVQIAAAABVgIAAAABVwIAAAABWAIAagAhCgQAAHsAIEcAAIEBADBIAAALABBJAACBAQAwSgEAcQAhT0AAcwAhbwEAcQAhcEAAcwAhcQAACwAgcgAACwAgDQQAAHsAIEcAAHkAMEgAADYAEEkAAHkAMEoBAHEAIU9AAHMAIV0BAHEAIV4BAHEAIV8IAHoAIWAIAHoAIWEBAHIAIXEAADYAIHIAADYAIAAAAAABdwEAAAABAXcBAAAAAQF3QAAAAAEBd0AAAAABAVwBAAAAAQAAAAAABXcIAAAAAX0IAAAAAX4IAAAAAX8IAAAAAYABCAAAAAELEQAAlgEAMBIAAJsBADB0AACXAQAwdQAAmAEAMHYAAJkBACB3AACaAQAweAAAmgEAMHkAAJoBADB6AACaAQAwewAAnAEAMHwAAJ0BADAMAwAApAEAIEoBAAAAAU9AAAAAAWUBAAAAAWZAAAAAAWdAAAAAAWgCAAAAAWkCAAAAAWoBAAAAAWxAAAAAAW1AAAAAAW5AAAAAAQIAAAAFACARAACjAQAgAwAAAAUAIBEAAKMBACASAAChAQAgAQwAAMwBADARAwAAhAEAIAYAAIUBACBHAACCAQAwSAAAAwAQSQAAggEAMEoBAAAAAU9AAHMAIWUBAAAAAWZAAHMAIWdAAHMAIWgCAIMBACFpAgCDAQAhagEAcQAhawEAcQAhbEAAcwAhbUAAdAAhbkAAdAAhAgAAAAUAIAwAAKEBACACAAAAngEAIAwAAJ8BACAPRwAAnQEAMEgAAJ4BABBJAACdAQAwSgEAcQAhT0AAcwAhZQEAcQAhZkAAcwAhZ0AAcwAhaAIAgwEAIWkCAIMBACFqAQBxACFrAQBxACFsQABzACFtQAB0ACFuQAB0ACEPRwAAnQEAMEgAAJ4BABBJAACdAQAwSgEAcQAhT0AAcwAhZQEAcQAhZkAAcwAhZ0AAcwAhaAIAgwEAIWkCAIMBACFqAQBxACFrAQBxACFsQABzACFtQAB0ACFuQAB0ACELSgEAigEAIU9AAIwBACFlAQCKAQAhZkAAjAEAIWdAAIwBACFoAgCgAQAhaQIAoAEAIWoBAIoBACFsQACMAQAhbUAAjQEAIW5AAI0BACEFdwIAAAABfQIAAAABfgIAAAABfwIAAAABgAECAAAAAQwDAACiAQAgSgEAigEAIU9AAIwBACFlAQCKAQAhZkAAjAEAIWdAAIwBACFoAgCgAQAhaQIAoAEAIWoBAIoBACFsQACMAQAhbUAAjQEAIW5AAI0BACEFEQAAxwEAIBIAAMoBACB0AADIAQAgdQAAyQEAIHoAAAEAIAwDAACkAQAgSgEAAAABT0AAAAABZQEAAAABZkAAAAABZ0AAAAABaAIAAAABaQIAAAABagEAAAABbEAAAAABbUAAAAABbkAAAAABAxEAAMcBACB0AADIAQAgegAAAQAgBBEAAJYBADB0AACXAQAwdgAAmQEAIHoAAJoBADAAAVwBAAAAAQAAAAAABREAAMIBACASAADFAQAgdAAAwwEAIHUAAMQBACB6AAAzACADEQAAwgEAIHQAAMMBACB6AAAzACAAAAALEQAAswEAMBIAALcBADB0AAC0AQAwdQAAtQEAMHYAALYBACB3AACaAQAweAAAmgEAMHkAAJoBADB6AACaAQAwewAAuAEAMHwAAJ0BADAMBgAArgEAIEoBAAAAAU9AAAAAAWUBAAAAAWZAAAAAAWdAAAAAAWgCAAAAAWkCAAAAAWsBAAAAAWxAAAAAAW1AAAAAAW5AAAAAAQIAAAAFACARAAC7AQAgAwAAAAUAIBEAALsBACASAAC6AQAgAQwAAMEBADACAAAABQAgDAAAugEAIAIAAACeAQAgDAAAuQEAIAtKAQCKAQAhT0AAjAEAIWUBAIoBACFmQACMAQAhZ0AAjAEAIWgCAKABACFpAgCgAQAhawEAigEAIWxAAIwBACFtQACNAQAhbkAAjQEAIQwGAACtAQAgSgEAigEAIU9AAIwBACFlAQCKAQAhZkAAjAEAIWdAAIwBACFoAgCgAQAhaQIAoAEAIWsBAIoBACFsQACMAQAhbUAAjQEAIW5AAI0BACEMBgAArgEAIEoBAAAAAU9AAAAAAWUBAAAAAWZAAAAAAWdAAAAAAWgCAAAAAWkCAAAAAWsBAAAAAWxAAAAAAW1AAAAAAW5AAAAAAQQRAACzAQAwdAAAtAEAMHYAALYBACB6AACaAQAwAVwBAAAAAQIEAACmAQAgcwAAvQEAIAUEAACmAQAgXwAAhgEAIGAAAIYBACBhAACGAQAgcwAApwEAIAFcAQAAAAELSgEAAAABT0AAAAABZQEAAAABZkAAAAABZ0AAAAABaAIAAAABaQIAAAABawEAAAABbEAAAAABbUAAAAABbkAAAAABB0oBAAAAAU9AAAAAAV0BAAAAAV4BAAAAAV8IAAAAAWAIAAAAAWEBAAAAAQIAAAAzACARAADCAQAgAwAAADYAIBEAAMIBACASAADGAQAgCQAAADYAIAwAAMYBACBKAQCKAQAhT0AAjAEAIV0BAIoBACFeAQCKAQAhXwgAlAEAIWAIAJQBACFhAQCLAQAhB0oBAIoBACFPQACMAQAhXQEAigEAIV4BAIoBACFfCACUAQAhYAgAlAEAIWEBAIsBACEESgEAAAABT0AAAAABbwEAAAABcEAAAAABAgAAAAEAIBEAAMcBACADAAAACwAgEQAAxwEAIBIAAMsBACAGAAAACwAgDAAAywEAIEoBAIoBACFPQACMAQAhbwEAigEAIXBAAIwBACEESgEAigEAIU9AAIwBACFvAQCKAQAhcEAAjAEAIQtKAQAAAAFPQAAAAAFlAQAAAAFmQAAAAAFnQAAAAAFoAgAAAAFpAgAAAAFqAQAAAAFsQAAAAAFtQAAAAAFuQAAAAAECBAYCBQAFAgMAAQYAAwIEBwIFAAQBBAgAAQQJAAADBQAIFwAJGAAKAAAAAwUACBcACRgACgUFAA0XABAYABEnAA4oAA8AAAAAAAUFAA0XABAYABEnAA4oAA8FBQAUFwAXGAAYJwAVKAAWAAAAAAAFBQAUFwAXGAAYJwAVKAAWAAMFABwXAB0YAB4AAAADBQAcFwAdGAAeBwIBCAoBCQ0BCg4BCw8BDREBDhMGDxUBEBcGExgBFBkBFRoGGR0HGh4LGx8CHCACHSECHiICHyMCICUCIScGIikCIysGJCwCJS0CJi4GKTEMKjISKzQDLDUDLTgDLjkDLzoDMDwDMT4GMkADM0IGNEMDNUQDNkUGN0gTOEkZOUsaOkwaO08aPFAaPVEaPlMaP1UGQFcaQVkGQloaQ1saRFwGRV8bRmAf\"\n}\n\nasync function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {\n  const { Buffer } = await import('node:buffer')\n  const wasmArray = Buffer.from(wasmBase64, 'base64')\n  return new WebAssembly.Module(wasmArray)\n}\n\nconfig.compilerWasm = {\n  getRuntime: async () => await import(\"@prisma/client/runtime/query_compiler_fast_bg.mysql.mjs\"),\n\n  getQueryCompilerWasmModule: async () => {\n    const { wasm } = await import(\"@prisma/client/runtime/query_compiler_fast_bg.mysql.wasm-base64.mjs\")\n    return await decodeBase64AsWasm(wasm)\n  },\n\n  importName: \"./query_compiler_fast_bg.js\"\n}\n\n\n\nexport type LogOptions<ClientOptions extends Prisma.PrismaClientOptions> =\n  'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<ClientOptions['log']> : never : never\n\nexport interface PrismaClientConstructor {\n    /**\n   * ## Prisma Client\n   * \n   * Type-safe database client for TypeScript\n   * @example\n   * ```\n   * const prisma = new PrismaClient({\n   *   adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL })\n   * })\n   * // Fetch zero or more Users\n   * const users = await prisma.user.findMany()\n   * ```\n   * \n   * Read more in our [docs](https://pris.ly/d/client).\n   */\n\n  new <\n    Options extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,\n    LogOpts extends LogOptions<Options> = LogOptions<Options>,\n    OmitOpts extends Prisma.PrismaClientOptions['omit'] = Options extends { omit: infer U } ? U : Prisma.PrismaClientOptions['omit'],\n    ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs\n  >(options: Prisma.Subset<Options, Prisma.PrismaClientOptions> ): PrismaClient<LogOpts, OmitOpts, ExtArgs>\n}\n\n/**\n * ## Prisma Client\n * \n * Type-safe database client for TypeScript\n * @example\n * ```\n * const prisma = new PrismaClient({\n *   adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL })\n * })\n * // Fetch zero or more Users\n * const users = await prisma.user.findMany()\n * ```\n * \n * Read more in our [docs](https://pris.ly/d/client).\n */\n\nexport interface PrismaClient<\n  in LogOpts extends Prisma.LogLevel = never,\n  in out OmitOpts extends Prisma.PrismaClientOptions['omit'] = undefined,\n  in out ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs\n> {\n  [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }\n\n  $on<V extends LogOpts>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient;\n\n  /**\n   * Connect with the database\n   */\n  $connect(): runtime.Types.Utils.JsPromise<void>;\n\n  /**\n   * Disconnect from the database\n   */\n  $disconnect(): runtime.Types.Utils.JsPromise<void>;\n\n/**\n   * Executes a prepared raw query and returns the number of affected rows.\n   * @example\n   * ```\n   * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\n   * ```\n   *\n   * Read more in our [docs](https://pris.ly/d/raw-queries).\n   */\n  $executeRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<number>;\n\n  /**\n   * Executes a raw query and returns the number of affected rows.\n   * Susceptible to SQL injections, see documentation.\n   * @example\n   * ```\n   * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')\n   * ```\n   *\n   * Read more in our [docs](https://pris.ly/d/raw-queries).\n   */\n  $executeRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<number>;\n\n  /**\n   * Performs a prepared raw query and returns the `SELECT` data.\n   * @example\n   * ```\n   * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\n   * ```\n   *\n   * Read more in our [docs](https://pris.ly/d/raw-queries).\n   */\n  $queryRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<T>;\n\n  /**\n   * Performs a raw query and returns the `SELECT` data.\n   * Susceptible to SQL injections, see documentation.\n   * @example\n   * ```\n   * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')\n   * ```\n   *\n   * Read more in our [docs](https://pris.ly/d/raw-queries).\n   */\n  $queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<T>;\n\n\n  /**\n   * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.\n   * @example\n   * ```\n   * const [george, bob, alice] = await prisma.$transaction([\n   *   prisma.user.create({ data: { name: 'George' } }),\n   *   prisma.user.create({ data: { name: 'Bob' } }),\n   *   prisma.user.create({ data: { name: 'Alice' } }),\n   * ])\n   * ```\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/orm/prisma-client/queries/transactions).\n   */\n  $transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): runtime.Types.Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>\n\n  $transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => runtime.Types.Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): runtime.Types.Utils.JsPromise<R>\n\n  $extends: runtime.Types.Extensions.ExtendsHook<\"extends\", Prisma.TypeMapCb<OmitOpts>, ExtArgs, runtime.Types.Utils.Call<Prisma.TypeMapCb<OmitOpts>, {\n    extArgs: ExtArgs\n  }>>\n\n      /**\n   * `prisma.user`: Exposes CRUD operations for the **User** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more Users\n    * const users = await prisma.user.findMany()\n    * ```\n    */\n  get user(): Prisma.UserDelegate<ExtArgs, { omit: OmitOpts }>;\n\n  /**\n   * `prisma.event`: Exposes CRUD operations for the **Event** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more Events\n    * const events = await prisma.event.findMany()\n    * ```\n    */\n  get event(): Prisma.EventDelegate<ExtArgs, { omit: OmitOpts }>;\n\n  /**\n   * `prisma.location`: Exposes CRUD operations for the **Location** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more Locations\n    * const locations = await prisma.location.findMany()\n    * ```\n    */\n  get location(): Prisma.LocationDelegate<ExtArgs, { omit: OmitOpts }>;\n\n  /**\n   * `prisma.mail`: Exposes CRUD operations for the **Mail** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more Mail\n    * const mail = await prisma.mail.findMany()\n    * ```\n    */\n  get mail(): Prisma.MailDelegate<ExtArgs, { omit: OmitOpts }>;\n}\n\nexport function getPrismaClientClass(): PrismaClientConstructor {\n  return runtime.getPrismaClient(config) as unknown as PrismaClientConstructor\n}\n","\n/* !!! This is code generated by Prisma. Do not edit directly. !!! */\n/* eslint-disable */\n// biome-ignore-all lint: generated file\n// @ts-nocheck \n/*\n * WARNING: This is an internal file that is subject to change!\n *\n * 🛑 Under no circumstances should you import this file directly! 🛑\n *\n * All exports from this file are wrapped under a `Prisma` namespace object in the client.ts file.\n * While this enables partial backward compatibility, it is not part of the stable public API.\n *\n * If you are looking for your Models, Enums, and Input Types, please import them from the respective\n * model files in the `model` directory!\n */\n\nimport * as runtime from \"@prisma/client/runtime/client\"\nimport type * as Prisma from \"../models.js\"\nimport { type PrismaClient } from \"./class.js\"\n\nexport type * from '../models.js'\n\nexport type DMMF = typeof runtime.DMMF\n\nexport type PrismaPromise<T> = runtime.Types.Public.PrismaPromise<T>\n\n/**\n * Prisma Errors\n */\n\nexport const PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError\nexport type PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError\n\nexport const PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError\nexport type PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError\n\nexport const PrismaClientRustPanicError = runtime.PrismaClientRustPanicError\nexport type PrismaClientRustPanicError = runtime.PrismaClientRustPanicError\n\nexport const PrismaClientInitializationError = runtime.PrismaClientInitializationError\nexport type PrismaClientInitializationError = runtime.PrismaClientInitializationError\n\nexport const PrismaClientValidationError = runtime.PrismaClientValidationError\nexport type PrismaClientValidationError = runtime.PrismaClientValidationError\n\n/**\n * Re-export of sql-template-tag\n */\nexport const sql = runtime.sqltag\nexport const empty = runtime.empty\nexport const join = runtime.join\nexport const raw = runtime.raw\nexport const Sql = runtime.Sql\nexport type Sql = runtime.Sql\n\n\n\n/**\n * Decimal.js\n */\nexport const Decimal = runtime.Decimal\nexport type Decimal = runtime.Decimal\n\nexport type DecimalJsLike = runtime.DecimalJsLike\n\n/**\n* Extensions\n*/\nexport type Extension = runtime.Types.Extensions.UserArgs\nexport const getExtensionContext = runtime.Extensions.getExtensionContext\nexport type Args<T, F extends runtime.Operation> = runtime.Types.Public.Args<T, F>\nexport type Payload<T, F extends runtime.Operation = never> = runtime.Types.Public.Payload<T, F>\nexport type Result<T, A, F extends runtime.Operation> = runtime.Types.Public.Result<T, A, F>\nexport type Exact<A, W> = runtime.Types.Public.Exact<A, W>\n\nexport type PrismaVersion = {\n  client: string\n  engine: string\n}\n\n/**\n * Prisma Client JS version: 7.8.0\n * Query Engine version: 3c6e192761c0362d496ed980de936e2f3cebcd3a\n */\nexport const prismaVersion: PrismaVersion = {\n  client: \"7.8.0\",\n  engine: \"3c6e192761c0362d496ed980de936e2f3cebcd3a\"\n}\n\n/**\n * Utility Types\n */\n\nexport type Bytes = runtime.Bytes\nexport type JsonObject = runtime.JsonObject\nexport type JsonArray = runtime.JsonArray\nexport type JsonValue = runtime.JsonValue\nexport type InputJsonObject = runtime.InputJsonObject\nexport type InputJsonArray = runtime.InputJsonArray\nexport type InputJsonValue = runtime.InputJsonValue\n\n\nexport const NullTypes = {\n  DbNull: runtime.NullTypes.DbNull as (new (secret: never) => typeof runtime.DbNull),\n  JsonNull: runtime.NullTypes.JsonNull as (new (secret: never) => typeof runtime.JsonNull),\n  AnyNull: runtime.NullTypes.AnyNull as (new (secret: never) => typeof runtime.AnyNull),\n}\n/**\n * Helper for filtering JSON entries that have `null` on the database (empty on the db)\n *\n * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n */\nexport const DbNull = runtime.DbNull\n\n/**\n * Helper for filtering JSON entries that have JSON `null` values (not empty on the db)\n *\n * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n */\nexport const JsonNull = runtime.JsonNull\n\n/**\n * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`\n *\n * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n */\nexport const AnyNull = runtime.AnyNull\n\n\ntype SelectAndInclude = {\n  select: any\n  include: any\n}\n\ntype SelectAndOmit = {\n  select: any\n  omit: any\n}\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\ntype Prisma__Pick<T, K extends keyof T> = {\n    [P in K]: T[P];\n};\n\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Subset\n * @desc From `T` pick properties that exist in `U`. Simple version of Intersection\n */\nexport type Subset<T, U> = {\n  [key in keyof T]: key extends keyof U ? T[key] : never;\n};\n\n/**\n * SelectSubset\n * @desc From `T` pick properties that exist in `U`. Simple version of Intersection.\n * Additionally, it validates, if both select and include are present. If the case, it errors.\n */\nexport type SelectSubset<T, U> = {\n  [key in keyof T]: key extends keyof U ? T[key] : never\n} &\n  (T extends SelectAndInclude\n    ? 'Please either choose `select` or `include`.'\n    : T extends SelectAndOmit\n      ? 'Please either choose `select` or `omit`.'\n      : {})\n\n/**\n * Subset + Intersection\n * @desc From `T` pick properties that exist in `U` and intersect `K`\n */\nexport type SubsetIntersection<T, U, K> = {\n  [key in keyof T]: key extends keyof U ? T[key] : never\n} &\n  K\n\ntype Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\n\n/**\n * XOR is needed to have a real mutually exclusive union type\n * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types\n */\nexport type XOR<T, U> =\n  T extends object ?\n  U extends object ?\n    (Without<T, U> & U) | (Without<U, T> & T)\n  : U : T\n\n\n/**\n * Is T a Record?\n */\ntype IsObject<T extends any> = T extends Array<any>\n? False\n: T extends Date\n? False\n: T extends Uint8Array\n? False\n: T extends BigInt\n? False\n: T extends object\n? True\n: False\n\n\n/**\n * If it's T[], return T\n */\nexport type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T\n\n/**\n * From ts-toolbelt\n */\n\ntype __Either<O extends object, K extends Key> = Omit<O, K> &\n  {\n    // Merge all but K\n    [P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities\n  }[K]\n\ntype EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>\n\ntype EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>\n\ntype _Either<\n  O extends object,\n  K extends Key,\n  strict extends Boolean\n> = {\n  1: EitherStrict<O, K>\n  0: EitherLoose<O, K>\n}[strict]\n\nexport type Either<\n  O extends object,\n  K extends Key,\n  strict extends Boolean = 1\n> = O extends unknown ? _Either<O, K, strict> : never\n\nexport type Union = any\n\nexport type PatchUndefined<O extends object, O1 extends object> = {\n  [K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]\n} & {}\n\n/** Helper Types for \"Merge\" **/\nexport type IntersectOf<U extends Union> = (\n  U extends unknown ? (k: U) => void : never\n) extends (k: infer I) => void\n  ? I\n  : never\n\nexport type Overwrite<O extends object, O1 extends object> = {\n    [K in keyof O]: K extends keyof O1 ? O1[K] : O[K];\n} & {};\n\ntype _Merge<U extends object> = IntersectOf<Overwrite<U, {\n    [K in keyof U]-?: At<U, K>;\n}>>;\n\ntype Key = string | number | symbol;\ntype AtStrict<O extends object, K extends Key> = O[K & keyof O];\ntype AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;\nexport type At<O extends object, K extends Key, strict extends Boolean = 1> = {\n    1: AtStrict<O, K>;\n    0: AtLoose<O, K>;\n}[strict];\n\nexport type ComputeRaw<A extends any> = A extends Function ? A : {\n  [K in keyof A]: A[K];\n} & {};\n\nexport type OptionalFlat<O> = {\n  [K in keyof O]?: O[K];\n} & {};\n\ntype _Record<K extends keyof any, T> = {\n  [P in K]: T;\n};\n\n// cause typescript not to expand types and preserve names\ntype NoExpand<T> = T extends unknown ? T : never;\n\n// this type assumes the passed object is entirely optional\nexport type AtLeast<O extends object, K extends string> = NoExpand<\n  O extends unknown\n  ? | (K extends keyof O ? { [P in K]: O[P] } & O : O)\n    | {[P in keyof O as P extends K ? P : never]-?: O[P]} & O\n  : never>;\n\ntype _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;\n\nexport type Strict<U extends object> = ComputeRaw<_Strict<U>>;\n/** End Helper Types for \"Merge\" **/\n\nexport type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;\n\nexport type Boolean = True | False\n\nexport type True = 1\n\nexport type False = 0\n\nexport type Not<B extends Boolean> = {\n  0: 1\n  1: 0\n}[B]\n\nexport type Extends<A1 extends any, A2 extends any> = [A1] extends [never]\n  ? 0 // anything `never` is false\n  : A1 extends A2\n  ? 1\n  : 0\n\nexport type Has<U extends Union, U1 extends Union> = Not<\n  Extends<Exclude<U1, U>, U1>\n>\n\nexport type Or<B1 extends Boolean, B2 extends Boolean> = {\n  0: {\n    0: 0\n    1: 1\n  }\n  1: {\n    0: 1\n    1: 1\n  }\n}[B1][B2]\n\nexport type Keys<U extends Union> = U extends unknown ? keyof U : never\n\nexport type GetScalarType<T, O> = O extends object ? {\n  [P in keyof T]: P extends keyof O\n    ? O[P]\n    : never\n} : never\n\ntype FieldPaths<\n  T,\n  U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>\n> = IsObject<T> extends True ? U : T\n\nexport type GetHavingFields<T> = {\n  [K in keyof T]: Or<\n    Or<Extends<'OR', K>, Extends<'AND', K>>,\n    Extends<'NOT', K>\n  > extends True\n    ? // infer is only needed to not hit TS limit\n      // based on the brilliant idea of Pierre-Antoine Mills\n      // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437\n      T[K] extends infer TK\n      ? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>\n      : never\n    : {} extends FieldPaths<T[K]>\n    ? never\n    : K\n}[keyof T]\n\n/**\n * Convert tuple to union\n */\ntype _TupleToUnion<T> = T extends (infer E)[] ? E : never\ntype TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>\nexport type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T\n\n/**\n * Like `Pick`, but additionally can also accept an array of keys\n */\nexport type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>\n\n/**\n * Exclude all keys with underscores\n */\nexport type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T\n\n\nexport type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>\n\ntype FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>\n\n\nexport const ModelName = {\n  User: 'User',\n  Event: 'Event',\n  Location: 'Location',\n  Mail: 'Mail'\n} as const\n\nexport type ModelName = (typeof ModelName)[keyof typeof ModelName]\n\n\n\nexport interface TypeMapCb<GlobalOmitOptions = {}> extends runtime.Types.Utils.Fn<{extArgs: runtime.Types.Extensions.InternalArgs }, runtime.Types.Utils.Record<string, any>> {\n  returns: TypeMap<this['params']['extArgs'], GlobalOmitOptions>\n}\n\nexport type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> = {\n  globalOmitOptions: {\n    omit: GlobalOmitOptions\n  }\n  meta: {\n    modelProps: \"user\" | \"event\" | \"location\" | \"mail\"\n    txIsolationLevel: TransactionIsolationLevel\n  }\n  model: {\n    User: {\n      payload: Prisma.$UserPayload<ExtArgs>\n      fields: Prisma.UserFieldRefs\n      operations: {\n        findUnique: {\n          args: Prisma.UserFindUniqueArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload> | null\n        }\n        findUniqueOrThrow: {\n          args: Prisma.UserFindUniqueOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>\n        }\n        findFirst: {\n          args: Prisma.UserFindFirstArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload> | null\n        }\n        findFirstOrThrow: {\n          args: Prisma.UserFindFirstOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>\n        }\n        findMany: {\n          args: Prisma.UserFindManyArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]\n        }\n        create: {\n          args: Prisma.UserCreateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>\n        }\n        createMany: {\n          args: Prisma.UserCreateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        delete: {\n          args: Prisma.UserDeleteArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>\n        }\n        update: {\n          args: Prisma.UserUpdateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>\n        }\n        deleteMany: {\n          args: Prisma.UserDeleteManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        updateMany: {\n          args: Prisma.UserUpdateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        upsert: {\n          args: Prisma.UserUpsertArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>\n        }\n        aggregate: {\n          args: Prisma.UserAggregateArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.AggregateUser>\n        }\n        groupBy: {\n          args: Prisma.UserGroupByArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.UserGroupByOutputType>[]\n        }\n        count: {\n          args: Prisma.UserCountArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.UserCountAggregateOutputType> | number\n        }\n      }\n    }\n    Event: {\n      payload: Prisma.$EventPayload<ExtArgs>\n      fields: Prisma.EventFieldRefs\n      operations: {\n        findUnique: {\n          args: Prisma.EventFindUniqueArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload> | null\n        }\n        findUniqueOrThrow: {\n          args: Prisma.EventFindUniqueOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>\n        }\n        findFirst: {\n          args: Prisma.EventFindFirstArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload> | null\n        }\n        findFirstOrThrow: {\n          args: Prisma.EventFindFirstOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>\n        }\n        findMany: {\n          args: Prisma.EventFindManyArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>[]\n        }\n        create: {\n          args: Prisma.EventCreateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>\n        }\n        createMany: {\n          args: Prisma.EventCreateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        delete: {\n          args: Prisma.EventDeleteArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>\n        }\n        update: {\n          args: Prisma.EventUpdateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>\n        }\n        deleteMany: {\n          args: Prisma.EventDeleteManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        updateMany: {\n          args: Prisma.EventUpdateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        upsert: {\n          args: Prisma.EventUpsertArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$EventPayload>\n        }\n        aggregate: {\n          args: Prisma.EventAggregateArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.AggregateEvent>\n        }\n        groupBy: {\n          args: Prisma.EventGroupByArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.EventGroupByOutputType>[]\n        }\n        count: {\n          args: Prisma.EventCountArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.EventCountAggregateOutputType> | number\n        }\n      }\n    }\n    Location: {\n      payload: Prisma.$LocationPayload<ExtArgs>\n      fields: Prisma.LocationFieldRefs\n      operations: {\n        findUnique: {\n          args: Prisma.LocationFindUniqueArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload> | null\n        }\n        findUniqueOrThrow: {\n          args: Prisma.LocationFindUniqueOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>\n        }\n        findFirst: {\n          args: Prisma.LocationFindFirstArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload> | null\n        }\n        findFirstOrThrow: {\n          args: Prisma.LocationFindFirstOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>\n        }\n        findMany: {\n          args: Prisma.LocationFindManyArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>[]\n        }\n        create: {\n          args: Prisma.LocationCreateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>\n        }\n        createMany: {\n          args: Prisma.LocationCreateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        delete: {\n          args: Prisma.LocationDeleteArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>\n        }\n        update: {\n          args: Prisma.LocationUpdateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>\n        }\n        deleteMany: {\n          args: Prisma.LocationDeleteManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        updateMany: {\n          args: Prisma.LocationUpdateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        upsert: {\n          args: Prisma.LocationUpsertArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$LocationPayload>\n        }\n        aggregate: {\n          args: Prisma.LocationAggregateArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.AggregateLocation>\n        }\n        groupBy: {\n          args: Prisma.LocationGroupByArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.LocationGroupByOutputType>[]\n        }\n        count: {\n          args: Prisma.LocationCountArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.LocationCountAggregateOutputType> | number\n        }\n      }\n    }\n    Mail: {\n      payload: Prisma.$MailPayload<ExtArgs>\n      fields: Prisma.MailFieldRefs\n      operations: {\n        findUnique: {\n          args: Prisma.MailFindUniqueArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload> | null\n        }\n        findUniqueOrThrow: {\n          args: Prisma.MailFindUniqueOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>\n        }\n        findFirst: {\n          args: Prisma.MailFindFirstArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload> | null\n        }\n        findFirstOrThrow: {\n          args: Prisma.MailFindFirstOrThrowArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>\n        }\n        findMany: {\n          args: Prisma.MailFindManyArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>[]\n        }\n        create: {\n          args: Prisma.MailCreateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>\n        }\n        createMany: {\n          args: Prisma.MailCreateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        delete: {\n          args: Prisma.MailDeleteArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>\n        }\n        update: {\n          args: Prisma.MailUpdateArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>\n        }\n        deleteMany: {\n          args: Prisma.MailDeleteManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        updateMany: {\n          args: Prisma.MailUpdateManyArgs<ExtArgs>\n          result: BatchPayload\n        }\n        upsert: {\n          args: Prisma.MailUpsertArgs<ExtArgs>\n          result: runtime.Types.Utils.PayloadToResult<Prisma.$MailPayload>\n        }\n        aggregate: {\n          args: Prisma.MailAggregateArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.AggregateMail>\n        }\n        groupBy: {\n          args: Prisma.MailGroupByArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.MailGroupByOutputType>[]\n        }\n        count: {\n          args: Prisma.MailCountArgs<ExtArgs>\n          result: runtime.Types.Utils.Optional<Prisma.MailCountAggregateOutputType> | number\n        }\n      }\n    }\n  }\n} & {\n  other: {\n    payload: any\n    operations: {\n      $executeRaw: {\n        args: [query: TemplateStringsArray | Sql, ...values: any[]],\n        result: any\n      }\n      $executeRawUnsafe: {\n        args: [query: string, ...values: any[]],\n        result: any\n      }\n      $queryRaw: {\n        args: [query: TemplateStringsArray | Sql, ...values: any[]],\n        result: any\n      }\n      $queryRawUnsafe: {\n        args: [query: string, ...values: any[]],\n        result: any\n      }\n    }\n  }\n}\n\n/**\n * Enums\n */\n\nexport const TransactionIsolationLevel = runtime.makeStrictEnum({\n  ReadUncommitted: 'ReadUncommitted',\n  ReadCommitted: 'ReadCommitted',\n  RepeatableRead: 'RepeatableRead',\n  Serializable: 'Serializable'\n} as const)\n\nexport type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]\n\n\nexport const UserScalarFieldEnum = {\n  id: 'id',\n  prefix: 'prefix',\n  createdAt: 'createdAt',\n  lastSeenAt: 'lastSeenAt'\n} as const\n\nexport type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]\n\n\nexport const EventScalarFieldEnum = {\n  id: 'id',\n  orderId: 'orderId',\n  from: 'from',\n  to: 'to',\n  amount: 'amount',\n  price: 'price',\n  userId: 'userId',\n  locationId: 'locationId',\n  createdAt: 'createdAt',\n  orderedAt: 'orderedAt',\n  invoicedAt: 'invoicedAt',\n  canceledAt: 'canceledAt'\n} as const\n\nexport type EventScalarFieldEnum = (typeof EventScalarFieldEnum)[keyof typeof EventScalarFieldEnum]\n\n\nexport const LocationScalarFieldEnum = {\n  id: 'id',\n  name: 'name',\n  address: 'address',\n  latitude: 'latitude',\n  longitude: 'longitude',\n  emoji: 'emoji',\n  createdAt: 'createdAt'\n} as const\n\nexport type LocationScalarFieldEnum = (typeof LocationScalarFieldEnum)[keyof typeof LocationScalarFieldEnum]\n\n\nexport const MailScalarFieldEnum = {\n  id: 'id',\n  raw: 'raw',\n  error: 'error',\n  errorId: 'errorId',\n  version: 'version',\n  createdAt: 'createdAt',\n  erroredAt: 'erroredAt'\n} as const\n\nexport type MailScalarFieldEnum = (typeof MailScalarFieldEnum)[keyof typeof MailScalarFieldEnum]\n\n\nexport const SortOrder = {\n  asc: 'asc',\n  desc: 'desc'\n} as const\n\nexport type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]\n\n\nexport const UserOrderByRelevanceFieldEnum = {\n  id: 'id',\n  prefix: 'prefix'\n} as const\n\nexport type UserOrderByRelevanceFieldEnum = (typeof UserOrderByRelevanceFieldEnum)[keyof typeof UserOrderByRelevanceFieldEnum]\n\n\nexport const NullsOrder = {\n  first: 'first',\n  last: 'last'\n} as const\n\nexport type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]\n\n\nexport const EventOrderByRelevanceFieldEnum = {\n  id: 'id',\n  orderId: 'orderId',\n  userId: 'userId',\n  locationId: 'locationId'\n} as const\n\nexport type EventOrderByRelevanceFieldEnum = (typeof EventOrderByRelevanceFieldEnum)[keyof typeof EventOrderByRelevanceFieldEnum]\n\n\nexport const LocationOrderByRelevanceFieldEnum = {\n  id: 'id',\n  name: 'name',\n  address: 'address',\n  emoji: 'emoji'\n} as const\n\nexport type LocationOrderByRelevanceFieldEnum = (typeof LocationOrderByRelevanceFieldEnum)[keyof typeof LocationOrderByRelevanceFieldEnum]\n\n\nexport const MailOrderByRelevanceFieldEnum = {\n  id: 'id',\n  raw: 'raw',\n  error: 'error',\n  errorId: 'errorId',\n  version: 'version'\n} as const\n\nexport type MailOrderByRelevanceFieldEnum = (typeof MailOrderByRelevanceFieldEnum)[keyof typeof MailOrderByRelevanceFieldEnum]\n\n\n\n/**\n * Field references\n */\n\n\n/**\n * Reference to a field of type 'String'\n */\nexport type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>\n    \n\n\n/**\n * Reference to a field of type 'DateTime'\n */\nexport type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime'>\n    \n\n\n/**\n * Reference to a field of type 'Int'\n */\nexport type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>\n    \n\n\n/**\n * Reference to a field of type 'Float'\n */\nexport type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>\n    \n\n/**\n * Batch Payload for updateMany & deleteMany & createMany\n */\nexport type BatchPayload = {\n  count: number\n}\n\nexport const defineExtension = runtime.Extensions.defineExtension as unknown as runtime.Types.Extensions.ExtendsHook<\"define\", TypeMapCb, runtime.Types.Extensions.DefaultArgs>\nexport type DefaultPrismaClient = PrismaClient\nexport type ErrorFormat = 'pretty' | 'colorless' | 'minimal'\nexport type PrismaClientOptions = ({\n  /**\n   * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-pg`.\n   */\n  adapter: runtime.SqlDriverAdapterFactory\n  accelerateUrl?: never\n} | {\n  /**\n   * Prisma Accelerate URL allowing the client to connect through Accelerate instead of a direct database.\n   */\n  accelerateUrl: string\n  adapter?: never\n}) & {\n  /**\n   * @default \"colorless\"\n   */\n  errorFormat?: ErrorFormat\n  /**\n   * @example\n   * ```\n   * // Shorthand for `emit: 'stdout'`\n   * log: ['query', 'info', 'warn', 'error']\n   * \n   * // Emit as events only\n   * log: [\n   *   { emit: 'event', level: 'query' },\n   *   { emit: 'event', level: 'info' },\n   *   { emit: 'event', level: 'warn' }\n   *   { emit: 'event', level: 'error' }\n   * ]\n   * \n   * / Emit as events and log to stdout\n   * og: [\n   *  { emit: 'stdout', level: 'query' },\n   *  { emit: 'stdout', level: 'info' },\n   *  { emit: 'stdout', level: 'warn' }\n   *  { emit: 'stdout', level: 'error' }\n   * \n   * ```\n   * Read more in our [docs](https://pris.ly/d/logging).\n   */\n  log?: (LogLevel | LogDefinition)[]\n  /**\n   * The default values for transactionOptions\n   * maxWait ?= 2000\n   * timeout ?= 5000\n   */\n  transactionOptions?: {\n    maxWait?: number\n    timeout?: number\n    isolationLevel?: TransactionIsolationLevel\n  }\n  /**\n   * Global configuration for omitting model fields by default.\n   * \n   * @example\n   * ```\n   * const prisma = new PrismaClient({\n   *   omit: {\n   *     user: {\n   *       password: true\n   *     }\n   *   }\n   * })\n   * ```\n   */\n  omit?: GlobalOmitConfig\n  /**\n   * SQL commenter plugins that add metadata to SQL queries as comments.\n   * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/\n   * \n   * @example\n   * ```\n   * const prisma = new PrismaClient({\n   *   adapter,\n   *   comments: [\n   *     traceContext(),\n   *     queryInsights(),\n   *   ],\n   * })\n   * ```\n   */\n  comments?: runtime.SqlCommenterPlugin[]\n  /**\n   * Optional maximum size for the query plan cache. If not provided, a default size will be used.\n   * A value of `0` can be used to disable the cache entirely. A higher cache size can improve\n   * performance for applications that execute a large number of unique queries, while a smaller\n   * cache size can reduce memory usage.\n   * \n   * @example\n   * ```\n   * const prisma = new PrismaClient({\n   *   adapter,\n   *   queryPlanCacheMaxSize: 100,\n   * })\n   * ```\n   */\n  queryPlanCacheMaxSize?: number\n}\nexport type GlobalOmitConfig = {\n  user?: Prisma.UserOmit\n  event?: Prisma.EventOmit\n  location?: Prisma.LocationOmit\n  mail?: Prisma.MailOmit\n}\n\n/* Types for Logging */\nexport type LogLevel = 'info' | 'query' | 'warn' | 'error'\nexport type LogDefinition = {\n  level: LogLevel\n  emit: 'stdout' | 'event'\n}\n\nexport type CheckIsLogLevel<T> = T extends LogLevel ? T : never;\n\nexport type GetLogType<T> = CheckIsLogLevel<\n  T extends LogDefinition ? T['level'] : T\n>;\n\nexport type GetEvents<T extends any[]> = T extends Array<LogLevel | LogDefinition>\n  ? GetLogType<T[number]>\n  : never;\n\nexport type QueryEvent = {\n  timestamp: Date\n  query: string\n  params: string\n  duration: number\n  target: string\n}\n\nexport type LogEvent = {\n  timestamp: Date\n  message: string\n  target: string\n}\n/* End Types for Logging */\n\n\nexport type PrismaAction =\n  | 'findUnique'\n  | 'findUniqueOrThrow'\n  | 'findMany'\n  | 'findFirst'\n  | 'findFirstOrThrow'\n  | 'create'\n  | 'createMany'\n  | 'createManyAndReturn'\n  | 'update'\n  | 'updateMany'\n  | 'updateManyAndReturn'\n  | 'upsert'\n  | 'delete'\n  | 'deleteMany'\n  | 'executeRaw'\n  | 'queryRaw'\n  | 'aggregate'\n  | 'count'\n  | 'runCommandRaw'\n  | 'findRaw'\n  | 'groupBy'\n\n/**\n * `PrismaClient` proxy available in interactive transactions.\n */\nexport type TransactionClient = Omit<DefaultPrismaClient, runtime.ITXClientDenyList>\n\n","\n/* !!! This is code generated by Prisma. Do not edit directly. !!! */\n/* eslint-disable */\n// biome-ignore-all lint: generated file\n// @ts-nocheck \n/*\n * This file should be your main import to use Prisma. Through it you get access to all the models, enums, and input types.\n * If you're looking for something you can import in the client-side of your application, please refer to the `browser.ts` file instead.\n *\n * 🟢 You can import this file directly.\n */\n\nimport * as process from 'node:process'\nimport * as path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nglobalThis['__dirname'] = path.dirname(fileURLToPath(import.meta.url))\n\nimport * as runtime from \"@prisma/client/runtime/client\"\nimport * as $Enums from \"./enums.js\"\nimport * as $Class from \"./internal/class.js\"\nimport * as Prisma from \"./internal/prismaNamespace.js\"\n\nexport * as $Enums from './enums.js'\nexport * from \"./enums.js\"\n/**\n * ## Prisma Client\n * \n * Type-safe database client for TypeScript\n * @example\n * ```\n * const prisma = new PrismaClient({\n *   adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL })\n * })\n * // Fetch zero or more Users\n * const users = await prisma.user.findMany()\n * ```\n * \n * Read more in our [docs](https://pris.ly/d/client).\n */\nexport const PrismaClient = $Class.getPrismaClientClass()\nexport type PrismaClient<LogOpts extends Prisma.LogLevel = never, OmitOpts extends Prisma.PrismaClientOptions[\"omit\"] = Prisma.PrismaClientOptions[\"omit\"], ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = $Class.PrismaClient<LogOpts, OmitOpts, ExtArgs>\nexport { Prisma }\n\n/**\n * Model User\n * \n */\nexport type User = Prisma.UserModel\n/**\n * Model Event\n * \n */\nexport type Event = Prisma.EventModel\n/**\n * Model Location\n * \n */\nexport type Location = Prisma.LocationModel\n/**\n * Model Mail\n * \n */\nexport type Mail = Prisma.MailModel\n","import { PrismaMariaDb } from '@prisma/adapter-mariadb';\n\nimport { PrismaClient } from '../prisma/prisma/client.js';\n\nconst databaseUrlStr = process.env.DATABASE_URL;\nif (!databaseUrlStr) {\n    throw new Error('DATABASE_URL is not set');\n}\n\nconst databaseUrl = new URL(databaseUrlStr);\nconst prismaAdapter = new PrismaMariaDb({\n    connectionLimit: 5,\n    database: databaseUrl.pathname.slice(1),\n    host: databaseUrl.hostname,\n    password: databaseUrl.password,\n    port: parseInt(databaseUrl.port, 10) || 3306,\n    user: databaseUrl.username,\n});\nconst prisma = new PrismaClient({\n    adapter: prismaAdapter,\n});\n\nexport default prisma;\nexport * from '../prisma/prisma/client.js';\n","export const DEFAULT_EMOJI = '🍴';\nexport const EMOJIS: Record<string, RegExp[]> = {\n    '🌭': [/Ikea/],\n    '🌮': [/Enchilada/, /Besitos/],\n    '🍔': [\n        /Burger/,\n        /McDonald[‘|']?s/,\n        /Burger King/,\n        /Hans im Glück/,\n        /Peter Pane/,\n    ],\n    '🍕': [\n        /Domino‘s/,\n        /Pizza Hut/,\n        /L[‘|']Osteria/,\n        /Call a Pizza/,\n        /Smiley[‘|']s Pizza/,\n    ],\n    '🍗': [/KFC/],\n    '🍝': [/LaTagliatella/, /Vapiano/],\n    '🍤': [/Nordsee/],\n    '🍩': [/Donut/, /Dunkin/],\n    '🍪': [/Starbucks/],\n    '🥐': [/LeCroBag/],\n    '🥖': [\n        /Bäckerei/,\n        /Back/,\n        /BackWerk/,\n        /Kamps/,\n        /Kamps Backstuben/,\n        /Junge Die Bäckerei/,\n        /Back-Factory/,\n    ],\n    '🥗': [/dean ?& ?david/],\n    '🥨': [/Brezel/, /Ditsch/],\n    '🥩': [/Steakhouse/, /Block House/, /Jim Block/],\n    '🥪': [\n        /Sandwich/,\n        /Tank ?& ?Rast/,\n        /T&R Raststätten/,\n        /Autohöfe/,\n        /Aral/,\n        /Shell/,\n        /Jet Tank/,\n        /Subway/,\n        /Caf[é|e] bonjour/,\n        /Total Deutschland/,\n        /Esso:? Snack ?& ?Shop/,\n    ],\n    '🛒': [\n        /Edeka/,\n        /Netto/,\n        /Rewe/,\n        /Penny/,\n        /Lidl/,\n        /Kaufland/,\n        /Aldi/,\n        /dm/,\n        /Rossmann/,\n        /Globus/,\n        /Metro/,\n        /Norma/,\n        /Tegut/,\n    ],\n};\n\nexport default function getEmoji(location: string): null | string {\n    for (const emoji in EMOJIS) {\n        const regExps = EMOJIS[emoji].map((name) => new RegExp(name, 'i'));\n        const match = !!regExps.find((regExp) => regExp.test(location));\n        if (match) {\n            return emoji;\n        }\n    }\n\n    return null;\n}\n","import { captureException } from '@sentry/node';\nimport he from 'he';\nimport { type ParsedMail, simpleParser } from 'mailparser';\nimport moment from 'moment-timezone';\n\nimport type { Location, Mail, User } from './db.js';\n\nimport config from './config.js';\nimport Config from './config.js';\nimport prisma from './db.js';\nimport getEmoji from './emoji.js';\n\ntype AnyMail = (CancellationMail | ChangeMail | InvoiceMail | OrderMail) & {\n    to: string;\n};\n\ninterface CancellationMail {\n    cancelledAt: moment.Moment;\n    orderId: string;\n    type: 'cancel';\n}\n\ninterface ChangeMail {\n    orderId: string;\n    time: {\n        from: moment.Moment;\n        to: moment.Moment;\n    };\n    type: 'change';\n}\n\ninterface InvoiceMail {\n    invoicedAt: moment.Moment;\n    orderId: string;\n    type: 'invoice';\n}\n\ninterface OrderMail {\n    amount: number;\n    location: {\n        address: string;\n        name: string;\n    };\n    orderId: string;\n    price: number;\n    time: {\n        from: moment.Moment;\n        order: moment.Moment;\n        to: moment.Moment;\n    };\n    type: 'order';\n}\n\nexport default class Parser {\n    public static async geocode(\n        address: string,\n    ): Promise<\n        | { latitude: null; longitude: null }\n        | { latitude: number; longitude: number }\n    > {\n        const response = await fetch(\n            'https://nominatim.openstreetmap.org/search?format=json&limit=1&q=' +\n                encodeURIComponent(address),\n            {\n                headers: {\n                    Referer: config.baseUrl,\n                    'User-Agent': `tgtg-ical/${config.version} (${config.baseUrl})`,\n                },\n            },\n        );\n        if (!response.ok) {\n            throw new Error('Geocoding failed: ' + response.statusText);\n        }\n\n        // super simple way to ensure a maximum of 1 request per second in cronjobs\n        await new Promise((resolve) => setTimeout(resolve, 1000));\n\n        const data = await response.json();\n        if (!Array.isArray(data) || data.length === 0) {\n            return {\n                latitude: null,\n                longitude: null,\n            };\n        }\n\n        return {\n            latitude: parseFloat(data[0].lat),\n            longitude: parseFloat(data[0].lon),\n        };\n    }\n\n    public static async handleMail(mail: Mail) {\n        try {\n            const parsed = await this.parseMail(mail.raw);\n            if (parsed) {\n                await this.applyParsedMail(parsed);\n            }\n\n            await prisma.mail.delete({\n                where: {\n                    id: mail.id,\n                },\n            });\n        } catch (error) {\n            const errorId = captureException(error);\n            await prisma.mail.update({\n                data: {\n                    error: error instanceof Error ? error.stack : String(error),\n                    erroredAt: new Date(),\n                    errorId,\n                    version: config.version,\n                },\n                where: {\n                    id: mail.id,\n                },\n            });\n        }\n    }\n\n    public static async inhaleMail(email: string): Promise<void> {\n        const mail = await prisma.mail.create({\n            data: {\n                raw: email,\n            },\n        });\n\n        await this.handleMail(mail);\n    }\n\n    public static async parseMail(\n        mail: string,\n        baseMailPostfix = config.baseMail,\n    ): Promise<AnyMail | undefined> {\n        // parse email\n        const email = await simpleParser(mail, {\n            skipHtmlToText: true,\n            skipImageLinks: true,\n            skipTextLinks: true,\n            skipTextToHtml: true,\n        });\n\n        if (!email.from?.value[0].address?.endsWith('toogoodtogo.com')) {\n            throw new Error('Not a TGTG email!');\n        }\n\n        let to: string | undefined = (\n            Array.isArray(email.to) ? email.to : [email.to]\n        )\n            .map((to) => to?.value)\n            .flat()\n            .filter((address) => !!address)\n            .map((address) => address.address)\n            .find((address) => address?.endsWith(baseMailPostfix));\n\n        if (!to) {\n            const received = email.headers.get('received');\n            const regexp = new RegExp(`([\\\\w-]+${Config.baseMail})`, 'i');\n            if (Array.isArray(received)) {\n                received.forEach((r) => {\n                    const s = typeof r === 'string' ? r : r.value;\n                    const match = s.match(regexp);\n                    if (match) {\n                        to = match[1];\n                    }\n                });\n            }\n        }\n        if (!to) {\n            throw new Error('No recipient found!');\n        }\n\n        // Order confirmation\n        if (email.headers.get('x-pm-tag') === 'consumer_order_confirm') {\n            const order = this.parseOrderMail(email);\n            return {\n                to,\n                ...order,\n            };\n        }\n\n        // Time Changed\n        if (email.headers.get('x-pm-tag') === 'collection_time_changed') {\n            const change = this.parseChangeMail(email);\n            return {\n                to,\n                ...change,\n            };\n        }\n\n        // Cancellation\n        if (email.headers.get('x-pm-tag') === 'consumer_order_reverted') {\n            const cancellation = this.parseCancellationMail(email);\n            if (cancellation) {\n                return {\n                    to,\n                    ...cancellation,\n                };\n            }\n        }\n\n        // is invoice?\n        if (email.headers.get('x-pm-tag') === 'invoice') {\n            const invoice = this.parseInvoiceMail(email);\n            if (invoice) {\n                return {\n                    to,\n                    ...invoice,\n                };\n            }\n        }\n\n        // Non-transactional email\n        if (\n            !email.headers.get('x-pm-tag') &&\n            !email.headers.get('x-pm-message-id')\n        ) {\n            return undefined;\n        }\n\n        // Unsupported email\n        if (email.headers.get('x-pm-tag')) {\n            throw new Error(\n                `Unsupported email type: ${email.headers.get('x-pm-tag')}`,\n            );\n        }\n\n        throw new Error('Not implemented!');\n    }\n\n    public static async runCleanup(): Promise<void> {\n        const mails = await prisma.mail.findMany({\n            orderBy: {\n                erroredAt: 'asc',\n            },\n            take: 10,\n            where: {\n                OR: [\n                    { error: null },\n                    { version: null },\n                    { version: { not: config.version } },\n                ],\n            },\n        });\n        for (const mail of mails) {\n            await this.handleMail(mail);\n        }\n\n        // Cleanup Users\n        const users = await prisma.user.findMany({\n            orderBy: {\n                lastSeenAt: 'asc',\n            },\n            where: {\n                OR: [\n                    {\n                        lastSeenAt: {\n                            lt: moment().subtract(8, 'weeks').toDate(),\n                        },\n                    },\n                    {\n                        createdAt: {\n                            lt: moment().subtract(3, 'hours').toDate(),\n                        },\n                        lastSeenAt: {\n                            equals: prisma.user.fields.createdAt,\n                        },\n                    },\n                ],\n            },\n        });\n        for (const user of users) {\n            await prisma.user.delete({\n                where: {\n                    id: user.id,\n                },\n            });\n        }\n\n        // Cleanup Events\n        await prisma.event.deleteMany({\n            where: {\n                to: {\n                    lt: moment().subtract(4, 'weeks').toDate(),\n                },\n            },\n        });\n\n        // Cleanup Mails\n        await prisma.mail.deleteMany({\n            where: {\n                createdAt: {\n                    lt: moment().subtract(2, 'weeks').toDate(),\n                },\n            },\n        });\n    }\n\n    private static async applyParsedMail(email: AnyMail): Promise<void> {\n        const user = await this.findUser(email.to);\n\n        if (email.type === 'order') {\n            const location = await this.getLocation(email.location);\n\n            await prisma.event.upsert({\n                create: {\n                    amount: email.amount,\n                    from: email.time.from.toDate(),\n                    location: {\n                        connect: {\n                            id: location.id,\n                        },\n                    },\n                    orderedAt: email.time.order.toDate(),\n                    orderId: email.orderId,\n                    price: email.price,\n                    to: email.time.to.toDate(),\n                    user: {\n                        connect: {\n                            id: user.id,\n                        },\n                    },\n                },\n                update: {\n                    amount: email.amount,\n                    from: email.time.from.toDate(),\n                    location: {\n                        connect: {\n                            id: location.id,\n                        },\n                    },\n                    price: email.price,\n                    to: email.time.to.toDate(),\n                },\n                where: {\n                    orderId: email.orderId,\n                    userId: user.id,\n                },\n            });\n        } else if (email.type === 'change') {\n            await prisma.event.update({\n                data: {\n                    from: email.time.from.toDate(),\n                    to: email.time.to.toDate(),\n                },\n                where: {\n                    orderId: email.orderId,\n                    userId: user.id,\n                },\n            });\n        } else if (email.type === 'cancel') {\n            await prisma.event.update({\n                data: {\n                    canceledAt: email.cancelledAt.toDate(),\n                },\n                where: {\n                    orderId: email.orderId,\n                    userId: user.id,\n                },\n            });\n        } else if (email.type === 'invoice') {\n            await prisma.event.update({\n                data: {\n                    invoicedAt: email.invoicedAt.toDate(),\n                },\n                where: {\n                    orderId: email.orderId,\n                    userId: user.id,\n                },\n            });\n        } else {\n            throw new Error('Unknown email type!');\n        }\n    }\n\n    private static async findUser(to: string): Promise<User> {\n        if (!to) {\n            throw new Error('Did not found a valid recipient!');\n        }\n\n        const prefix = to.split('@')[0];\n        const user = await prisma.user.findUnique({\n            where: { prefix },\n        });\n        if (!user) {\n            throw new Error(`User with email prefix ${prefix} not found!`);\n        }\n\n        return user;\n    }\n\n    private static async getLocation(\n        input: OrderMail['location'],\n    ): Promise<Location> {\n        let location = await prisma.location.findFirst({\n            where: {\n                address: input.address,\n                name: input.name,\n            },\n        });\n        if (!location) {\n            const emoji = getEmoji(input.name);\n            const { latitude, longitude } = await this.geocode(input.address);\n            location = await prisma.location.create({\n                data: {\n                    address: input.address,\n                    emoji,\n                    latitude,\n                    longitude,\n                    name: input.name,\n                },\n            });\n        }\n\n        return location;\n    }\n\n    private static parseCancellationMail(\n        email: ParsedMail,\n    ): CancellationMail | undefined {\n        const subject = email.subject || '';\n        const match = subject.match(/\\((\\w+)\\)/);\n        if (match) {\n            return {\n                cancelledAt: moment(email.date),\n                orderId: match[1],\n                type: 'cancel',\n            };\n        }\n    }\n\n    private static parseChangeMail(email: ParsedMail): ChangeMail {\n        const matches = [\n            (email.html || '').match(\n                /https:\\/\\/share.toogoodtogo.com\\/receipts\\/details\\/(\\w+)/,\n            ),\n            (email.html || '').match(\n                /(\\d{1,2}\\.\\d{2}\\.\\d{2}) zwischen (\\d{1,2}:\\d{2}) und (\\d{1,2}:\\d{2})(?: Uhr)? (\\w+)+ \\(/,\n            ),\n        ];\n        if (!matches[0]) {\n            throw new Error('Order ID not found!');\n        }\n        if (!matches[1]) {\n            throw new Error('Date / Time not found!');\n        }\n\n        let timezone = matches[1][4];\n        if (timezone === 'MEZ') {\n            timezone = 'MET';\n        }\n\n        const from = moment.tz(\n            matches[1][1] + ' ' + matches[1][2],\n            'DD.MM.YY HH:mm',\n            timezone,\n        );\n        const to = moment.tz(\n            matches[1][1] + ' ' + matches[1][3],\n            'DD.MM.YY HH:mm',\n            timezone,\n        );\n\n        return {\n            orderId: matches[0][1].trim(),\n            time: {\n                from,\n                to,\n            },\n            type: 'change',\n        };\n    }\n\n    private static parseInvoiceMail(email: ParsedMail): InvoiceMail {\n        const html = email.html || '';\n        const match = html.match(/Die Rechnung für deine Bestellung (\\w+)/);\n        if (match) {\n            return {\n                invoicedAt: moment(email.date),\n                orderId: match[1],\n                type: 'invoice',\n            };\n        }\n\n        throw new Error('Order Id not found!');\n    }\n\n    private static parseOrderMail(email: ParsedMail): OrderMail {\n        const html = email.html || '';\n        const matches = [\n            html.match(/\\/order\\/([^/]+)\\//),\n            html.match(/Wir bestätigen hiermit deine Bestellung bei ([^(.<]+)/),\n            html.match(\n                /<span>Du kannst deine Bestellung am (\\d{1,2}\\.\\d{2}\\.\\d{2}) zwischen (\\d{1,2}:\\d{2}) und (\\d{1,2}:\\d{2}) Uhr (\\w+)[^:]+: (.+).<\\/span><\\/div>/,\n            ),\n            html.match(\n                /<span>Du kannst deine Bestellung zwischen (\\d{1,2}\\.\\d{1,2}), (\\d{1,2}:\\d{2}) und (\\d{1,2}:\\d{2})[^:]+: (.+).<\\/span><\\/div>/,\n            ),\n            html.match(\n                /<b>Datum:<\\/b>\\s+<span>(\\d{1,2}\\.\\d{2}\\.\\d{2})<\\/span>/,\n            ),\n            html.match(\n                /Abholzeit:<\\/b>\\s+<span>(\\d{1,2}:\\d{2}) - (\\d{1,2}:\\d{2}) (\\w+)/,\n            ),\n            html.match(/Anzahl: (\\d+)/),\n            html.match(/Anzahl:<\\/b>\\s+<span>(\\d+)/),\n            html.match(/Gesamtpreis: ([\\d,.]+)[^\\d,.]/),\n            html.match(/Gesamtpreis:<\\/b>\\s+<span>([\\d,.]+)[^\\d,.]/),\n            html.match(/Standort:<\\/b>\\s+<span>([^<]+)/),\n        ];\n        if (!matches[0]) {\n            throw new Error('Order ID not found!');\n        }\n        if (!matches[1]) {\n            throw new Error('Location name not found!');\n        }\n        if (!matches[2] && !matches[3] && !(matches[4] && matches[5])) {\n            throw new Error('Date, time and address not found (1)!');\n        }\n\n        let timezone = 'MET';\n        if (matches[2]) {\n            timezone = matches[2][4];\n        }\n        if (matches[5]) {\n            timezone = matches[5][3];\n        }\n        if (timezone === 'MEZ') {\n            timezone = 'MET';\n        }\n\n        const now = moment(email.date);\n        let from: moment.Moment | undefined;\n        let to: moment.Moment | undefined;\n        let address: string | undefined;\n\n        if (matches[2]) {\n            from = moment.tz(\n                matches[2][1] + ' ' + matches[2][2],\n                'DD.MM.YY HH:mm',\n                timezone,\n            );\n            to = moment.tz(\n                matches[2][1] + ' ' + matches[2][3],\n                'DD.MM.YY HH:mm',\n                timezone,\n            );\n            address = matches[2][5].trim();\n        }\n        if (matches[3]) {\n            const year = now.year();\n            from = moment.tz(\n                matches[3][1] + '.' + year + ' ' + matches[3][2],\n                'DD.MM.YYYY HH:mm',\n                timezone,\n            );\n            to = moment.tz(\n                matches[3][1] + '.' + year + ' ' + matches[3][3],\n                'DD.MM.YYYY HH:mm',\n                timezone,\n            );\n            address = matches[3][4].trim();\n\n            if (from.isBefore(now)) {\n                from.add(1, 'year');\n            }\n            if (to.isBefore(from)) {\n                to.add(1, 'year');\n            }\n        }\n        if (matches[4] && matches[5] && matches[10]) {\n            from = moment.tz(\n                matches[4][1] + ' ' + matches[5][1],\n                'DD.MM.YY HH:mm',\n                timezone,\n            );\n            to = moment.tz(\n                matches[4][1] + ' ' + matches[5][2],\n                'DD.MM.YY HH:mm',\n                timezone,\n            );\n            address = matches[10][1].trim();\n        }\n\n        if (!from || !to || !address) {\n            throw new Error('Date, time or address not found (2)!');\n        }\n\n        let amount: number | undefined;\n        if (matches[6]) {\n            amount = parseInt(matches[6][1], 10);\n        } else if (matches[7]) {\n            amount = parseInt(matches[7][1], 10);\n        } else {\n            throw new Error('Amount not found!');\n        }\n        if (isNaN(amount)) {\n            throw new Error('Amount (1) is not a number!');\n        }\n\n        let price: number | undefined;\n        if (matches[8]) {\n            price = parseInt(matches[8][1].replace(/[.|,]/g, ''));\n        } else if (matches[9]) {\n            price = parseInt(matches[9][1].replace(/[.|,]/g, ''));\n        } else {\n            throw new Error('Price not found!');\n        }\n        if (isNaN(price)) {\n            throw new Error('Price is not a number!');\n        }\n\n        let name = he.decode(matches[1][1].trim());\n        if (name.endsWith('!')) {\n            name = name.slice(0, -1);\n        }\n\n        return {\n            amount,\n            location: {\n                address: he.decode(address),\n                name,\n            },\n            orderId: matches[0][1].trim(),\n            price,\n            time: {\n                from,\n                order: now,\n                to,\n            },\n            type: 'order',\n        };\n    }\n}\n"],"mappings":"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"}