From cef7fc69655ca0934ab7f5baf302efb956fece0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Thu, 12 Oct 2023 23:19:02 +0200 Subject: [PATCH] add nextjs and migrated api to next api --- apps/web/.env.example | 25 ++++ apps/web/.eslintrc.cjs | 30 ++++ apps/web/.gitignore | 42 ++++++ apps/web/README.md | 28 ++++ apps/web/next.config.mjs | 22 +++ apps/web/package.json | 54 ++++++++ apps/web/postcss.config.cjs | 8 ++ apps/web/prettier.config.mjs | 6 + .../20231010091416_init/migration.sql | 59 ++++++++ .../20231010094459_add_dates/migration.sql | 19 +++ .../20231010184810_fix_profile/migration.sql | 10 ++ .../migration.sql | 5 + .../20231010195623_add_client/migration.sql | 12 ++ .../migration.sql | 3 + .../migration.sql | 11 ++ .../migration.sql | 8 ++ .../migration.sql | 10 ++ .../migration.sql | 8 ++ .../migration.sql | 5 + .../web/prisma/migrations/migration_lock.toml | 3 + apps/web/prisma/schema.prisma | 99 +++++++++++++ apps/web/public/favicon.ico | Bin 0 -> 23600 bytes apps/web/src/env.mjs | 62 +++++++++ apps/web/src/pages/_app.tsx | 20 +++ apps/web/src/pages/api/auth/[...nextauth].ts | 5 + apps/web/src/pages/api/sdk/events.ts | 37 +++++ .../api/sdk/profiles/[profileId]/decrement.ts | 33 +++++ .../api/sdk/profiles/[profileId]/increment.ts | 33 +++++ .../api/sdk/profiles/[profileId]/index.ts | 48 +++++++ apps/web/src/pages/api/sdk/profiles/index.ts | 46 ++++++ apps/web/src/pages/api/setup.ts | 47 +++++++ apps/web/src/pages/api/trpc/[trpc].ts | 19 +++ apps/web/src/pages/index.tsx | 80 +++++++++++ apps/web/src/server/api/root.ts | 14 ++ apps/web/src/server/api/routers/example.ts | 25 ++++ apps/web/src/server/api/trpc.ts | 131 ++++++++++++++++++ apps/web/src/server/auth.ts | 123 ++++++++++++++++ apps/web/src/server/db.ts | 16 +++ apps/web/src/server/exceptions.ts | 55 ++++++++ apps/web/src/services/hash.service.ts | 40 ++++++ apps/web/src/services/profile.service.ts | 51 +++++++ apps/web/src/styles/globals.css | 3 + apps/web/src/utils/api.ts | 68 +++++++++ apps/web/tailwind.config.ts | 9 ++ apps/web/tsconfig.json | 33 +++++ bun.lockb | Bin 36416 -> 400376 bytes packages/sdk/index.ts | 2 +- 47 files changed, 1466 insertions(+), 1 deletion(-) create mode 100644 apps/web/.env.example create mode 100644 apps/web/.eslintrc.cjs create mode 100644 apps/web/.gitignore create mode 100644 apps/web/README.md create mode 100644 apps/web/next.config.mjs create mode 100644 apps/web/package.json create mode 100644 apps/web/postcss.config.cjs create mode 100644 apps/web/prettier.config.mjs create mode 100644 apps/web/prisma/migrations/20231010091416_init/migration.sql create mode 100644 apps/web/prisma/migrations/20231010094459_add_dates/migration.sql create mode 100644 apps/web/prisma/migrations/20231010184810_fix_profile/migration.sql create mode 100644 apps/web/prisma/migrations/20231010185023_add_profile_properties/migration.sql create mode 100644 apps/web/prisma/migrations/20231010195623_add_client/migration.sql create mode 100644 apps/web/prisma/migrations/20231010195805_add_timestamps_on_client/migration.sql create mode 100644 apps/web/prisma/migrations/20231010202343_add_profile_id_on_event/migration.sql create mode 100644 apps/web/prisma/migrations/20231010202552_profile_nullable_on_events/migration.sql create mode 100644 apps/web/prisma/migrations/20231011063223_rename_profile_id_to_external/migration.sql create mode 100644 apps/web/prisma/migrations/20231011064100_add_unique_external_id_and_project_id/migration.sql create mode 100644 apps/web/prisma/migrations/20231012082544_external_id_optional/migration.sql create mode 100644 apps/web/prisma/migrations/migration_lock.toml create mode 100644 apps/web/prisma/schema.prisma create mode 100644 apps/web/public/favicon.ico create mode 100644 apps/web/src/env.mjs create mode 100644 apps/web/src/pages/_app.tsx create mode 100644 apps/web/src/pages/api/auth/[...nextauth].ts create mode 100644 apps/web/src/pages/api/sdk/events.ts create mode 100644 apps/web/src/pages/api/sdk/profiles/[profileId]/decrement.ts create mode 100644 apps/web/src/pages/api/sdk/profiles/[profileId]/increment.ts create mode 100644 apps/web/src/pages/api/sdk/profiles/[profileId]/index.ts create mode 100644 apps/web/src/pages/api/sdk/profiles/index.ts create mode 100644 apps/web/src/pages/api/setup.ts create mode 100644 apps/web/src/pages/api/trpc/[trpc].ts create mode 100644 apps/web/src/pages/index.tsx create mode 100644 apps/web/src/server/api/root.ts create mode 100644 apps/web/src/server/api/routers/example.ts create mode 100644 apps/web/src/server/api/trpc.ts create mode 100644 apps/web/src/server/auth.ts create mode 100644 apps/web/src/server/db.ts create mode 100644 apps/web/src/server/exceptions.ts create mode 100644 apps/web/src/services/hash.service.ts create mode 100644 apps/web/src/services/profile.service.ts create mode 100644 apps/web/src/styles/globals.css create mode 100644 apps/web/src/utils/api.ts create mode 100644 apps/web/tailwind.config.ts create mode 100644 apps/web/tsconfig.json diff --git a/apps/web/.env.example b/apps/web/.env.example new file mode 100644 index 00000000..c1464a2f --- /dev/null +++ b/apps/web/.env.example @@ -0,0 +1,25 @@ +# Since the ".env" file is gitignored, you can use the ".env.example" file to +# build a new ".env" file when you clone the repo. Keep this file up-to-date +# when you add new variables to `.env`. + +# This file will be committed to version control, so make sure not to have any +# secrets in it. If you are cloning this repo, create a copy of this file named +# ".env" and populate it with your secrets. + +# When adding additional environment variables, the schema in "/src/env.mjs" +# should be updated accordingly. + +# Prisma +# https://www.prisma.io/docs/reference/database-reference/connection-urls#env +DATABASE_URL="file:./db.sqlite" + +# Next Auth +# You can generate a new secret on the command line with: +# openssl rand -base64 32 +# https://next-auth.js.org/configuration/options#secret +# NEXTAUTH_SECRET="" +NEXTAUTH_URL="http://localhost:3000" + +# Next Auth Discord Provider +DISCORD_CLIENT_ID="" +DISCORD_CLIENT_SECRET="" diff --git a/apps/web/.eslintrc.cjs b/apps/web/.eslintrc.cjs new file mode 100644 index 00000000..f15a4d58 --- /dev/null +++ b/apps/web/.eslintrc.cjs @@ -0,0 +1,30 @@ +/** @type {import("eslint").Linter.Config} */ +const config = { + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + plugins: ["@typescript-eslint"], + extends: [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + ], + rules: { + // These opinionated rules are enabled in stylistic-type-checked above. + // Feel free to reconfigure them to your own preference. + "@typescript-eslint/array-type": "off", + "@typescript-eslint/consistent-type-definitions": "off", + + "@typescript-eslint/consistent-type-imports": [ + "warn", + { + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, + ], + "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], + }, +}; + +module.exports = config; diff --git a/apps/web/.gitignore b/apps/web/.gitignore new file mode 100644 index 00000000..2971a0bd --- /dev/null +++ b/apps/web/.gitignore @@ -0,0 +1,42 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# database +/prisma/db.sqlite +/prisma/db.sqlite-journal + +# next.js +/.next/ +/out/ +next-env.d.ts + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables +.env +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo diff --git a/apps/web/README.md b/apps/web/README.md new file mode 100644 index 00000000..fba19eda --- /dev/null +++ b/apps/web/README.md @@ -0,0 +1,28 @@ +# Create T3 App + +This is a [T3 Stack](https://create.t3.gg/) project bootstrapped with `create-t3-app`. + +## What's next? How do I make an app with this? + +We try to keep this project as simple as possible, so you can start with just the scaffolding we set up for you, and add additional things later when they become necessary. + +If you are not familiar with the different technologies used in this project, please refer to the respective docs. If you still are in the wind, please join our [Discord](https://t3.gg/discord) and ask for help. + +- [Next.js](https://nextjs.org) +- [NextAuth.js](https://next-auth.js.org) +- [Prisma](https://prisma.io) +- [Tailwind CSS](https://tailwindcss.com) +- [tRPC](https://trpc.io) + +## Learn More + +To learn more about the [T3 Stack](https://create.t3.gg/), take a look at the following resources: + +- [Documentation](https://create.t3.gg/) +- [Learn the T3 Stack](https://create.t3.gg/en/faq#what-learning-resources-are-currently-available) — Check out these awesome tutorials + +You can check out the [create-t3-app GitHub repository](https://github.com/t3-oss/create-t3-app) — your feedback and contributions are welcome! + +## How do I deploy this? + +Follow our deployment guides for [Vercel](https://create.t3.gg/en/deployment/vercel), [Netlify](https://create.t3.gg/en/deployment/netlify) and [Docker](https://create.t3.gg/en/deployment/docker) for more information. diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs new file mode 100644 index 00000000..61964ea7 --- /dev/null +++ b/apps/web/next.config.mjs @@ -0,0 +1,22 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ +await import("./src/env.mjs"); + +/** @type {import("next").NextConfig} */ +const config = { + reactStrictMode: true, + + /** + * If you are using `appDir` then you must comment the below `i18n` config out. + * + * @see https://github.com/vercel/next.js/issues/41980 + */ + i18n: { + locales: ["en"], + defaultLocale: "en", + }, +}; + +export default config; diff --git a/apps/web/package.json b/apps/web/package.json new file mode 100644 index 00000000..de4ba97a --- /dev/null +++ b/apps/web/package.json @@ -0,0 +1,54 @@ +{ + "name": "web", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "next build", + "db:push": "prisma db push", + "dev": "next dev", + "postinstall": "prisma generate", + "lint": "next lint", + "start": "next start" + }, + "dependencies": { + "@mixan/types": "^0.0.2-alpha", + "@next-auth/prisma-adapter": "^1.0.7", + "@prisma/client": "^5.1.1", + "@t3-oss/env-nextjs": "^0.7.0", + "@tanstack/react-query": "^4.32.6", + "@trpc/client": "^10.37.1", + "@trpc/next": "^10.37.1", + "@trpc/react-query": "^10.37.1", + "@trpc/server": "^10.37.1", + "bcrypt": "^5.1.1", + "next": "^13.5.4", + "next-auth": "^4.23.0", + "random-animal-name": "^0.1.1", + "react": "18.2.0", + "react-dom": "18.2.0", + "superjson": "^1.13.1", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/bcrypt": "^5.0.0", + "@types/eslint": "^8.44.2", + "@types/node": "^18.16.0", + "@types/react": "^18.2.20", + "@types/react-dom": "^18.2.7", + "@typescript-eslint/eslint-plugin": "^6.3.0", + "@typescript-eslint/parser": "^6.3.0", + "autoprefixer": "^10.4.14", + "eslint": "^8.47.0", + "eslint-config-next": "^13.5.4", + "postcss": "^8.4.27", + "prettier": "^3.0.0", + "prettier-plugin-tailwindcss": "^0.5.1", + "prisma": "^5.1.1", + "tailwindcss": "^3.3.3", + "typescript": "^5.1.6" + }, + "ct3aMetadata": { + "initVersion": "7.21.0" + }, + "packageManager": "npm@9.8.1" +} diff --git a/apps/web/postcss.config.cjs b/apps/web/postcss.config.cjs new file mode 100644 index 00000000..e305dd92 --- /dev/null +++ b/apps/web/postcss.config.cjs @@ -0,0 +1,8 @@ +const config = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; + +module.exports = config; diff --git a/apps/web/prettier.config.mjs b/apps/web/prettier.config.mjs new file mode 100644 index 00000000..2d2fa4c9 --- /dev/null +++ b/apps/web/prettier.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').options} */ +const config = { + plugins: ["prettier-plugin-tailwindcss"], +}; + +export default config; diff --git a/apps/web/prisma/migrations/20231010091416_init/migration.sql b/apps/web/prisma/migrations/20231010091416_init/migration.sql new file mode 100644 index 00000000..3fb3b5d4 --- /dev/null +++ b/apps/web/prisma/migrations/20231010091416_init/migration.sql @@ -0,0 +1,59 @@ +-- CreateTable +CREATE TABLE "organizations" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "name" TEXT NOT NULL, + + CONSTRAINT "organizations_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "projects" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "name" TEXT NOT NULL, + "organization_id" UUID NOT NULL, + + CONSTRAINT "projects_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "users" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "name" TEXT NOT NULL, + "email" TEXT NOT NULL, + "password" TEXT NOT NULL, + "organization_id" UUID NOT NULL, + + CONSTRAINT "users_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "events" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "name" TEXT NOT NULL, + "properties" JSONB NOT NULL, + "project_id" UUID NOT NULL, + + CONSTRAINT "events_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "profiles" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "name" TEXT NOT NULL, + "properties" JSONB NOT NULL, + "project_id" UUID NOT NULL, + + CONSTRAINT "profiles_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "projects" ADD CONSTRAINT "projects_organization_id_fkey" FOREIGN KEY ("organization_id") REFERENCES "organizations"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "users" ADD CONSTRAINT "users_organization_id_fkey" FOREIGN KEY ("organization_id") REFERENCES "organizations"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "events" ADD CONSTRAINT "events_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "profiles" ADD CONSTRAINT "profiles_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/web/prisma/migrations/20231010094459_add_dates/migration.sql b/apps/web/prisma/migrations/20231010094459_add_dates/migration.sql new file mode 100644 index 00000000..81e72e4b --- /dev/null +++ b/apps/web/prisma/migrations/20231010094459_add_dates/migration.sql @@ -0,0 +1,19 @@ +-- AlterTable +ALTER TABLE "events" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "organizations" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "profiles" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "projects" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "users" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/apps/web/prisma/migrations/20231010184810_fix_profile/migration.sql b/apps/web/prisma/migrations/20231010184810_fix_profile/migration.sql new file mode 100644 index 00000000..1eca309e --- /dev/null +++ b/apps/web/prisma/migrations/20231010184810_fix_profile/migration.sql @@ -0,0 +1,10 @@ +/* + Warnings: + + - You are about to drop the column `name` on the `profiles` table. All the data in the column will be lost. + - Added the required column `profile_id` to the `profiles` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "profiles" DROP COLUMN "name", +ADD COLUMN "profile_id" TEXT NOT NULL; diff --git a/apps/web/prisma/migrations/20231010185023_add_profile_properties/migration.sql b/apps/web/prisma/migrations/20231010185023_add_profile_properties/migration.sql new file mode 100644 index 00000000..fdd80823 --- /dev/null +++ b/apps/web/prisma/migrations/20231010185023_add_profile_properties/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "profiles" ADD COLUMN "avatar" TEXT, +ADD COLUMN "email" TEXT, +ADD COLUMN "first_name" TEXT, +ADD COLUMN "last_name" TEXT; diff --git a/apps/web/prisma/migrations/20231010195623_add_client/migration.sql b/apps/web/prisma/migrations/20231010195623_add_client/migration.sql new file mode 100644 index 00000000..5d28ac9e --- /dev/null +++ b/apps/web/prisma/migrations/20231010195623_add_client/migration.sql @@ -0,0 +1,12 @@ +-- CreateTable +CREATE TABLE "clients" ( + "id" UUID NOT NULL DEFAULT gen_random_uuid(), + "name" TEXT NOT NULL, + "secret" TEXT NOT NULL, + "project_id" UUID NOT NULL, + + CONSTRAINT "clients_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "clients" ADD CONSTRAINT "clients_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/web/prisma/migrations/20231010195805_add_timestamps_on_client/migration.sql b/apps/web/prisma/migrations/20231010195805_add_timestamps_on_client/migration.sql new file mode 100644 index 00000000..1a9aea58 --- /dev/null +++ b/apps/web/prisma/migrations/20231010195805_add_timestamps_on_client/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "clients" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/apps/web/prisma/migrations/20231010202343_add_profile_id_on_event/migration.sql b/apps/web/prisma/migrations/20231010202343_add_profile_id_on_event/migration.sql new file mode 100644 index 00000000..c8709ccc --- /dev/null +++ b/apps/web/prisma/migrations/20231010202343_add_profile_id_on_event/migration.sql @@ -0,0 +1,11 @@ +/* + Warnings: + + - Added the required column `profile_id` to the `events` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "events" ADD COLUMN "profile_id" UUID NOT NULL; + +-- AddForeignKey +ALTER TABLE "events" ADD CONSTRAINT "events_profile_id_fkey" FOREIGN KEY ("profile_id") REFERENCES "profiles"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/web/prisma/migrations/20231010202552_profile_nullable_on_events/migration.sql b/apps/web/prisma/migrations/20231010202552_profile_nullable_on_events/migration.sql new file mode 100644 index 00000000..511459c8 --- /dev/null +++ b/apps/web/prisma/migrations/20231010202552_profile_nullable_on_events/migration.sql @@ -0,0 +1,8 @@ +-- DropForeignKey +ALTER TABLE "events" DROP CONSTRAINT "events_profile_id_fkey"; + +-- AlterTable +ALTER TABLE "events" ALTER COLUMN "profile_id" DROP NOT NULL; + +-- AddForeignKey +ALTER TABLE "events" ADD CONSTRAINT "events_profile_id_fkey" FOREIGN KEY ("profile_id") REFERENCES "profiles"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/apps/web/prisma/migrations/20231011063223_rename_profile_id_to_external/migration.sql b/apps/web/prisma/migrations/20231011063223_rename_profile_id_to_external/migration.sql new file mode 100644 index 00000000..3da7a1d7 --- /dev/null +++ b/apps/web/prisma/migrations/20231011063223_rename_profile_id_to_external/migration.sql @@ -0,0 +1,10 @@ +/* + Warnings: + + - You are about to drop the column `profile_id` on the `profiles` table. All the data in the column will be lost. + - Added the required column `external_id` to the `profiles` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "profiles" DROP COLUMN "profile_id", +ADD COLUMN "external_id" TEXT NOT NULL; diff --git a/apps/web/prisma/migrations/20231011064100_add_unique_external_id_and_project_id/migration.sql b/apps/web/prisma/migrations/20231011064100_add_unique_external_id_and_project_id/migration.sql new file mode 100644 index 00000000..eafa2140 --- /dev/null +++ b/apps/web/prisma/migrations/20231011064100_add_unique_external_id_and_project_id/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - A unique constraint covering the columns `[project_id,external_id]` on the table `profiles` will be added. If there are existing duplicate values, this will fail. + +*/ +-- CreateIndex +CREATE UNIQUE INDEX "profiles_project_id_external_id_key" ON "profiles"("project_id", "external_id"); diff --git a/apps/web/prisma/migrations/20231012082544_external_id_optional/migration.sql b/apps/web/prisma/migrations/20231012082544_external_id_optional/migration.sql new file mode 100644 index 00000000..98890914 --- /dev/null +++ b/apps/web/prisma/migrations/20231012082544_external_id_optional/migration.sql @@ -0,0 +1,5 @@ +-- DropIndex +DROP INDEX "profiles_project_id_external_id_key"; + +-- AlterTable +ALTER TABLE "profiles" ALTER COLUMN "external_id" DROP NOT NULL; diff --git a/apps/web/prisma/migrations/migration_lock.toml b/apps/web/prisma/migrations/migration_lock.toml new file mode 100644 index 00000000..fbffa92c --- /dev/null +++ b/apps/web/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/apps/web/prisma/schema.prisma b/apps/web/prisma/schema.prisma new file mode 100644 index 00000000..d40ef1e7 --- /dev/null +++ b/apps/web/prisma/schema.prisma @@ -0,0 +1,99 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model Organization { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String + projects Project[] + users User[] + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@map("organizations") +} + +model Project { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String + organization_id String @db.Uuid + organization Organization @relation(fields: [organization_id], references: [id]) + events Event[] + profiles Profile[] + clients Client[] + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@map("projects") +} + +model User { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String + email String + password String + organization_id String @db.Uuid + organization Organization @relation(fields: [organization_id], references: [id]) + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@map("users") +} + +model Event { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String + properties Json + project_id String @db.Uuid + project Project @relation(fields: [project_id], references: [id]) + + profile_id String? @db.Uuid + profile Profile? @relation(fields: [profile_id], references: [id]) + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@map("events") +} + +model Profile { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + external_id String? + first_name String? + last_name String? + email String? + avatar String? + properties Json + project_id String @db.Uuid + project Project @relation(fields: [project_id], references: [id]) + events Event[] + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@map("profiles") +} + +model Client { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String + secret String + project_id String @db.Uuid + project Project @relation(fields: [project_id], references: [id]) + + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@map("clients") +} diff --git a/apps/web/public/favicon.ico b/apps/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b5336a48e6e7341e6e866c5f477d1a006dc6bf9e GIT binary patch literal 23600 zcmeI4YmXFF5QckMt_#9~A|eR0un<@-0Td&mM&yGDL5La*i5i4>L8E>%(V+2{5q^?? z!ER>HQ`Oydy3aY?Jv$3Mf%G$Vs@|$o)6>(}&9a4TF zKg<4m_B6L%y0q?b`nly`mYvD{@~}K=I+8Co#VeoB^xtjhhAtfID%1d1b*N@D#yK!} z14@QRPE;>VwZegct&j;zCFe!c2jiPMbtw>+9Gnxjf1rHjk{8xxNJDMDdJq=5I^ksZ z;MZyd{u-)I`aOORAPrZvZ^3#H)=n5j@O~-q8$2{<3CDUIR)hJM8M6srVBHJ-2IZTI z`ioHw+6{ZligsHERT+^(&}&{F`=clDQx}Nk4%9n*j$%ty&$m-J--U*Qw~*cj{S5&- zUAs2xviLEZqF~D$OqSbISAMd4F{)u zRru`TrQEV42tNjG6x_Ay^V!0StWBHHeNZyUY9)Is$zmV*CR??KXYfxxTqE~9>#bl< zln%~2s)E*gyj!6(O}y=WYKALt!YZM#;n%XmhTjw(`1G{B64UUuG{sU`Ps}Kt#bSa! zgnVFyS8cx7y1h1$LJBvTjQ42Mr6y(z)BrB3Y1t5788Ro)BwZb==$UV;G1hxC&@^@` z8AUk`!c+&V(5kH-<+Jot_|HCh?9~db_c*sga@8oGfMSUxiEK-Y9C zta5mL4_gRmu_g}Dn)-O>gT$AR57;8%um;7#-ll2kv2bB?ii8JkB=H6=yIQck2br+X z1%xb31=DCwu1JCRE+`7lyE=(VI@ln(6}&Sk&1R`p$8;!;?UP@oqG@cLLy@1T#QnoO zel>L-B0_X15cPD<&2#>FANi z4!n#VC^k98W$N$p|Kk;+yb0rL?7-N8u> zC0*N2##f+QjdY#SpvyF_KB6YjPtZUh7m#Vb8pd&yW@f| z4R>_=d`y6x62cS<+)nFD=ChM%sBWGmLoEDBK=8UkM0!>vw)k4sWGA}kb{09&{tF6$ zNmISnScqt|PyPr?{0qq;TPIgIpODXlh1dz8lD?5_y})VJMBV|~R^&rpS|{t@4XdIy z8;WuuizyI-ZgZ>Ff%ZV1a{0&;y$;nBkP3t!oI=bJ?ScCeQ*uD&J3THQCFK@GAj4JoyXP%bdp#m@4(F?j~pc4#O4FJd9k!dfV-R`$J7@b zk8Py(r-)fKRUQ~8bs&_Uqaa4kamy|%g9#uXWYWQ*>n)iF>?=81o_NJC9EuZh#U=Xn z7lHBsE2cnLb6Q=NvajO*~BQ$s(JFmBR@A3 z(FIDEjS!M=!S<#$#EzjqaNAs66I4ppIUETR%fu5b8r^2cYj8NvIIGsRd8Rr z%u>!K$irt0c7fvWJ9%FS%kwPOMbH)eUS5(*XzZ63ZKX5mTU8`9cps$0=^iw~KpiOk zO{>zUEyroSq<+KthNAos8eujaIHErfQpz@39=v0)3+&P9O6%G9(Xaodzb@@fj;(zy zQMv~80=xAJfZ}~3F~N?M&PZ@bGy_OwQ5DPS#1LJ<_wM%{`dVtJ*!&j4VJq eAi2Y^nY=fz>F@5yV+Y0#j2##|Fm_;GJMceGE{$0L literal 0 HcmV?d00001 diff --git a/apps/web/src/env.mjs b/apps/web/src/env.mjs new file mode 100644 index 00000000..a95f519c --- /dev/null +++ b/apps/web/src/env.mjs @@ -0,0 +1,62 @@ +import { createEnv } from "@t3-oss/env-nextjs"; +import { z } from "zod"; + +export const env = createEnv({ + /** + * Specify your server-side environment variables schema here. This way you can ensure the app + * isn't built with invalid env vars. + */ + server: { + DATABASE_URL: z + .string() + .url() + .refine( + (str) => !str.includes("YOUR_MYSQL_URL_HERE"), + "You forgot to change the default URL" + ), + NODE_ENV: z + .enum(["development", "test", "production"]) + .default("development"), + NEXTAUTH_SECRET: + process.env.NODE_ENV === "production" + ? z.string() + : z.string().optional(), + NEXTAUTH_URL: z.preprocess( + // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL + // Since NextAuth.js automatically uses the VERCEL_URL if present. + (str) => process.env.VERCEL_URL ?? str, + // VERCEL_URL doesn't include `https` so it cant be validated as a URL + process.env.VERCEL ? z.string() : z.string().url() + ), + }, + + /** + * Specify your client-side environment variables schema here. This way you can ensure the app + * isn't built with invalid env vars. To expose them to the client, prefix them with + * `NEXT_PUBLIC_`. + */ + client: { + // NEXT_PUBLIC_CLIENTVAR: z.string(), + }, + + /** + * You can't destruct `process.env` as a regular object in the Next.js edge runtimes (e.g. + * middlewares) or client-side so we need to destruct manually. + */ + runtimeEnv: { + DATABASE_URL: process.env.DATABASE_URL, + NODE_ENV: process.env.NODE_ENV, + NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, + NEXTAUTH_URL: process.env.NEXTAUTH_URL, + }, + /** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially + * useful for Docker builds. + */ + skipValidation: !!process.env.SKIP_ENV_VALIDATION, + /** + * Makes it so that empty strings are treated as undefined. + * `SOME_VAR: z.string()` and `SOME_VAR=''` will throw an error. + */ + emptyStringAsUndefined: true, +}); diff --git a/apps/web/src/pages/_app.tsx b/apps/web/src/pages/_app.tsx new file mode 100644 index 00000000..2843ab6e --- /dev/null +++ b/apps/web/src/pages/_app.tsx @@ -0,0 +1,20 @@ +import { type Session } from "next-auth"; +import { SessionProvider } from "next-auth/react"; +import { type AppType } from "next/app"; + +import { api } from "@/utils/api"; + +import "@/styles/globals.css"; + +const MyApp: AppType<{ session: Session | null }> = ({ + Component, + pageProps: { session, ...pageProps }, +}) => { + return ( + + + + ); +}; + +export default api.withTRPC(MyApp); diff --git a/apps/web/src/pages/api/auth/[...nextauth].ts b/apps/web/src/pages/api/auth/[...nextauth].ts new file mode 100644 index 00000000..05aa2a35 --- /dev/null +++ b/apps/web/src/pages/api/auth/[...nextauth].ts @@ -0,0 +1,5 @@ +import NextAuth from "next-auth"; + +import { authOptions } from "@/server/auth"; + +export default NextAuth(authOptions); diff --git a/apps/web/src/pages/api/sdk/events.ts b/apps/web/src/pages/api/sdk/events.ts new file mode 100644 index 00000000..b813ca1d --- /dev/null +++ b/apps/web/src/pages/api/sdk/events.ts @@ -0,0 +1,37 @@ +import { validateSdkRequest } from '@/server/auth' +import { db } from '@/server/db' +import { createError, handleError } from '@/server/exceptions' +import { EventPayload } from '@mixan/types' +import type { NextApiRequest, NextApiResponse } from 'next' + +interface Request extends NextApiRequest { + body: Array +} + +export default async function handler( + req: Request, + res: NextApiResponse +) { + if(req.method !== 'POST') { + return handleError(res, createError(405, 'Method not allowed')) + } + + try { + // Check client id & secret + const projectId = await validateSdkRequest(req) + + await db.event.createMany({ + data: req.body.map((event) => ({ + name: event.name, + properties: event.properties, + createdAt: event.time, + project_id: projectId, + profile_id: event.profileId, + })) + }) + + res.status(200).end() + } catch (error) { + handleError(res, error) + } +} \ No newline at end of file diff --git a/apps/web/src/pages/api/sdk/profiles/[profileId]/decrement.ts b/apps/web/src/pages/api/sdk/profiles/[profileId]/decrement.ts new file mode 100644 index 00000000..ffea7826 --- /dev/null +++ b/apps/web/src/pages/api/sdk/profiles/[profileId]/decrement.ts @@ -0,0 +1,33 @@ +import { validateSdkRequest } from "@/server/auth"; +import { db } from "@/server/db"; +import { createError, handleError } from "@/server/exceptions"; +import { tickProfileProperty } from "@/services/profile.service"; +import { ProfileIncrementPayload, ProfilePayload } from "@mixan/types"; +import type { NextApiRequest, NextApiResponse } from "next"; + +interface Request extends NextApiRequest { + body: ProfileIncrementPayload; +} + +export default async function handler(req: Request, res: NextApiResponse) { + if (req.method !== "PUT") { + return handleError(res, createError(405, "Method not allowed")); + } + + try { + // Check client id & secret + await validateSdkRequest(req) + + const profileId = req.query.profileId as string; + + await tickProfileProperty({ + name: req.body.name, + tick: -Math.abs(req.body.value), + profileId, + }); + + res.status(200).end(); + } catch (error) { + handleError(res, error); + } +} diff --git a/apps/web/src/pages/api/sdk/profiles/[profileId]/increment.ts b/apps/web/src/pages/api/sdk/profiles/[profileId]/increment.ts new file mode 100644 index 00000000..a234dca3 --- /dev/null +++ b/apps/web/src/pages/api/sdk/profiles/[profileId]/increment.ts @@ -0,0 +1,33 @@ +import { validateSdkRequest } from "@/server/auth"; +import { db } from "@/server/db"; +import { createError, handleError } from "@/server/exceptions"; +import { tickProfileProperty } from "@/services/profile.service"; +import { ProfileIncrementPayload, ProfilePayload } from "@mixan/types"; +import type { NextApiRequest, NextApiResponse } from "next"; + +interface Request extends NextApiRequest { + body: ProfileIncrementPayload; +} + +export default async function handler(req: Request, res: NextApiResponse) { + if (req.method !== "PUT") { + return handleError(res, createError(405, "Method not allowed")); + } + + try { + // Check client id & secret + await validateSdkRequest(req) + + const profileId = req.query.profileId as string; + + await tickProfileProperty({ + name: req.body.name, + tick: req.body.value, + profileId, + }); + + res.status(200).end(); + } catch (error) { + handleError(res, error); + } +} diff --git a/apps/web/src/pages/api/sdk/profiles/[profileId]/index.ts b/apps/web/src/pages/api/sdk/profiles/[profileId]/index.ts new file mode 100644 index 00000000..f243d021 --- /dev/null +++ b/apps/web/src/pages/api/sdk/profiles/[profileId]/index.ts @@ -0,0 +1,48 @@ +import { validateSdkRequest } from "@/server/auth"; +import { db } from "@/server/db"; +import { createError, handleError } from "@/server/exceptions"; +import { getProfile } from "@/services/profile.service"; +import { ProfilePayload } from "@mixan/types"; +import type { NextApiRequest, NextApiResponse } from "next"; + +interface Request extends NextApiRequest { + body: ProfilePayload; +} + +export default async function handler(req: Request, res: NextApiResponse) { + if (req.method !== "PUT" && req.method !== "POST") { + return handleError(res, createError(405, "Method not allowed")); + } + + try { + // Check client id & secret + await validateSdkRequest(req) + + const profileId = req.query.profileId as string; + const profile = await getProfile(profileId) + + const { body } = req; + await db.profile.update({ + where: { + id: profileId, + }, + data: { + external_id: body.id, + email: body.email, + first_name: body.first_name, + last_name: body.last_name, + avatar: body.avatar, + properties: { + ...(typeof profile.properties === "object" + ? profile.properties || {} + : {}), + ...(body.properties || {}), + }, + }, + }); + + res.status(200).end(); + } catch (error) { + handleError(res, error); + } +} diff --git a/apps/web/src/pages/api/sdk/profiles/index.ts b/apps/web/src/pages/api/sdk/profiles/index.ts new file mode 100644 index 00000000..f70c8ee6 --- /dev/null +++ b/apps/web/src/pages/api/sdk/profiles/index.ts @@ -0,0 +1,46 @@ +import { validateSdkRequest } from '@/server/auth' +import { db } from '@/server/db' +import { createError, handleError } from '@/server/exceptions' +import type { NextApiRequest, NextApiResponse } from 'next' +import randomAnimalName from 'random-animal-name' + +interface Request extends NextApiRequest { + body: { + id: string + properties?: Record + } +} + +export default async function handler( + req: Request, + res: NextApiResponse +) { + if(req.method !== 'POST') { + return handleError(res, createError(405, 'Method not allowed')) + } + + try { + // Check client id & secret + const projectId = await validateSdkRequest(req) + + const { id, properties } = req.body + await db.profile.create({ + data: { + id, + external_id: null, + email: null, + first_name: randomAnimalName(), + last_name: null, + avatar: null, + properties: { + ...(properties || {}), + }, + project_id: projectId, + }, + }) + + res.status(200).end() + } catch (error) { + handleError(res, error) + } +} \ No newline at end of file diff --git a/apps/web/src/pages/api/setup.ts b/apps/web/src/pages/api/setup.ts new file mode 100644 index 00000000..d9624933 --- /dev/null +++ b/apps/web/src/pages/api/setup.ts @@ -0,0 +1,47 @@ +import { db } from "@/server/db"; +import { handleError } from "@/server/exceptions"; +import { hashPassword } from "@/services/hash.service"; +import { randomUUID } from "crypto"; +import { NextApiRequest, NextApiResponse } from "next"; + +export default async function (req: NextApiRequest, res: NextApiResponse) { + try { + const counts = await db.$transaction([ + db.organization.count(), + db.project.count(), + db.client.count(), + ]); + + if (counts.some((count) => count > 0)) { + return res.json("Setup already done"); + } + + const organization = await db.organization.create({ + data: { + name: "Acme Inc.", + }, + }); + + const project = await db.project.create({ + data: { + name: "Acme Website", + organization_id: organization.id, + }, + }); + const secret = randomUUID(); + const client = await db.client.create({ + data: { + name: "Acme Website Client", + project_id: project.id, + secret: await hashPassword(secret), + }, + }); + + res.json({ + clientId: client.id, + clientSecret: secret, + }); + } catch (error) { + handleError(res, error); + } +} diff --git a/apps/web/src/pages/api/trpc/[trpc].ts b/apps/web/src/pages/api/trpc/[trpc].ts new file mode 100644 index 00000000..4e981b57 --- /dev/null +++ b/apps/web/src/pages/api/trpc/[trpc].ts @@ -0,0 +1,19 @@ +import { createNextApiHandler } from "@trpc/server/adapters/next"; + +import { env } from "@/env.mjs"; +import { appRouter } from "@/server/api/root"; +import { createTRPCContext } from "@/server/api/trpc"; + +// export API handler +export default createNextApiHandler({ + router: appRouter, + createContext: createTRPCContext, + onError: + env.NODE_ENV === "development" + ? ({ path, error }) => { + console.error( + `❌ tRPC failed on ${path ?? ""}: ${error.message}` + ); + } + : undefined, +}); diff --git a/apps/web/src/pages/index.tsx b/apps/web/src/pages/index.tsx new file mode 100644 index 00000000..365788da --- /dev/null +++ b/apps/web/src/pages/index.tsx @@ -0,0 +1,80 @@ +import { signIn, signOut, useSession } from "next-auth/react"; +import Head from "next/head"; +import Link from "next/link"; + +import { api } from "@/utils/api"; + +export default function Home() { + const hello = api.example.hello.useQuery({ text: "from tRPC" }); + + return ( + <> + + Create T3 App + + + +
+
+

