1 import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
2 import { logger } from '../../helpers/logger'
3 import { AccountModel } from '../account/account'
4 import { UserModel } from '../account/user'
5 import { OAuthClientModel } from './oauth-client'
6 import { Transaction } from 'sequelize'
8 export type OAuthTokenInfo = {
10 refreshTokenExpiresAt: Date,
20 WITH_ACCOUNT = 'WITH_ACCOUNT'
24 [ScopeNames.WITH_ACCOUNT]: {
27 model: () => UserModel,
30 model: () => AccountModel,
39 tableName: 'oAuthToken',
42 fields: [ 'refreshToken' ],
46 fields: [ 'accessToken' ],
53 fields: [ 'oAuthClientId' ]
57 export class OAuthTokenModel extends Model<OAuthTokenModel> {
65 accessTokenExpiresAt: Date
73 refreshTokenExpiresAt: Date
81 @ForeignKey(() => UserModel)
85 @BelongsTo(() => UserModel, {
93 @ForeignKey(() => OAuthClientModel)
97 @BelongsTo(() => OAuthClientModel, {
103 OAuthClients: OAuthClientModel[]
105 static getByRefreshTokenAndPopulateClient (refreshToken: string) {
108 refreshToken: refreshToken
110 include: [ OAuthClientModel ]
113 return OAuthTokenModel.findOne(query)
115 if (!token) return null
118 refreshToken: token.refreshToken,
119 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
121 id: token.oAuthClientId
129 logger.error('getRefreshToken error.', { err })
134 static getByTokenAndPopulateUser (bearerToken: string) {
137 accessToken: bearerToken
141 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT).findOne(query).then(token => {
142 if (token) token['user'] = token.User
148 static getByRefreshTokenAndPopulateUser (refreshToken: string) {
151 refreshToken: refreshToken
155 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT)
159 token['user'] = token.User
162 return new OAuthTokenModel()
167 static deleteUserToken (userId: number, t?: Transaction) {
175 return OAuthTokenModel.destroy(query)