diff --git a/api/resolvers/rewards.js b/api/resolvers/rewards.js index bb4d3aa7..f7e6fdd4 100644 --- a/api/resolvers/rewards.js +++ b/api/resolvers/rewards.js @@ -12,6 +12,8 @@ export default { } }) + if (!lastReward) return { total: 0, sources: [] } + const [result] = await models.$queryRaw` SELECT coalesce(FLOOR(sum(sats)), 0) as total, json_build_array( json_build_object('name', 'donations', 'value', coalesce(FLOOR(sum(sats) FILTER(WHERE type = 'DONATION')), 0)), diff --git a/lib/prisma-adapter.js b/lib/prisma-adapter.js deleted file mode 100644 index 442533f3..00000000 --- a/lib/prisma-adapter.js +++ /dev/null @@ -1,296 +0,0 @@ -/* eslint-disable */ -'use strict' - -Object.defineProperty(exports, '__esModule', { - value: true -}) -exports.getCompoundId = getCompoundId -exports.Adapter = exports.PrismaLegacyAdapter = PrismaLegacyAdapter - -const _crypto = require('crypto') - -function getCompoundId (a, b) { - return (0, _crypto.createHash)('sha256').update(`${a}:${b}`).digest('hex') -} - -function PrismaLegacyAdapter (config) { - const { - prisma, - modelMapping = { - User: 'user', - Account: 'account', - Session: 'session', - VerificationRequest: 'verificationRequest' - } - } = config - const { - User, - Account, - Session, - VerificationRequest - } = modelMapping - return { - async getAdapter ({ - session: { - maxAge, - updateAge - }, - secret, - ...appOptions - }) { - const sessionMaxAge = maxAge * 1000 - const sessionUpdateAge = updateAge * 1000 - - const hashToken = token => (0, _crypto.createHash)('sha256').update(`${token}${secret}`).digest('hex') - - return { - displayName: 'PRISMA_LEGACY', - - createUser (profile) { - let _profile$emailVerifie - - return prisma[User].create({ - data: { - name: profile.name, - email: profile.email, - image: profile.image, - emailVerified: (_profile$emailVerifie = profile.emailVerified) === null || _profile$emailVerifie === void 0 ? void 0 : _profile$emailVerifie.toISOString() - } - }) - }, - - getUser (id) { - return prisma[User].findUnique({ - where: { - id: Number(id) - } - }) - }, - - getUserByEmail (email) { - if (email) { - return prisma[User].findUnique({ - where: { - email - } - }) - } - - return null - }, - - async getUserByProviderAccountId (providerId, providerAccountId) { - const account = await prisma[Account].findUnique({ - where: { - compoundId: getCompoundId(providerId, providerAccountId) - } - }) - - if (account) { - return prisma[User].findUnique({ - where: { - id: account.userId - } - }) - } - - return null - }, - - updateUser (user) { - const { - id, - name, - email, - image, - emailVerified - } = user - return prisma[User].update({ - where: { - id - }, - data: { - name, - email, - image, - emailVerified: emailVerified === null || emailVerified === void 0 ? void 0 : emailVerified.toISOString() - } - }) - }, - - deleteUser (userId) { - return prisma[User].delete({ - where: { - id: userId - } - }) - }, - - linkAccount (userId, providerId, providerType, providerAccountId, refreshToken, accessToken, accessTokenExpires) { - return prisma[Account].create({ - data: { - accessToken, - refreshToken, - compoundId: getCompoundId(providerId, providerAccountId), - providerAccountId: `${providerAccountId}`, - providerId, - providerType, - accessTokenExpires, - userId - } - }) - }, - - unlinkAccount (_, providerId, providerAccountId) { - return prisma[Account].delete({ - where: { - compoundId: getCompoundId(providerId, providerAccountId) - } - }) - }, - - createSession (user) { - let expires = null - - if (sessionMaxAge) { - const dateExpires = new Date() - dateExpires.setTime(dateExpires.getTime() + sessionMaxAge) - expires = dateExpires.toISOString() - } - - return prisma[Session].create({ - data: { - expires, - userId: user.id, - sessionToken: (0, _crypto.randomBytes)(32).toString('hex'), - accessToken: (0, _crypto.randomBytes)(32).toString('hex') - } - }) - }, - - async getSession (sessionToken) { - const session = await prisma[Session].findUnique({ - where: { - sessionToken - } - }) - - if (session !== null && session !== void 0 && session.expires && new Date() > session.expires) { - await prisma[Session].delete({ - where: { - sessionToken - } - }) - return null - } - - return session - }, - - updateSession (session, force) { - if (sessionMaxAge && (sessionUpdateAge || sessionUpdateAge === 0) && session.expires) { - const dateSessionIsDueToBeUpdated = new Date(session.expires) - dateSessionIsDueToBeUpdated.setTime(dateSessionIsDueToBeUpdated.getTime() - sessionMaxAge) - dateSessionIsDueToBeUpdated.setTime(dateSessionIsDueToBeUpdated.getTime() + sessionUpdateAge) - - if (new Date() > dateSessionIsDueToBeUpdated) { - const newExpiryDate = new Date() - newExpiryDate.setTime(newExpiryDate.getTime() + sessionMaxAge) - session.expires = newExpiryDate - } else if (!force) { - return null - } - } else { - if (!force) { - return null - } - } - - const { - id, - expires - } = session - return prisma[Session].update({ - where: { - id - }, - data: { - expires: expires.toISOString() - } - }) - }, - - deleteSession (sessionToken) { - return prisma[Session].delete({ - where: { - sessionToken - } - }) - }, - - async createVerificationRequest (identifier, url, token, _, provider) { - const { - sendVerificationRequest, - maxAge - } = provider - let expires = null - - if (maxAge) { - const dateExpires = new Date() - dateExpires.setTime(dateExpires.getTime() + maxAge * 1000) - expires = dateExpires.toISOString() - } - - const verificationRequest = await prisma[VerificationRequest].create({ - data: { - identifier, - token: hashToken(token), - expires - } - }) - await sendVerificationRequest({ - identifier, - url, - token, - baseUrl: appOptions.baseUrl, - provider - }) - return verificationRequest - }, - - async getVerificationRequest (identifier, token) { - const hashedToken = hashToken(token) - const verificationRequest = await prisma[VerificationRequest].findFirst({ - where: { - identifier, - token: hashedToken - } - }) - - if (verificationRequest && verificationRequest.expires && new Date() > verificationRequest.expires) { - await prisma[VerificationRequest].deleteMany({ - where: { - identifier, - token: hashedToken - } - }) - return null - } - - return verificationRequest - }, - - async deleteVerificationRequest (identifier, token) { - await prisma[VerificationRequest].deleteMany({ - where: { - identifier, - token: hashToken(token) - } - }) - } - - } - } - - } -} diff --git a/pages/api/auth/[...nextauth].js b/pages/api/auth/[...nextauth].js index b9be7136..8cb6d663 100644 --- a/pages/api/auth/[...nextauth].js +++ b/pages/api/auth/[...nextauth].js @@ -130,7 +130,7 @@ const providers = [ }, profile: profile => { return { - ...profile, + id: profile.id, name: profile.login } } @@ -140,7 +140,7 @@ const providers = [ clientSecret: process.env.TWITTER_SECRET, profile: profile => { return { - ...profile, + id: profile.id, name: profile.screen_name } } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 095849c2..d9167c3a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -443,6 +443,10 @@ model Account { id_token String? session_state String? + // twitter oauth 1.0 needs these https://authjs.dev/reference/core/providers_twitter#notes + oauth_token String? + oauth_token_secret String? + user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId])