# App Tools

CLI para desenvolver mini apps, sucinto e clean como um haikai.

##### ⚠ As versões antigas da CLI não possuem suporte, o ideal é manter sempre atualizada.

## Parâmetros gerais

### help

Informa os detalhes de uso do comando desejado.

Exemplo:

```js
ame-app-tools <comando> --help
```

### verbose

Exibe logs mais detalhados de um determinado comando.

Exemplo:

```js
ame-app-tools <comando> --verbose
```

### Disponibilidade 

Os parâmetros gerais estão disponíveis nos seguintes comandos:

* signup
* start 
* credentials
* publish (deprecated)
* build (deprecated)
* push-version
* env
* invite

## Comandos disponíveis


### ame-app-tools

Mostra a lista de comandos disponíveis.

```js
ame-app-tools
```


### signup

Faz o seu cadastro como desenvolvedor de mini apps.

```js
ame-app-tools signup 
```

#### Parâmetros disponíveis
* Indica qual programa imprimirá o QR Code. Se omitido, abre o browser default do usuário. Valores válidos: `terminal|chrome|msedge|firefox`: `-P, --qr-printer`


### create

Cria um projeto com um mini app totalmente funcional.

```js
ame-app-tools create <project-name>
```

#### Parâmetros disponíveis 

* Cria o projeto sem registrar na loja de miniapps: `--skip-ame-store`
* Cria o projeto aceitando todos os valores padrões: `--yes`
* Define um boilerplate para a criação do projeto: `--template`
* Lista para seleção dos targets disponíveis para miniapps: `--target`

###### Exemplo de seleção de target

Insira o comando com o parâmetro `--target`

```js
ame-app-tools create <project-name> --target
```

A lista de targets disponíveis será exibida, selecione o desejado:

```js
? Targets Disponíveis: 
  1) AME_EMPRESAS_WEB
  2) AME_DIGITAL_MOBILE
  3) Dúvidas? Veja documentação no browser
```

###### OBS: Se o parâmetro `--target` não for passado, o padrão (AME_DIGITAL_MOBILE) será o utilizado.

##### Templates disponíveis

