# quoti-auth-nestjs

> Utils to help using Quoti Auth in Nest.js

Latest version **1.2.0** (published 2022-03-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install quoti-auth-nestjs
pnpm add quoti-auth-nestjs
yarn add quoti-auth-nestjs
bun add quoti-auth-nestjs
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.0 |
| Published | 2022-03-08 |
| First published | 2022-01-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | 14 |
| Dependencies | 5 |
| Unpacked size | 16.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Beyond Co. |
| Maintainers | nathanbeyond |
| Keywords | quoti, quoti-auth, nestjs |

## Links

- npm: https://www.npmjs.com/package/quoti-auth-nestjs
- Repository: https://github.com/byndcloud/quoti-auth-nestjs
- Homepage: https://github.com/byndcloud/quoti-auth-nestjs#readme
- Issues: https://github.com/byndcloud/quoti-auth-nestjs/issues
- npm.io page: https://npm.io/package/quoti-auth-nestjs

## Dependencies (5)

- [rxjs](https://npm.io/package/rxjs.md) ^7.2.0
- [rimraf](https://npm.io/package/rimraf.md) ^3.0.2
- [express](https://npm.io/package/express.md) ^4.17.2
- [nodemon](https://npm.io/package/nodemon.md) ^2.0.15
- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ^0.1.13

## Alternatives

- [@clerk/clerk-expo](https://npm.io/package/@clerk/clerk-expo.md) — 133.6K weekly downloads
- [@pothos/plugin-authz](https://npm.io/package/@pothos/plugin-authz.md) — 12.4K weekly downloads
- [@bounded-sh/client](https://npm.io/package/@bounded-sh/client.md) — 3.2K weekly downloads
- [@luigi-project/plugin-auth-oauth2](https://npm.io/package/@luigi-project/plugin-auth-oauth2.md) — 2.3K weekly downloads
- [@nocobase/plugin-verification](https://npm.io/package/@nocobase/plugin-verification.md) — 2.0K weekly downloads

## Recent versions

- 1.2.0 (latest) — 2022-03-08
- 1.0.2-beta.2 (beta) — 2022-03-08
- 1.0.3 — 2022-03-08
- 1.0.2-beta.1 — 2022-03-08
- 1.0.2 — 2022-02-23
- 1.0.1 — 2022-01-26
- 1.1.0 — 2022-01-26
- 1.0.0 — 2022-01-26
- 0.1.0 — 2022-01-26
- 0.0.3 — 2022-01-25
- 0.0.2 — 2022-01-19
- 0.0.1 — 2022-01-19

## README

# Introdução

Essa biblioteca é um simples wrapper para o Quoti Auth que é compatível com o
Nest.js. Ela possui um módulo global que recebe os mesmos parâmetros que o
método `setup()` do Quoti Auth e permite que uma única instância do Quoti Auth
esteja disponível para toda a aplicação via Dependency Injection.

# Requisitos

Para utilizar esse package é necessário ter os packages
`@nestjs/platform-express`, `@nestjs/common`, `@nestjs/core` e `quoti-auth`
instalados no seu projeto (idealmente com a mesma versão que consta no
package.json desse projeto), pois eles são
[peer dependencies](https://nodejs.org/es/blog/npm/peer-dependencies/). As
versões mínimas são as seguintes:
```json
"@nestjs/common": "8.2.6",
"@nestjs/core": "8.2.6",
"@nestjs/platform-express": "8.2.6",
"quoti-auth": "^1.6.1"
```

# Setup

O setup do Quoti Auth deve ser feito no módulo principal da aplicação, dessa
forma o decorator `@Auth` poderá ser utilizado em qualquer lugar da aplicação.
Por exemplo:

```ts
import { QuotiAuthModule } from 'quoti-auth-nestjs';

@Module({
  imports: [
    ... outros módulos da API ...,

    // O método .register recebe o mesmo objeto de configuração que o método .setup do Quoti Auth
    QuotiAuthModule.register({
      orgSlug: 'Slug da sua organização no Quoti',
      apiKey: 'Sua API key para utilização do Quoti Auth',
      ...
    }),
  ],
  ...
  providers: [...],
})
export class AppModule implements NestModule {
  ...
}
```

# Decorator @Auth

## Autenticação

A biblioteca possui um decorator `@Auth` que cuida da autenticação via Quoti
Auth para qualquer rota de um controller. Para requerer **autenticação** do
usuário basta adicionar o decorator em um método de um controller, e.g:

```ts
import { Auth } from 'quoti-auth-nestjs';

@Controller({ path: 'foos', version: '1' })
export class FooController {

  @Get()
  @Auth()
  async getFoos(): Promise<Foo> {
    ...
    return [new Foo()]
  }
}
```

Agora, para que um usuário possa chamar o endpoint `GET /foos` ele deve fazer
uma chamada passando algum dos tokens de autenticação que o Quoti Auth permite
na requisição. Caso isso não ocorra, o Nest irá automaticamente responder com
status 401, Forbidden.

## Autorização

Também é possível realizar chegagens de permissões com o decorator `@Auth`, ele
aceita um array de arrays de string (`string[][]`) que contém quais permissões o
usuário deve ter para poder acessar a rota, por exemplo:

```ts
import { Auth } from 'quoti-auth-nestjs';

@Controller({ path: 'foos', version: '1' })
export class FooController {

  @Get()
  @Auth([['list.foo']])
  async getFoos(): Promise<Foo> {
    ...
    return [new Foo()]
  }
}
```

Agora, para que um usuário acesse a rota `GET /foos` precisa ter a permissão
`list.foos`. **O decorator `@Auth` e a função `.middleware(..)` do Quoti Auth,
eles recebem os mesmos parâmetros e tem a mesma funcionalidade.**

---
_Source: https://npm.io/package/quoti-auth-nestjs · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
