// @flow import type { BaseModel } from './index'; import * as db from '../common/database'; type BaseOAuth2Token = { refreshToken: string, accessToken: string, expiresAt: number | null, // Should be Date.now() if valid // Debug xResponseId: string | null, xError: string | null, // Error handling error: string, errorDescription: string, errorUri: string, }; export type OAuth2Token = BaseModel & BaseOAuth2Token; export const name = 'OAuth 2.0 Token'; export const type = 'OAuth2Token'; export const prefix = 'oa2'; export const canDuplicate = false; export const canSync = false; export function init(): BaseOAuth2Token { return { refreshToken: '', accessToken: '', expiresAt: null, // Should be Date.now() if valid // Debug xResponseId: null, xError: null, // Error handling error: '', errorDescription: '', errorUri: '', }; } export function migrate(doc: T): T { return doc; } export function create(patch: $Shape = {}): Promise { if (!patch.parentId) { throw new Error(`New OAuth2Token missing \`parentId\` ${JSON.stringify(patch)}`); } return db.docCreate(type, patch); } export function update(token: OAuth2Token, patch: $Shape): Promise { return db.docUpdate(token, patch); } export function remove(token: OAuth2Token): Promise { return db.remove(token); } export function getByParentId(parentId: string): Promise { return db.getWhere(type, { parentId }); } export async function getOrCreateByParentId(parentId: string): Promise { let token = await db.getWhere(type, { parentId }); if (!token) { token = await create({ parentId }); } return token; } export function all(): Promise> { return db.all(type); }