import type { HttpContext } from '@adonisjs/core/http'; import { type TwitterToken, type AllyUserContract, type ApiRequestContract, type TwitterDriverConfig } from '../types.ts'; import { Oauth1Driver } from '../abstract_drivers/oauth1.ts'; /** * Twitter OAuth1 driver for authenticating users via Twitter. * Supports fetching user profile information including username, name, and email. * Uses OAuth 1.0a protocol. * * @example * ```ts * router.get('/twitter/redirect', ({ ally }) => { * return ally.use('twitter').redirect() * }) * * router.get('/twitter/callback', async ({ ally }) => { * const twitter = ally.use('twitter') * * if (twitter.accessDenied()) { * return 'Access was denied' * } * * if (twitter.stateMisMatch()) { * return 'State mismatch error' * } * * if (twitter.hasError()) { * return twitter.getError() * } * * const user = await twitter.user() * return user * }) * ``` */ export declare class TwitterDriver extends Oauth1Driver { protected ctx: HttpContext; config: TwitterDriverConfig; /** * Twitter request-token endpoint URL. */ protected requestTokenUrl: string; /** * Twitter authorization endpoint URL. */ protected authorizeUrl: string; /** * Twitter access-token endpoint URL. */ protected accessTokenUrl: string; /** * Twitter profile endpoint URL. */ protected userInfoUrl: string; /** * The query string param name for the error. */ protected errorParamName: string; /** * The query string param name for the "oauth_verifier". Used * for both the post redirect value access and during the * time of generating the access token */ protected oauthTokenVerifierName: string; /** * Cookie name for storing the oauth_token. The cookie * name for storing oauth_token_secret is derived * from this property */ protected oauthTokenCookieName: string; /** * Param name for defined the "oauth_token" pre redirect * and also used post redirect for reading the "oauth_token" * value */ protected oauthTokenParamName: string; /** * Twitter doesn't support scopes */ protected scopeParamName: string; /** * Scope separator placeholder maintained for OAuth1 compatibility. */ protected scopesSeparator: string; /** * @param ctx - The HTTP context * @param config - Configuration for the Twitter driver */ constructor(ctx: HttpContext, config: TwitterDriverConfig); /** * Fetches the authenticated user's profile information from the Twitter API. * * @param token - The OAuth token * @param secret - The OAuth token secret * @param callback - Optional callback to customize the API request * * @see https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials */ protected getUserInfo(token: string, secret: string, callback?: (request: ApiRequestContract) => void): Promise<{ id: any; nickName: any; name: any; email: any; emailVerificationState: "unsupported"; avatarUrl: any; original: any; }>; /** * Get the authenticated user's profile information using * the OAuth verifier from the callback request. * * @param callback - Optional callback to customize the API request * * @example * ```ts * const user = await ally.use('twitter').user() * console.log(user.name, user.email) * ``` */ user(callback?: (request: ApiRequestContract) => void): Promise<{ token: TwitterToken; id: any; nickName: any; name: any; email: any; emailVerificationState: "unsupported"; avatarUrl: any; original: any; }>; /** * Get the user's profile information using an existing OAuth token * and token secret. * * @param token - The OAuth token * @param secret - The OAuth token secret * @param callback - Optional callback to customize the API request * * @example * ```ts * const user = await ally.use('twitter').userFromTokenAndSecret(token, secret) * ``` */ userFromTokenAndSecret(token: string, secret: string, callback?: (request: ApiRequestContract) => void): Promise>; /** * Check if the error from the callback indicates that the user * denied authorization. * * @returns `true` when the request contains the denial marker. */ accessDenied(): boolean; }