hobots 5.2.0 → 6.0.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.
- package/README.md +2 -1
- package/dist/index.cjs +19 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -5
- package/dist/index.d.ts +17 -5
- package/dist/index.js +19 -5
- package/dist/index.js.map +1 -1
- package/docs/api-reference.md +1 -1
- package/docs/runs.md +6 -2
- package/package.json +1 -1
package/docs/api-reference.md
CHANGED
|
@@ -30,7 +30,7 @@ ESM e CommonJS (`const { hobots } = require('hobots')`), com `.d.ts`. Depois do
|
|
|
30
30
|
| `runId` | `string` | Identidade da execução (`''` fora de uma execução) |
|
|
31
31
|
| `params` | `Record<string, unknown>` | Params da solicitação (formulário do agente); `{}` no modo start |
|
|
32
32
|
| `log` | `RunLogger` — `debug/info/warn/error/success(message, ...rest)` | Nunca lança. Vários argumentos viram texto unidos por espaço (como `console.log`); um `hobots.image(...)` no **último** argumento vira o print da linha. Eco no terminal: `[hobots] INFO …` |
|
|
33
|
-
| `items` | `RunItems` — `add(item)`, `succeeded(payload?, opts?)`, `failed(message, payload?, opts?)`, `occurrence(message, payload?, opts?)`; `opts.id` = identidade de negócio, `opts.image` = print do item. `each(list, (
|
|
33
|
+
| `items` | `RunItems` — `add(item)`, `succeeded(payload?, opts?)`, `failed(message, payload?, opts?)`, `occurrence(message, payload?, opts?)`; `opts.id` = identidade de negócio, `opts.image` = print do item. `each(list, (item, index?) => …, { id?, payload?, op?, description?, progress? }) => Promise<{ total, succeeded, failed, occurrence }>` processa a lista inteira (sem `payload`, os campos do elemento — objeto simples, cópia rasa — viram o payload base; `payload: false` desliga): exceção no handler vira item `failed` + etapa em erro e o loop segue; `item: RunItemHandle` = `value` (o elemento da lista), `succeeded(payload?, { image }?)/failed(msg, payload?, { image }?)/occurrence(…)`, `id`, `index`, `step` (`StepHandle` da etapa do item), `reported` | Ponto de parada cooperativo (o `each` para só em cancelamento/timeout) |
|
|
34
34
|
| `progress` | `RunProgressReporter` — `total(n)`, `advance(count = 1)`, `set(current, total?)`, `current`, `snapshot` | `total/advance/set` são pontos de parada |
|
|
35
35
|
| `files` | `RunFiles` — `list(): FileRef[]`, `get(field): FileRef \| FileRef[] \| undefined`, `download(refOrField: FileRef \| string, { dest? }?): Promise<string>`, `downloadAll(field, { dest? }?): Promise<string[]>`, `read(refOrField): Promise<Buffer>` | Arquivos do formulário; o download consome a origem (S3 confirmado/apagado, pasta do Studio removida). Cópias sem `dest` são apagadas no fim da execução. Respeita o `signal`. Ver [Execuções](./runs.md#arquivos-do-formulário-hobotsfiles) |
|
|
36
36
|
| `step(name, fn, options?)` | `<T>(name: string, fn: StepFn<T>, options?: { retries?: number; retryDelayMs?: RetryDelay }) => Promise<T>` — uma etapa no waterfall: abre, roda `fn(etapa)`, tenta de novo se lançar (`retries` default 1; 0 desliga), fecha. `warning` + `data.message` + `data.attempts` quando a nova tentativa deu certo; `error` + `data.error = { type, message }` quando esgotou (a exceção sobe); `cancelled` em cancelamento/timeout. `StepHandle` = `warning(message, { image }?)`, `image(png)`, `data(key, value)` (`attachments` reservada). Aninha automaticamente na etapa corrente. | Ponto de parada (lança `RunCanceled`) |
|
package/docs/runs.md
CHANGED
|
@@ -81,7 +81,8 @@ O contrato da plataforma — **todo item previsto termina com um desfecho regist
|
|
|
81
81
|
```js
|
|
82
82
|
const resultado = await hobots.items.each(
|
|
83
83
|
contas,
|
|
84
|
-
async (
|
|
84
|
+
async (item) => {
|
|
85
|
+
const conta = item.value; // o elemento da lista; a posição é item.index
|
|
85
86
|
await login(conta); // lançou → item `failed` com a mensagem, etapa em erro, segue
|
|
86
87
|
const fatura = await baixar(conta);
|
|
87
88
|
if (!fatura) return item.occurrence('sem fatura no mês'); // ocorrência de negócio
|
|
@@ -93,6 +94,8 @@ const resultado = await hobots.items.each(
|
|
|
93
94
|
// resultado = { total, succeeded, failed, occurrence }
|
|
94
95
|
```
|
|
95
96
|
|
|
97
|
+
- O handler recebe o handle do item e, se declarar, o índice: `(item, index) => …`. O elemento da lista é `item.value`; `index` é o mesmo valor de `item.index`.
|
|
98
|
+
- **`payload`**: sem a opção, os campos do próprio elemento viram o payload base (as colunas na Central), em cópia rasa — quando o elemento é um objeto simples (protótipo `Object.prototype` ou `null`). Instância de classe (um `Locator`, por exemplo), array e primitivo ficam sem payload base. Uma função `(element, index) => objeto` substitui o padrão (para escolher ou renomear colunas, como no exemplo acima); `payload: false` desliga. Ordem de mescla: payload base < `item.data(...)` < payload do desfecho.
|
|
96
99
|
- Cada elemento vira uma **etapa** no waterfall (`op` 'item', descrição = `id`; `hobots.step(...)` dentro do handler vira sub-etapa dela, e `item.step` é o handle `warning`/`image`/`data`) e um **item** com o `id` e o payload base.
|
|
97
100
|
- **Exceção no handler** = item `failed` com a mensagem do erro, etapa em `error`, linha de erro no log da run — e o loop **segue para o próximo**. Nada do que o handler já registrou (`item.failed/occurrence`) é sobrescrito. O `each` não repete o item: para tentar de novo um trecho, use `hobots.step` dentro do handler.
|
|
98
101
|
- **Progresso automático**: declara o total pelo tamanho da lista (se o bot ainda não declarou um) e avança a cada elemento, inclusive nos que falharam. `progress: false` deixa o progresso por conta do bot.
|
|
@@ -272,7 +275,8 @@ hobots.log.error('login falhou', hobots.image(await page.screenshot(), { caption
|
|
|
272
275
|
|
|
273
276
|
// no item
|
|
274
277
|
hobots.items.failed('nota rejeitada', { numero }, { image: await page.screenshot() });
|
|
275
|
-
await hobots.items.each(notas, async (
|
|
278
|
+
await hobots.items.each(notas, async (item) => {
|
|
279
|
+
const nota = item.value;
|
|
276
280
|
…
|
|
277
281
|
item.occurrence('sem fatura no mês', undefined, { image: await page.screenshot() });
|
|
278
282
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hobots",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "SDK JavaScript da Hobots — o agente é a própria tarefa: register() atende solicitações da plataforma (sob demanda), start() roda sempre ligado e reporta logs, itens e progresso. Credenciais por env, heartbeat sempre ligado, objeto global `hobots`.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|