n8n-nodes-atendix 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # Atendix - Conector Tray Commerce para n8n 🚀
2
+
3
+ ![n8n](https://img.shields.io/badge/n8n-certified-orange?style=for-the-badge)
4
+ ![NPM Version](https://img.shields.io/npm/v/n8n-nodes-atendix?style=for-the-badge&color=green)
5
+ ![Rate Limit](https://img.shields.io/badge/Rate%20Limit-180%2Fmin-blue?style=for-the-badge)
6
+
7
+ O **Atendix** é o conector definitivo para integrar sua loja **Tray Commerce** ao ecossistema de automação do **n8n**. Esqueça a complexidade de lidar com tokens manuais e exposição de chaves sensíveis.
8
+
9
+ ---
10
+
11
+ ## ✨ Por que usar o Atendix?
12
+
13
+ - 🔒 **Segurança Total:** Suas chaves `Consumer Key` e `Consumer Secret` ficam protegidas e nunca são expostas no workflow.
14
+ - 🔄 **Autenticação Automática:** Gerenciamento inteligente de `Access Token` e `Refresh Token` sem interrupções.
15
+ - ⚖️ **Respeito ao Rate Limit:** Implementação nativa de *Throttling* (500ms) para garantir conformidade com o limite de 180 req/min da Tray.
16
+ - 💼 **Modelo SaaS:** Licenciamento centralizado para garantir suporte e atualizações contínuas.
17
+
18
+ ---
19
+
20
+ ## 🛠️ Instalação
21
+
22
+ Para instalar este nó em sua instância n8n:
23
+
24
+ 1. Acesse **Settings** (Configurações).
25
+ 2. Vá em **Community Nodes** (Nós da Comunidade).
26
+ 3. Clique em **Install a node**.
27
+ 4. Digite o nome do pacote: `n8n-nodes-atendix`.
28
+ 5. Aceite os termos e clique em **Install**.
29
+
30
+ ---
31
+
32
+ ## 🔑 Configuração das Credenciais
33
+
34
+ Após a instalação, configure sua credencial Atendix com apenas dois campos:
35
+
36
+ 1. **API Address:** A URL da sua loja (ex: `https://{SUA_LOJA}.commercesuite.com.br/web_api`).
37
+ 2. **Authorization Code:** O código de autorização gerado no painel da Tray.
38
+
39
+ > **Nota:** Certifique-se de que sua loja possui uma licença ativa em [Atendix.co](https://atendix.co) para liberar o tráfego de dados.
40
+
41
+ ---
42
+
43
+ ## 📦 Recursos Disponíveis (v1.0.1)
44
+
45
+ - ✅ **Pedidos:** Busca por ID e Listagem com filtros de status e data.
46
+ - ✅ **Clientes:** Busca por e-mail ou documento (CPF/CNPJ).
47
+ - ✅ **Produtos:** Consulta rápida por ID ou SKU.
48
+
49
+ ---
50
+
51
+ ## ⚙️ Requisitos Técnicos
52
+
53
+ - **n8n version:** >= 1.0.0
54
+ - **Node.js:** >= 18.x
55
+
56
+ ---
57
+
58
+ ## 📄 Licença
59
+
60
+ Distribuído sob a licença MIT. Veja `LICENSE` para mais informações.
61
+
62
+ ---
63
+
64
+ ## 📞 Suporte e Contato
65
+
66
+ Dúvidas ou problemas com a ativação da sua licença?
67
+ - **Site:** [https://atendix.co](https://atendix.co)
68
+ - **E-mail:** contato@atendix.co
@@ -8,6 +8,7 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.Atendix = void 0;
10
10
  const n8n_workflow_1 = require("n8n-workflow");
11
+ const wait = (ms) => new Promise(res => setTimeout(res, ms));
11
12
  class Atendix {
12
13
  constructor() {
13
14
  this.description = {
@@ -201,7 +202,7 @@ class Atendix {
201
202
  console.error('LICENSE CHECK RESPONSE: ' + licenseCheck.autorizado);
202
203
  if (!licenseCheck || licenseCheck.autorizado !== true) {
203
204
  console.error('Resposta inválida do servidor de licenças:', licenseCheck);
204
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Sua licença Atendix para a loja ${storeBaseUrl} não está ativa ou não pode ser validada. Para liberar seu acesso e automatizar sua operação, acesse https://atendix.com.br e assine um plano agora mesmo!`);
205
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Sua licença Atendix para a loja ${storeBaseUrl} não está ativa ou não pode ser validada. Para liberar seu acesso e automatizar sua operação, acesse https://atendix.co e assine um plano agora mesmo!`);
205
206
  }
206
207
  }
207
208
  catch (error) {
@@ -243,6 +244,11 @@ class Atendix {
243
244
  if (resource === 'order') {
244
245
  if (operation === 'get') {
245
246
  const orderId = this.getNodeParameter('orderId', i);
247
+ if (i > 0) {
248
+ // Dá uma respirada de 500ms entre cada item da lista
249
+ // 500ms = 2 requisições por segundo = 120 por minuto (Seguro dentro dos 180)
250
+ await wait(500);
251
+ }
246
252
  responseData = await this.helpers.httpRequest({
247
253
  method: 'GET',
248
254
  url: `${baseUrl}/orders/${orderId}`,
@@ -256,6 +262,11 @@ class Atendix {
256
262
  qs.status = filters.status;
257
263
  if (filters.limit)
258
264
  qs.limit = filters.limit;
265
+ if (i > 0) {
266
+ // Dá uma respirada de 500ms entre cada item da lista
267
+ // 500ms = 2 requisições por segundo = 120 por minuto (Seguro dentro dos 180)
268
+ await wait(500);
269
+ }
259
270
  responseData = await this.helpers.httpRequest({
260
271
  method: 'GET',
261
272
  url: `${baseUrl}/orders`,
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "n8n-nodes-atendix",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Conector Atendix para integração com Tray Commerce",
5
5
  "keywords": ["n8n-community-node-package"],
6
6
  "license": "MIT",
7
- "homepage": "https://atendix.com.br",
7
+ "homepage": "https://atendix.co",
8
8
  "author": {
9
9
  "name": "Atendix",
10
- "email": "contato@atendix.com.br"
10
+ "email": "contato@atendix.co"
11
11
  },
12
12
  "main": "index.js",
13
13
  "scripts": {