import { type Client, type Falsey, type RefreshTokenModel, type Token, type PartialToken, type User, type RefreshToken, type Scope } from 'oauth2-server'; import type { NextFunction, Request, Response } from 'express'; export interface InternalStorageToken { /** Access token */ aToken: string; /** According refresh token */ rToken: string; /** Expiration time of the access token */ aExp: number; /** Expiration time of the refresh token */ rExp: number; /** User ID */ user: string; } export declare class OAuth2Model implements RefreshTokenModel { private readonly accessTokenLifetime; private readonly refreshTokenLifetime; private readonly noBasicAuth; private adapter; private bruteForce; /** * Create an OAuth2model * * @param adapter ioBroker adapter * @param options Options * @param options.accessLifetime Access token expiration in seconds * @param options.refreshLifeTime Refresh token expiration in seconds * @param options.noBasicAuth Do not allow basic authentication */ constructor(adapter: ioBroker.Adapter, options?: { accessLifetime?: number; refreshLifeTime?: number; noBasicAuth?: boolean; }); getAccessToken: (bearerToken: string) => Promise; /** * Get client. */ getClient: (_clientId: string, _clientSecret: string) => Promise; authorize: (req: Request, res: Response, next: NextFunction) => Promise; generateTokens: (userName: string) => Promise; /** * Get refresh token. */ getRefreshToken: (bearerToken: string) => Promise; /** * Get user. */ getUser: (username: string, password: string) => Promise; /** * Save token. */ saveToken: (token: PartialToken, client: Client, user: User) => Promise; revokeToken: (token: RefreshToken | Token) => Promise; verifyScope: (_token: Token, _scope: Scope) => Promise; /** * Issue a new access token for internal usage. * E.g., node-red needs to access objects for Select ID dialog * * @param obj Message object */ processMessage(obj: ioBroker.Message): boolean; }