From fc5a755408a839fb59973b26116d0295ebaf9d55 Mon Sep 17 00:00:00 2001 From: Wanjohi <71614375+wanjohiryan@users.noreply.github.com> Date: Sat, 4 Jan 2025 00:02:28 +0300 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Add=20auth=20flow=20(#146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a simple way to incorporate a centralized authentication flow. The idea is to have the user, API and SSH (for machine authentication) all in one place using `openauthjs` + `SST` We also have a database now :) > We are using InstantDB as it allows us to authenticate a use with just the email. Plus it is super simple simple to use _of course after the initial fumbles trying to design the db and relationships_ --- .gitignore | 5 +- {infra => apps/docs}/RELAY.md | 0 apps/docs/sst-env.d.ts | 42 +++ apps/www/.eslintrc.cjs | 30 +- apps/www/package.json | 3 +- apps/www/postcss.config.cjs | 1 - apps/www/src/routes/(auth)/device/index.tsx | 9 + apps/www/src/routes/(auth)/login/index.tsx | 54 ++++ .../src/routes/(moq)/moq/checker/index.tsx | 119 -------- .../src/routes/(moq)/moq/checker/tester.ts | 208 ------------- apps/www/src/routes/home/index.tsx | 9 +- apps/www/src/routes/play/[id]/index.tsx | 15 +- apps/www/src/routes/pricing/index.tsx | 5 +- apps/www/sst-env.d.ts | 40 ++- apps/www/tsconfig.json | 30 +- bun.lockb | Bin 803824 -> 740728 bytes infra/api.ts | 68 +++-- infra/cli.ts | 10 + infra/dns.ts | 9 + infra/domain.ts | 9 - infra/relay.ts | 22 -- infra/secrets.ts | 10 +- infra/www.ts | 79 ----- package.json | 3 +- packages/api/.gitignore | 33 -- packages/api/README.md | 12 - packages/api/assets/favicon.ico | Bin 3230 -> 0 bytes packages/api/assets/favicon.svg | 14 - packages/api/package.json | 23 -- packages/api/src/image/avatar.ts | 38 --- packages/api/src/image/banner.ts | 72 ----- packages/api/src/image/cover.ts | 72 ----- packages/api/src/image/index.ts | 39 --- packages/api/src/index.ts | 18 -- packages/api/src/types/api.d.ts | 4 - packages/api/src/utils/create-avatar.tsx | 33 -- packages/api/src/utils/gradient.ts | 24 -- packages/api/src/utils/index.ts | 2 - packages/api/tsconfig.json | 17 -- packages/api/wrangler.toml | 26 -- packages/cache/caches.ts | 47 --- packages/cache/index.ts | 8 - packages/cache/middleware.ts | 47 --- packages/cache/package.json | 13 - packages/cache/tsconfig.json | 15 - packages/cache/types.ts | 3 - packages/certs/.gitignore | 3 - packages/certs/.terraform.lock.hcl | 61 ---- packages/certs/README.md | 24 -- packages/certs/input.tf | 7 - packages/certs/main.tf | 65 ---- packages/certs/terraform.tfvars | 2 - packages/cli/cmd/root.go | 50 +++ packages/cli/cmd/run.go | 26 ++ packages/cli/go.mod | 54 ++++ packages/{master => cli}/go.sum | 118 +++++--- packages/cli/internal/api/api.go | 26 ++ packages/cli/internal/auth/auth.go | 44 +++ packages/cli/internal/machine/machine.go | 202 +++++++++++++ packages/cli/internal/party/client.go | 112 +++++++ packages/cli/internal/party/retry.go | 125 ++++++++ packages/cli/internal/resource/resource.go | 38 +++ packages/cli/internal/session/start.go | 286 ++++++++++++++++++ packages/cli/internal/session/steam.go | 76 +++++ packages/cli/internal/session/utils.go | 72 +++++ packages/cli/main.go | 58 ++++ packages/core/image-brightness-analyzer.ts | 73 ----- packages/core/index.ts | 1 - packages/core/instant.perms.ts | 35 +++ packages/core/instant.schema.ts | 80 +++++ packages/core/package.json | 19 +- packages/core/src/actor.ts | 85 ++++++ packages/core/src/common.ts | 7 + packages/core/src/context.ts | 17 ++ packages/core/src/database.ts | 12 + packages/core/src/email/index.ts | 25 ++ packages/core/src/error.ts | 9 + packages/core/src/examples.ts | 45 +++ packages/core/src/machine/index.ts | 140 +++++++++ packages/core/src/team/index.ts | 48 +++ packages/core/src/types.ts | 17 ++ packages/core/src/user/index.ts | 37 +++ packages/core/src/utils/fn.ts | 13 + packages/core/src/utils/index.ts | 1 + packages/core/sst-env.d.ts | 42 +++ packages/core/tsconfig.json | 9 + packages/docker-to-rootfs/Dockerfile | 6 - packages/docker-to-rootfs/README.md | 15 - packages/docker-to-rootfs/create_image.sh | 54 ---- packages/docker-to-rootfs/make.sh | 112 ------- packages/docker-to-rootfs/syslinux.cfg | 5 - packages/eslint-config/README.md | 3 - packages/eslint-config/library.js | 34 --- packages/eslint-config/next.js | 35 --- packages/eslint-config/package.json | 25 -- packages/eslint-config/qwik.js | 50 --- packages/eslint-config/react-internal.js | 39 --- packages/functions/.gitignore | 175 +++++++++++ ...5b8f1d619378926c2dc36df98eae727ff69.sqlite | Bin 0 -> 8192 bytes ...1d619378926c2dc36df98eae727ff69.sqlite-shm | Bin 0 -> 32768 bytes ...1d619378926c2dc36df98eae727ff69.sqlite-wal | 0 ...e132553b5beef99527702def1f3679cb4de.sqlite | Bin 0 -> 8192 bytes ...736c54a14b079b0bae3773d08ab17264bae.sqlite | Bin 0 -> 4096 bytes ...54a14b079b0bae3773d08ab17264bae.sqlite-shm | Bin 0 -> 32768 bytes ...54a14b079b0bae3773d08ab17264bae.sqlite-wal | Bin 0 -> 8272 bytes packages/functions/README.md | 15 + packages/functions/package.json | 20 ++ packages/functions/partykit.json | 6 + packages/functions/src/adapter.ts | 121 ++++++++ packages/functions/src/api/index.ts | 153 ++++++++++ packages/functions/src/api/machine.ts | 160 ++++++++++ packages/functions/src/auth.ts | 140 +++++++++ packages/functions/src/common.ts | 10 + packages/functions/src/error.ts | 9 + packages/functions/src/party/auth.ts | 81 +++++ packages/functions/src/party/hono.ts | 116 +++++++ packages/functions/src/party/index.ts | 53 ++++ packages/functions/src/subjects.ts | 13 + packages/functions/sst-env.d.ts | 41 +++ packages/functions/tsconfig.json | 27 ++ packages/input/sst-env.d.ts | 42 +++ packages/master/go.mod | 32 -- packages/master/main.go | 80 ----- packages/moq/sst-env.d.ts | 42 +++ packages/typescript-config/base.json | 21 -- packages/typescript-config/nextjs.json | 13 - packages/typescript-config/package.json | 9 - packages/typescript-config/react-library.json | 8 - packages/ui/.eslintrc.cjs | 32 +- packages/ui/package.json | 6 +- packages/ui/src/image/index.ts | 4 +- packages/ui/sst-env.d.ts | 42 +++ packages/ui/tsconfig.json | 28 +- packages/ui/tsconfig.lint.json | 9 - sst-env.d.ts | 33 +- sst.config.ts | 3 +- 136 files changed, 3512 insertions(+), 1914 deletions(-) rename {infra => apps/docs}/RELAY.md (100%) create mode 100644 apps/docs/sst-env.d.ts create mode 100644 apps/www/src/routes/(auth)/device/index.tsx create mode 100644 apps/www/src/routes/(auth)/login/index.tsx delete mode 100644 apps/www/src/routes/(moq)/moq/checker/index.tsx delete mode 100644 apps/www/src/routes/(moq)/moq/checker/tester.ts create mode 100644 infra/cli.ts create mode 100644 infra/dns.ts delete mode 100644 infra/domain.ts delete mode 100644 infra/relay.ts delete mode 100644 infra/www.ts delete mode 100644 packages/api/.gitignore delete mode 100644 packages/api/README.md delete mode 100644 packages/api/assets/favicon.ico delete mode 100644 packages/api/assets/favicon.svg delete mode 100644 packages/api/package.json delete mode 100644 packages/api/src/image/avatar.ts delete mode 100644 packages/api/src/image/banner.ts delete mode 100644 packages/api/src/image/cover.ts delete mode 100644 packages/api/src/image/index.ts delete mode 100644 packages/api/src/index.ts delete mode 100644 packages/api/src/types/api.d.ts delete mode 100644 packages/api/src/utils/create-avatar.tsx delete mode 100644 packages/api/src/utils/gradient.ts delete mode 100644 packages/api/src/utils/index.ts delete mode 100644 packages/api/tsconfig.json delete mode 100644 packages/api/wrangler.toml delete mode 100644 packages/cache/caches.ts delete mode 100644 packages/cache/index.ts delete mode 100644 packages/cache/middleware.ts delete mode 100644 packages/cache/package.json delete mode 100644 packages/cache/tsconfig.json delete mode 100644 packages/cache/types.ts delete mode 100644 packages/certs/.gitignore delete mode 100644 packages/certs/.terraform.lock.hcl delete mode 100644 packages/certs/README.md delete mode 100644 packages/certs/input.tf delete mode 100644 packages/certs/main.tf delete mode 100644 packages/certs/terraform.tfvars create mode 100644 packages/cli/cmd/root.go create mode 100644 packages/cli/cmd/run.go create mode 100644 packages/cli/go.mod rename packages/{master => cli}/go.sum (53%) create mode 100644 packages/cli/internal/api/api.go create mode 100644 packages/cli/internal/auth/auth.go create mode 100644 packages/cli/internal/machine/machine.go create mode 100644 packages/cli/internal/party/client.go create mode 100644 packages/cli/internal/party/retry.go create mode 100644 packages/cli/internal/resource/resource.go create mode 100644 packages/cli/internal/session/start.go create mode 100644 packages/cli/internal/session/steam.go create mode 100644 packages/cli/internal/session/utils.go create mode 100644 packages/cli/main.go delete mode 100644 packages/core/image-brightness-analyzer.ts delete mode 100644 packages/core/index.ts create mode 100644 packages/core/instant.perms.ts create mode 100644 packages/core/instant.schema.ts create mode 100644 packages/core/src/actor.ts create mode 100644 packages/core/src/common.ts create mode 100644 packages/core/src/context.ts create mode 100644 packages/core/src/database.ts create mode 100644 packages/core/src/email/index.ts create mode 100644 packages/core/src/error.ts create mode 100644 packages/core/src/examples.ts create mode 100644 packages/core/src/machine/index.ts create mode 100644 packages/core/src/team/index.ts create mode 100644 packages/core/src/types.ts create mode 100644 packages/core/src/user/index.ts create mode 100644 packages/core/src/utils/fn.ts create mode 100644 packages/core/src/utils/index.ts create mode 100644 packages/core/sst-env.d.ts create mode 100644 packages/core/tsconfig.json delete mode 100644 packages/docker-to-rootfs/Dockerfile delete mode 100644 packages/docker-to-rootfs/README.md delete mode 100644 packages/docker-to-rootfs/create_image.sh delete mode 100644 packages/docker-to-rootfs/make.sh delete mode 100644 packages/docker-to-rootfs/syslinux.cfg delete mode 100644 packages/eslint-config/README.md delete mode 100644 packages/eslint-config/library.js delete mode 100644 packages/eslint-config/next.js delete mode 100644 packages/eslint-config/package.json delete mode 100644 packages/eslint-config/qwik.js delete mode 100644 packages/eslint-config/react-internal.js create mode 100644 packages/functions/.gitignore create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/68b01ab8eae54eaeb4dddaeba12765b8f1d619378926c2dc36df98eae727ff69.sqlite create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/68b01ab8eae54eaeb4dddaeba12765b8f1d619378926c2dc36df98eae727ff69.sqlite-shm create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/68b01ab8eae54eaeb4dddaeba12765b8f1d619378926c2dc36df98eae727ff69.sqlite-wal create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/73ab631fd54eedb7cc3c85a33a542e132553b5beef99527702def1f3679cb4de.sqlite create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/edf5bdf97b1b08ea4cbf3f72c6dac736c54a14b079b0bae3773d08ab17264bae.sqlite create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/edf5bdf97b1b08ea4cbf3f72c6dac736c54a14b079b0bae3773d08ab17264bae.sqlite-shm create mode 100644 packages/functions/.partykit/state/party/-PartyKitDurable/edf5bdf97b1b08ea4cbf3f72c6dac736c54a14b079b0bae3773d08ab17264bae.sqlite-wal create mode 100644 packages/functions/README.md create mode 100644 packages/functions/package.json create mode 100644 packages/functions/partykit.json create mode 100644 packages/functions/src/adapter.ts create mode 100644 packages/functions/src/api/index.ts create mode 100644 packages/functions/src/api/machine.ts create mode 100644 packages/functions/src/auth.ts create mode 100644 packages/functions/src/common.ts create mode 100644 packages/functions/src/error.ts create mode 100644 packages/functions/src/party/auth.ts create mode 100644 packages/functions/src/party/hono.ts create mode 100644 packages/functions/src/party/index.ts create mode 100644 packages/functions/src/subjects.ts create mode 100644 packages/functions/sst-env.d.ts create mode 100644 packages/functions/tsconfig.json create mode 100644 packages/input/sst-env.d.ts delete mode 100644 packages/master/go.mod delete mode 100644 packages/master/main.go create mode 100644 packages/moq/sst-env.d.ts delete mode 100644 packages/typescript-config/base.json delete mode 100644 packages/typescript-config/nextjs.json delete mode 100644 packages/typescript-config/package.json delete mode 100644 packages/typescript-config/react-library.json create mode 100644 packages/ui/sst-env.d.ts delete mode 100644 packages/ui/tsconfig.lint.json diff --git a/.gitignore b/.gitignore index 0bb76dbf..1c0dba4f 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,7 @@ bun.lockb id_* #Rust -target \ No newline at end of file +target + +tmp +.partykit \ No newline at end of file diff --git a/infra/RELAY.md b/apps/docs/RELAY.md similarity index 100% rename from infra/RELAY.md rename to apps/docs/RELAY.md diff --git a/apps/docs/sst-env.d.ts b/apps/docs/sst-env.d.ts new file mode 100644 index 00000000..f90ea1f4 --- /dev/null +++ b/apps/docs/sst-env.d.ts @@ -0,0 +1,42 @@ +/* This file is auto-generated by SST. Do not edit. */ +/* tslint:disable */ +/* eslint-disable */ +/* deno-fmt-ignore-file */ +import "sst" +export {} +declare module "sst" { + export interface Resource { + "Api": { + "type": "sst.cloudflare.Worker" + "url": string + } + "Auth": { + "type": "sst.cloudflare.Worker" + "url": string + } + "AuthFingerprintKey": { + "type": "random.index/randomString.RandomString" + "value": string + } + "CloudflareAuthKV": { + "type": "sst.cloudflare.Kv" + } + "InstantAdminToken": { + "type": "sst.sst.Secret" + "value": string + } + "InstantAppId": { + "type": "sst.sst.Secret" + "value": string + } + "LoopsApiKey": { + "type": "sst.sst.Secret" + "value": string + } + "Urls": { + "api": string + "auth": string + "type": "sst.sst.Linkable" + } + } +} diff --git a/apps/www/.eslintrc.cjs b/apps/www/.eslintrc.cjs index 878c3386..92f00457 100644 --- a/apps/www/.eslintrc.cjs +++ b/apps/www/.eslintrc.cjs @@ -1,7 +1,14 @@ module.exports = { root: true, + env: { + browser: true, + es2021: true, + node: true, + }, extends: [ - "@nestri/eslint-config/qwik.js", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:qwik/recommended", ], parser: "@typescript-eslint/parser", parserOptions: { @@ -12,5 +19,24 @@ module.exports = { ecmaFeatures: { jsx: true, }, - } + }, + plugins: ["@typescript-eslint"], + rules: { + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-this-alias": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/ban-ts-comment": "off", + "prefer-spread": "off", + "no-case-declarations": "off", + "no-console": "off", + "@typescript-eslint/no-unused-vars": ["error"], + "@typescript-eslint/consistent-type-imports": "warn", + "@typescript-eslint/no-unnecessary-condition": "warn", + }, }; \ No newline at end of file diff --git a/apps/www/package.json b/apps/www/package.json index 5ffec96c..b34c47b1 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -35,11 +35,10 @@ "@builder.io/qwik-city": "^1.8.0", "@builder.io/qwik-react": "0.5.0", "@modular-forms/qwik": "^0.27.0", - "@nestri/eslint-config": "*", "@nestri/input": "*", "@nestri/libmoq": "*", - "@nestri/typescript-config": "*", "@nestri/ui": "*", + "@openauthjs/openauth": "^0.2.6", "@types/eslint": "8.56.10", "@types/howler": "^2.2.12", "@types/node": "^22.5.1", diff --git a/apps/www/postcss.config.cjs b/apps/www/postcss.config.cjs index c1464c07..63889e76 100644 --- a/apps/www/postcss.config.cjs +++ b/apps/www/postcss.config.cjs @@ -1,4 +1,3 @@ -// module.exports = require("@nestri/ui/postcss.config"); module.exports = { plugins: { tailwindcss: {}, diff --git a/apps/www/src/routes/(auth)/device/index.tsx b/apps/www/src/routes/(auth)/device/index.tsx new file mode 100644 index 00000000..88c75a05 --- /dev/null +++ b/apps/www/src/routes/(auth)/device/index.tsx @@ -0,0 +1,9 @@ +import { component$ } from "@builder.io/qwik" + +export default component$(() => { + return ( +