_Pré-requisito: É necessário ter o [git](https://github.com/git-guides/install-git) instalado na máquina para utilizar o parâmetro `--template` do comando `create`._


* `serverless` : Cria um novo projeto com template para utilização do serverless-backend.
* `persistere` : Cria um novo projeto com template para utilização do serverless-backend e persistência.

###### Exemplo
```js
ame-app-tools create <project-name> --template <template-name>
```
###### Para listar todos os templates disponíveis
```js
ame-app-tools list --template
```

### start

Inicia o seu mini app em um workspace online.

Exemplo para iniciar o projeto no workspace online:

```js
ame-app-tools start
```

#### Parâmetros disponíveis 

* Sobe todos os arquivos: `--upload-all`
* Gera um QR Code no formato antigo: `--old-qrcode`
* Força o start: `--force`
* Exibe o deeplink do workspace: `--show-deeplink`
* Envia os arquivos descompactados para o workspace remoto: `--unzip`
* Indica qual programa imprimirá o QR Code. Se omitido, abre o browser default do usuário. Valores válidos: `terminal|chrome|msedge|firefox`: `-P, --qr-printer`
* Define uma configuração específica para o target do mini-app. Caso não seja passado, executará o miniapp com configuração padrão: `--target-config`

### publish e build (deprecated)

Criam e enviam um build do mini app para ser avaliado por um revisor antes de ser publicado.

Os comandos publish e build serão desativados, em breve. Que tal utilizar o comando push-version?

### push-version

Cria e envia um build do mini app para ser avaliado por um revisor antes de ser publicado.

```js
ame-app-tools push-version --local
```

#### Parâmetro disponível 

* Adiciona comentários no build: `--message`
* Aceita automaticamente as perguntas do prompt `--yes`

#### Exemplo

```js
ame-app-tools push-version --message <revision-message>
```
### self-update

Desinstala a versão antiga e instala a mais nova.

```js
ame-app-tools self-update
```

### invite

Convida um desenvolvedor para participar da construção do miniapp.

```js
ame-app-tools invite dev@calindra.com.br
```

#### Parâmetros disponíveis 

* Aceita um convite: `--accept`
* Lista todos os desenvolvedores: `--list`
* Remove um desenvolvedor: `--remove`

#### Exemplos

#### --accept

```js
ame-app-tools invite --accept
2 convites
? Escolha: 
  1) aceitar convite do miniapp "confeitaria-real" enviado por confeiteiro@gmail.com
  2) aceitar convite do miniapp "teste" enviado por teste@gmail.com
  3) não aceitar nenhum convite
  Answer: 1
```

#### --list

```js
ame-app-tools invite --list
```

#### --remove

```js
ame-app-tools invite --remove dev@calindra.com.br
```

### credentials

Cadastra o par `client_id` (Application Key) e `client_secret` (Application Token).

Esse par de chaves é a credencial necessária para que seu mini-app possa transacionar com AME.

Há duas formas de se atribuir essa credencial: usando a flag `--put` ou usando a flag `--generate`. Maiores detalhes na descrição dos parâmetros a seguir.

#### Parâmetros disponíveis

* `--put <client_id> <client_secret>` Inclui ou altera a credencial do mini-app. Você precisa obter essa credencial em https://minhaconta.amedigital.com/
  (Para versao de homologacao https://minhaconta.hml.amedigital.com/). Para atribuir essa credencial ao seu mini-app, você precisa ser um desenvolvedor do mini-app com privilégio de escrita de credenciais. Esse privilégio pode ser concedido ou revogado pelo dono do miniapp através do [Portal de Administração de Mini Apps](https://miniapps.amedigital.com/manager/applications/1).


* `--generate <approver>` Gera credenciais de pagamento para o mini-app automaticamente, sem precisar acessar o Portal Minha Conta. O email do aprovador `<approver>`deve ser fornecido. O aprovador deve ser um usuário associado ao mini-app e com privilégios de escrita de credencial. 
Nesta estratégia, o aprovador receberá em seu e-mail um QR Code, o qual deverá ser escaneado pelo super app Ame Digital e, em seguida, confirmar a atualização.

* `--verbose` Exibe mais logs

Exemplos:

```js
ame-app-tools credentials --put meu-client-id meu-client-secret
```

```js
ame-app-tools credentials --generate ellonmusk@tesla.com
```

```js
ame-app-tools credentials --put meu-client-id meu-client-secret --verbose
```


### env

Edita ou lista as variáveis de ambiente do serverless. 

#### Altera as variáveis de ambiente.

```js
ame-app-tools env variavel='valor'
```

#### Lista as variáveis de ambiente.

```js
ame-app-tools env --read
```

#### Parâmetros disponíveis

* Inclui ou altera as variáveis de ambiente do serverless do miniapp, que está [publicado](https://ame-app-tools.calindra.com.br/docs/cli/#push-version) no ambiente de produção: `--prod`
* Inclui ou altera as variáveis de ambiente do serverless do miniapp, que está [publicado](https://ame-app-tools.calindra.com.br/docs/cli/#push-version) no ambiente de homologação: `--hml`
* Inclui ou altera as variáveis de ambiente do serverless do miniapp, que está [publicado](https://ame-app-tools.calindra.com.br/docs/cli/#push-version) no ambiente de desenvolvimento: `--dev`
* Lista as variáveis de ambiente: `--read`


#### Importante

A omissão de qualquer um dos parâmetros `--dev`, `--hml` ou `--prod` faz o comando `env` realizar as operações de variável de ambiente apenas no mini-app inicializado pelo comando `ame-app-tools start`, ou seja, só é valido em tempo de desenvolvimento (workspace environment)


O uso das opções `--dev`, `--hml` e `--prod` está diretamente ligado à publicação de uma versão do mini-app nesses respectivos ambientes.

Concluindo:

* faça primeiro `NODE_ENV=dev ame-app-tools push-version` antes de fazer `ame-app-tools env FOO=bar --dev` ou `ame-app-tools env --read --dev`


* faça primeiro `ame-app-tools push-version` antes de fazer `ame-app-tools env FOO=bar --hml` ou `ame-app-tools env --read --hml`


* publique seu mini-app pelo Portal de Administração de produção antes de fazer `ame-app-tools env FOO=bar --prod` ou `ame-app-tools env --read --prod`


### clean

Realiza a limpeza do workspace remoto do desenvolvedor. Útil quando há mal fucionamento na compilação em nuvem do mini-app. 

Exemplo: 

```js
ame-app-tools clean
```

### tail-logs

Para ler logs de producao do email.

```js
ame-app-tools tail-logs <email>
```

### open-share 

Abre um compartilhamento do share-api.

```js
ame-app-tools open-share <share-id>
```

## Comandos para testes

### test-initialization-params

Inicia o seu mini app passando parâmetros em formato compatível com querystring*. Os dados passados serão convertidos em um objeto **plano** onde a chave e o valor serão do tipo **string**.

```
ame-app-tools test-initialization-params 'batata=frita&cachorro=quente'
```
Estes parâmetros podem ser acessados em seu mini app invocando o método [**Ame.getInitializationInfos()**](https://super-app-client.calindra.com.br/docs/ame-super-app-client/#getinitializationinfos)

```
Ame.getInitializationInfos().then(infos => {
      console.log("infos: ", infos);
    }
);
```

As informações de retorno estão dentro do atributo **data** do objeto de retorno.

```
infos:  [
    {
        "type": "NAVIGATION",
        "data": {
            "batata": "frita",
            "cachorro": "quente"
        }
    }
]
``` 

### order-details
Inicia o seu mini app passando o id de um pedido.

```
ame-app-tools order-details 1b8bb06b-b217-460a-9a41-72279a0f8123
```

Esse id pode ser acessado através do método [**Ame.getOrderDetails()**](https://super-app-client.calindra.com.br/docs/ame-super-app-client/#getorderdetails) no mini app.

```js
Ame.getOrderDetails()
    .then(orderDetails => {
		console.log(orderDetails)
		/* Exemplo de saída desse console.log:
		{
			orderId: "1b8bb06b-b217-460a-9a41-72279a0f8123"
		} */
	})
	.catch(response => {
	    console.log("Erro ao recuperar detalhes do pedido: ", response)
	})
```
