hobots 1.1.0 → 1.2.0

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.
@@ -8,28 +8,30 @@ pnpm add hobots
8
8
 
9
9
  Sem dependências de runtime. Requer **Node 18+** (usa o `fetch` global). O Monitor também funciona no browser para captura de erros.
10
10
 
11
- ## O DSN
11
+ ## O Client Secret
12
12
 
13
- Cada projeto tem **uma única DSN** — a mesma credencial autentica o Monitor **e** o Manager:
13
+ Cada projeto tem **um único Client Secret** — a mesma credencial autentica o Monitor **e** o Manager:
14
14
 
15
15
  ```
16
- <protocolo>://<secretKey>@<host>[:porta]/<projectSlug>
16
+ hb_<64 hex>
17
17
  ```
18
18
 
19
- A `secretKey` (64 hex) é **secreta**: ela vai embutida na DSN só por conveniência — nas requisições viaja sempre no header `Authorization: Bearer`, nunca na URL. O `projectSlug` no path é informativo; a identidade do projeto vem da chave. Copie a DSN pronta no app, em **Configurações → Agentes** — os snippets de integração já vêm prontos.
19
+ (Chaves antigas, 64 hex puros, continuam válidas no servidor.) A credencial é **secreta** e viaja sempre no header `Authorization: Bearer` — nunca na URL. Copie o Client Secret no app, em **Configurações → Projetos** — os snippets de integração já vêm prontos.
20
20
 
21
- ```
22
- http://<secretKey>@localhost:3002/<projectSlug>
21
+ O SDK fala com `https://app.hobots.app` por padrão; só sobrescreva `baseUrl` em desenvolvimento:
22
+
23
+ ```js
24
+ Hobots.init({ clientSecret: 'hb_<64 hex>', baseUrl: 'http://localhost:3002', ... });
23
25
  ```
24
26
 
25
- Veja [Protocolo & transporte](./protocol.md) para os endpoints que a DSN deriva.
27
+ Veja [Protocolo & transporte](./protocol.md) para os endpoints derivados da `baseUrl`.
26
28
 
27
29
  ## Monitor e Manager — qual usar
28
30
 
29
31
  As duas capabilities vivem no mesmo `init()` e você usa **uma, outra ou as duas**:
30
32
 
31
- - Quer só saber se o robô quebrou, quanto demora e se está vivo? → `init({ dsn, heartbeat: true })`.
32
- - Quer disparar o robô sob demanda a partir de um formulário no app? → `init({ dsn, manager: true })` + `register()` + `start()`.
33
+ - Quer só saber se o robô quebrou, quanto demora e se está vivo? → `init({ clientSecret, heartbeat: true })`.
34
+ - Quer disparar o robô sob demanda a partir de um formulário no app? → `init({ clientSecret, manager: true })` + `register()` + `start()`.
33
35
  - Ambos? Passe `heartbeat` e `manager` no **mesmo `init()`**. É o cenário do
34
36
  [`full.ts`](../../hobots-sdk-demos/src/full.ts) nos demos do SDK.
35
37
 
@@ -39,7 +41,8 @@ As duas capabilities vivem no mesmo `init()` e você usa **uma, outra ou as duas
39
41
  import * as Hobots from 'hobots';
40
42
 
