2
0

callback.ts 894 B

12345678910111213141516171819202122232425262728293031
  1. import type { APIEvent } from "@solidjs/start/server"
  2. import { AuthClient, useAuthSession } from "~/context/auth"
  3. export async function GET(input: APIEvent) {
  4. const url = new URL(input.request.url)
  5. const code = url.searchParams.get("code")
  6. if (!code) throw new Error("No code found")
  7. const result = await AuthClient.exchange(code, `${url.origin}${url.pathname}`)
  8. if (result.err) {
  9. throw new Error(result.err.message)
  10. }
  11. const decoded = AuthClient.decode(result.tokens.access, {} as any)
  12. if (decoded.err) throw new Error(decoded.err.message)
  13. const session = await useAuthSession()
  14. const id = decoded.subject.properties.accountID
  15. await session.update((value) => {
  16. return {
  17. ...value,
  18. account: {
  19. [id]: {
  20. id,
  21. email: decoded.subject.properties.email,
  22. },
  23. },
  24. current: id,
  25. }
  26. })
  27. return {
  28. result,
  29. }
  30. }