npm package: @suno.softwares/status-invest-node-client
Description: Projeto referente ao Provider de API para os serviços do Status Invest
Author: Lucas Almeida
Latest version: 1.1.2

# status-invest-node-client

## Pré requisitos

Antes de iniciar o projeto, você precisará garantir que as seguintes ferramentas estão instaladas em sua máquina:
- **[Node.js](https://nodejs.org/en/):** Ambiente de execução JavaScript utilizado para rodar o projeto. (Recomenda-se a versão 20)
- **[npm](https://www.npmjs.com/):** Gerenciador de pacotes que acompanha a instalação do Node.js. Ele será utilizado para gerenciar as dependências e scripts do projeto. (Recomenda-se a versão 9 ou superior)

Verifique a instalação de ambos os requisitos com os comandos:
```bash
node -v
npm -v
```

## Instalação

Siga as etapas abaixo para configurar o projeto em sua máquina local:

1. Clone o repositório normalmente, lembrando de utilizar uma chave ssh:
```bash
git clone git@gitlab.com:suno-research/statusinvest/status-invest-node-client.git
```
2. Acesse o diretório do projeto:
```bash
cd status-invest-node-client
```
3. Instale as dependências do projeto:
```bash
npm install
```
4. É necessário criar um arquivo .env na raiz do projeto e adicionar as envs necessárias. 
5. Realize o build do projeto:
```bash
npm run build
``` 
Nota: Esse comando vai criar os arquivos de build na pasta de saída dist/, que serão necessários para exportá-lo como uma lib para o npm.
6. Esse projeto necessita de uma % de coverage de teste especifica para ser publicado, então se aconselha rodar o comando de test para verificar se as alterações tiveram algum impacto.
```bash
npm run test
``` 

## Rodando o Projeto
Após instalar as dependências e gerar os arquivos de build, você pode executar o projeto localmente da seguinte forma:
1. No seu projeto destino, onde você quer importar a lib rode o comando:
```bash
npm install ../diretorioDoStatus-invest-node-client
```
2. Após a instalação e adição das envs, você pode importar esta lib de maneira local no projeto destino da seguinte forma:
```bash
import { WalletService, SecurityService } from "@suno.softwares/status-invest-node-client";
```
3. É importante gerenciar a inicilização das instâncias no projeto onde você estiver utilizando esta lib. Por exemplo, em React, criando um context e adicionando um Provider na raiz da aplicação, lá podemos dar um new instância do serviço e gerenciar isso na própria aplicação.
4. Desta forma em qualquer momento, na sua aplicação, será possível consumir os serviços da seguinte forma:
```bash
import { WalletService } from "@suno.softwares/status-invest-node-client";

const Example = () => {
  const walletService = new WalletService(accessToken, partnerToken, envMode);
  const getAllGoals = async () => {
    const result = await walletService.allGoals();

    console.log("result: ", result);
  };

  React.useEffect(() => {
    getAllGoals();
  }, []);
};
```

## Parâmetros da inicialização dos serviços
O ApiProvider possui duas propriedades obrigatórios:
 1. accessToken: Se trata do token de autenticação do usuário, que pode ser recuperado no endpoint de authentication. Ele se faz necessário para as requisições autenticadas. Caso não tenha esse valor, passar string vazia (ex: "");
 2. partnerToken: Identificador da sua aplicação para com a API, necessário para dar permissão na utilização geral dos endpoints expostos neste serviço.
 3. envMode: String de identificação do ambiente, pode ser "development" ou "production", basicamente para especificar em qual ambiente você quer que o serviço rode.

## Publicação de nova versão no NPM
Para publicar uma nova versão do pacote no NPM, se faz necessário alterar no package.json a versão do projeto e fazer um Merge para a branch Master. Assim a pipeline de Publish vai rodar, publicando a nova versão.