@adonisjs/auth
Version:
Official authentication provider for Adonis framework
131 lines (130 loc) • 4.67 kB
TypeScript
import { type Secret } from '@adonisjs/core/helpers';
import { type AccessToken } from '../access_token.ts';
import { PROVIDER_REAL_USER } from '../../../src/symbols.ts';
import type { LucidTokenable, AccessTokensGuardUser, AccessTokensUserProviderContract, AccessTokensLucidUserProviderOptions } from '../types.ts';
/**
* Uses a lucid model to verify access tokens and find a user during
* authentication
*
* @template TokenableProperty - The property name that holds the tokens provider
* @template UserModel - The Lucid model representing the user
*
* @example
* const userProvider = new AccessTokensLucidUserProvider({
* model: () => import('#models/user'),
* tokens: 'accessTokens'
* })
*/
export declare class AccessTokensLucidUserProvider<TokenableProperty extends string, UserModel extends LucidTokenable<TokenableProperty>> implements AccessTokensUserProviderContract<InstanceType<UserModel>> {
/**
* Lucid provider options
*/
protected options: AccessTokensLucidUserProviderOptions<TokenableProperty, UserModel>;
[PROVIDER_REAL_USER]: InstanceType<UserModel>;
/**
* Reference to the lazily imported model
*/
protected model?: UserModel;
/**
* Creates a new AccessTokensLucidUserProvider instance
*
* @param options - Configuration options for the user provider
*
* @example
* const provider = new AccessTokensLucidUserProvider({
* model: () => import('#models/user'),
* tokens: 'accessTokens'
* })
*/
constructor(
/**
* Lucid provider options
*/
options: AccessTokensLucidUserProviderOptions<TokenableProperty, UserModel>);
/**
* Imports the model from the provider, returns and caches it
* for further operations.
*
* @example
* const UserModel = await provider.getModel()
* const user = await UserModel.find(1)
*/
protected getModel(): Promise<UserModel>;
/**
* Returns the tokens provider associated with the user model
*
* @example
* const tokensProvider = await provider.getTokensProvider()
* const token = await tokensProvider.create(user, ['read'])
*/
protected getTokensProvider(): Promise<UserModel[TokenableProperty]>;
/**
* Creates an adapter user for the guard
*
* @param user - The user model instance
*
* @example
* const guardUser = await provider.createUserForGuard(user)
* console.log('User ID:', guardUser.getId())
* console.log('Original user:', guardUser.getOriginal())
*/
createUserForGuard(user: InstanceType<UserModel>): Promise<AccessTokensGuardUser<InstanceType<UserModel>>>;
/**
* Create a token for a given user
*
* @param user - The user to create a token for
* @param abilities - Optional array of abilities the token should have
* @param options - Optional token configuration
*
* @example
* const token = await provider.createToken(user, ['read', 'write'], {
* name: 'API Token',
* expiresIn: '30d'
* })
* console.log('Created token:', token.value.release())
*/
createToken(user: InstanceType<UserModel>, abilities?: string[] | undefined, options?: {
name?: string;
expiresIn?: string | number;
}): Promise<AccessToken>;
/**
* Invalidates a token identified by its publicly shared token
*
* @param tokenValue - The token value to invalidate
*
* @example
* const wasInvalidated = await provider.invalidateToken(
* new Secret('oat_abc123.def456')
* )
* console.log('Token invalidated:', wasInvalidated)
*/
invalidateToken(tokenValue: Secret<string>): Promise<boolean>;
/**
* Finds a user by the user id
*
* @param identifier - The user identifier to search for
*
* @example
* const guardUser = await provider.findById(123)
* if (guardUser) {
* const originalUser = guardUser.getOriginal()
* console.log('Found user:', originalUser.email)
* }
*/
findById(identifier: string | number | BigInt): Promise<AccessTokensGuardUser<InstanceType<UserModel>> | null>;
/**
* Verifies a publicly shared access token and returns an
* access token for it.
*
* @param tokenValue - The token value to verify
*
* @example
* const token = await provider.verifyToken(
* new Secret('oat_abc123.def456')
* )
* if (token && !token.isExpired()) {
* console.log('Valid token with abilities:', token.abilities)
* }
*/
verifyToken(tokenValue: Secret<string>): Promise<AccessToken | null>;
}