Implementation of repositories required by Authentication Library.
npm install @thermopylae/core.authentication
Although farmhash, a dependency used by this package, has prebuilt binaries it would be recommended to rebuild them.
npm rebuild --build-from-source farmhash
Before being able to use this package you need to take following actions:
Deploy Redis 6 and MySQL 8 server instances
Create MySQL database having the following minimal schema:
 
					Configure core logging. Example:
import { DefaultFormatters, LoggerManagerInstance, OutputFormat } from '@thermopylae/core.logger';
import { ClientModule } from '@thermopylae/core.declarations';
LoggerManagerInstance.formatting.setDefaultFormattingOrder(OutputFormat.PRINTF, {
  colorize: true,
  skippedFormatters: new Set([DefaultFormatters.TIMESTAMP]),
  levelForLabel: {
    [ClientModule.MYSQL]: 'info',
    [ClientModule.REDIS]: 'info'
  }
});
LoggerManagerInstance.console.createTransport({ level: 'info' });
import { initLogger as initMySqlLogger } from '@thermopylae/core.mysql';
import { initLogger as initRedisClientLogger } from '@thermopylae/core.redis';
initMySqlLogger();
initRedisClientLogger();
import { MySqlClientInstance } from '@thermopylae/core.mysql';
import { ConnectionType, DebuggableEventType, RedisClientInstance } from '@thermopylae/core.redis';
MySqlClientInstance.init({
  pool: {
      host: '127.0.0.1',
      port: 3306,
      user: 'your-user',
      password: 'your-password',
      database: 'your-database'
  }
});
await RedisClientInstance.connect({
  [ConnectionType.REGULAR]: {
      host: '127.0.0.1',
      port: 3306,
      password: 'your-password',
      connect_timeout: 10_000,
      max_attempts: 10,
      retry_max_delay: 5_000,
      attachDebugListeners: new Set<DebuggableEventType>(['end', 'reconnecting'])
  }
});
This package contains implementations of the repositories required by @thermopylae/lib.authentication. You can create instances of these repositories and pass them as config to @thermopylae/lib.authentication.
Repositories are grouped in two categories:
Bellow is an example of how the repositories implementations from this package can be used in order to instantiate AuthenticationEngine. @FIXME LINK
import { AccountWithTotpSecret, AuthenticationEngine } from '@thermopylae/lib.authentication';
import {
  AccountMySqlRepository,
  FailedAuthenticationsMysqlRepository,
  SuccessfulAuthenticationsMysqlRepository,
  ActivateAccountSessionRedisRepository,
  AuthenticationSessionRedisRepository,
  FailedAuthenticationAttemptsSessionRedisRepository,
  ForgotPasswordSessionRedisRepository
} from '@thermopylae/core.authentication';
// setup decribed above in `Prerequisites` chapter
const AUTHENTICATION_ENGINE = new AuthenticationEngine<AccountWithTotpSecret>({
  // config params...
  repositories: {
    account: new AccountMySqlRepository(),
    successfulAuthentications: new SuccessfulAuthenticationsMysqlRepository(),
    failedAuthenticationAttempts: new FailedAuthenticationsMysqlRepository(),
    authenticationSession: new AuthenticationSessionRedisRepository('actv-acc'),
    failedAuthAttemptSession: new FailedAuthenticationAttemptsSessionRedisRepository('fail-auth'),
    forgotPasswordSession: new ForgotPasswordSessionRedisRepository('fgt-pwd'),
    activateAccountSession: new ActivateAccountSessionRedisRepository('actv-acc')
  }
});
// use authentication engine
AUTHENTICATION_ENGINE.enableAccount('acount-id');
API documentation is available here.
It can also be generated by issuing the following commands:
git clone git@github.com:marinrusu1997/thermopylae.git
cd thermopylae
yarn install
yarn workspace @thermopylae/core.authentication run doc
👤 Rusu Marin
Copyright © 2021 Rusu Marin. 
				This project is MIT licensed.