41
43
  Hobots.init({
42
- dsn: 'http://<secretKey>@localhost:3002/<projectSlug>',
44
+ clientSecret: 'hb_<64 hex>',
45
+ // baseUrl: 'http://localhost:3002', // só em desenvolvimento
43
46
  environment: 'production',
44
47
  release: 'robo-nfe@1.4.2',
45
48
  instanceId: 'vm-cliente-01', // identidade única: heartbeat + agente Manager
@@ -66,7 +69,8 @@ Habilite a execução sob demanda com o campo `manager` no mesmo `init()`:
66
69
  import * as Hobots from 'hobots';
67
70
 
68
71
  Hobots.init({
69
- dsn: 'http://<secretKey>@localhost:3002/<projectSlug>',
72
+ clientSecret: 'hb_<64 hex>',
73
+ // baseUrl: 'http://localhost:3002', // só em desenvolvimento
70
74
  instanceId: 'vm-cliente-01',
71
75
  manager: true, // ou { pollIntervalMs, concurrency, ... }
72
76
  });
package/docs/manager.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Manager
2
2
 
3
- Capability de **execução remota sob demanda**, habilitada com `manager: true` (ou opções) no `init()` único. O agente faz polling no app, executa os handlers registrados quando aparece trabalho e reporta status e logs incrementais. Usa a mesma DSN, o mesmo `debug` e o `instanceId` como identidade — nenhum handler global extra é instalado.
3
+ Capability de **execução remota sob demanda**, habilitada com `manager: true` (ou opções) no `init()` único. O agente faz polling no app, executa os handlers registrados quando aparece trabalho e reporta status e logs incrementais. Usa o mesmo Client Secret, o mesmo `debug` e o `instanceId` como identidade — nenhum handler global extra é instalado.
4
4
 
5
5
  ## Ciclo de vida
6
6
 
@@ -8,7 +8,8 @@ Capability de **execução remota sob demanda**, habilitada com `manager: true`
8
8
  import * as Hobots from 'hobots';
9
9
 
10
10
  Hobots.init({
11
- dsn: 'http://<secretKey>@localhost:3002/<projectSlug>',
11
+ clientSecret: 'hb_<64 hex>',
12
+ // baseUrl: 'http://localhost:3002', // só em desenvolvimento
12
13
  instanceId: 'vm-cliente-01',
13
14
  manager: true, // ou { pollIntervalMs, concurrency, taskTimeoutMs, logFlushIntervalMs }
14
15
  });
package/docs/monitor.md CHANGED
@@ -12,7 +12,8 @@ Todas as funções abaixo são no-op seguros se `Hobots.init()` não foi chamado
12
12
 
13
13
  ```js
14
14
  Hobots.init({
15
- dsn: 'http://<secretKey>@localhost:3002/<projectSlug>',
15
+ clientSecret: 'hb_<64 hex>',
16
+ // baseUrl: 'http://localhost:3002', // só em desenvolvimento
16
17
  environment: 'production',
17
18
  release: 'robo-nfe@1.4.2',
18
19
  instanceId: 'vm-cliente-01',
@@ -119,7 +120,7 @@ Bate "estou vivo" periodicamente; o servidor acusa o robô **offline** quando os
119
120
 
120
121
  ```js
121
122
  Hobots.init({
122
- dsn,
123
+ clientSecret,
123
124
  heartbeat: { intervalMs: 30_000, name: 'Robô NFe — VM 01' },
124
125
  });
125
126
  ```
package/docs/protocol.md CHANGED
@@ -4,22 +4,22 @@ O SDK é um **cliente HTTP puro**, sem dependências de runtime: ele só fala co
4
4
 
5
5
  Os arquivos `src/protocol.ts` e `src/manager/protocol.ts` são a **fonte de verdade do wire format**: o app valida os payloads com zod travados nesses tipos (`satisfies z.ZodType<...>`), então não podem sofrer drift.
6
6
 
7
- ## A DSN e os endpoints derivados
7
+ ## O Client Secret e os endpoints derivados
8
8
 
9
- Cada projeto tem **uma única DSN secreta**, a mesma para as duas capabilities:
9
+ Cada projeto tem **um único Client Secret**, o mesmo para as duas capabilities:
10
10
 
11
11
  ```
12
- <proto>://<secretKey>@host[:porta]/<projectSlug>
12
+ hb_<64 hex>
13
13
  ```
14
14
 
15
15
  | Canal | Endpoint | Autenticação |
16
16
  | --- | --- | --- |
17
- | Monitor (ingestão) | `POST <origin>/api/ingest` | `Authorization: Bearer <secretKey>` |
18
- | Manager (execução) | `<origin>/api/manager/*` | `Authorization: Bearer <secretKey>` |
17
+ | Monitor (ingestão) | `POST <baseUrl>/api/ingest` | `Authorization: Bearer <clientSecret>` |
18
+ | Manager (execução) | `<baseUrl>/api/manager/*` | `Authorization: Bearer <clientSecret>` |
19
19
 
20
- `parseDsn(dsn) → { key, projectSlug, origin, ingestEndpoint, managerBaseUrl }` (em `src/dsn.ts`). A chave é **secreta** (64 hex) e viaja **só no header** `Authorization: Bearer` — nunca na URL da requisição. O `projectSlug` do path é informativo: a identidade real do projeto vem da chave.
20
+ `resolveConfig({ clientSecret, baseUrl? }) → { key, baseUrl, ingestEndpoint, managerBaseUrl }` (em `src/config.ts`, com a constante `DEFAULT_BASE_URL = 'https://app.hobots.app'`). A credencial é **secreta** (formato `hb_<64 hex>`; chaves antigas de 64 hex puros continuam válidas no servidor) e viaja **só no header** `Authorization: Bearer` — nunca na URL da requisição.
21
21
 
22
- > A DSN antiga do Monitor (public key na URL, `POST /api/ingest/<key>`) foi descontinuada — o endpoint responde **410** e o transport descarta sem retry. Copie a DSN nova em **Configurações → Agentes** no app.
22
+ > As DSNs foram **descontinuadas** em favor do Client Secret — tanto a antiga do Monitor (public key na URL, `POST /api/ingest/<key>`, que responde **410** e o transport descarta sem retry) quanto a de key-na-URL (`https://<secretKey>@host/<slug>`). Copie o Client Secret em **Configurações → Projetos** no app.
23
23
 
24
24
  ## Monitor — ingestão
25
25
 
@@ -44,7 +44,7 @@ Tipos de item: `event`, `transaction`, `check_in`, `heartbeat` (definidos em `ho
44
44
 
45
45
  ## Manager — polling e reporte
46
46
 
47
- Dois endpoints sob `<origin>/api/manager`, ambos com `Authorization: Bearer <secretKey>` (a chave única do projeto):
47
+ Dois endpoints sob `<baseUrl>/api/manager`, ambos com `Authorization: Bearer <clientSecret>` (a credencial única do projeto):
48
48
 
49
49
  ### `POST /api/manager/poll`
50
50
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hobots",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "SDK JavaScript da Hobots — captura de erros, transactions, check-ins de cron e heartbeats (Monitor) e execução remota de tarefas sob demanda (Manager) para RPAs e integrações. Um único import e um único init().",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -27,7 +27,7 @@
27
27
  "require": "./dist/protocol.cjs"
28
28
  },
29
29
  "./manager/protocol": {
30
- "types": "./dist/manager/protocol.d.ts",
30
+ "types": "./dist/manager/protocol.d.ts ",
31
31
  "import": "./dist/manager/protocol.js",
32
32
  "require": "./dist/manager/protocol.cjs"
33
33
  }