+ Create T3 App +

+
+ +

First Steps →

+
+ Just the basics - Everything you need to know to set up your + database and authentication. +
+ + +

Documentation →

+
+ Learn more about Create T3 App, the libraries it uses, and how + to deploy it. +
+ +
+
+

+ {hello.data ? hello.data.greeting : "Loading tRPC query..."} +

+ +
+
+
+ + ); +} + +function AuthShowcase() { + const { data: sessionData } = useSession(); + + const { data: secretMessage } = api.example.getSecretMessage.useQuery( + undefined, // no input + { enabled: sessionData?.user !== undefined } + ); + + return ( +
+

+ {sessionData && Logged in as {sessionData.user?.name}} + {secretMessage && - {secretMessage}} +

+ +
+ ); +} diff --git a/apps/web/src/server/api/root.ts b/apps/web/src/server/api/root.ts new file mode 100644 index 00000000..0a794406 --- /dev/null +++ b/apps/web/src/server/api/root.ts @@ -0,0 +1,14 @@ +import { exampleRouter } from "@/server/api/routers/example"; +import { createTRPCRouter } from "@/server/api/trpc"; + +/** + * This is the primary router for your server. + * + * All routers added in /api/routers should be manually added here. + */ +export const appRouter = createTRPCRouter({ + example: exampleRouter, +}); + +// export type definition of API +export type AppRouter = typeof appRouter; diff --git a/apps/web/src/server/api/routers/example.ts b/apps/web/src/server/api/routers/example.ts new file mode 100644 index 00000000..8d0d4637 --- /dev/null +++ b/apps/web/src/server/api/routers/example.ts @@ -0,0 +1,25 @@ +import { z } from "zod"; + +import { + createTRPCRouter, + protectedProcedure, + publicProcedure, +} from "@/server/api/trpc"; + +export const exampleRouter = createTRPCRouter({ + hello: publicProcedure + .input(z.object({ text: z.string() })) + .query(({ input }) => { + return { + greeting: `Hello ${input.text}`, + }; + }), + + getAll: publicProcedure.query(({ ctx }) => { + return ctx.db.example.findMany(); + }), + + getSecretMessage: protectedProcedure.query(() => { + return "you can now see this secret message!"; + }), +}); diff --git a/apps/web/src/server/api/trpc.ts b/apps/web/src/server/api/trpc.ts new file mode 100644 index 00000000..b7651424 --- /dev/null +++ b/apps/web/src/server/api/trpc.ts @@ -0,0 +1,131 @@ +/** + * YOU PROBABLY DON'T NEED TO EDIT THIS FILE, UNLESS: + * 1. You want to modify request context (see Part 1). + * 2. You want to create a new middleware or type of procedure (see Part 3). + * + * TL;DR - This is where all the tRPC server stuff is created and plugged in. The pieces you will + * need to use are documented accordingly near the end. + */ + +import { initTRPC, TRPCError } from "@trpc/server"; +import { type CreateNextContextOptions } from "@trpc/server/adapters/next"; +import { type Session } from "next-auth"; +import superjson from "superjson"; +import { ZodError } from "zod"; + +import { getServerAuthSession } from "@/server/auth"; +import { db } from "@/server/db"; + +/** + * 1. CONTEXT + * + * This section defines the "contexts" that are available in the backend API. + * + * These allow you to access things when processing a request, like the database, the session, etc. + */ + +interface CreateContextOptions { + session: Session | null; +} + +/** + * This helper generates the "internals" for a tRPC context. If you need to use it, you can export + * it from here. + * + * Examples of things you may need it for: + * - testing, so we don't have to mock Next.js' req/res + * - tRPC's `createSSGHelpers`, where we don't have req/res + * + * @see https://create.t3.gg/en/usage/trpc#-serverapitrpcts + */ +const createInnerTRPCContext = (opts: CreateContextOptions) => { + return { + session: opts.session, + db, + }; +}; + +/** + * This is the actual context you will use in your router. It will be used to process every request + * that goes through your tRPC endpoint. + * + * @see https://trpc.io/docs/context + */ +export const createTRPCContext = async (opts: CreateNextContextOptions) => { + const { req, res } = opts; + + // Get the session from the server using the getServerSession wrapper function + const session = await getServerAuthSession({ req, res }); + + return createInnerTRPCContext({ + session, + }); +}; + +/** + * 2. INITIALIZATION + * + * This is where the tRPC API is initialized, connecting the context and transformer. We also parse + * ZodErrors so that you get typesafety on the frontend if your procedure fails due to validation + * errors on the backend. + */ + +const t = initTRPC.context().create({ + transformer: superjson, + errorFormatter({ shape, error }) { + return { + ...shape, + data: { + ...shape.data, + zodError: + error.cause instanceof ZodError ? error.cause.flatten() : null, + }, + }; + }, +}); + +/** + * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT) + * + * These are the pieces you use to build your tRPC API. You should import these a lot in the + * "/src/server/api/routers" directory. + */ + +/** + * This is how you create new routers and sub-routers in your tRPC API. + * + * @see https://trpc.io/docs/router + */ +export const createTRPCRouter = t.router; + +/** + * Public (unauthenticated) procedure + * + * This is the base piece you use to build new queries and mutations on your tRPC API. It does not + * guarantee that a user querying is authorized, but you can still access user session data if they + * are logged in. + */ +export const publicProcedure = t.procedure; + +/** Reusable middleware that enforces users are logged in before running the procedure. */ +const enforceUserIsAuthed = t.middleware(({ ctx, next }) => { + if (!ctx.session?.user) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + return next({ + ctx: { + // infers the `session` as non-nullable + session: { ...ctx.session, user: ctx.session.user }, + }, + }); +}); + +/** + * Protected (authenticated) procedure + * + * If you want a query or mutation to ONLY be accessible to logged in users, use this. It verifies + * the session is valid and guarantees `ctx.session.user` is not null. + * + * @see https://trpc.io/docs/procedures + */ +export const protectedProcedure = t.procedure.use(enforceUserIsAuthed); diff --git a/apps/web/src/server/auth.ts b/apps/web/src/server/auth.ts new file mode 100644 index 00000000..73eef929 --- /dev/null +++ b/apps/web/src/server/auth.ts @@ -0,0 +1,123 @@ +import { PrismaAdapter } from "@next-auth/prisma-adapter"; +import { NextApiRequest, type GetServerSidePropsContext } from "next"; +import { + getServerSession, + type DefaultSession, + type NextAuthOptions, +} from "next-auth"; + +import { db } from "@/server/db"; +import Credentials from "next-auth/providers/credentials"; +import { createError } from "./exceptions"; +import { verifyPassword } from "@/services/hash.service"; + +/** + * Module augmentation for `next-auth` types. Allows us to add custom properties to the `session` + * object and keep type safety. + * + * @see https://next-auth.js.org/getting-started/typescript#module-augmentation + */ +declare module "next-auth" { + interface Session extends DefaultSession { + user: DefaultSession["user"] & { + id: string; + // ...other properties + // role: UserRole; + }; + } + + // interface User { + // // ...other properties + // // role: UserRole; + // } +} + +/** + * Options for NextAuth.js used to configure adapters, providers, callbacks, etc. + * + * @see https://next-auth.js.org/configuration/options + */ +export const authOptions: NextAuthOptions = { + callbacks: { + session: ({ session, user, token }) => ({ + ...session, + user: { + ...session.user, + id: token.sub, + }, + }), + }, + // adapter: PrismaAdapter(db), + providers: [ + Credentials({ + name: "Credentials", + credentials: { + email: { label: "Email", type: "text", placeholder: "jsmith" }, + password: { label: "Password", type: "password" }, + }, + async authorize(credentials) { + const user = await db.user.findFirst({ + where: { email: credentials?.email }, + }); + + if (user) { + return user; + } else { + return null; + } + }, + }), + /** + * ...add more providers here. + * + * Most other providers require a bit more work than the Discord provider. For example, the + * GitHub provider requires you to add the `refresh_token_expires_in` field to the Account + * model. Refer to the NextAuth.js docs for the provider you want to use. Example: + * + * @see https://next-auth.js.org/providers/github + */ + ], +}; + +/** + * Wrapper for `getServerSession` so that you don't need to import the `authOptions` in every file. + * + * @see https://next-auth.js.org/configuration/nextjs + */ +export const getServerAuthSession = (ctx: { + req: GetServerSidePropsContext["req"]; + res: GetServerSidePropsContext["res"]; +}) => { + return getServerSession(ctx.req, ctx.res, authOptions); +}; + +export async function validateSdkRequest(req: NextApiRequest): Promise { + const clientId = req?.headers["mixan-client-id"] as string | undefined + const clientSecret = req.headers["mixan-client-secret"] as string | undefined + + if (!clientId) { + throw createError(401, "Misisng client id"); + } + + if (!clientSecret) { + throw createError(401, "Misisng client secret"); + } + + const client = await db.client.findUnique({ + where: { + id: clientId, + }, + }); + + if (!client) { + throw createError(401, "Invalid client id"); + } + + + + if (!(await verifyPassword(clientSecret, client.secret))) { + throw createError(401, "Invalid client secret"); + } + + return client.project_id +} diff --git a/apps/web/src/server/db.ts b/apps/web/src/server/db.ts new file mode 100644 index 00000000..47fa369c --- /dev/null +++ b/apps/web/src/server/db.ts @@ -0,0 +1,16 @@ +import { PrismaClient } from "@prisma/client"; + +import { env } from "@/env.mjs"; + +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClient | undefined; +}; + +export const db = + globalForPrisma.prisma ?? + new PrismaClient({ + log: + env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"], + }); + +if (env.NODE_ENV !== "production") globalForPrisma.prisma = db; diff --git a/apps/web/src/server/exceptions.ts b/apps/web/src/server/exceptions.ts new file mode 100644 index 00000000..62e39ae0 --- /dev/null +++ b/apps/web/src/server/exceptions.ts @@ -0,0 +1,55 @@ +import { + MixanIssue, + MixanErrorResponse +} from '@mixan/types' +import { NextApiResponse } from 'next' + +export class HttpError extends Error { + public status: number + public message: string + public issues: MixanIssue[] + + constructor(status: number, message: string | Error, issues?: MixanIssue[]) { + super(message instanceof Error ? message.message : message) + this.status = status + this.message = message instanceof Error ? message.message : message + this.issues = issues || [] + } + + toJson(): MixanErrorResponse { + return { + code: this.status, + status: 'error', + message: this.message, + issues: this.issues.length ? this.issues : undefined, + stack: process.env.NODE_ENV !== 'production' ? this.stack : undefined, + } + } +} + +export function createIssues(arr: Array) { + throw new HttpError(400, 'Issues', arr) +} + +export function createError(status = 500, error: unknown | Error | string) { + if(error instanceof Error || typeof error === 'string') { + return new HttpError(status, error) + } + + return new HttpError(500, 'Unexpected error occured') +} + +export function handleError(res: NextApiResponse, error: Error | HttpError | unknown) { + if(error instanceof HttpError) { + return res.status(error.status).json(error.toJson()) + } + + if(error instanceof Error) { + const httpError = createError(500, error) + res.status(httpError.status).json(httpError.toJson()) + } + + + const httpError = createError(500, error) + res.status(httpError.status).json(httpError.toJson()) +} \ No newline at end of file diff --git a/apps/web/src/services/hash.service.ts b/apps/web/src/services/hash.service.ts new file mode 100644 index 00000000..fe402eb8 --- /dev/null +++ b/apps/web/src/services/hash.service.ts @@ -0,0 +1,40 @@ +import { scrypt, randomBytes, timingSafeEqual } from "crypto"; + +const keyLength = 32; +/** + * Has a password or a secret with a password hashing algorithm (scrypt) + * @param {string} password + * @returns {string} The salt+hash + */ +export async function hashPassword (password: string): Promise { + return new Promise((resolve, reject) => { + // generate random 16 bytes long salt - recommended by NodeJS Docs + const salt = randomBytes(16).toString("hex"); + scrypt(password, salt, keyLength, (err, derivedKey) => { + if (err) reject(err); + // derivedKey is of type Buffer + resolve(`${salt}.${derivedKey.toString("hex")}`); + }); + }); +}; + +/** + * Compare a plain text password with a salt+hash password + * @param {string} password The plain text password + * @param {string} hash The hash+salt to check against + * @returns {boolean} + */ +export async function verifyPassword (password: string, hash: string): Promise { + return new Promise((resolve, reject) => { + const [salt, hashKey] = hash.split("."); + // we need to pass buffer values to timingSafeEqual + const hashKeyBuff = Buffer.from(hashKey!, "hex"); + scrypt(password, salt!, keyLength, (err, derivedKey) => { + if (err) { + reject(err); + } + // compare the new supplied password with the hashed password using timeSafeEqual + resolve(timingSafeEqual(hashKeyBuff, derivedKey)); + }); + }); +}; diff --git a/apps/web/src/services/profile.service.ts b/apps/web/src/services/profile.service.ts new file mode 100644 index 00000000..637fc97f --- /dev/null +++ b/apps/web/src/services/profile.service.ts @@ -0,0 +1,51 @@ +import { db } from "@/server/db" +import { HttpError } from "@/server/exceptions" + +export function getProfile(id: string) { + return db.profile.findUniqueOrThrow({ + where: { + id, + }, + }) +} + +export async function tickProfileProperty({ + profileId, + tick, + name, +}: { + profileId: string + tick: number + name: string +}) { + const profile = await getProfile(profileId) + + if (!profile) { + throw new HttpError(404, `Profile not found ${profileId}`) + } + + const properties = ( + typeof profile.properties === 'object' ? profile.properties || {} : {} + ) as Record + const value = name in properties ? properties[name] : 0 + + if (typeof value !== 'number') { + throw new HttpError(400, `Property "${name}" on user is of type ${typeof value}`) + } + + if (typeof tick !== 'number') { + throw new HttpError(400, `Value is not a number ${tick} (${typeof tick})`) + } + + await db.profile.update({ + where: { + id: profileId, + }, + data: { + properties: { + ...properties, + [name]: value + tick, + }, + }, + }) +} \ No newline at end of file diff --git a/apps/web/src/styles/globals.css b/apps/web/src/styles/globals.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/apps/web/src/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/apps/web/src/utils/api.ts b/apps/web/src/utils/api.ts new file mode 100644 index 00000000..c4078648 --- /dev/null +++ b/apps/web/src/utils/api.ts @@ -0,0 +1,68 @@ +/** + * This is the client-side entrypoint for your tRPC API. It is used to create the `api` object which + * contains the Next.js App-wrapper, as well as your type-safe React Query hooks. + * + * We also create a few inference helpers for input and output types. + */ +import { httpBatchLink, loggerLink } from "@trpc/client"; +import { createTRPCNext } from "@trpc/next"; +import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server"; +import superjson from "superjson"; + +import { type AppRouter } from "@/server/api/root"; + +const getBaseUrl = () => { + if (typeof window !== "undefined") return ""; // browser should use relative url + if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url + return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost +}; + +/** A set of type-safe react-query hooks for your tRPC API. */ +export const api = createTRPCNext({ + config() { + return { + /** + * Transformer used for data de-serialization from the server. + * + * @see https://trpc.io/docs/data-transformers + */ + transformer: superjson, + + /** + * Links used to determine request flow from client to server. + * + * @see https://trpc.io/docs/links + */ + links: [ + loggerLink({ + enabled: (opts) => + process.env.NODE_ENV === "development" || + (opts.direction === "down" && opts.result instanceof Error), + }), + httpBatchLink({ + url: `${getBaseUrl()}/api/trpc`, + }), + ], + }; + }, + /** + * Whether tRPC should await queries when server rendering pages. + * + * @see https://trpc.io/docs/nextjs#ssr-boolean-default-false + */ + ssr: false, +}); + +/** + * Inference helper for inputs. + * + * @example type HelloInput = RouterInputs['example']['hello'] + */ +export type RouterInputs = inferRouterInputs; + +/** + * Inference helper for outputs. + * + * @example type HelloOutput = RouterOutputs['example']['hello'] + */ +export type RouterOutputs = inferRouterOutputs; diff --git a/apps/web/tailwind.config.ts b/apps/web/tailwind.config.ts new file mode 100644 index 00000000..d4d3fa29 --- /dev/null +++ b/apps/web/tailwind.config.ts @@ -0,0 +1,9 @@ +import { type Config } from "tailwindcss"; + +export default { + content: ["./src/**/*.{js,ts,jsx,tsx}"], + theme: { + extend: {}, + }, + plugins: [], +} satisfies Config; diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json new file mode 100644 index 00000000..a3156800 --- /dev/null +++ b/apps/web/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "target": "es2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "checkJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "noUncheckedIndexedAccess": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + ".eslintrc.cjs", + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.cjs", + "**/*.mjs" + ], + "exclude": ["node_modules"] +} diff --git a/bun.lockb b/bun.lockb index b724108c5431cd2a7eedb995496a92293b383a2c..17680273767e7462c5637c6d7d4fdb6478f6ccb6 100755 GIT binary patch literal 400376 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%0DK5Ud^6N=#Xs&^;HCxG{GA#5=Q& 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

yHmPTN)V+sf29Rb~4@f4)SgI$ZX@w5Us!EKue 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 literal 36416 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 diff --git a/packages/sdk/index.ts b/packages/sdk/index.ts index 18f22a2e..6f74bd0e 100644 --- a/packages/sdk/index.ts +++ b/packages/sdk/index.ts @@ -54,7 +54,7 @@ class Fetcher { >() if('status' in response && response.status === 'error') { - this.logger(`Mixan request failed: ${url}`, JSON.stringify(response, null, 2)) + this.logger(`Mixan request failed: [${options.method || 'POST'}] ${url}`, JSON.stringify(response, null, 2)) return null }