# Quoti SDK

Este package consiste de um SDK para API do Quoti, que possiblita que
desenvolvedores chamem endpoints da API para realizar ações na platagorma do
Quoti com mais facilidade, apenas usando os métodos das classes que o SDK
disponibiliza. Isso traz a a vantagem de ter _code-completion_ para nomes de
recursos (e.g. users, groups, forms, menus), ações que podem ser executadas
neles (e.g. `postUser(..)`, `getUsers(...)`) e quais parâmetros devem ser
passados para executar as ações.

Exemplos:

```typescript
import { QuotiApi } from 'quoti-sdk'

const quotiApi = new QuotiApi({ TOKEN: BEARER_TOKEN })

// Lista usuários
const { results: users } = await quotiApi.users.getUsersList({
  orgSlug: 'SUA_ORG_SLUG',
  search: 'userName'
})

users.forEach((user) => {
  console.log(user)
})

// Cria um usuário
const result = await quotiApi.users.postUsers({
  orgSlug: "beyond",
  requestBody: {
    name: "Nomde do Usuário",
    email: "email@usuaripo.com",
    ...
  },
})

// Lista os grupos
const groupsListResult = await quotiApi.groups.getGroupsList({
  orgSlug: "beyond",
  type: "awesome",
})

```

# Instalação via NPM

O SDK é compatível tanto no browser quanto em Node.js

```
npm install quoti-sdk axios form-data
```

# Sumário da Documentação

- [Quoti SDK](#quoti-sdk)
- [Instalação via NPM](#instalação-via-npm)
- [Sumário da Documentação](#sumário-da-documentação)
- [Como autenticar as requisições](#como-autenticar-as-requisições)
    - [Autenticação com Bearer token](#autenticação-com-bearer-token)
    - [Autenticação em Extensões do Quoti](#autenticação-em-extensões-do-quoti)
    - [Autenticação via Service Account ou API Key do Quoti](#autenticação-via-service-account-ou-api-key-do-quoti)
- [Como usar o ambiente de homolog](#como-usar-o-ambiente-de-homolog)
- [Como descobrir seu `orgSlug`](#como-descobrir-seu-orgslug)
- [O que dá pra fazer?](#o-que-dá-pra-fazer)

# Como autenticar as requisições

### Autenticação com Bearer token

Caso a autenticação seja feita via Bearer token, basta passar o token no
parametro `TOKEN` do construtor da classe do `QuotiApi`, como no exemplo acima,
a partir daí todas as requisições feitas pelo SDK estarão autenticadas.

> Internamente este token é mandado no header `Authorization`

### Autenticação em [Extensões do Quoti](https://beyondco.notion.site/Quoti-Extensions-d3af129ede05415fb370dee8587d758f)

Para utilizar o token do usuário que está usando a extensão pode-se fazer o
seguinte:

```ts
const quotiApi = new QuotiApi({
  TOKEN: this.$store.getters['user/me'].token
})
```

### Autenticação via Service Account ou API Key do Quoti

Caso o SDK esteja sendo utilizado no backend, também é possível usar os tokens
do tipo BearerStatic (Service Accounts) e ApiKey por meio dos headers:

```ts
// Service account
const quotiApi = new QuotiApi({
  HEADERS: {
    bearerstatic: 'SUPER_SECRET_SERVICE_ACCOUNT_TOKEN'
  }
})

// API Key
const quotiApi = new QuotiApi({
  HEADERS: {
    apikey: 'SUPER_SECRET_API_KEY'
  }
})
```

# Como usar o ambiente de homolog

Por padrão o SDK vai fazer requisições à API de produção, mas também é possível
utilizá-lo no ambiente de homolog mudando o endereço base da API por meio do
parâmetro `BASE`:

```ts
const quotiApi = new QuotiApi({
  BASE: 'https://develop.api.quoti.cloud/api/v1'
  // ...
  // TOKEN: 'ey...',
})
```

# Como descobrir seu `orgSlug`

Quando for utilizar o SDK você vai perceber que a maioria dos métodos requer o
parâmetro `orgSlug`, que é o identificador da sua organização no Quoti, para
encontrá-lo basta analisar a URL que você usa para acessar o Quoti, a `orgSlug`
sempre está lá.

Por exemplo, se você usa uma dessas URLs para acessar sua organização:

- https://quoti.cloud/beyond/
- https://minhaescola.app/beyond/
- https://minhafaculdade.app/beyond/

a sua `orgSlug` será **beyond**. A sua orgSlug sempre estará no primeiro
segmento do path de qualquer URL que você acessa no Quoti.

# O que dá pra fazer?

Literalmente qualquer coisa que a API do Quoti permitir. O arquivo
[QuotiApi.ts](https://github.com/byndcloud/quoti-sdk/blob/main/src/QuotiApi.ts)
possui uma lista exaustiva dos recursos que você pode gerenciar.
