UNPKG

@rocket.chat/apps-engine

Version:

The engine code for the Rocket.Chat Apps which manages, runs, translates, coordinates and all of that.

124 lines (123 loc) 3.99 kB
/// <reference types="node" /> import type { URL } from 'url'; import type { IConfigurationExtend, IHttp, IModify, IPersistence, IRead } from '../accessors'; import type { IUser } from '../users/IUser'; /** * Authorization data as provided after * token exchange */ export interface IAuthData { /** * Access token from application */ token: string; /** * The token's expiration time in seconds */ expiresAt: number; /** * Scope(s) authorized by the user. * * Format can change depending on provider, but usually * when there are more than one scope, they are separated * by a white-space caracter */ scope: string; /** * A token that can be used to request a new access token * when the current one has expired. * * Not all providers have a refresh token. */ refreshToken?: string; } /** * Options passed to the OAuth2Client object during instantiation. * Describes URLs of the authorization service and optional behavior * for when user responds to the authorization prompt */ export interface IOAuth2ClientOptions { /** * Alias for the client. This is used to identify the client's resources. * It is used to avoid overwriting other clients' settings or endpoints * when there are multiple. */ alias: string; /** * URI to request an access token from */ accessTokenUri: string; /** * URI to redirect user for them to authorize access * by the application */ authUri: string; /** * URI to request a refreshed access token for user */ refreshTokenUri: string; /** * URI to revoke an access token for the user */ revokeTokenUri: string; /** * Default scopes to be used when requesting access */ defaultScopes?: Array<string>; /** * A function that will be executed when the auth * service redirects the user back to our endpoint. */ authorizationCallback?: (token: IAuthData | undefined, user: IUser, read: IRead, modify: IModify, http: IHttp, persis: IPersistence) => Promise<{ responseContent?: string; } | undefined>; } export interface IOAuth2Client { /** * This method will set all necessary configuration for the client * * Please note that you will need to provide the i18n strings for the * settings created. For instance, if you're connecting to Github APIs * and your `alias = 'github'`, you will need to provide the following * translations: * * ``` * { * "github-oauth-client-id": "Client ID to connect to Github", * "github-oauth-clientsecret": "Client secret to connect to Github" * } * ``` * * @param configuration - Configuration extend to set all settings and API endpoints */ setup(configuration: IConfigurationExtend): Promise<void>; /** * Returns the authorization URL to which the user must * be redirected to in order to authorize access by the * application * * @param user - User to authenticate * @param scopes - Scopes that your app needs access to */ getUserAuthorizationUrl(user: IUser, scopes?: Array<string>): Promise<URL>; /** * Gets the token information for a specific user, if available. * * @param user */ getAccessTokenForUser(user: IUser): Promise<IAuthData | undefined>; /** * Refreshes the user's access token * * @param user The user whose token will be refreshed * @param persis Persistence object dependency */ refreshUserAccessToken(user: IUser, persis: IPersistence): Promise<IAuthData | undefined>; /** * Revokes user's access token in the service provider * * @param user The user whose token will be revoked * @param persis Persistence object dependency */ revokeUserAccessToken(user: IUser, persis: IPersistence): Promise<boolean>; }