stacker.news/api/typeDefs/user.js

206 lines
5.1 KiB
JavaScript
Raw Normal View History

import { gql } from 'graphql-tag'
2021-03-25 19:29:24 +00:00
export default gql`
extend type Query {
2023-10-23 23:19:36 +00:00
me: User
2022-06-02 22:55:23 +00:00
settings: User
2021-05-21 22:32:21 +00:00
user(name: String!): User
2021-03-25 19:29:24 +00:00
users: [User!]
2021-05-21 22:32:21 +00:00
nameAvailable(name: String!): Boolean!
topUsers(cursor: String, when: String, from: String, to: String, by: String, limit: Limit): UsersNullable!
topCowboys(cursor: String): UsersNullable!
2023-11-22 16:30:43 +00:00
searchUsers(q: String!, limit: Limit, similarity: Float): [User!]!
userSuggestions(q: String, limit: Limit): [User!]!
hasNewNotes: Boolean!
mySubscribedUsers(cursor: String): Users!
myMutedUsers(cursor: String): Users!
userStatsActions(when: String, from: String, to: String): [TimeData!]!
userStatsIncomingSats(when: String, from: String, to: String): [TimeData!]!
userStatsOutgoingSats(when: String, from: String, to: String): [TimeData!]!
2021-12-17 00:01:02 +00:00
}
type UsersNullable {
cursor: String
users: [User]!
}
2021-12-17 00:01:02 +00:00
type Users {
cursor: String
users: [User!]!
2021-03-25 19:29:24 +00:00
}
2021-05-22 00:09:11 +00:00
extend type Mutation {
setName(name: String!): String
2023-11-10 01:05:35 +00:00
setSettings(settings: SettingsInput!): User
2022-05-16 20:51:22 +00:00
setPhoto(photoId: ID!): Int!
2021-09-24 21:28:21 +00:00
upsertBio(bio: String!): User!
2021-12-09 20:40:40 +00:00
setWalkthrough(tipPopover: Boolean, upvotePopover: Boolean): Boolean
2022-06-02 22:55:23 +00:00
unlinkAuth(authType: String!): AuthMethods!
linkUnverifiedEmail(email: String!): Boolean
hideWelcomeBanner: Boolean
subscribeUserPosts(id: ID): User
subscribeUserComments(id: ID): User
2023-09-28 20:02:25 +00:00
toggleMute(id: ID): User
generateApiKey(id: ID!): String
deleteApiKey(id: ID!): User
2022-06-02 22:55:23 +00:00
}
2021-03-25 19:29:24 +00:00
type User {
id: ID!
2023-07-27 00:18:42 +00:00
createdAt: Date!
2021-03-25 19:29:24 +00:00
name: String
nitems(when: String, from: String, to: String): Int!
nposts(when: String, from: String, to: String): Int!
nterritories(when: String, from: String, to: String): Int!
ncomments(when: String, from: String, to: String): Int!
2021-09-23 17:42:00 +00:00
bio: Item
2022-04-28 18:11:05 +00:00
bioId: Int
2022-05-16 20:51:22 +00:00
photoId: Int
2023-06-03 00:55:45 +00:00
since: Int
2023-11-10 01:05:35 +00:00
optional: UserOptional!
privates: UserPrivates
meMute: Boolean!
meSubscriptionPosts: Boolean!
meSubscriptionComments: Boolean!
}
input SettingsInput {
autoDropBolt11s: Boolean!
diagnostics: Boolean!
noReferralLinks: Boolean!
2023-11-10 01:05:35 +00:00
fiatCurrency: String!
greeterMode: Boolean!
hideBookmarks: Boolean!
hideCowboyHat: Boolean!
hideGithub: Boolean!
hideNostr: Boolean!
hideTwitter: Boolean!
2023-11-10 01:05:35 +00:00
hideFromTopUsers: Boolean!
hideInvoiceDesc: Boolean!
hideIsContributor: Boolean!
hideWalletBalance: Boolean!
imgproxyOnly: Boolean!
nostrCrossposting: Boolean!
2023-11-10 01:05:35 +00:00
nostrPubkey: String
nostrRelays: [String!]
2022-04-21 22:50:02 +00:00
noteAllDescendants: Boolean!
2023-11-10 01:05:35 +00:00
noteCowboyHat: Boolean!
2024-03-25 20:20:11 +00:00
noteDeposits: Boolean!,
noteWithdrawals: Boolean!,
2023-11-10 01:05:35 +00:00
noteEarning: Boolean!
noteForwardedSats: Boolean!
2022-04-21 22:50:02 +00:00
noteInvites: Boolean!
2023-11-10 01:05:35 +00:00
noteItemSats: Boolean!
noteJobIndicator: Boolean!
2023-11-10 01:05:35 +00:00
noteMentions: Boolean!
noteItemMentions: Boolean!
nsfwMode: Boolean!
2023-11-10 01:05:35 +00:00
tipDefault: Int!
tipRandomMin: Int
tipRandomMax: Int
2023-11-10 01:05:35 +00:00
turboTipping: Boolean!
2024-03-25 00:46:12 +00:00
zapUndos: Int
2023-11-10 01:05:35 +00:00
wildWestMode: Boolean!
withdrawMaxFeeDefault: Int!
}
type AuthMethods {
lightning: Boolean!
nostr: Boolean!
github: Boolean!
twitter: Boolean!
Store hashed and salted email addresses (#1111) * first pass of hashing user emails * use salt * add a salt to .env.development (prod salt needs to be kept a secret) * move `hashEmail` util to a new util module * trigger a one-time job to migrate existing emails via the worker so we can use the salt from an env var * move newsletter signup move newsletter signup to prisma adapter create user with email code path so we can still auto-enroll email accounts without having to persist the email address in plaintext * remove `email` from api key session lookup query * drop user email index before dropping column * restore email column, just null values instead * fix function name * fix salt and hash raw sql statement * update auth methods email type in typedefs from str to bool * remove todo comment * lowercase email before hashing during migration * check for emailHash and email to accommodate migration window update our lookups to check for a matching emailHash, and then a matching email, in that order, to accommodate the case that a user tries to login via email while the migration is running, and their account has not yet been migrated also update sndev to have a command `./sndev email` to launch the mailhog inbox in your browser also update `./sndev login` to hash the generated email address and insert it into the db record * update sndev help * update awards.csv * update the hack in next-auth to re-use the email supplied on input to `getUserByEmail` * consolidate console.error logs * create generic open command --------- Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com> Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
2024-05-04 23:06:15 +00:00
email: Boolean!
2024-03-28 17:34:14 +00:00
apiKey: Boolean
2023-11-10 01:05:35 +00:00
}
type UserPrivates {
"""
extremely sensitive
"""
sats: Int!
authMethods: AuthMethods!
2024-01-07 17:00:24 +00:00
lnAddr: String
2023-11-10 01:05:35 +00:00
"""
only relevant to user
"""
lastCheckedJobs: String
hideWelcomeBanner: Boolean!
tipPopover: Boolean!
upvotePopover: Boolean!
hasInvites: Boolean!
apiKeyEnabled: Boolean!
2023-11-10 01:05:35 +00:00
"""
mirrors SettingsInput
"""
autoDropBolt11s: Boolean!
2023-11-10 01:05:35 +00:00
diagnostics: Boolean!
noReferralLinks: Boolean!
2023-11-10 01:05:35 +00:00
fiatCurrency: String!
greeterMode: Boolean!
hideBookmarks: Boolean!
2023-11-10 01:05:35 +00:00
hideCowboyHat: Boolean!
hideGithub: Boolean!
hideNostr: Boolean!
hideTwitter: Boolean!
2023-11-10 01:05:35 +00:00
hideFromTopUsers: Boolean!
hideInvoiceDesc: Boolean!
hideIsContributor: Boolean!
hideWalletBalance: Boolean!
imgproxyOnly: Boolean!
2023-11-10 01:05:35 +00:00
nostrCrossposting: Boolean!
nostrPubkey: String
nostrRelays: [String!]
noteAllDescendants: Boolean!
noteCowboyHat: Boolean!
noteDeposits: Boolean!
2024-03-25 20:20:11 +00:00
noteWithdrawals: Boolean!
2023-11-10 01:05:35 +00:00
noteEarning: Boolean!
noteForwardedSats: Boolean!
noteInvites: Boolean!
noteItemSats: Boolean!
noteJobIndicator: Boolean!
noteMentions: Boolean!
noteItemMentions: Boolean!
nsfwMode: Boolean!
2023-11-10 01:05:35 +00:00
tipDefault: Int!
tipRandom: Boolean!
tipRandomMin: Int
tipRandomMax: Int
2023-11-10 01:05:35 +00:00
turboTipping: Boolean!
2024-03-25 00:46:12 +00:00
zapUndos: Int
2022-09-21 19:57:36 +00:00
wildWestMode: Boolean!
2023-11-10 01:05:35 +00:00
withdrawMaxFeeDefault: Int!
2024-01-07 17:00:24 +00:00
autoWithdrawThreshold: Int
2024-01-13 05:47:05 +00:00
autoWithdrawMaxFeePercent: Float
2023-11-10 01:05:35 +00:00
}
type UserOptional {
"""
conditionally private
"""
stacked(when: String, from: String, to: String): Int
spent(when: String, from: String, to: String): Int
referrals(when: String, from: String, to: String): Int
streak: Int
maxStreak: Int
isContributor: Boolean
githubId: String
twitterId: String
nostrAuthPubkey: String
2021-03-25 19:29:24 +00:00
}
type NameValue {
name: String!
value: Float!
}
type TimeData {
time: Date!
data: [NameValue!]!
}
2021-03-25 19:29:24 +00:00
`